| Index: content/browser/power_save_blocker_mac.cc
|
| diff --git a/content/browser/power_save_blocker_mac.cc b/content/browser/power_save_blocker_mac.cc
|
| index 9acd130f53931a6ff46594f9489e80cddf4b29ca..314dfe3b671a24cd7ecb28184ba7280c52cadd76 100644
|
| --- a/content/browser/power_save_blocker_mac.cc
|
| +++ b/content/browser/power_save_blocker_mac.cc
|
| @@ -19,35 +19,43 @@ namespace {
|
| base::Thread* g_power_thread;
|
| IOPMAssertionID g_power_assertion;
|
|
|
| -void CreateSleepAssertion() {
|
| +void CreateSleepAssertion(PowerSaveBlocker::PowerSaveBlockerType type) {
|
| DCHECK_EQ(base::PlatformThread::CurrentId(), g_power_thread->thread_id());
|
| IOReturn result;
|
| - DCHECK_EQ(g_power_assertion, kIOPMNullAssertionID);
|
|
|
| - // Block just idle sleep; allow display sleep.
|
| - // See QA1340 <http://developer.apple.com/library/mac/#qa/qa2004/qa1340.html>
|
| - // for more details.
|
| - result = IOPMAssertionCreate(kIOPMAssertionTypeNoIdleSleep,
|
| - kIOPMAssertionLevelOn,
|
| - &g_power_assertion);
|
| - LOG_IF(ERROR, result != kIOReturnSuccess)
|
| - << "IOPMAssertionCreate: " << result;
|
| -}
|
| + if (g_power_assertion != kIOPMNullAssertionID) {
|
| + result = IOPMAssertionRelease(g_power_assertion);
|
| + g_power_assertion = kIOPMNullAssertionID;
|
| + LOG_IF(ERROR, result != kIOReturnSuccess)
|
| + << "IOPMAssertionRelease: " << result;
|
| + }
|
|
|
| -void ReleaseSleepAssertion() {
|
| - DCHECK_EQ(base::PlatformThread::CurrentId(), g_power_thread->thread_id());
|
| - IOReturn result;
|
| - DCHECK_NE(g_power_assertion, kIOPMNullAssertionID);
|
| - result = IOPMAssertionRelease(g_power_assertion);
|
| - g_power_assertion = kIOPMNullAssertionID;
|
| - LOG_IF(ERROR, result != kIOReturnSuccess)
|
| - << "IOPMAssertionRelease: " << result;
|
| + CFStringRef level = NULL;
|
| + // See QA1340 <http://developer.apple.com/library/mac/#qa/qa1340/> for more
|
| + // details.
|
| + switch (type) {
|
| + case PowerSaveBlocker::kPowerSaveBlockPreventSystemSleep:
|
| + level = kIOPMAssertionTypeNoIdleSleep;
|
| + break;
|
| + case PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep:
|
| + level = kIOPMAssertionTypeNoDisplaySleep;
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| + if (level) {
|
| + result = IOPMAssertionCreate(level,
|
| + kIOPMAssertionLevelOn,
|
| + &g_power_assertion);
|
| + LOG_IF(ERROR, result != kIOReturnSuccess)
|
| + << "IOPMAssertionCreate: " << result;
|
| + }
|
| }
|
|
|
| } // namespace
|
|
|
| // Called only from UI thread.
|
| -void PowerSaveBlocker::ApplyBlock(bool blocking) {
|
| +void PowerSaveBlocker::ApplyBlock(PowerSaveBlockerType type) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
|
|
| if (!g_power_thread) {
|
| @@ -56,9 +64,6 @@ void PowerSaveBlocker::ApplyBlock(bool blocking) {
|
| g_power_thread->Start();
|
| }
|
|
|
| - MessageLoop* loop = g_power_thread->message_loop();
|
| - if (blocking)
|
| - loop->PostTask(FROM_HERE, NewRunnableFunction(CreateSleepAssertion));
|
| - else
|
| - loop->PostTask(FROM_HERE, NewRunnableFunction(ReleaseSleepAssertion));
|
| + g_power_thread->message_loop()->
|
| + PostTask(FROM_HERE, NewRunnableFunction(CreateSleepAssertion, type));
|
| }
|
|
|