summaryrefslogtreecommitdiffstats
path: root/chromeos
diff options
context:
space:
mode:
authormaruel@chromium.org <maruel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-17 13:54:40 +0000
committermaruel@chromium.org <maruel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-17 13:54:40 +0000
commit1067abfea4372c68ab65a142d3c1725bcd682706 (patch)
tree446dd5ae8d118e2ee130b83aa2053f571e33a991 /chromeos
parentacf711598d854afb61f6ccebbaa029819d1bda47 (diff)
downloadchromium_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.cc19
-rw-r--r--chromeos/power/power_state_override.h15
-rw-r--r--chromeos/power/power_state_override_unittest.cc18
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