diff options
author | maruel@chromium.org <maruel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-17 13:54:40 +0000 |
---|---|---|
committer | maruel@chromium.org <maruel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-17 13:54:40 +0000 |
commit | 1067abfea4372c68ab65a142d3c1725bcd682706 (patch) | |
tree | 446dd5ae8d118e2ee130b83aa2053f571e33a991 /chromeos | |
parent | acf711598d854afb61f6ccebbaa029819d1bda47 (diff) | |
download | chromium_src-1067abfea4372c68ab65a142d3c1725bcd682706.zip chromium_src-1067abfea4372c68ab65a142d3c1725bcd682706.tar.gz chromium_src-1067abfea4372c68ab65a142d3c1725bcd682706.tar.bz2 |
Revert r168414 "Make power state override refcounted."
Revert r168420 "chromeos/power: Refcounted types should not have public destructors."
Broke linux_chromeos_clang.
TBR=tfarina@chromium.org,derat@chromium.org,rkc@chromium.org
BUG=123295
Review URL: https://codereview.chromium.org/11415041
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@168421 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos')
-rw-r--r-- | chromeos/power/power_state_override.cc | 19 | ||||
-rw-r--r-- | chromeos/power/power_state_override.h | 15 | ||||
-rw-r--r-- | chromeos/power/power_state_override_unittest.cc | 18 |
3 files changed, 17 insertions, 35 deletions
diff --git a/chromeos/power/power_state_override.cc b/chromeos/power/power_state_override.cc index ab9af01..7c07771 100644 --- a/chromeos/power/power_state_override.cc +++ b/chromeos/power/power_state_override.cc @@ -28,7 +28,8 @@ namespace chromeos { PowerStateOverride::PowerStateOverride(Mode mode) : override_types_(0), request_id_(0), - dbus_thread_manager_(DBusThreadManager::Get()) { + dbus_thread_manager_(DBusThreadManager::Get()), + weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { switch (mode) { case BLOCK_DISPLAY_SLEEP: override_types_ |= (PowerManagerClient::DISABLE_IDLE_DIM | @@ -45,20 +46,11 @@ PowerStateOverride::PowerStateOverride(Mode mode) dbus_thread_manager_->AddObserver(this); // request_id_ = 0 will create a new override request. - // We do a post task here to ensure that this request runs 'after' our - // constructor is done. If not, there is a possibility (though only in - // tests at the moment) that the power state override request executes - // and returns before the constructor has finished executing. This will - // cause an AddRef and a Release, the latter destructing our current - // instance even before the constructor has finished executing (as it does - // in the DownloadExtensionTest browsertests currently). - MessageLoop::current()->PostTask( - FROM_HERE, - base::Bind(&PowerStateOverride::CallRequestPowerStateOverrides, this)); + CallRequestPowerStateOverrides(); heartbeat_.Start(FROM_HERE, base::TimeDelta::FromSeconds(kHeartbeatTimeInSecs), - this, + weak_ptr_factory_.GetWeakPtr(), &PowerStateOverride::CallRequestPowerStateOverrides); } @@ -86,7 +78,8 @@ void PowerStateOverride::CallRequestPowerStateOverrides() { base::TimeDelta::FromSeconds( kHeartbeatTimeInSecs + kRequestSlackInSecs), override_types_, - base::Bind(&PowerStateOverride::SetRequestId, this)); + base::Bind(&PowerStateOverride::SetRequestId, + weak_ptr_factory_.GetWeakPtr())); } void PowerStateOverride::CancelRequest() { diff --git a/chromeos/power/power_state_override.h b/chromeos/power/power_state_override.h index 5fc408f..8a180ea 100644 --- a/chromeos/power/power_state_override.h +++ b/chromeos/power/power_state_override.h @@ -17,9 +17,7 @@ class DBusThreadManager; // This class overrides the current power state on the machine, disabling // a set of power management features. -class CHROMEOS_EXPORT PowerStateOverride - : public base::RefCountedThreadSafe<PowerStateOverride>, - public DBusThreadManagerObserver { +class CHROMEOS_EXPORT PowerStateOverride : public DBusThreadManagerObserver { public: enum Mode { // Blocks the screen from being dimmed or blanked due to user inactivity. @@ -32,20 +30,13 @@ class CHROMEOS_EXPORT PowerStateOverride }; explicit PowerStateOverride(Mode mode); + virtual ~PowerStateOverride(); // DBusThreadManagerObserver implementation: virtual void OnDBusThreadManagerDestroying(DBusThreadManager* manager) OVERRIDE; private: - friend class base::RefCountedThreadSafe<PowerStateOverride>; - // This destructor cancels the current power state override. There might be - // a very slight delay between the the last reference to an instance being - // released and the power state override being canceled. This is only in - // the case that the current instance has JUST been created and ChromeOS - // hasn't had a chance to service the initial power override request yet. - virtual ~PowerStateOverride(); - // Callback from RequestPowerStateOverride which receives our request_id. void SetRequestId(uint32 request_id); @@ -71,6 +62,8 @@ class CHROMEOS_EXPORT PowerStateOverride DBusThreadManager* dbus_thread_manager_; // not owned + base::WeakPtrFactory<PowerStateOverride> weak_ptr_factory_; + DISALLOW_COPY_AND_ASSIGN(PowerStateOverride); }; diff --git a/chromeos/power/power_state_override_unittest.cc b/chromeos/power/power_state_override_unittest.cc index 7b3c7da..cba0feb 100644 --- a/chromeos/power/power_state_override_unittest.cc +++ b/chromeos/power/power_state_override_unittest.cc @@ -68,26 +68,24 @@ TEST_F(PowerStateOverrideTest, AddAndRemoveOverrides) { EXPECT_CALL(*power_manager_client_, RequestPowerStateOverrides(0, _, kDisplayOverrides, _)) .WillOnce(SaveArg<3>(&request_id_callback)); - scoped_refptr<PowerStateOverride> override( + scoped_ptr<PowerStateOverride> override( new PowerStateOverride(PowerStateOverride::BLOCK_DISPLAY_SLEEP)); - // Make sure our PostTask to the request power state overrides runs. - message_loop_.RunUntilIdle(); request_id_callback.Run(kRequestId); // The request should be canceled when the PowerStateOverride is destroyed. EXPECT_CALL(*power_manager_client_, CancelPowerStateOverrides(kRequestId)); - override = NULL; + override.reset(); // Now send a request to just block the system from suspending. + Mock::VerifyAndClearExpectations(power_manager_client_); EXPECT_CALL(*power_manager_client_, RequestPowerStateOverrides(0, _, kSystemOverrides, _)) .WillOnce(SaveArg<3>(&request_id_callback)); - override = new PowerStateOverride(PowerStateOverride::BLOCK_SYSTEM_SUSPEND); - // Make sure our PostTask to the request power state overrides runs. - message_loop_.RunUntilIdle(); + override.reset( + new PowerStateOverride(PowerStateOverride::BLOCK_SYSTEM_SUSPEND)); request_id_callback.Run(kRequestId); EXPECT_CALL(*power_manager_client_, CancelPowerStateOverrides(kRequestId)); - override = NULL; + override.reset(); } TEST_F(PowerStateOverrideTest, DBusThreadManagerShutDown) { @@ -95,10 +93,8 @@ TEST_F(PowerStateOverrideTest, DBusThreadManagerShutDown) { chromeos::PowerStateRequestIdCallback request_id_callback; EXPECT_CALL(*power_manager_client_, RequestPowerStateOverrides(0, _, _, _)) .WillOnce(SaveArg<3>(&request_id_callback)); - scoped_refptr<PowerStateOverride> override( + scoped_ptr<PowerStateOverride> override( new PowerStateOverride(PowerStateOverride::BLOCK_DISPLAY_SLEEP)); - // Make sure our PostTask to the request power state overrides runs. - message_loop_.RunUntilIdle(); request_id_callback.Run(kRequestId); // When the DBusThreadManager is about to be shut down, PowerStateOverride |