blob: 153d65580224a869dba2c0ebed75a59b6d77d152 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/headless/headless_mode_browsertest.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/views/widget/desktop_aura/desktop_window_tree_host_win.h"
// A class to expose a protected method for testing purposes.
class DesktopWindowTreeHostWinWrapper : public views::DesktopWindowTreeHostWin {
public:
HWND GetHWND() const { return DesktopWindowTreeHostWin::GetHWND(); }
};
INSTANTIATE_TEST_SUITE_P(HeadlessModeBrowserTestWithStartWindowMode,
HeadlessModeBrowserTestWithStartWindowMode,
testing::Values(kStartWindowNormal,
kStartWindowMaximized,
kStartWindowFullscreen));
IN_PROC_BROWSER_TEST_P(HeadlessModeBrowserTestWithStartWindowMode,
BrowserDesktopWindowHidden) {
// On Windows, the Native Headless Chrome browser window exists and is
// visible, while the underlying platform window is hidden.
EXPECT_TRUE(browser()->window()->IsVisible());
DesktopWindowTreeHostWinWrapper* desktop_window_tree_host =
static_cast<DesktopWindowTreeHostWinWrapper*>(
browser()->window()->GetNativeWindow()->GetHost());
EXPECT_FALSE(::IsWindowVisible(desktop_window_tree_host->GetHWND()));
}
IN_PROC_BROWSER_TEST_F(HeadlessModeBrowserTest,
ToggleFullscreenWindowVisibility) {
DesktopWindowTreeHostWinWrapper* desktop_window_tree_host =
static_cast<DesktopWindowTreeHostWinWrapper*>(
browser()->window()->GetNativeWindow()->GetHost());
HWND desktop_window_hwnd = desktop_window_tree_host->GetHWND();
// Verify initial state.
ASSERT_FALSE(browser()->window()->IsFullscreen());
EXPECT_TRUE(browser()->window()->IsVisible());
EXPECT_FALSE(::IsWindowVisible(desktop_window_hwnd));
// Verify fullscreen state.
ToggleFullscreenModeSync(browser());
ASSERT_TRUE(browser()->window()->IsFullscreen());
EXPECT_TRUE(browser()->window()->IsVisible());
EXPECT_FALSE(::IsWindowVisible(desktop_window_hwnd));
// Verify back to normal state.
ToggleFullscreenModeSync(browser());
ASSERT_FALSE(browser()->window()->IsFullscreen());
EXPECT_TRUE(browser()->window()->IsVisible());
EXPECT_FALSE(::IsWindowVisible(desktop_window_hwnd));
}
IN_PROC_BROWSER_TEST_F(HeadlessModeBrowserTest,
MinimizedRestoredWindowVisibility) {
DesktopWindowTreeHostWinWrapper* desktop_window_tree_host =
static_cast<DesktopWindowTreeHostWinWrapper*>(
browser()->window()->GetNativeWindow()->GetHost());
HWND desktop_window_hwnd = desktop_window_tree_host->GetHWND();
// Verify initial state.
ASSERT_FALSE(browser()->window()->IsMinimized());
EXPECT_TRUE(browser()->window()->IsVisible());
EXPECT_FALSE(::IsWindowVisible(desktop_window_hwnd));
// Verify minimized state.
browser()->window()->Minimize();
ASSERT_TRUE(browser()->window()->IsMinimized());
EXPECT_TRUE(browser()->window()->IsVisible());
EXPECT_FALSE(::IsWindowVisible(desktop_window_hwnd));
// Verify restored state.
browser()->window()->Restore();
ASSERT_FALSE(browser()->window()->IsMinimized());
EXPECT_TRUE(browser()->window()->IsVisible());
EXPECT_FALSE(::IsWindowVisible(desktop_window_hwnd));
}
IN_PROC_BROWSER_TEST_F(HeadlessModeBrowserTest,
MaximizedRestoredWindowVisibility) {
DesktopWindowTreeHostWinWrapper* desktop_window_tree_host =
static_cast<DesktopWindowTreeHostWinWrapper*>(
browser()->window()->GetNativeWindow()->GetHost());
HWND desktop_window_hwnd = desktop_window_tree_host->GetHWND();
// Verify initial state.
ASSERT_FALSE(browser()->window()->IsMaximized());
EXPECT_TRUE(browser()->window()->IsVisible());
EXPECT_FALSE(::IsWindowVisible(desktop_window_hwnd));
// Verify maximized state.
browser()->window()->Maximize();
ASSERT_TRUE(browser()->window()->IsMaximized());
EXPECT_TRUE(browser()->window()->IsVisible());
EXPECT_FALSE(::IsWindowVisible(desktop_window_hwnd));
// Verify restored state.
browser()->window()->Restore();
ASSERT_FALSE(browser()->window()->IsMaximized());
EXPECT_TRUE(browser()->window()->IsVisible());
EXPECT_FALSE(::IsWindowVisible(desktop_window_hwnd));
}