Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(337)

Side by Side Diff: content/browser/power_save_blocker_mac.cc

Issue 11784016: chromeos: Block system suspend while uploading files to Drive (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/browser/power_save_blocker_linux.cc ('k') | content/browser/power_save_blocker_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/power_save_blocker.h" 5 #include "content/browser/power_save_blocker_impl.h"
6 6
7 #include <IOKit/pwr_mgt/IOPMLib.h> 7 #include <IOKit/pwr_mgt/IOPMLib.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
11 #include "base/mac/scoped_cftyperef.h" 11 #include "base/mac/scoped_cftyperef.h"
12 #include "base/sys_string_conversions.h" 12 #include "base/sys_string_conversions.h"
13 #include "base/threading/platform_thread.h" 13 #include "base/threading/platform_thread.h"
14 #include "base/threading/thread.h" 14 #include "base/threading/thread.h"
15 15
(...skipping 13 matching lines...) Expand all
29 thread->Start(); 29 thread->Start();
30 return thread; 30 return thread;
31 } 31 }
32 static void Delete(base::Thread* instance) { } 32 static void Delete(base::Thread* instance) { }
33 }; 33 };
34 base::LazyInstance<base::Thread, PowerSaveBlockerLazyInstanceTraits> 34 base::LazyInstance<base::Thread, PowerSaveBlockerLazyInstanceTraits>
35 g_power_thread = LAZY_INSTANCE_INITIALIZER; 35 g_power_thread = LAZY_INSTANCE_INITIALIZER;
36 36
37 } // namespace 37 } // namespace
38 38
39 class PowerSaveBlocker::Delegate 39 class PowerSaveBlockerImpl::Delegate
40 : public base::RefCountedThreadSafe<PowerSaveBlocker::Delegate> { 40 : public base::RefCountedThreadSafe<PowerSaveBlockerImpl::Delegate> {
41 public: 41 public:
42 Delegate(PowerSaveBlockerType type, const std::string& reason) 42 Delegate(PowerSaveBlockerType type, const std::string& reason)
43 : type_(type), reason_(reason), assertion_(kIOPMNullAssertionID) {} 43 : type_(type), reason_(reason), assertion_(kIOPMNullAssertionID) {}
44 44
45 // Does the actual work to apply or remove the desired power save block. 45 // Does the actual work to apply or remove the desired power save block.
46 void ApplyBlock(); 46 void ApplyBlock();
47 void RemoveBlock(); 47 void RemoveBlock();
48 48
49 private: 49 private:
50 friend class base::RefCountedThreadSafe<Delegate>; 50 friend class base::RefCountedThreadSafe<Delegate>;
51 ~Delegate() {} 51 ~Delegate() {}
52 PowerSaveBlockerType type_; 52 PowerSaveBlockerType type_;
53 std::string reason_; 53 std::string reason_;
54 IOPMAssertionID assertion_; 54 IOPMAssertionID assertion_;
55 }; 55 };
56 56
57 void PowerSaveBlocker::Delegate::ApplyBlock() { 57 void PowerSaveBlockerImpl::Delegate::ApplyBlock() {
58 DCHECK_EQ(base::PlatformThread::CurrentId(), 58 DCHECK_EQ(base::PlatformThread::CurrentId(),
59 g_power_thread.Pointer()->thread_id()); 59 g_power_thread.Pointer()->thread_id());
60 60
61 CFStringRef level = NULL; 61 CFStringRef level = NULL;
62 // See QA1340 <http://developer.apple.com/library/mac/#qa/qa1340/> for more 62 // See QA1340 <http://developer.apple.com/library/mac/#qa/qa1340/> for more
63 // details. 63 // details.
64 switch (type_) { 64 switch (type_) {
65 case PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension: 65 case PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension:
66 level = kIOPMAssertionTypeNoIdleSleep; 66 level = kIOPMAssertionTypeNoIdleSleep;
67 break; 67 break;
68 case PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep: 68 case PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep:
69 level = kIOPMAssertionTypeNoDisplaySleep; 69 level = kIOPMAssertionTypeNoDisplaySleep;
70 break; 70 break;
71 default: 71 default:
72 NOTREACHED(); 72 NOTREACHED();
73 break; 73 break;
74 } 74 }
75 if (level) { 75 if (level) {
76 base::mac::ScopedCFTypeRef<CFStringRef> cf_reason( 76 base::mac::ScopedCFTypeRef<CFStringRef> cf_reason(
77 base::SysUTF8ToCFStringRef(reason_)); 77 base::SysUTF8ToCFStringRef(reason_));
78 IOReturn result = IOPMAssertionCreateWithName(level, 78 IOReturn result = IOPMAssertionCreateWithName(level,
79 kIOPMAssertionLevelOn, 79 kIOPMAssertionLevelOn,
80 cf_reason, 80 cf_reason,
81 &assertion_); 81 &assertion_);
82 LOG_IF(ERROR, result != kIOReturnSuccess) 82 LOG_IF(ERROR, result != kIOReturnSuccess)
83 << "IOPMAssertionCreate: " << result; 83 << "IOPMAssertionCreate: " << result;
84 } 84 }
85 } 85 }
86 86
87 void PowerSaveBlocker::Delegate::RemoveBlock() { 87 void PowerSaveBlockerImpl::Delegate::RemoveBlock() {
88 DCHECK_EQ(base::PlatformThread::CurrentId(), 88 DCHECK_EQ(base::PlatformThread::CurrentId(),
89 g_power_thread.Pointer()->thread_id()); 89 g_power_thread.Pointer()->thread_id());
90 90
91 if (assertion_ != kIOPMNullAssertionID) { 91 if (assertion_ != kIOPMNullAssertionID) {
92 IOReturn result = IOPMAssertionRelease(assertion_); 92 IOReturn result = IOPMAssertionRelease(assertion_);
93 LOG_IF(ERROR, result != kIOReturnSuccess) 93 LOG_IF(ERROR, result != kIOReturnSuccess)
94 << "IOPMAssertionRelease: " << result; 94 << "IOPMAssertionRelease: " << result;
95 } 95 }
96 } 96 }
97 97
98 PowerSaveBlocker::PowerSaveBlocker(PowerSaveBlockerType type, 98 PowerSaveBlockerImpl::PowerSaveBlockerImpl(PowerSaveBlockerType type,
99 const std::string& reason) 99 const std::string& reason)
100 : delegate_(new Delegate(type, reason)) { 100 : delegate_(new Delegate(type, reason)) {
101 g_power_thread.Pointer()->message_loop()->PostTask( 101 g_power_thread.Pointer()->message_loop()->PostTask(
102 FROM_HERE, 102 FROM_HERE,
103 base::Bind(&Delegate::ApplyBlock, delegate_)); 103 base::Bind(&Delegate::ApplyBlock, delegate_));
104 } 104 }
105 105
106 PowerSaveBlocker::~PowerSaveBlocker() { 106 PowerSaveBlockerImpl::~PowerSaveBlockerImpl() {
107 g_power_thread.Pointer()->message_loop()->PostTask( 107 g_power_thread.Pointer()->message_loop()->PostTask(
108 FROM_HERE, 108 FROM_HERE,
109 base::Bind(&Delegate::RemoveBlock, delegate_)); 109 base::Bind(&Delegate::RemoveBlock, delegate_));
110 } 110 }
111 111
112 } // namespace content 112 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/power_save_blocker_linux.cc ('k') | content/browser/power_save_blocker_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698