| OLD | NEW |
| 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 Loading... |
| 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 |
| OLD | NEW |