Index: third_party/WebKit/Source/modules/wake_lock/ScreenWakeLock.cpp |
diff --git a/third_party/WebKit/Source/modules/wake_lock/ScreenWakeLock.cpp b/third_party/WebKit/Source/modules/wake_lock/ScreenWakeLock.cpp |
index 331e672b50e8610b5a72b99e986333bd2ca7b1de..9bb9ff1b9fb10113253c14c98d367b8cdb64813e 100644 |
--- a/third_party/WebKit/Source/modules/wake_lock/ScreenWakeLock.cpp |
+++ b/third_party/WebKit/Source/modules/wake_lock/ScreenWakeLock.cpp |
@@ -8,10 +8,16 @@ |
#include "core/frame/Screen.h" |
#include "core/page/PageVisibilityState.h" |
#include "platform/RuntimeEnabledFeatures.h" |
-#include "public/platform/modules/wake_lock/WebWakeLockClient.h" |
+#include "public/platform/ServiceRegistry.h" |
namespace blink { |
+RawPtr<ScreenWakeLock> ScreenWakeLock::create(LocalFrame& frame, ServiceRegistry* registry) |
+{ |
+ DCHECK(RuntimeEnabledFeatures::wakeLockEnabled()); |
+ return registry ? new ScreenWakeLock(frame, registry) : nullptr; |
+} |
+ |
// static |
bool ScreenWakeLock::keepAwake(Screen& screen) |
{ |
@@ -26,16 +32,8 @@ bool ScreenWakeLock::keepAwake(Screen& screen) |
void ScreenWakeLock::setKeepAwake(Screen& screen, bool keepAwake) |
{ |
ScreenWakeLock* screenWakeLock = fromScreen(screen); |
- if (!screenWakeLock) |
- return; |
- |
- screenWakeLock->setKeepAwake(keepAwake); |
-} |
- |
-void ScreenWakeLock::setKeepAwake(bool keepAwake) |
-{ |
- m_keepAwake = keepAwake; |
- notifyClient(); |
+ if (screenWakeLock) |
+ screenWakeLock->setKeepAwake(keepAwake); |
} |
// static |
@@ -50,16 +48,6 @@ ScreenWakeLock* ScreenWakeLock::from(LocalFrame* frame) |
return static_cast<ScreenWakeLock*>(Supplement<LocalFrame>::from(frame, supplementName())); |
} |
-// static |
-void ScreenWakeLock::provideTo(LocalFrame& frame, WebWakeLockClient* client) |
-{ |
- ASSERT(RuntimeEnabledFeatures::wakeLockEnabled()); |
- Supplement<LocalFrame>::provideTo( |
- frame, |
- ScreenWakeLock::supplementName(), |
- new ScreenWakeLock(frame, client)); |
-} |
- |
void ScreenWakeLock::pageVisibilityChanged() |
{ |
notifyClient(); |
@@ -68,14 +56,13 @@ void ScreenWakeLock::pageVisibilityChanged() |
void ScreenWakeLock::didCommitLoad(LocalFrame* committedFrame) |
{ |
// Reset wake lock flag for this frame if it is the one being navigated. |
- if (committedFrame == frame()) { |
+ if (committedFrame == frame()) |
setKeepAwake(false); |
- } |
} |
void ScreenWakeLock::willDetachFrameHost() |
{ |
- m_client = nullptr; |
+ setKeepAwake(false); |
} |
DEFINE_TRACE(ScreenWakeLock) |
@@ -85,12 +72,25 @@ DEFINE_TRACE(ScreenWakeLock) |
LocalFrameLifecycleObserver::trace(visitor); |
} |
-ScreenWakeLock::ScreenWakeLock(LocalFrame& frame, WebWakeLockClient* client) |
+ScreenWakeLock::ScreenWakeLock(LocalFrame& frame, ServiceRegistry* registry) |
: PageLifecycleObserver(frame.page()) |
, LocalFrameLifecycleObserver(&frame) |
- , m_client(client) |
, m_keepAwake(false) |
{ |
+ DCHECK(!m_service.is_bound()); |
+ DCHECK(registry); |
+ registry->connectToRemoteService(mojo::GetProxy(&m_service)); |
+} |
+ |
+bool ScreenWakeLock::keepAwake() const |
+{ |
+ return m_keepAwake; |
+} |
+ |
+void ScreenWakeLock::setKeepAwake(bool keepAwake) |
+{ |
+ m_keepAwake = keepAwake; |
+ notifyClient(); |
} |
// static |
@@ -101,10 +101,19 @@ ScreenWakeLock* ScreenWakeLock::fromScreen(Screen& screen) |
void ScreenWakeLock::notifyClient() |
{ |
- if (!m_client) |
+ if (!m_service) |
return; |
- m_client->requestKeepScreenAwake(m_keepAwake && page() && page()->isPageVisible()); |
+ if (m_keepAwake && frame()->page() && frame()->page()->isPageVisible()) |
+ m_service->RequestWakeLock(); |
+ else |
+ m_service->CancelWakeLock(); |
} |
+void provideScreenWakeLockTo(LocalFrame& frame, ServiceRegistry* registry) |
+{ |
+ frame.provideSupplement(ScreenWakeLock::supplementName(), ScreenWakeLock::create(frame, registry)); |
+} |
+ |
+ |
} // namespace blink |