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

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

Issue 2126733002: Make ScreenWakeLock ContextLifecycleObserver instead of LocalFrameLifecycleObserver (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: temp Created 4 years, 5 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/dom/Document.h"
7 #include "core/frame/LocalFrame.h" 8 #include "core/frame/LocalFrame.h"
8 #include "core/frame/Screen.h" 9 #include "core/frame/Screen.h"
9 #include "core/page/PageVisibilityState.h" 10 #include "core/page/PageVisibilityState.h"
10 #include "platform/RuntimeEnabledFeatures.h" 11 #include "platform/RuntimeEnabledFeatures.h"
11 #include "public/platform/ServiceRegistry.h" 12 #include "public/platform/ServiceRegistry.h"
12 13
13 namespace blink { 14 namespace blink {
14 15
15 // static 16 // static
16 bool ScreenWakeLock::keepAwake(Screen& screen) 17 bool ScreenWakeLock::keepAwake(Screen& screen)
(...skipping 15 matching lines...) Expand all
32 33
33 // static 34 // static
34 const char* ScreenWakeLock::supplementName() 35 const char* ScreenWakeLock::supplementName()
35 { 36 {
36 return "ScreenWakeLock"; 37 return "ScreenWakeLock";
37 } 38 }
38 39
39 // static 40 // static
40 ScreenWakeLock* ScreenWakeLock::from(LocalFrame* frame) 41 ScreenWakeLock* ScreenWakeLock::from(LocalFrame* frame)
41 { 42 {
42 return static_cast<ScreenWakeLock*>(Supplement<LocalFrame>::from(frame, supp lementName())); 43 if (!RuntimeEnabledFeatures::wakeLockEnabled())
43 } 44 return nullptr;
44 45 ScreenWakeLock* supplement = static_cast<ScreenWakeLock*>(Supplement<LocalFr ame>::from(frame, supplementName()));
45 // static 46 if (!supplement) {
46 void ScreenWakeLock::provideTo(LocalFrame& frame, ServiceRegistry* registry) 47 supplement = new ScreenWakeLock(*frame);
47 { 48 Supplement<LocalFrame>::provideTo(*frame, supplementName(), supplement);
48 DCHECK(RuntimeEnabledFeatures::wakeLockEnabled()); 49 }
49 Supplement<LocalFrame>::provideTo( 50 return supplement;
50 frame,
51 ScreenWakeLock::supplementName(),
52 registry ? new ScreenWakeLock(frame, registry) : nullptr);
53 } 51 }
54 52
55 void ScreenWakeLock::pageVisibilityChanged() 53 void ScreenWakeLock::pageVisibilityChanged()
56 { 54 {
57 notifyService(); 55 notifyService();
58 } 56 }
59 57
60 void ScreenWakeLock::didCommitLoad(LocalFrame* committedFrame) 58 void ScreenWakeLock::contextDestroyed()
61 {
62 // Reset wake lock flag for this frame if it is the one being navigated.
63 if (committedFrame == frame())
64 setKeepAwake(false);
65 }
66
67 void ScreenWakeLock::willDetachFrameHost()
68 { 59 {
69 setKeepAwake(false); 60 setKeepAwake(false);
70 } 61 }
71 62
72 DEFINE_TRACE(ScreenWakeLock) 63 DEFINE_TRACE(ScreenWakeLock)
73 { 64 {
74 Supplement<LocalFrame>::trace(visitor); 65 Supplement<LocalFrame>::trace(visitor);
75 PageLifecycleObserver::trace(visitor); 66 PageLifecycleObserver::trace(visitor);
76 LocalFrameLifecycleObserver::trace(visitor); 67 ContextLifecycleObserver::trace(visitor);
77 } 68 }
78 69
79 ScreenWakeLock::ScreenWakeLock(LocalFrame& frame, ServiceRegistry* registry) 70 ScreenWakeLock::ScreenWakeLock(LocalFrame& frame)
80 : PageLifecycleObserver(frame.page()) 71 : ContextLifecycleObserver(frame.document())
81 , LocalFrameLifecycleObserver(&frame) 72 , PageLifecycleObserver(frame.page())
82 , m_keepAwake(false) 73 , m_keepAwake(false)
83 { 74 {
84 DCHECK(!m_service.is_bound()); 75 DCHECK(!m_service.is_bound());
85 DCHECK(registry); 76 DCHECK(frame.serviceRegistry());
86 registry->connectToRemoteService(mojo::GetProxy(&m_service)); 77 frame.serviceRegistry()->connectToRemoteService(mojo::GetProxy(&m_service));
87 } 78 }
88 79
89 bool ScreenWakeLock::keepAwake() const 80 bool ScreenWakeLock::keepAwake() const
90 { 81 {
91 return m_keepAwake; 82 return m_keepAwake;
92 } 83 }
93 84
94 void ScreenWakeLock::setKeepAwake(bool keepAwake) 85 void ScreenWakeLock::setKeepAwake(bool keepAwake)
95 { 86 {
96 m_keepAwake = keepAwake; 87 m_keepAwake = keepAwake;
97 notifyService(); 88 notifyService();
98 } 89 }
99 90
100 // static 91 // static
101 ScreenWakeLock* ScreenWakeLock::fromScreen(Screen& screen) 92 ScreenWakeLock* ScreenWakeLock::fromScreen(Screen& screen)
102 { 93 {
103 return screen.frame() ? ScreenWakeLock::from(screen.frame()) : nullptr; 94 return screen.frame() ? ScreenWakeLock::from(screen.frame()) : nullptr;
104 } 95 }
105 96
106 void ScreenWakeLock::notifyService() 97 void ScreenWakeLock::notifyService()
107 { 98 {
108 if (!m_service) 99 if (!m_service)
109 return; 100 return;
110 101
111 if (m_keepAwake && frame()->page() && frame()->page()->isPageVisible()) 102 if (m_keepAwake && page() && page()->isPageVisible())
112 m_service->RequestWakeLock(); 103 m_service->RequestWakeLock();
113 else 104 else
114 m_service->CancelWakeLock(); 105 m_service->CancelWakeLock();
115 } 106 }
116 107
117 } // namespace blink 108 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/wake_lock/ScreenWakeLock.h ('k') | third_party/WebKit/Source/web/WebLocalFrameImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698