blob: 90aa74fc47c2f8f0cbea40969bf3925180567ac0 [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <utility>
#include "base/functional/bind.h"
#include "base/run_loop.h"
#include "base/task/single_thread_task_runner.h"
#include "base/test/test_timeouts.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "chrome/browser/devtools/chrome_devtools_manager_delegate.h"
#include "chrome/browser/devtools/protocol/browser_handler.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/exclusive_access/exclusive_access_context.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/test/browser_test.h"
#include "ui/display/types/display_constants.h"
#if BUILDFLAG(IS_MAC)
#include "ui/base/test/scoped_fake_nswindow_fullscreen.h"
#endif
class DevToolsManagerDelegateTest : public InProcessBrowserTest {
public:
void SendCommand(const std::string& state) {
auto window_bounds =
protocol::Browser::Bounds::Create().SetWindowState(state).Build();
BrowserHandler handler(nullptr, "");
handler.SetWindowBounds(browser()->session_id().id(),
std::move(window_bounds));
}
void UpdateBounds() {
auto window_bounds = protocol::Browser::Bounds::Create()
.SetWindowState("normal")
.SetLeft(200)
.SetHeight(400)
.Build();
BrowserHandler handler(nullptr, "");
handler.SetWindowBounds(browser()->session_id().id(),
std::move(window_bounds));
}
void CheckIsMaximized(bool maximized) {
ui_test_utils::CheckWaiter(
base::BindRepeating(&BrowserWindow::IsMaximized,
base::Unretained(browser()->window())),
maximized, base::Seconds(1))
.Wait();
EXPECT_EQ(maximized, browser()->window()->IsMaximized());
}
void CheckIsMinimized(bool minimized) {
ui_test_utils::CheckWaiter(
base::BindRepeating(&BrowserWindow::IsMinimized,
base::Unretained(browser()->window())),
minimized, base::Seconds(1))
.Wait();
EXPECT_EQ(minimized, browser()->window()->IsMinimized());
}
void CheckIsFullscreen(bool fullscreen) {
ui_test_utils::CheckWaiter(
base::BindRepeating(&BrowserWindow::IsFullscreen,
base::Unretained(browser()->window())),
fullscreen, base::Seconds(1))
.Wait();
EXPECT_EQ(fullscreen, browser()->window()->IsFullscreen());
}
bool IsWindowBoundsEqual(gfx::Rect expected) {
return browser()->window()->GetBounds() == expected;
}
void CheckWindowBounds(gfx::Rect expected) {
ui_test_utils::CheckWaiter(
base::BindRepeating(&DevToolsManagerDelegateTest::IsWindowBoundsEqual,
base::Unretained(this), expected),
true, base::Seconds(1))
.Wait();
EXPECT_EQ(expected, browser()->window()->GetBounds());
}
};
IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalWindowChangeBounds) {
browser()->window()->SetBounds(gfx::Rect(100, 100, 600, 600));
CheckWindowBounds(gfx::Rect(100, 100, 600, 600));
UpdateBounds();
CheckWindowBounds(gfx::Rect(200, 100, 600, 400));
}
#if BUILDFLAG(IS_MAC)
// MacViews does not yet implement maximized windows: https://crbug.com/836327
#define MAYBE_NormalToMaximizedWindow DISABLED_NormalToMaximizedWindow
#else
#define MAYBE_NormalToMaximizedWindow NormalToMaximizedWindow
#endif
IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest,
MAYBE_NormalToMaximizedWindow) {
CheckIsMaximized(false);
SendCommand("maximized");
CheckIsMaximized(true);
}
IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalToMinimizedWindow) {
CheckIsMinimized(false);
SendCommand("minimized");
CheckIsMinimized(true);
}
IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, NormalToFullscreenWindow) {
#if BUILDFLAG(IS_MAC)
ui::test::ScopedFakeNSWindowFullscreen faker;
#endif
CheckIsFullscreen(false);
SendCommand("fullscreen");
CheckIsFullscreen(true);
}
#if BUILDFLAG(IS_MAC)
// MacViews does not yet implement maximized windows: https://crbug.com/836327
#define MAYBE_MaximizedToMinimizedWindow DISABLED_MaximizedToMinimizedWindow
#else
#define MAYBE_MaximizedToMinimizedWindow MaximizedToMinimizedWindow
#endif
IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest,
MAYBE_MaximizedToMinimizedWindow) {
browser()->window()->Maximize();
CheckIsMaximized(true);
CheckIsMinimized(false);
SendCommand("minimized");
CheckIsMinimized(true);
}
#if BUILDFLAG(IS_MAC)
// MacViews does not yet implement maximized windows: https://crbug.com/836327
#define MAYBE_MaximizedToFullscreenWindow DISABLED_MaximizedToFullscreenWindow
#else
#define MAYBE_MaximizedToFullscreenWindow MaximizedToFullscreenWindow
#endif
IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest,
MAYBE_MaximizedToFullscreenWindow) {
browser()->window()->Maximize();
CheckIsMaximized(true);
CheckIsFullscreen(false);
SendCommand("fullscreen");
CheckIsFullscreen(true);
}
IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, ShowMinimizedWindow) {
browser()->window()->Minimize();
CheckIsMinimized(true);
SendCommand("normal");
CheckIsMinimized(false);
}
#if BUILDFLAG(IS_MAC)
// MacViews does not yet implement maximized windows: https://crbug.com/836327
#define MAYBE_RestoreMaximizedWindow DISABLED_RestoreMaximizedWindow
#else
#define MAYBE_RestoreMaximizedWindow RestoreMaximizedWindow
#endif
IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest,
MAYBE_RestoreMaximizedWindow) {
browser()->window()->Maximize();
CheckIsMaximized(true);
SendCommand("normal");
CheckIsMaximized(false);
}
IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, ExitFullscreenWindow) {
#if BUILDFLAG(IS_MAC)
ui::test::ScopedFakeNSWindowFullscreen faker;
#endif
browser()->window()->GetExclusiveAccessContext()->EnterFullscreen(
GURL(), EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE, display::kInvalidDisplayId);
CheckIsFullscreen(true);
SendCommand("normal");
CheckIsFullscreen(false);
}