summaryrefslogtreecommitdiffstats
path: root/extensions/browser/app_window/app_window_interactive_uitest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/browser/app_window/app_window_interactive_uitest.cc')
-rw-r--r--extensions/browser/app_window/app_window_interactive_uitest.cc187
1 files changed, 187 insertions, 0 deletions
diff --git a/extensions/browser/app_window/app_window_interactive_uitest.cc b/extensions/browser/app_window/app_window_interactive_uitest.cc
new file mode 100644
index 0000000..8de07ab
--- /dev/null
+++ b/extensions/browser/app_window/app_window_interactive_uitest.cc
@@ -0,0 +1,187 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/apps/app_browsertest_util.h"
+#include "extensions/browser/app_window/native_app_window.h"
+
+namespace extensions {
+
+namespace {
+
+class AppWindowTest : public PlatformAppBrowserTest {
+ protected:
+ void CheckAlwaysOnTopToFullscreen(AppWindow* window) {
+ ASSERT_TRUE(window->GetBaseWindow()->IsAlwaysOnTop());
+
+ // The always-on-top property should be temporarily disabled when the window
+ // enters fullscreen.
+ window->Fullscreen();
+ EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop());
+
+ // 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_TRUE(window->GetBaseWindow()->IsAlwaysOnTop());
+ }
+
+ void CheckNormalToFullscreen(AppWindow* window) {
+ // If the always-on-top property is false, it should remain this way when
+ // entering and exiting fullscreen mode.
+ ASSERT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop());
+ window->Fullscreen();
+ EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop());
+ window->Restore();
+ EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop());
+ }
+
+ 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_FALSE(window->GetBaseWindow()->IsAlwaysOnTop());
+
+ // 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_TRUE(window->GetBaseWindow()->IsAlwaysOnTop());
+ }
+};
+
+} // namespace
+
+// Tests are flaky on Mac as transitioning to fullscreen is not instantaneous
+// and throws errors when entering/exiting fullscreen too quickly.
+#if defined(OS_MACOSX)
+#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 defined(OS_MACOSX)
+#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 defined(OS_MACOSX)
+#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 defined(OS_MACOSX)
+#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 defined(OS_MACOSX)
+#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_FALSE(window->GetBaseWindow()->IsAlwaysOnTop());
+
+ // From the API's point of view, the always-on-top property is enabled.
+ EXPECT_TRUE(window->IsAlwaysOnTop());
+
+ window->Restore();
+ EXPECT_TRUE(window->GetBaseWindow()->IsAlwaysOnTop());
+
+ CloseAppWindow(window);
+}
+
+#if defined(OS_MACOSX)
+#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_FALSE(window->GetBaseWindow()->IsAlwaysOnTop());
+ window->SetAlwaysOnTop(false);
+ EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop());
+
+ // Ensure that always-on-top remains disabled.
+ window->Restore();
+ EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop());
+
+ CloseAppWindow(window);
+}
+
+} // namespace extensions