Index: headless/lib/headless_devtools_client_browsertest.cc |
diff --git a/headless/lib/headless_devtools_client_browsertest.cc b/headless/lib/headless_devtools_client_browsertest.cc |
index 161d8301af1400ee4f905734a3c53bea9ff7bac0..188ae43e4cbf0c478b8aa532d41cfee15b519493 100644 |
--- a/headless/lib/headless_devtools_client_browsertest.cc |
+++ b/headless/lib/headless_devtools_client_browsertest.cc |
@@ -12,6 +12,7 @@ |
#include "content/public/common/url_constants.h" |
#include "content/public/test/browser_test.h" |
#include "headless/lib/browser/headless_web_contents_impl.h" |
+#include "headless/public/devtools/domains/browser.h" |
#include "headless/public/devtools/domains/dom.h" |
#include "headless/public/devtools/domains/emulation.h" |
#include "headless/public/devtools/domains/inspector.h" |
@@ -86,6 +87,218 @@ class HeadlessDevToolsClientNavigationTest |
HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientNavigationTest); |
+class HeadlessDevToolsClientWindowManagementTest |
+ : public HeadlessAsyncDevTooledBrowserTest { |
+ public: |
+ void SetWindowBounds( |
+ const gfx::Rect& rect, |
+ base::Callback<void(std::unique_ptr<browser::SetWindowBoundsResult>)> |
+ callback) { |
+ std::unique_ptr<headless::browser::Bounds> bounds = |
+ headless::browser::Bounds::Builder() |
+ .SetLeft(rect.x()) |
+ .SetTop(rect.y()) |
+ .SetWidth(rect.width()) |
+ .SetHeight(rect.height()) |
+ .SetWindowState(browser::WindowState::NORMAL) |
+ .Build(); |
+ std::unique_ptr<browser::SetWindowBoundsParams> params = |
+ browser::SetWindowBoundsParams::Builder() |
+ .SetWindowId(0) |
+ .SetBounds(std::move(bounds)) |
+ .Build(); |
+ browser_devtools_client_->GetBrowser()->GetExperimental()->SetWindowBounds( |
+ std::move(params), callback); |
+ } |
+ |
+ void SetWindowState( |
+ const browser::WindowState state, |
+ base::Callback<void(std::unique_ptr<browser::SetWindowBoundsResult>)> |
+ callback) { |
+ std::unique_ptr<headless::browser::Bounds> bounds = |
+ headless::browser::Bounds::Builder().SetWindowState(state).Build(); |
+ std::unique_ptr<browser::SetWindowBoundsParams> params = |
+ browser::SetWindowBoundsParams::Builder() |
+ .SetWindowId(0) |
+ .SetBounds(std::move(bounds)) |
+ .Build(); |
+ browser_devtools_client_->GetBrowser()->GetExperimental()->SetWindowBounds( |
+ std::move(params), callback); |
+ } |
+ |
+ void GetWindowBounds( |
+ base::Callback<void(std::unique_ptr<browser::GetWindowBoundsResult>)> |
+ callback) { |
+ std::unique_ptr<browser::GetWindowBoundsParams> params = |
+ browser::GetWindowBoundsParams::Builder().SetWindowId(0).Build(); |
+ browser_devtools_client_->GetBrowser()->GetExperimental()->GetWindowBounds( |
+ std::move(params), callback); |
+ } |
+ |
+ void CheckWindowBounds( |
+ const gfx::Rect& bounds, |
+ const browser::WindowState state, |
+ std::unique_ptr<browser::GetWindowBoundsResult> result) { |
+ const headless::browser::Bounds* actual_bounds = result->GetBounds(); |
+ EXPECT_EQ(bounds.x(), actual_bounds->GetLeft()); |
+ EXPECT_EQ(bounds.y(), actual_bounds->GetTop()); |
+ EXPECT_EQ(bounds.width(), actual_bounds->GetWidth()); |
+ EXPECT_EQ(bounds.height(), actual_bounds->GetHeight()); |
+ EXPECT_EQ(state, actual_bounds->GetWindowState()); |
+ |
+ const gfx::Size web_contents_size = |
+ HeadlessWebContentsImpl::From(web_contents_) |
+ ->web_contents() |
+ ->GetRenderWidgetHostView() |
+ ->GetViewBounds() |
+ .size(); |
+ EXPECT_EQ(bounds.size(), web_contents_size); |
+ } |
+}; |
+ |
+class HeadlessDevToolsClientWindowStateChangeTest |
+ : public HeadlessDevToolsClientWindowManagementTest { |
+ public: |
+ void OnSetWindowBoundsBackToNormal( |
+ std::unique_ptr<browser::SetWindowBoundsResult> result) { |
+ GetWindowBounds(base::Bind(&HeadlessDevToolsClientWindowStateChangeTest:: |
+ OnGetWindowBoundsBackToNormal, |
+ base::Unretained(this))); |
+ } |
+ |
+ void OnGetWindowBoundsBackToNormal( |
+ std::unique_ptr<browser::GetWindowBoundsResult> result) { |
+ HeadlessBrowser::Options::Builder builder; |
+ const HeadlessBrowser::Options kDefaultOptions = builder.Build(); |
+ CheckWindowBounds(gfx::Rect(kDefaultOptions.window_size), |
+ browser::WindowState::NORMAL, std::move(result)); |
+ FinishAsynchronousTest(); |
+ } |
+}; |
+ |
+class HeadlessDevToolsClientChangeWindowBoundsTest |
+ : public HeadlessDevToolsClientWindowManagementTest { |
+ void RunDevTooledTest() override { |
+ SetWindowBounds( |
+ gfx::Rect(100, 200, 300, 400), |
+ base::Bind( |
+ &HeadlessDevToolsClientChangeWindowBoundsTest::OnSetWindowBounds, |
+ base::Unretained(this))); |
+ } |
+ |
+ void OnSetWindowBounds( |
+ std::unique_ptr<browser::SetWindowBoundsResult> result) { |
+ GetWindowBounds(base::Bind( |
+ &HeadlessDevToolsClientChangeWindowBoundsTest::OnGetWindowBounds, |
+ base::Unretained(this))); |
+ } |
+ |
+ void OnGetWindowBounds( |
+ std::unique_ptr<browser::GetWindowBoundsResult> result) { |
+ CheckWindowBounds(gfx::Rect(100, 200, 300, 400), |
+ browser::WindowState::NORMAL, std::move(result)); |
+ FinishAsynchronousTest(); |
+ } |
+}; |
+ |
+HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientChangeWindowBoundsTest); |
+ |
+class HeadlessDevToolsClientMinimizeWindowTest |
+ : public HeadlessDevToolsClientWindowStateChangeTest { |
+ void RunDevTooledTest() override { |
+ SetWindowState(browser::WindowState::MINIMIZED, |
+ base::Bind(&HeadlessDevToolsClientMinimizeWindowTest:: |
+ OnSetWindowBoundsMinimized, |
+ base::Unretained(this))); |
+ } |
+ |
+ void OnSetWindowBoundsMinimized( |
+ std::unique_ptr<browser::SetWindowBoundsResult> result) { |
+ GetWindowBounds(base::Bind( |
+ &HeadlessDevToolsClientMinimizeWindowTest::OnGetWindowBoundsMinimized, |
+ base::Unretained(this))); |
+ } |
+ |
+ void OnGetWindowBoundsMinimized( |
+ std::unique_ptr<browser::GetWindowBoundsResult> result) { |
+ HeadlessBrowser::Options::Builder builder; |
+ const HeadlessBrowser::Options kDefaultOptions = builder.Build(); |
+ CheckWindowBounds(gfx::Rect(kDefaultOptions.window_size), |
+ browser::WindowState::MINIMIZED, std::move(result)); |
+ |
+ SetWindowState(browser::WindowState::NORMAL, |
+ base::Bind(&HeadlessDevToolsClientMinimizeWindowTest:: |
+ OnSetWindowBoundsBackToNormal, |
+ base::Unretained(this))); |
+ } |
+}; |
+ |
+HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientMinimizeWindowTest); |
+ |
+class HeadlessDevToolsClientMaximizeWindowTest |
+ : public HeadlessDevToolsClientWindowStateChangeTest { |
+ void RunDevTooledTest() override { |
+ SetWindowState(browser::WindowState::MAXIMIZED, |
+ base::Bind(&HeadlessDevToolsClientMaximizeWindowTest:: |
+ OnSetWindowBoundsMaximized, |
+ base::Unretained(this))); |
+ } |
+ |
+ void OnSetWindowBoundsMaximized( |
+ std::unique_ptr<browser::SetWindowBoundsResult> result) { |
+ GetWindowBounds(base::Bind( |
+ &HeadlessDevToolsClientMaximizeWindowTest::OnGetWindowBoundsMaximized, |
+ base::Unretained(this))); |
+ } |
+ |
+ void OnGetWindowBoundsMaximized( |
+ std::unique_ptr<browser::GetWindowBoundsResult> result) { |
+ HeadlessBrowser::Options::Builder builder; |
+ const HeadlessBrowser::Options kDefaultOptions = builder.Build(); |
+ CheckWindowBounds(gfx::Rect(kDefaultOptions.screen_size), |
+ browser::WindowState::MAXIMIZED, std::move(result)); |
+ |
+ SetWindowState(browser::WindowState::NORMAL, |
+ base::Bind(&HeadlessDevToolsClientMaximizeWindowTest:: |
+ OnSetWindowBoundsBackToNormal, |
+ base::Unretained(this))); |
+ } |
+}; |
+ |
+HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientMaximizeWindowTest); |
+ |
+class HeadlessDevToolsClientFullscreenWindowTest |
+ : public HeadlessDevToolsClientWindowStateChangeTest { |
+ void RunDevTooledTest() override { |
+ SetWindowState(browser::WindowState::FULLSCREEN, |
+ base::Bind(&HeadlessDevToolsClientFullscreenWindowTest:: |
+ OnSetWindowBoundsFullscreen, |
+ base::Unretained(this))); |
+ } |
+ |
+ void OnSetWindowBoundsFullscreen( |
+ std::unique_ptr<browser::SetWindowBoundsResult> result) { |
+ GetWindowBounds(base::Bind(&HeadlessDevToolsClientFullscreenWindowTest:: |
+ OnGetWindowBoundsFullscreen, |
+ base::Unretained(this))); |
+ } |
+ |
+ void OnGetWindowBoundsFullscreen( |
+ std::unique_ptr<browser::GetWindowBoundsResult> result) { |
+ HeadlessBrowser::Options::Builder builder; |
+ const HeadlessBrowser::Options kDefaultOptions = builder.Build(); |
+ CheckWindowBounds(gfx::Rect(kDefaultOptions.screen_size), |
+ browser::WindowState::FULLSCREEN, std::move(result)); |
+ |
+ SetWindowState(browser::WindowState::NORMAL, |
+ base::Bind(&HeadlessDevToolsClientFullscreenWindowTest:: |
+ OnSetWindowBoundsBackToNormal, |
+ base::Unretained(this))); |
+ } |
+}; |
+ |
+HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientFullscreenWindowTest); |
+ |
class HeadlessDevToolsClientEvalTest |
: public HeadlessAsyncDevTooledBrowserTest { |
public: |