diff options
author | rkc@chromium.org <rkc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-17 12:33:12 +0000 |
---|---|---|
committer | rkc@chromium.org <rkc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-17 12:33:12 +0000 |
commit | f079d57f3ba5db51c3a5d16369903e683e0db195 (patch) | |
tree | 50b9a317b9d4c1a2a95c7ce0337194d7c60610a9 /content | |
parent | 06ccb7aefdde0e8af1e28af68cb9bb37bdbb858b (diff) | |
download | chromium_src-f079d57f3ba5db51c3a5d16369903e683e0db195.zip chromium_src-f079d57f3ba5db51c3a5d16369903e683e0db195.tar.gz chromium_src-f079d57f3ba5db51c3a5d16369903e683e0db195.tar.bz2 |
Make power state override refcounted.
In the case of power state override being created and immidiatelly destructed, we'll have a scenario in which the correct power state request won't get cancelled.
e.g.,
. User creates PowerStateOverride instance -> We call RequestPowerStateOverride
- we wait for the callback from ChromeOS to get our request ID
. User deletes PowerStateOverride instance -> We call CancelPowerStateOverride with a 0 request ID
. We destruct, invalidating our weak pointers
. Callback from RequestPowerStateOverride never lands since the weakptr is invalidated
- Power state override remains in effect for the next 10 minutes.
This has now changed to,
. User creates PowerStateOverride instance -> We call RequestPowerStateOverride, this increments our reference count to 2
- we wait for the callback from ChromeOS to get our request ID
. User releases his refernce to PowerStateOverride instance -> We decrement our reference count to 1
. RequestPowerStateOverride returns, giving us our RequestID, and decrements our refernce count to 0
. Destructor gets called, which does a CancelPowerStateOverride with the correct request ID
- The PowerStateOverride is cancelled
R=derat@chromium.org
BUG=151732
Review URL: https://chromiumcodereview.appspot.com/11358222
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@168414 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/power_save_blocker_chromeos.cc | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/content/browser/power_save_blocker_chromeos.cc b/content/browser/power_save_blocker_chromeos.cc index afb0cc2..de9d07b 100644 --- a/content/browser/power_save_blocker_chromeos.cc +++ b/content/browser/power_save_blocker_chromeos.cc @@ -34,13 +34,13 @@ class PowerSaveBlocker::Delegate default: NOTREACHED() << "Unhandled block type " << type_; } - override_.reset(new chromeos::PowerStateOverride(mode)); + override_ = new chromeos::PowerStateOverride(mode); } // Resets the previously-created PowerStateOverride object. void RemoveBlock() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - override_.reset(); + override_ = NULL; } private: @@ -49,7 +49,7 @@ class PowerSaveBlocker::Delegate PowerSaveBlockerType type_; - scoped_ptr<chromeos::PowerStateOverride> override_; + scoped_refptr<chromeos::PowerStateOverride> override_; DISALLOW_COPY_AND_ASSIGN(Delegate); }; |