OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |