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

Side by Side Diff: third_party/WebKit/Source/modules/wake_lock/ScreenWakeLock.cpp

Issue 1794553002: [Playground] Onion Soup: moving ScreenWakeLock to Blink modules/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nit DEPS Created 4 years, 8 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "modules/wake_lock/ScreenWakeLock.h" 5 #include "modules/wake_lock/ScreenWakeLock.h"
6 6
7 #include "core/frame/LocalFrame.h" 7 #include "core/frame/LocalFrame.h"
8 #include "core/frame/Screen.h" 8 #include "core/frame/Screen.h"
9 #include "core/page/PageVisibilityState.h" 9 #include "core/page/PageVisibilityState.h"
10 #include "platform/RuntimeEnabledFeatures.h" 10 #include "platform/RuntimeEnabledFeatures.h"
11 #include "public/platform/modules/wake_lock/WebWakeLockClient.h" 11 #include "public/platform/ServiceRegistry.h"
12 12
13 namespace blink { 13 namespace blink {
14 14
15 RawPtr<ScreenWakeLock> ScreenWakeLock::create(LocalFrame& frame, ServiceRegistry * registry)
16 {
17 DCHECK(RuntimeEnabledFeatures::wakeLockEnabled());
18 return registry ? new ScreenWakeLock(frame, registry) : nullptr;
19 }
20
15 // static 21 // static
16 bool ScreenWakeLock::keepAwake(Screen& screen) 22 bool ScreenWakeLock::keepAwake(Screen& screen)
17 { 23 {
18 ScreenWakeLock* screenWakeLock = fromScreen(screen); 24 ScreenWakeLock* screenWakeLock = fromScreen(screen);
19 if (!screenWakeLock) 25 if (!screenWakeLock)
20 return false; 26 return false;
21 27
22 return screenWakeLock->keepAwake(); 28 return screenWakeLock->keepAwake();
23 } 29 }
24 30
25 // static 31 // static
26 void ScreenWakeLock::setKeepAwake(Screen& screen, bool keepAwake) 32 void ScreenWakeLock::setKeepAwake(Screen& screen, bool keepAwake)
27 { 33 {
28 ScreenWakeLock* screenWakeLock = fromScreen(screen); 34 ScreenWakeLock* screenWakeLock = fromScreen(screen);
29 if (!screenWakeLock) 35 if (screenWakeLock)
30 return; 36 screenWakeLock->setKeepAwake(keepAwake);
31
32 screenWakeLock->setKeepAwake(keepAwake);
33 }
34
35 void ScreenWakeLock::setKeepAwake(bool keepAwake)
36 {
37 m_keepAwake = keepAwake;
38 notifyClient();
39 } 37 }
40 38
41 // static 39 // static
42 const char* ScreenWakeLock::supplementName() 40 const char* ScreenWakeLock::supplementName()
43 { 41 {
44 return "ScreenWakeLock"; 42 return "ScreenWakeLock";
45 } 43 }
46 44
47 // static 45 // static
48 ScreenWakeLock* ScreenWakeLock::from(LocalFrame* frame) 46 ScreenWakeLock* ScreenWakeLock::from(LocalFrame* frame)
49 { 47 {
50 return static_cast<ScreenWakeLock*>(Supplement<LocalFrame>::from(frame, supp lementName())); 48 return static_cast<ScreenWakeLock*>(Supplement<LocalFrame>::from(frame, supp lementName()));
51 } 49 }
52 50
53 // static
54 void ScreenWakeLock::provideTo(LocalFrame& frame, WebWakeLockClient* client)
55 {
56 ASSERT(RuntimeEnabledFeatures::wakeLockEnabled());
57 Supplement<LocalFrame>::provideTo(
58 frame,
59 ScreenWakeLock::supplementName(),
60 new ScreenWakeLock(frame, client));
61 }
62
63 void ScreenWakeLock::pageVisibilityChanged() 51 void ScreenWakeLock::pageVisibilityChanged()
64 { 52 {
65 notifyClient(); 53 notifyClient();
66 } 54 }
67 55
68 void ScreenWakeLock::didCommitLoad(LocalFrame* committedFrame) 56 void ScreenWakeLock::didCommitLoad(LocalFrame* committedFrame)
69 { 57 {
70 // Reset wake lock flag for this frame if it is the one being navigated. 58 // Reset wake lock flag for this frame if it is the one being navigated.
71 if (committedFrame == frame()) { 59 if (committedFrame == frame())
72 setKeepAwake(false); 60 setKeepAwake(false);
73 }
74 } 61 }
75 62
76 void ScreenWakeLock::willDetachFrameHost() 63 void ScreenWakeLock::willDetachFrameHost()
77 { 64 {
78 m_client = nullptr; 65 setKeepAwake(false);
79 } 66 }
80 67
81 DEFINE_TRACE(ScreenWakeLock) 68 DEFINE_TRACE(ScreenWakeLock)
82 { 69 {
83 Supplement<LocalFrame>::trace(visitor); 70 Supplement<LocalFrame>::trace(visitor);
84 PageLifecycleObserver::trace(visitor); 71 PageLifecycleObserver::trace(visitor);
85 LocalFrameLifecycleObserver::trace(visitor); 72 LocalFrameLifecycleObserver::trace(visitor);
86 } 73 }
87 74
88 ScreenWakeLock::ScreenWakeLock(LocalFrame& frame, WebWakeLockClient* client) 75 ScreenWakeLock::ScreenWakeLock(LocalFrame& frame, ServiceRegistry* registry)
89 : PageLifecycleObserver(frame.page()) 76 : PageLifecycleObserver(frame.page())
90 , LocalFrameLifecycleObserver(&frame) 77 , LocalFrameLifecycleObserver(&frame)
91 , m_client(client)
92 , m_keepAwake(false) 78 , m_keepAwake(false)
93 { 79 {
80 DCHECK(!m_service.is_bound());
81 DCHECK(registry);
82 registry->connectToRemoteService(mojo::GetProxy(&m_service));
83 }
84
85 bool ScreenWakeLock::keepAwake() const
86 {
87 return m_keepAwake;
88 }
89
90 void ScreenWakeLock::setKeepAwake(bool keepAwake)
91 {
92 m_keepAwake = keepAwake;
93 notifyClient();
94 } 94 }
95 95
96 // static 96 // static
97 ScreenWakeLock* ScreenWakeLock::fromScreen(Screen& screen) 97 ScreenWakeLock* ScreenWakeLock::fromScreen(Screen& screen)
98 { 98 {
99 return screen.frame() ? ScreenWakeLock::from(screen.frame()) : nullptr; 99 return screen.frame() ? ScreenWakeLock::from(screen.frame()) : nullptr;
100 } 100 }
101 101
102 void ScreenWakeLock::notifyClient() 102 void ScreenWakeLock::notifyClient()
103 { 103 {
104 if (!m_client) 104 if (!m_service)
105 return; 105 return;
106 106
107 m_client->requestKeepScreenAwake(m_keepAwake && page() && page()->isPageVisi ble()); 107 if (m_keepAwake && frame()->page() && frame()->page()->isPageVisible())
108 m_service->RequestWakeLock();
109 else
110 m_service->CancelWakeLock();
108 } 111 }
109 112
113 void provideScreenWakeLockTo(LocalFrame& frame, ServiceRegistry* registry)
114 {
115 frame.provideSupplement(ScreenWakeLock::supplementName(), ScreenWakeLock::cr eate(frame, registry));
116 }
117
118
110 } // namespace blink 119 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698