summaryrefslogtreecommitdiffstats
path: root/content/browser/power_save_blocker_mac.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/power_save_blocker_mac.cc')
-rw-r--r--content/browser/power_save_blocker_mac.cc57
1 files changed, 25 insertions, 32 deletions
diff --git a/content/browser/power_save_blocker_mac.cc b/content/browser/power_save_blocker_mac.cc
index ccf6d96..9acd130 100644
--- a/content/browser/power_save_blocker_mac.cc
+++ b/content/browser/power_save_blocker_mac.cc
@@ -6,7 +6,6 @@
#include <IOKit/pwr_mgt/IOPMLib.h>
-#include "base/bind.h"
#include "base/threading/platform_thread.h"
#include "base/threading/thread.h"
#include "content/browser/browser_thread.h"
@@ -20,44 +19,35 @@ namespace {
base::Thread* g_power_thread;
IOPMAssertionID g_power_assertion;
-void CreateSleepAssertion(PowerSaveBlocker::PowerSaveBlockerType type) {
+void CreateSleepAssertion() {
DCHECK_EQ(base::PlatformThread::CurrentId(), g_power_thread->thread_id());
IOReturn result;
+ DCHECK_EQ(g_power_assertion, kIOPMNullAssertionID);
- if (g_power_assertion != kIOPMNullAssertionID) {
- result = IOPMAssertionRelease(g_power_assertion);
- g_power_assertion = kIOPMNullAssertionID;
- LOG_IF(ERROR, result != kIOReturnSuccess)
- << "IOPMAssertionRelease: " << result;
- }
+ // 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;
+}
- 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;
- case PowerSaveBlocker::kPowerSaveBlockPreventNone:
- break;
- }
- if (level) {
- result = IOPMAssertionCreate(level,
- kIOPMAssertionLevelOn,
- &g_power_assertion);
- LOG_IF(ERROR, result != kIOReturnSuccess)
- << "IOPMAssertionCreate: " << 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;
}
} // namespace
// Called only from UI thread.
-// static
-void PowerSaveBlocker::ApplyBlock(PowerSaveBlockerType type) {
+void PowerSaveBlocker::ApplyBlock(bool blocking) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
if (!g_power_thread) {
@@ -66,6 +56,9 @@ void PowerSaveBlocker::ApplyBlock(PowerSaveBlockerType type) {
g_power_thread->Start();
}
- g_power_thread->message_loop()->
- PostTask(FROM_HERE, base::Bind(CreateSleepAssertion, type));
+ MessageLoop* loop = g_power_thread->message_loop();
+ if (blocking)
+ loop->PostTask(FROM_HERE, NewRunnableFunction(CreateSleepAssertion));
+ else
+ loop->PostTask(FROM_HERE, NewRunnableFunction(ReleaseSleepAssertion));
}