summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorrkc@chromium.org <rkc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-17 12:33:12 +0000
committerrkc@chromium.org <rkc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-17 12:33:12 +0000
commitf079d57f3ba5db51c3a5d16369903e683e0db195 (patch)
tree50b9a317b9d4c1a2a95c7ce0337194d7c60610a9 /content
parent06ccb7aefdde0e8af1e28af68cb9bb37bdbb858b (diff)
downloadchromium_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.cc6
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);
};