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

Side by Side Diff: Source/web/tests/WakeLockTest.cpp

Issue 399313003: Initial implementation of API WakeLock. Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Implementation of WakeLock API on JavaScript side Created 6 years, 4 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
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "config.h"
6
7 #include "modules/wake_lock/WakeLock.h"
8
9 #include "bindings/core/v8/ScriptState.h"
10 #include "bindings/core/v8/V8Binding.h"
11 #include "core/dom/Document.h"
12 #include "core/html/HTMLElement.h"
13 #include "core/page/Page.h"
14 #include "modules/wake_lock/WakeLockController.h"
15 #include "public/platform/Platform.h"
16 #include "public/platform/WebUnitTestSupport.h"
17 #include "public/platform/WebWakeLockClient.h"
18 #include "public/platform/WebWakeLockRequestCallback.h"
19 #include "public/web/WebDocument.h"
20 #include "public/web/WebView.h"
21 #include "web/WebLocalFrameImpl.h"
22 #include "web/WebViewImpl.h"
23 #include "web/tests/FrameTestHelpers.h"
24 #include "web/tests/URLTestHelpers.h"
25 #include "wtf/Vector.h"
26
27 #include <gtest/gtest.h>
28
29 namespace {
30 struct WakeLockRequestInfo {
31 blink::WebWakeLockType m_type;
32 int m_requestId;
33 WakeLockRequestInfo(blink::WebWakeLockType type, int id)
34 : m_type(type)
35 , m_requestId(id)
36 {
37 }
38 };
39 typedef Vector<WakeLockRequestInfo> Requests;
40
41 class MockWebWakeLockClient : public blink::WebWakeLockClient {
42 public:
43 MockWebWakeLockClient()
44 : m_callback(0)
45 {
46 }
47
48 virtual ~MockWebWakeLockClient() { };
49
50 virtual void requestWakeLock(blink::WebWakeLockType type, int requestId, bli nk::WebSecurityOrigin)
51 {
52 m_lockRequests.append(WakeLockRequestInfo(type, requestId));
53 };
54
55 virtual void requestWakeUnlock(blink::WebWakeLockType type, int requestId)
56 {
57 m_unlockRequests.append(WakeLockRequestInfo(type, requestId));
58 };
59
60 virtual void wakeLockDestroyed() { m_callback = 0; };
61 virtual void setRequestCallback(blink::WebWakeLockRequestCallback* callback)
62 {
63 m_callback = callback;
64 };
65
66 void resolveLockRequest(blink::WebWakeLockType type, bool success)
67 {
68 for (size_t pos = 0; pos < m_lockRequests.size();) {
69 blink::WebWakeLockType requestType = m_lockRequests.at(pos).m_type;
70 int resolverId = m_lockRequests.at(pos).m_requestId;
71 if (m_callback && (requestType == type)) {
72 if (success)
73 m_callback->onCreatedWakeLockSuccessful(resolverId);
74 else
75 m_callback->onCreatedWakeLockFailed(resolverId);
76 m_lockRequests.remove(pos);
77 } else {
78 ++pos;
79 }
80 }
81 }
82
83 void resolveUnlockRequest(blink::WebWakeLockType type, bool success)
84 {
85 for (size_t pos = 0; pos < m_unlockRequests.size();) {
86 blink::WebWakeLockType requestType = m_unlockRequests.at(pos).m_type ;
87 int resolverId = m_unlockRequests.at(pos).m_requestId;
88 if (m_callback && (requestType == type)) {
89 if (success)
90 m_callback->onUnlockedWakeLockSuccessful(resolverId);
91 else
92 m_callback->onUnlockedWakeLockFailed(resolverId);
93 m_unlockRequests.remove(pos);
94 } else {
95 ++pos;
96 }
97 }
98 }
99
100 private:
101 blink::WebWakeLockRequestCallback *m_callback;
102
103 Requests m_lockRequests;
104 Requests m_unlockRequests;
105 };
106
107 class WakeLockTest : public testing::Test {
108 public:
109 WakeLockTest()
110 : m_baseURL("http://www.test.com/")
111 {
112 }
113
114 protected:
115 virtual void SetUp() OVERRIDE
116 {
117 m_webViewHelper.initialize(true, 0, &m_mockWebViewClient, 0);
118 webViewImpl()->resize(blink::WebSize(320, 240));
119 }
120
121 virtual void TearDown() OVERRIDE
122 {
123 blink::Platform::current()->unitTestSupport()->unregisterAllMockedURLs() ;
124 }
125
126 void registerMockedHttpURLLoad(const std::string& fileName)
127 {
128 blink::URLTestHelpers::registerMockedURLFromBaseURL(blink::WebString::fr omUTF8(m_baseURL.c_str()), blink::WebString::fromUTF8(fileName.c_str()));
129 }
130
131 blink::Document* document() const { return frame()->document(); }
132 blink::Page* page() const { return frame()->page(); }
133
134 blink::WebViewImpl* webViewImpl() const { return m_webViewHelper.webViewImpl (); }
135 blink::LocalFrame* frame() const { return m_webViewHelper.webViewImpl()->mai nFrameImpl()->frame(); }
136
137 void navigateTo(const std::string& url)
138 {
139 blink::FrameTestHelpers::loadFrame(webViewImpl()->mainFrame(), url);
140 }
141
142 void forceFullCompositingUpdate() { webViewImpl()->layout(); }
143
144 std::string m_baseURL;
145
146 private:
147 blink::FrameTestHelpers::TestWebViewClient m_mockWebViewClient;
148 blink::FrameTestHelpers::WebViewHelper m_webViewHelper;
149 };
150
151 TEST_F(WakeLockTest, requestReleasePromise)
152 {
153 registerMockedHttpURLLoad("foo.html");
154 navigateTo(m_baseURL + "foo.html");
155 forceFullCompositingUpdate();
156
157 ASSERT_TRUE(document());
158 ASSERT_TRUE(page());
159
160 MockWebWakeLockClient wakeLockClient;
161 blink::WakeLockController::provideWakeLockTo(*page(), &wakeLockClient);
162 blink::WakeLockController* wakeLockController = blink::WakeLockController::f rom(page());
163 ASSERT_TRUE(wakeLockController);
164
165 wakeLockClient.setRequestCallback(blink::WakeLockController::from(page()));
166
167 blink::ScriptState* scriptState = blink::ScriptState::forMainWorld(frame());
168 blink::ScriptState::Scope scriptScope(scriptState);
169 RefPtr<blink::WakeLock> wakeLock = blink::WakeLock::create(document()->domWi ndow()->executionContext());
170
171 {
172 blink::ScriptPromise promise = wakeLock->request(scriptState, "screen");
173 wakeLockClient.resolveLockRequest(blink::WebWakeLockScreen, true);
174
175 ASSERT_FALSE(promise.isEmpty());
176 ASSERT_TRUE(promise.v8Value()->IsPromise());
177
178 ASSERT_TRUE(wakeLockController->isHeld(blink::WebWakeLockScreen));
179
180 promise = wakeLock->release(scriptState, "screen");
181 wakeLockClient.resolveUnlockRequest(blink::WebWakeLockScreen, true);
182 ASSERT_FALSE(promise.isEmpty());
183 ASSERT_TRUE(promise.v8Value()->IsPromise());
184
185 ASSERT_FALSE(wakeLockController->isHeld(blink::WebWakeLockScreen));
186 }
187
188 {
189 blink::ScriptPromise promise = wakeLock->release(scriptState, "screen");
190 ASSERT_FALSE(promise.isEmpty());
191 ASSERT_TRUE(promise.v8Value()->IsPromise());
192
193 wakeLockClient.resolveUnlockRequest(blink::WebWakeLockScreen, true);
194
195 ASSERT_FALSE(wakeLockController->isHeld(blink::WebWakeLockScreen));
196 }
197
198 {
199 blink::ScriptPromise promise = wakeLock->request(scriptState, "screen");
200 ASSERT_FALSE(promise.isEmpty());
201 ASSERT_TRUE(promise.v8Value()->IsPromise());
202
203 wakeLockClient.resolveLockRequest(blink::WebWakeLockScreen, false);
204
205 ASSERT_FALSE(wakeLockController->isHeld(blink::WebWakeLockScreen));
206 }
207
208 {
209 blink::ScriptPromise promise1 = wakeLock->request(scriptState, "screen") ;
210 blink::ScriptPromise promise2 = wakeLock->request(scriptState, "screen") ;
211 wakeLockClient.resolveLockRequest(blink::WebWakeLockScreen, true);
212 ASSERT_FALSE(promise1.isEmpty());
213 ASSERT_FALSE(promise2.isEmpty());
214 ASSERT_TRUE(promise1.v8Value()->IsPromise());
215 ASSERT_TRUE(promise2.v8Value()->IsPromise());
216
217 ASSERT_TRUE(wakeLockController->isHeld(blink::WebWakeLockScreen));
218
219 promise1 = wakeLock->release(scriptState, "screen");
220 promise2 = wakeLock->release(scriptState, "screen");
221 wakeLockClient.resolveUnlockRequest(blink::WebWakeLockScreen, true);
222 ASSERT_FALSE(promise1.isEmpty());
223 ASSERT_FALSE(promise2.isEmpty());
224 ASSERT_TRUE(promise1.v8Value()->IsPromise());
225 ASSERT_TRUE(promise2.v8Value()->IsPromise());
226
227 ASSERT_FALSE(wakeLockController->isHeld(blink::WebWakeLockScreen));
228 }
229
230 {
231 blink::ScriptPromise promise1 = wakeLock->request(scriptState, "screen") ;
232 blink::ScriptPromise promise2 = wakeLock->request(scriptState, "screen") ;
233 wakeLockClient.resolveLockRequest(blink::WebWakeLockScreen, true);
234 ASSERT_FALSE(promise1.isEmpty());
235 ASSERT_FALSE(promise2.isEmpty());
236 ASSERT_TRUE(promise1.v8Value()->IsPromise());
237 ASSERT_TRUE(promise2.v8Value()->IsPromise());
238
239 ASSERT_TRUE(wakeLockController->isHeld(blink::WebWakeLockScreen));
240
241 promise1 = wakeLock->release(scriptState, "screen");
242 ASSERT_FALSE(promise1.isEmpty());
243 ASSERT_TRUE(promise1.v8Value()->IsPromise());
244
245 wakeLockClient.resolveUnlockRequest(blink::WebWakeLockScreen, true);
246 ASSERT_TRUE(wakeLockController->isHeld(blink::WebWakeLockScreen));
247
248 promise2 = wakeLock->release(scriptState, "screen");
249 ASSERT_FALSE(promise2.isEmpty());
250 ASSERT_TRUE(promise2.v8Value()->IsPromise());
251
252 wakeLockClient.resolveUnlockRequest(blink::WebWakeLockScreen, false);
253 ASSERT_TRUE(wakeLockController->isHeld(blink::WebWakeLockScreen));
254
255 promise2 = wakeLock->release(scriptState, "screen");
256 ASSERT_FALSE(promise2.isEmpty());
257 ASSERT_TRUE(promise2.v8Value()->IsPromise());
258
259 wakeLockClient.resolveUnlockRequest(blink::WebWakeLockScreen, true);
260 ASSERT_FALSE(wakeLockController->isHeld(blink::WebWakeLockScreen));
261 }
262
263 wakeLockController->resetClient();
mlamouri (slow - plz ping) 2014/08/18 12:15:53 I did not review those tests but I was wondering w
redchenko 2014/08/19 16:42:21 Yes, we'll add layout tests later.
264 }
265
266 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698