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

Side by Side Diff: headless/lib/headless_devtools_client_browsertest.cc

Issue 2896763002: Implement window management devtools commands for headless. (Closed)
Patch Set: nit Created 3 years, 7 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 <memory> 5 #include <memory>
6 6
7 #include "base/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "content/public/browser/render_widget_host_view.h" 10 #include "content/public/browser/render_widget_host_view.h"
11 #include "content/public/browser/web_contents.h" 11 #include "content/public/browser/web_contents.h"
12 #include "content/public/common/url_constants.h" 12 #include "content/public/common/url_constants.h"
13 #include "content/public/test/browser_test.h" 13 #include "content/public/test/browser_test.h"
14 #include "headless/lib/browser/headless_web_contents_impl.h" 14 #include "headless/lib/browser/headless_web_contents_impl.h"
15 #include "headless/public/devtools/domains/browser.h"
15 #include "headless/public/devtools/domains/dom.h" 16 #include "headless/public/devtools/domains/dom.h"
16 #include "headless/public/devtools/domains/emulation.h" 17 #include "headless/public/devtools/domains/emulation.h"
17 #include "headless/public/devtools/domains/inspector.h" 18 #include "headless/public/devtools/domains/inspector.h"
18 #include "headless/public/devtools/domains/network.h" 19 #include "headless/public/devtools/domains/network.h"
19 #include "headless/public/devtools/domains/page.h" 20 #include "headless/public/devtools/domains/page.h"
20 #include "headless/public/devtools/domains/runtime.h" 21 #include "headless/public/devtools/domains/runtime.h"
21 #include "headless/public/devtools/domains/target.h" 22 #include "headless/public/devtools/domains/target.h"
22 #include "headless/public/headless_browser.h" 23 #include "headless/public/headless_browser.h"
23 #include "headless/public/headless_devtools_client.h" 24 #include "headless/public/headless_devtools_client.h"
24 #include "headless/public/headless_devtools_target.h" 25 #include "headless/public/headless_devtools_target.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 devtools_client_->GetPage()->GetExperimental()->RemoveObserver(this); 80 devtools_client_->GetPage()->GetExperimental()->RemoveObserver(this);
80 FinishAsynchronousTest(); 81 FinishAsynchronousTest();
81 } 82 }
82 83
83 // Check that events with no parameters still get a parameters object. 84 // Check that events with no parameters still get a parameters object.
84 void OnFrameResized(const page::FrameResizedParams& params) override {} 85 void OnFrameResized(const page::FrameResizedParams& params) override {}
85 }; 86 };
86 87
87 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientNavigationTest); 88 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientNavigationTest);
88 89
90 class HeadlessDevToolsClientWindowManagementTest
91 : public HeadlessAsyncDevTooledBrowserTest {
92 public:
93 void SetWindowBounds(
94 const gfx::Rect& rect,
95 base::Callback<void(std::unique_ptr<browser::SetWindowBoundsResult>)>
96 callback) {
97 std::unique_ptr<headless::browser::Bounds> bounds =
98 headless::browser::Bounds::Builder()
99 .SetLeft(rect.x())
100 .SetTop(rect.y())
101 .SetWidth(rect.width())
102 .SetHeight(rect.height())
103 .SetWindowState(browser::WindowState::NORMAL)
104 .Build();
105 std::unique_ptr<browser::SetWindowBoundsParams> params =
106 browser::SetWindowBoundsParams::Builder()
107 .SetWindowId(0)
108 .SetBounds(std::move(bounds))
109 .Build();
110 browser_devtools_client_->GetBrowser()->GetExperimental()->SetWindowBounds(
111 std::move(params), callback);
112 }
113
114 void SetWindowState(
115 const browser::WindowState state,
116 base::Callback<void(std::unique_ptr<browser::SetWindowBoundsResult>)>
117 callback) {
118 std::unique_ptr<headless::browser::Bounds> bounds =
119 headless::browser::Bounds::Builder().SetWindowState(state).Build();
120 std::unique_ptr<browser::SetWindowBoundsParams> params =
121 browser::SetWindowBoundsParams::Builder()
122 .SetWindowId(0)
123 .SetBounds(std::move(bounds))
124 .Build();
125 browser_devtools_client_->GetBrowser()->GetExperimental()->SetWindowBounds(
126 std::move(params), callback);
127 }
128
129 void GetWindowBounds(
130 base::Callback<void(std::unique_ptr<browser::GetWindowBoundsResult>)>
131 callback) {
132 std::unique_ptr<browser::GetWindowBoundsParams> params =
133 browser::GetWindowBoundsParams::Builder().SetWindowId(0).Build();
134 browser_devtools_client_->GetBrowser()->GetExperimental()->GetWindowBounds(
135 std::move(params), callback);
136 }
137
138 void CheckWindowBounds(
139 const gfx::Rect& bounds,
140 const browser::WindowState state,
141 std::unique_ptr<browser::GetWindowBoundsResult> result) {
142 const headless::browser::Bounds* actual_bounds = result->GetBounds();
143 EXPECT_EQ(bounds.x(), actual_bounds->GetLeft());
144 EXPECT_EQ(bounds.y(), actual_bounds->GetTop());
145 EXPECT_EQ(bounds.width(), actual_bounds->GetWidth());
146 EXPECT_EQ(bounds.height(), actual_bounds->GetHeight());
147 EXPECT_EQ(state, actual_bounds->GetWindowState());
148
149 const gfx::Size web_contents_size =
150 HeadlessWebContentsImpl::From(web_contents_)
151 ->web_contents()
152 ->GetRenderWidgetHostView()
153 ->GetViewBounds()
154 .size();
155 EXPECT_EQ(bounds.size(), web_contents_size);
156 }
157 };
158
159 class HeadlessDevToolsClientWindowStateChangeTest
160 : public HeadlessDevToolsClientWindowManagementTest {
161 public:
162 void OnSetWindowBoundsBackToNormal(
163 std::unique_ptr<browser::SetWindowBoundsResult> result) {
164 GetWindowBounds(base::Bind(&HeadlessDevToolsClientWindowStateChangeTest::
165 OnGetWindowBoundsBackToNormal,
166 base::Unretained(this)));
167 }
168
169 void OnGetWindowBoundsBackToNormal(
170 std::unique_ptr<browser::GetWindowBoundsResult> result) {
171 HeadlessBrowser::Options::Builder builder;
172 const HeadlessBrowser::Options kDefaultOptions = builder.Build();
173 CheckWindowBounds(gfx::Rect(kDefaultOptions.window_size),
174 browser::WindowState::NORMAL, std::move(result));
175 FinishAsynchronousTest();
176 }
177 };
178
179 class HeadlessDevToolsClientChangeWindowBoundsTest
180 : public HeadlessDevToolsClientWindowManagementTest {
181 void RunDevTooledTest() override {
182 SetWindowBounds(
183 gfx::Rect(100, 200, 300, 400),
184 base::Bind(
185 &HeadlessDevToolsClientChangeWindowBoundsTest::OnSetWindowBounds,
186 base::Unretained(this)));
187 }
188
189 void OnSetWindowBounds(
190 std::unique_ptr<browser::SetWindowBoundsResult> result) {
191 GetWindowBounds(base::Bind(
192 &HeadlessDevToolsClientChangeWindowBoundsTest::OnGetWindowBounds,
193 base::Unretained(this)));
194 }
195
196 void OnGetWindowBounds(
197 std::unique_ptr<browser::GetWindowBoundsResult> result) {
198 CheckWindowBounds(gfx::Rect(100, 200, 300, 400),
199 browser::WindowState::NORMAL, std::move(result));
200 FinishAsynchronousTest();
201 }
202 };
203
204 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientChangeWindowBoundsTest);
205
206 class HeadlessDevToolsClientMinimizeWindowTest
207 : public HeadlessDevToolsClientWindowStateChangeTest {
208 void RunDevTooledTest() override {
209 SetWindowState(browser::WindowState::MINIMIZED,
210 base::Bind(&HeadlessDevToolsClientMinimizeWindowTest::
211 OnSetWindowBoundsMinimized,
212 base::Unretained(this)));
213 }
214
215 void OnSetWindowBoundsMinimized(
216 std::unique_ptr<browser::SetWindowBoundsResult> result) {
217 GetWindowBounds(base::Bind(
218 &HeadlessDevToolsClientMinimizeWindowTest::OnGetWindowBoundsMinimized,
219 base::Unretained(this)));
220 }
221
222 void OnGetWindowBoundsMinimized(
223 std::unique_ptr<browser::GetWindowBoundsResult> result) {
224 HeadlessBrowser::Options::Builder builder;
225 const HeadlessBrowser::Options kDefaultOptions = builder.Build();
226 CheckWindowBounds(gfx::Rect(kDefaultOptions.window_size),
227 browser::WindowState::MINIMIZED, std::move(result));
228
229 SetWindowState(browser::WindowState::NORMAL,
230 base::Bind(&HeadlessDevToolsClientMinimizeWindowTest::
231 OnSetWindowBoundsBackToNormal,
232 base::Unretained(this)));
233 }
234 };
235
236 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientMinimizeWindowTest);
237
238 class HeadlessDevToolsClientMaximizeWindowTest
239 : public HeadlessDevToolsClientWindowStateChangeTest {
240 void RunDevTooledTest() override {
241 SetWindowState(browser::WindowState::MAXIMIZED,
242 base::Bind(&HeadlessDevToolsClientMaximizeWindowTest::
243 OnSetWindowBoundsMaximized,
244 base::Unretained(this)));
245 }
246
247 void OnSetWindowBoundsMaximized(
248 std::unique_ptr<browser::SetWindowBoundsResult> result) {
249 GetWindowBounds(base::Bind(
250 &HeadlessDevToolsClientMaximizeWindowTest::OnGetWindowBoundsMaximized,
251 base::Unretained(this)));
252 }
253
254 void OnGetWindowBoundsMaximized(
255 std::unique_ptr<browser::GetWindowBoundsResult> result) {
256 HeadlessBrowser::Options::Builder builder;
257 const HeadlessBrowser::Options kDefaultOptions = builder.Build();
258 CheckWindowBounds(gfx::Rect(kDefaultOptions.screen_size),
259 browser::WindowState::MAXIMIZED, std::move(result));
260
261 SetWindowState(browser::WindowState::NORMAL,
262 base::Bind(&HeadlessDevToolsClientMaximizeWindowTest::
263 OnSetWindowBoundsBackToNormal,
264 base::Unretained(this)));
265 }
266 };
267
268 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientMaximizeWindowTest);
269
270 class HeadlessDevToolsClientFullscreenWindowTest
271 : public HeadlessDevToolsClientWindowStateChangeTest {
272 void RunDevTooledTest() override {
273 SetWindowState(browser::WindowState::FULLSCREEN,
274 base::Bind(&HeadlessDevToolsClientFullscreenWindowTest::
275 OnSetWindowBoundsFullscreen,
276 base::Unretained(this)));
277 }
278
279 void OnSetWindowBoundsFullscreen(
280 std::unique_ptr<browser::SetWindowBoundsResult> result) {
281 GetWindowBounds(base::Bind(&HeadlessDevToolsClientFullscreenWindowTest::
282 OnGetWindowBoundsFullscreen,
283 base::Unretained(this)));
284 }
285
286 void OnGetWindowBoundsFullscreen(
287 std::unique_ptr<browser::GetWindowBoundsResult> result) {
288 HeadlessBrowser::Options::Builder builder;
289 const HeadlessBrowser::Options kDefaultOptions = builder.Build();
290 CheckWindowBounds(gfx::Rect(kDefaultOptions.screen_size),
291 browser::WindowState::FULLSCREEN, std::move(result));
292
293 SetWindowState(browser::WindowState::NORMAL,
294 base::Bind(&HeadlessDevToolsClientFullscreenWindowTest::
295 OnSetWindowBoundsBackToNormal,
296 base::Unretained(this)));
297 }
298 };
299
300 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientFullscreenWindowTest);
301
89 class HeadlessDevToolsClientEvalTest 302 class HeadlessDevToolsClientEvalTest
90 : public HeadlessAsyncDevTooledBrowserTest { 303 : public HeadlessAsyncDevTooledBrowserTest {
91 public: 304 public:
92 void RunDevTooledTest() override { 305 void RunDevTooledTest() override {
93 std::unique_ptr<runtime::EvaluateParams> params = 306 std::unique_ptr<runtime::EvaluateParams> params =
94 runtime::EvaluateParams::Builder().SetExpression("1 + 2").Build(); 307 runtime::EvaluateParams::Builder().SetExpression("1 + 2").Build();
95 devtools_client_->GetRuntime()->Evaluate( 308 devtools_client_->GetRuntime()->Evaluate(
96 std::move(params), 309 std::move(params),
97 base::Bind(&HeadlessDevToolsClientEvalTest::OnFirstResult, 310 base::Bind(&HeadlessDevToolsClientEvalTest::OnFirstResult,
98 base::Unretained(this))); 311 base::Unretained(this)));
(...skipping 937 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 } 1249 }
1037 1250
1038 private: 1251 private:
1039 bool dev_tools_client_attached_ = false; 1252 bool dev_tools_client_attached_ = false;
1040 bool dev_tools_client_detached_ = false; 1253 bool dev_tools_client_detached_ = false;
1041 }; 1254 };
1042 1255
1043 HEADLESS_ASYNC_DEVTOOLED_TEST_F(DevToolsAttachAndDetachNotifications); 1256 HEADLESS_ASYNC_DEVTOOLED_TEST_F(DevToolsAttachAndDetachNotifications);
1044 1257
1045 } // namespace headless 1258 } // namespace headless
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698