Chromium Code Reviews| Index: content/browser/power_save_blocker_win.cc |
| diff --git a/content/browser/power_save_blocker_win.cc b/content/browser/power_save_blocker_win.cc |
| index ab3e40830bbb4d4aa8ced4283f38fb507db4159f..56a17c8464055068fcfd7f1c4e957909877b2bb1 100644 |
| --- a/content/browser/power_save_blocker_win.cc |
| +++ b/content/browser/power_save_blocker_win.cc |
| @@ -2,7 +2,7 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#include "content/browser/power_save_blocker.h" |
| +#include "content/public/browser/power_save_blocker.h" |
| #include <windows.h> |
| @@ -105,10 +105,22 @@ void ApplySimpleBlock(PowerSaveBlocker::PowerSaveBlockerType type, |
| SetThreadExecutionState(flags); |
| } |
| -} // namespace. |
| +class PowerSaveBlockerWin : public PowerSaveBlocker { |
| + public: |
| + PowerSaveBlockerWin(PowerSaveBlockerType type, const std::string& reason); |
| + virtual ~PowerSaveBlockerWin(); |
| + |
| + private: |
| + class Delegate; |
| -class PowerSaveBlocker::Delegate |
| - : public base::RefCountedThreadSafe<PowerSaveBlocker::Delegate> { |
| + // A second object with different lifetime than the RAII container. |
|
jam
2013/01/11 01:24:30
why do this ref counted stuff in every implementat
hashimoto
2013/01/11 08:39:44
Introduced PowerSaveBlockerImpl to avoid code dupl
jam
2013/01/11 17:28:38
this is different than what i was wondering about.
|
| + scoped_refptr<Delegate> delegate_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(PowerSaveBlockerWin); |
| +}; |
| + |
| +class PowerSaveBlockerWin::Delegate |
| + : public base::RefCountedThreadSafe<PowerSaveBlockerWin::Delegate> { |
| public: |
| Delegate(PowerSaveBlockerType type, const std::string& reason) |
| : type_(type), reason_(reason) {} |
| @@ -131,7 +143,7 @@ class PowerSaveBlocker::Delegate |
| DISALLOW_COPY_AND_ASSIGN(Delegate); |
| }; |
| -void PowerSaveBlocker::Delegate::ApplyBlock() { |
| +void PowerSaveBlockerWin::Delegate::ApplyBlock() { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| if (base::win::GetVersion() < base::win::VERSION_WIN7) |
| return ApplySimpleBlock(type_, 1); |
| @@ -139,7 +151,7 @@ void PowerSaveBlocker::Delegate::ApplyBlock() { |
| handle_.Set(CreatePowerRequest(RequestType(), reason_)); |
| } |
| -void PowerSaveBlocker::Delegate::RemoveBlock() { |
| +void PowerSaveBlockerWin::Delegate::RemoveBlock() { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| if (base::win::GetVersion() < base::win::VERSION_WIN7) |
| return ApplySimpleBlock(type_, -1); |
| @@ -147,7 +159,7 @@ void PowerSaveBlocker::Delegate::RemoveBlock() { |
| DeletePowerRequest(RequestType(), handle_.Take()); |
| } |
| -POWER_REQUEST_TYPE PowerSaveBlocker::Delegate::RequestType() { |
| +POWER_REQUEST_TYPE PowerSaveBlockerWin::Delegate::RequestType() { |
| if (type_ == kPowerSaveBlockPreventDisplaySleep) |
| return PowerRequestDisplayRequired; |
| @@ -157,18 +169,27 @@ POWER_REQUEST_TYPE PowerSaveBlocker::Delegate::RequestType() { |
| return PowerRequestExecutionRequired; |
| } |
| -PowerSaveBlocker::PowerSaveBlocker(PowerSaveBlockerType type, |
| - const std::string& reason) |
| +PowerSaveBlockerWin::PowerSaveBlockerWin(PowerSaveBlockerType type, |
| + const std::string& reason) |
| : delegate_(new Delegate(type, reason)) { |
| BrowserThread::PostTask( |
| BrowserThread::UI, FROM_HERE, |
| base::Bind(&Delegate::ApplyBlock, delegate_)); |
| } |
| -PowerSaveBlocker::~PowerSaveBlocker() { |
| +PowerSaveBlockerWin::~PowerSaveBlockerWin() { |
| BrowserThread::PostTask( |
| BrowserThread::UI, FROM_HERE, |
| base::Bind(&Delegate::RemoveBlock, delegate_)); |
| } |
| +} // namespace |
| + |
| +// static |
| +scoped_ptr<PowerSaveBlocker> PowerSaveBlocker::Create( |
| + PowerSaveBlockerType type, |
| + const std::string& reason) { |
| + return scoped_ptr<PowerSaveBlocker>(new PowerSaveBlockerWin(type, reason)); |
| +} |
| + |
| } // namespace content |