| Index: third_party/WebKit/Source/modules/wake_lock/ScreenWakeLockTest.cpp
|
| diff --git a/third_party/WebKit/Source/web/tests/ScreenWakeLockTest.cpp b/third_party/WebKit/Source/modules/wake_lock/ScreenWakeLockTest.cpp
|
| similarity index 59%
|
| rename from third_party/WebKit/Source/web/tests/ScreenWakeLockTest.cpp
|
| rename to third_party/WebKit/Source/modules/wake_lock/ScreenWakeLockTest.cpp
|
| index 6d770ec32ef72d129d27d9ebe6eb583ade8df0e1..ba66d6a4cd28b6e9add2d4516659b184484292b3 100644
|
| --- a/third_party/WebKit/Source/web/tests/ScreenWakeLockTest.cpp
|
| +++ b/third_party/WebKit/Source/modules/wake_lock/ScreenWakeLockTest.cpp
|
| @@ -4,16 +4,17 @@
|
|
|
| #include "modules/wake_lock/ScreenWakeLock.h"
|
|
|
| +#include "base/run_loop.h"
|
| #include "core/dom/DOMImplementation.h"
|
| #include "core/dom/Document.h"
|
| #include "core/dom/DocumentInit.h"
|
| -#include "core/frame/LocalDOMWindow.h"
|
| -#include "platform/heap/Handle.h"
|
| +#include "mojo/public/cpp/bindings/interface_request.h"
|
| +#include "mojo/public/cpp/bindings/strong_binding.h"
|
| #include "platform/testing/URLTestHelpers.h"
|
| #include "public/platform/Platform.h"
|
| +#include "public/platform/ServiceRegistry.h"
|
| #include "public/platform/WebPageVisibilityState.h"
|
| #include "public/platform/WebURLLoaderMockFactory.h"
|
| -#include "public/platform/modules/wake_lock/WebWakeLockClient.h"
|
| #include "public/web/WebCache.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "web/WebLocalFrameImpl.h"
|
| @@ -22,37 +23,64 @@
|
| namespace {
|
|
|
| using blink::ScreenWakeLock;
|
| -using blink::WebWakeLockClient;
|
| +using blink::mojom::WakeLockService;
|
| +using blink::mojom::WakeLockServiceRequest;
|
|
|
| -class TestWebWakeLockClient: public WebWakeLockClient {
|
| +// This class allows connecting service requests to a MockWakeLockService.
|
| +class MockServiceRegistry : public blink::ServiceRegistry {
|
| public:
|
| - TestWebWakeLockClient(): m_keepScreenAwake(false) { }
|
| + MockServiceRegistry() : m_wakeLockStatus(false) {}
|
| + ~MockServiceRegistry() = default;
|
|
|
| - void requestKeepScreenAwake(bool keepScreenAwake) override
|
| - {
|
| - m_keepScreenAwake = keepScreenAwake;
|
| - }
|
| + void connectToRemoteService(const char* name, mojo::ScopedMessagePipeHandle) override;
|
|
|
| - bool keepScreenAwake() const { return m_keepScreenAwake; }
|
| + bool wakeLockStatus() const { return m_wakeLockStatus; }
|
| + void setWakeLockStatus(bool status) { m_wakeLockStatus = status; }
|
|
|
| private:
|
| - bool m_keepScreenAwake;
|
| + bool m_wakeLockStatus;
|
| };
|
|
|
| -class TestWebFrameClient: public blink::FrameTestHelpers::TestWebFrameClient {
|
| +// This class is a mock WakeLockService to intercept calls to the mojo methods.
|
| +class MockWakeLockService : public WakeLockService {
|
| public:
|
| - WebWakeLockClient* wakeLockClient() override
|
| + static void Create(MockServiceRegistry* registry, WakeLockServiceRequest request)
|
| {
|
| - return &m_testWebWakeLockClient;
|
| + // See comment below in |m_binding_| for why this doesn't leak.
|
| + new MockWakeLockService(registry, std::move(request));
|
| }
|
| + ~MockWakeLockService() = default;
|
|
|
| - const TestWebWakeLockClient& testWebWakeLockClient() const
|
| - {
|
| - return m_testWebWakeLockClient;
|
| - }
|
| +private:
|
| + MockWakeLockService(MockServiceRegistry* registry, WakeLockServiceRequest request)
|
| + : m_binding(this, std::move(request))
|
| + , m_registry(registry) {}
|
| +
|
| + // mojom::WakeLockService
|
| + void RequestWakeLock() override { m_registry->setWakeLockStatus(true); }
|
| + void CancelWakeLock() override { m_registry->setWakeLockStatus(false); }
|
| +
|
| + // A StrongBinding is just like a Binding, except that it takes ownership of
|
| + // its bound implementation and deletes itself (and the impl) if and when the
|
| + // bound pipe encounters an error or is closed on the other end.
|
| + mojo::StrongBinding<WakeLockService> m_binding;
|
| + MockServiceRegistry* const m_registry;
|
| +};
|
| +
|
| +// This implementation goes here for MockWakeLockService to be defined.
|
| +void MockServiceRegistry::connectToRemoteService(const char* name, mojo::ScopedMessagePipeHandle handle)
|
| +{
|
| + MockWakeLockService::Create(this, mojo::MakeRequest<WakeLockService>(std::move(handle)));
|
| +}
|
| +
|
| +// A TestWebFrameClient to allow overriding the serviceRegistry() with a mock.
|
| +class TestWebFrameClient : public blink::FrameTestHelpers::TestWebFrameClient {
|
| +public:
|
| + ~TestWebFrameClient() override = default;
|
| + blink::ServiceRegistry* serviceRegistry() override { return &m_serviceRegistry; }
|
|
|
| private:
|
| - TestWebWakeLockClient m_testWebWakeLockClient;
|
| + MockServiceRegistry m_serviceRegistry;
|
| };
|
|
|
| class ScreenWakeLockTest: public testing::Test {
|
| @@ -102,13 +130,15 @@ protected:
|
|
|
| bool clientKeepScreenAwake()
|
| {
|
| - return m_testWebFrameClient.testWebWakeLockClient().keepScreenAwake();
|
| + return static_cast<MockServiceRegistry*>(m_testWebFrameClient.serviceRegistry())->wakeLockStatus();
|
| }
|
|
|
| void setKeepAwake(bool keepAwake)
|
| {
|
| DCHECK(screen());
|
| ScreenWakeLock::setKeepAwake(*screen(), keepAwake);
|
| + // Let the notification sink through the mojo pipes.
|
| + base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| void show()
|
| @@ -116,6 +146,8 @@ protected:
|
| DCHECK(m_webViewHelper.webView());
|
| m_webViewHelper.webView()->setVisibilityState(
|
| blink::WebPageVisibilityStateVisible, false);
|
| + // Let the notification sink through the mojo pipes.
|
| + base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| void hide()
|
| @@ -123,6 +155,8 @@ protected:
|
| DCHECK(m_webViewHelper.webView());
|
| m_webViewHelper.webView()->setVisibilityState(
|
| blink::WebPageVisibilityStateHidden, false);
|
| + // Let the notification sink through the mojo pipes.
|
| + base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| // Order of these members is important as we need to make sure that
|
|
|