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