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

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

Issue 2896763002: Implement window management devtools commands for headless. (Closed)
Patch Set: nit and rebase 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 int window_id = HeadlessWebContentsImpl::From(web_contents_)->window_id();
106 std::unique_ptr<browser::SetWindowBoundsParams> params =
107 browser::SetWindowBoundsParams::Builder()
108 .SetWindowId(window_id)
109 .SetBounds(std::move(bounds))
110 .Build();
111 browser_devtools_client_->GetBrowser()->GetExperimental()->SetWindowBounds(
112 std::move(params), callback);
113 }
114
115 void SetWindowState(
116 const browser::WindowState state,
117 base::Callback<void(std::unique_ptr<browser::SetWindowBoundsResult>)>
118 callback) {
119 std::unique_ptr<headless::browser::Bounds> bounds =
120 headless::browser::Bounds::Builder().SetWindowState(state).Build();
121 int window_id = HeadlessWebContentsImpl::From(web_contents_)->window_id();
122 std::unique_ptr<browser::SetWindowBoundsParams> params =
123 browser::SetWindowBoundsParams::Builder()
124 .SetWindowId(window_id)
125 .SetBounds(std::move(bounds))
126 .Build();
127 browser_devtools_client_->GetBrowser()->GetExperimental()->SetWindowBounds(
128 std::move(params), callback);
129 }
130
131 void GetWindowBounds(
132 base::Callback<void(std::unique_ptr<browser::GetWindowBoundsResult>)>
133 callback) {
134 int window_id = HeadlessWebContentsImpl::From(web_contents_)->window_id();
135 std::unique_ptr<browser::GetWindowBoundsParams> params =
136 browser::GetWindowBoundsParams::Builder()
137 .SetWindowId(window_id)
138 .Build();
139
140 browser_devtools_client_->GetBrowser()->GetExperimental()->GetWindowBounds(
141 std::move(params), callback);
142 }
143
144 void CheckWindowBounds(
145 const gfx::Rect& bounds,
146 const browser::WindowState state,
147 std::unique_ptr<browser::GetWindowBoundsResult> result) {
148 const headless::browser::Bounds* actual_bounds = result->GetBounds();
149 EXPECT_EQ(bounds.x(), actual_bounds->GetLeft());
150 EXPECT_EQ(bounds.y(), actual_bounds->GetTop());
151 EXPECT_EQ(bounds.width(), actual_bounds->GetWidth());
152 EXPECT_EQ(bounds.height(), actual_bounds->GetHeight());
153 EXPECT_EQ(state, actual_bounds->GetWindowState());
154 }
155 };
156
157 class HeadlessDevToolsClientChangeWindowBoundsTest
158 : public HeadlessDevToolsClientWindowManagementTest {
159 void RunDevTooledTest() override {
160 SetWindowBounds(
161 gfx::Rect(100, 200, 300, 400),
162 base::Bind(
163 &HeadlessDevToolsClientChangeWindowBoundsTest::OnSetWindowBounds,
164 base::Unretained(this)));
165 }
166
167 void OnSetWindowBounds(
168 std::unique_ptr<browser::SetWindowBoundsResult> result) {
169 GetWindowBounds(base::Bind(
170 &HeadlessDevToolsClientChangeWindowBoundsTest::OnGetWindowBounds,
171 base::Unretained(this)));
172 }
173
174 void OnGetWindowBounds(
175 std::unique_ptr<browser::GetWindowBoundsResult> result) {
176 CheckWindowBounds(gfx::Rect(100, 200, 300, 400),
177 browser::WindowState::NORMAL, std::move(result));
178 FinishAsynchronousTest();
179 }
180 };
181
182 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientChangeWindowBoundsTest);
183
184 class HeadlessDevToolsClientChangeWindowStateTest
185 : public HeadlessDevToolsClientWindowManagementTest {
186 public:
187 explicit HeadlessDevToolsClientChangeWindowStateTest(
188 browser::WindowState state)
189 : state_(state){};
190
191 void RunDevTooledTest() override {
192 SetWindowState(
193 state_,
194 base::Bind(
195 &HeadlessDevToolsClientChangeWindowStateTest::OnSetWindowState,
196 base::Unretained(this)));
197 }
198
199 void OnSetWindowState(
200 std::unique_ptr<browser::SetWindowBoundsResult> result) {
201 GetWindowBounds(base::Bind(
202 &HeadlessDevToolsClientChangeWindowStateTest::OnGetWindowState,
203 base::Unretained(this)));
204 }
205
206 void OnGetWindowState(
207 std::unique_ptr<browser::GetWindowBoundsResult> result) {
208 HeadlessBrowser::Options::Builder builder;
209 const HeadlessBrowser::Options kDefaultOptions = builder.Build();
210 CheckWindowBounds(gfx::Rect(kDefaultOptions.window_size), state_,
211 std::move(result));
212 FinishAsynchronousTest();
213 }
214
215 protected:
216 browser::WindowState state_;
217 };
218
219 class HeadlessDevToolsClientMinimizeWindowTest
220 : public HeadlessDevToolsClientChangeWindowStateTest {
221 public:
222 HeadlessDevToolsClientMinimizeWindowTest()
223 : HeadlessDevToolsClientChangeWindowStateTest(
224 browser::WindowState::MINIMIZED){};
225 };
226
227 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientMinimizeWindowTest);
228
229 class HeadlessDevToolsClientMaximizeWindowTest
230 : public HeadlessDevToolsClientChangeWindowStateTest {
231 public:
232 HeadlessDevToolsClientMaximizeWindowTest()
233 : HeadlessDevToolsClientChangeWindowStateTest(
234 browser::WindowState::MAXIMIZED){};
235 };
236
237 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientMaximizeWindowTest);
238
239 class HeadlessDevToolsClientFullscreenWindowTest
240 : public HeadlessDevToolsClientChangeWindowStateTest {
241 public:
242 HeadlessDevToolsClientFullscreenWindowTest()
243 : HeadlessDevToolsClientChangeWindowStateTest(
244 browser::WindowState::FULLSCREEN){};
245 };
246
247 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientFullscreenWindowTest);
248
89 class HeadlessDevToolsClientEvalTest 249 class HeadlessDevToolsClientEvalTest
90 : public HeadlessAsyncDevTooledBrowserTest { 250 : public HeadlessAsyncDevTooledBrowserTest {
91 public: 251 public:
92 void RunDevTooledTest() override { 252 void RunDevTooledTest() override {
93 std::unique_ptr<runtime::EvaluateParams> params = 253 std::unique_ptr<runtime::EvaluateParams> params =
94 runtime::EvaluateParams::Builder().SetExpression("1 + 2").Build(); 254 runtime::EvaluateParams::Builder().SetExpression("1 + 2").Build();
95 devtools_client_->GetRuntime()->Evaluate( 255 devtools_client_->GetRuntime()->Evaluate(
96 std::move(params), 256 std::move(params),
97 base::Bind(&HeadlessDevToolsClientEvalTest::OnFirstResult, 257 base::Bind(&HeadlessDevToolsClientEvalTest::OnFirstResult,
98 base::Unretained(this))); 258 base::Unretained(this)));
(...skipping 937 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 } 1196 }
1037 1197
1038 private: 1198 private:
1039 bool dev_tools_client_attached_ = false; 1199 bool dev_tools_client_attached_ = false;
1040 bool dev_tools_client_detached_ = false; 1200 bool dev_tools_client_detached_ = false;
1041 }; 1201 };
1042 1202
1043 HEADLESS_ASYNC_DEVTOOLED_TEST_F(DevToolsAttachAndDetachNotifications); 1203 HEADLESS_ASYNC_DEVTOOLED_TEST_F(DevToolsAttachAndDetachNotifications);
1044 1204
1045 } // namespace headless 1205 } // namespace headless
OLDNEW
« no previous file with comments | « headless/lib/browser/headless_web_contents_impl.cc ('k') | headless/public/headless_devtools_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698