
The methodology used to generate this CL is documented in https://crbug.com/1098010#c34, except for the sweep for "All Rights Reserved" as that generates a lot of exceptions and will be a follow- up. No-Try: true No-Presubmit: true Bug: 1098010 Change-Id: I5caf6b21db9c12bea71258223f59c1ac4313a738 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3888258 Auto-Submit: Avi Drissman <avi@chromium.org> Commit-Queue: Mark Mentovai <mark@chromium.org> Reviewed-by: Mark Mentovai <mark@chromium.org> Owners-Override: Avi Drissman <avi@chromium.org> Cr-Commit-Position: refs/heads/main@{#1045289}
216 lines
7.4 KiB
C++
216 lines
7.4 KiB
C++
// Copyright 2014 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "build/build_config.h"
|
|
#include "chrome/browser/apps/platform_apps/app_browsertest_util.h"
|
|
#include "content/public/test/browser_test.h"
|
|
#include "extensions/browser/app_window/native_app_window.h"
|
|
|
|
namespace extensions {
|
|
|
|
namespace {
|
|
|
|
class AppWindowTest : public PlatformAppBrowserTest {
|
|
protected:
|
|
void CheckAlwaysOnTopToFullscreen(AppWindow* window) {
|
|
ASSERT_EQ(ui::ZOrderLevel::kFloatingWindow,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
|
|
// The always-on-top property should be temporarily disabled when the window
|
|
// enters fullscreen.
|
|
window->Fullscreen();
|
|
EXPECT_EQ(ui::ZOrderLevel::kNormal,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
|
|
// From the API's point of view, the always-on-top property is enabled.
|
|
EXPECT_TRUE(window->IsAlwaysOnTop());
|
|
|
|
// The always-on-top property is restored when the window exits fullscreen.
|
|
window->Restore();
|
|
EXPECT_EQ(ui::ZOrderLevel::kFloatingWindow,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
}
|
|
|
|
void CheckNormalToFullscreen(AppWindow* window) {
|
|
// If the always-on-top property is false, it should remain this way when
|
|
// entering and exiting fullscreen mode.
|
|
ASSERT_EQ(ui::ZOrderLevel::kNormal,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
window->Fullscreen();
|
|
EXPECT_EQ(ui::ZOrderLevel::kNormal,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
window->Restore();
|
|
EXPECT_EQ(ui::ZOrderLevel::kNormal,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
}
|
|
|
|
void CheckFullscreenToAlwaysOnTop(AppWindow* window) {
|
|
ASSERT_TRUE(window->GetBaseWindow()->IsFullscreenOrPending());
|
|
|
|
// Now enable always-on-top at runtime and ensure the property does not get
|
|
// applied immediately because the window is in fullscreen mode.
|
|
window->SetAlwaysOnTop(true);
|
|
EXPECT_EQ(ui::ZOrderLevel::kNormal,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
|
|
// From the API's point of view, the always-on-top property is enabled.
|
|
EXPECT_TRUE(window->IsAlwaysOnTop());
|
|
|
|
// Ensure the always-on-top property is applied when exiting fullscreen.
|
|
window->Restore();
|
|
EXPECT_EQ(ui::ZOrderLevel::kFloatingWindow,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
}
|
|
};
|
|
|
|
} // namespace
|
|
|
|
// Tests are flaky on Mac as transitioning to fullscreen is not instantaneous
|
|
// and throws errors when entering/exiting fullscreen too quickly.
|
|
#if BUILDFLAG(IS_MAC)
|
|
#define MAYBE_InitAlwaysOnTopToFullscreen DISABLED_InitAlwaysOnTopToFullscreen
|
|
#else
|
|
#define MAYBE_InitAlwaysOnTopToFullscreen InitAlwaysOnTopToFullscreen
|
|
#endif
|
|
|
|
// Tests a window created with always-on-top enabled and ensures that the
|
|
// property is temporarily switched off when entering fullscreen mode.
|
|
IN_PROC_BROWSER_TEST_F(AppWindowTest, MAYBE_InitAlwaysOnTopToFullscreen) {
|
|
AppWindow* window = CreateTestAppWindow("{ \"alwaysOnTop\": true }");
|
|
ASSERT_TRUE(window);
|
|
CheckAlwaysOnTopToFullscreen(window);
|
|
|
|
window->SetAlwaysOnTop(false);
|
|
CheckNormalToFullscreen(window);
|
|
|
|
CloseAppWindow(window);
|
|
}
|
|
|
|
#if BUILDFLAG(IS_MAC)
|
|
#define MAYBE_RuntimeAlwaysOnTopToFullscreen \
|
|
DISABLED_RuntimeAlwaysOnTopToFullscreen
|
|
#else
|
|
#define MAYBE_RuntimeAlwaysOnTopToFullscreen RuntimeAlwaysOnTopToFullscreen
|
|
#endif
|
|
|
|
// Tests a window with always-on-top enabled at runtime and ensures that the
|
|
// property is temporarily switched off when entering fullscreen mode.
|
|
IN_PROC_BROWSER_TEST_F(AppWindowTest, MAYBE_RuntimeAlwaysOnTopToFullscreen) {
|
|
AppWindow* window = CreateTestAppWindow("{}");
|
|
ASSERT_TRUE(window);
|
|
CheckNormalToFullscreen(window);
|
|
|
|
window->SetAlwaysOnTop(true);
|
|
CheckAlwaysOnTopToFullscreen(window);
|
|
|
|
CloseAppWindow(window);
|
|
}
|
|
|
|
#if BUILDFLAG(IS_MAC)
|
|
#define MAYBE_InitFullscreenToAlwaysOnTop DISABLED_InitFullscreenToAlwaysOnTop
|
|
#else
|
|
#define MAYBE_InitFullscreenToAlwaysOnTop InitFullscreenToAlwaysOnTop
|
|
#endif
|
|
|
|
// Tests a window created initially in fullscreen mode and ensures that the
|
|
// always-on-top property does not get applied until it exits fullscreen.
|
|
IN_PROC_BROWSER_TEST_F(AppWindowTest, MAYBE_InitFullscreenToAlwaysOnTop) {
|
|
AppWindow* window = CreateTestAppWindow("{ \"state\": \"fullscreen\" }");
|
|
ASSERT_TRUE(window);
|
|
CheckFullscreenToAlwaysOnTop(window);
|
|
|
|
CloseAppWindow(window);
|
|
}
|
|
|
|
#if BUILDFLAG(IS_MAC)
|
|
#define MAYBE_RuntimeFullscreenToAlwaysOnTop \
|
|
DISABLED_RuntimeFullscreenToAlwaysOnTop
|
|
#else
|
|
#define MAYBE_RuntimeFullscreenToAlwaysOnTop RuntimeFullscreenToAlwaysOnTop
|
|
#endif
|
|
|
|
// Tests a window that enters fullscreen mode at runtime and ensures that the
|
|
// always-on-top property does not get applied until it exits fullscreen.
|
|
IN_PROC_BROWSER_TEST_F(AppWindowTest, MAYBE_RuntimeFullscreenToAlwaysOnTop) {
|
|
AppWindow* window = CreateTestAppWindow("{}");
|
|
ASSERT_TRUE(window);
|
|
|
|
window->Fullscreen();
|
|
CheckFullscreenToAlwaysOnTop(window);
|
|
|
|
CloseAppWindow(window);
|
|
}
|
|
|
|
#if BUILDFLAG(IS_MAC)
|
|
#define MAYBE_InitFullscreenAndAlwaysOnTop DISABLED_InitFullscreenAndAlwaysOnTop
|
|
#else
|
|
#define MAYBE_InitFullscreenAndAlwaysOnTop InitFullscreenAndAlwaysOnTop
|
|
#endif
|
|
|
|
// Tests a window created with both fullscreen and always-on-top enabled. Ensure
|
|
// that always-on-top is only applied when the window exits fullscreen.
|
|
IN_PROC_BROWSER_TEST_F(AppWindowTest, MAYBE_InitFullscreenAndAlwaysOnTop) {
|
|
AppWindow* window = CreateTestAppWindow(
|
|
"{ \"alwaysOnTop\": true, \"state\": \"fullscreen\" }");
|
|
ASSERT_TRUE(window);
|
|
|
|
EXPECT_TRUE(window->GetBaseWindow()->IsFullscreenOrPending());
|
|
EXPECT_EQ(ui::ZOrderLevel::kNormal,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
|
|
// From the API's point of view, the always-on-top property is enabled.
|
|
EXPECT_TRUE(window->IsAlwaysOnTop());
|
|
|
|
window->Restore();
|
|
EXPECT_EQ(ui::ZOrderLevel::kFloatingWindow,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
|
|
CloseAppWindow(window);
|
|
}
|
|
|
|
#if BUILDFLAG(IS_MAC)
|
|
#define MAYBE_DisableAlwaysOnTopInFullscreen \
|
|
DISABLED_DisableAlwaysOnTopInFullscreen
|
|
#else
|
|
#define MAYBE_DisableAlwaysOnTopInFullscreen DisableAlwaysOnTopInFullscreen
|
|
#endif
|
|
|
|
// Tests a window created with always-on-top enabled, but then disabled while
|
|
// in fullscreen mode. After exiting fullscreen, always-on-top should remain
|
|
// disabled.
|
|
IN_PROC_BROWSER_TEST_F(AppWindowTest, MAYBE_DisableAlwaysOnTopInFullscreen) {
|
|
AppWindow* window = CreateTestAppWindow("{ \"alwaysOnTop\": true }");
|
|
ASSERT_TRUE(window);
|
|
|
|
// Disable always-on-top while in fullscreen mode.
|
|
window->Fullscreen();
|
|
EXPECT_EQ(ui::ZOrderLevel::kNormal,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
window->SetAlwaysOnTop(false);
|
|
EXPECT_EQ(ui::ZOrderLevel::kNormal,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
|
|
// Ensure that always-on-top remains disabled.
|
|
window->Restore();
|
|
EXPECT_EQ(ui::ZOrderLevel::kNormal,
|
|
window->GetBaseWindow()->GetZOrderLevel());
|
|
|
|
CloseAppWindow(window);
|
|
}
|
|
|
|
// Tests a window created with showInShelf property enabled is indeed marked
|
|
// as shown in shelf in AppWindow.
|
|
IN_PROC_BROWSER_TEST_F(AppWindowTest, InitShowInShelf) {
|
|
AppWindow* window =
|
|
CreateTestAppWindow("{ \"showInShelf\": true , \"id\": \"window\" }");
|
|
ASSERT_TRUE(window);
|
|
|
|
// Ensure that the window created is marked as shown in shelf.
|
|
EXPECT_TRUE(window->show_in_shelf());
|
|
|
|
CloseAppWindow(window);
|
|
}
|
|
|
|
} // namespace extensions
|