| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "apps/ui/native_app_window.h" | |
| 6 #include "chrome/browser/apps/app_browsertest_util.h" | |
| 7 #include "chrome/browser/extensions/extension_test_message_listener.h" | |
| 8 | |
| 9 using extensions::PlatformAppBrowserTest; | |
| 10 using extensions::Extension; | |
| 11 | |
| 12 namespace apps { | |
| 13 | |
| 14 namespace { | |
| 15 | |
| 16 const char kDefaultTestApp[] = "shell_window/generic"; | |
| 17 | |
| 18 class ShellWindowTest : public PlatformAppBrowserTest { | |
| 19 protected: | |
| 20 // Load the test app and create a window. The window must be closed by the | |
| 21 // caller in order to terminate the test. | |
| 22 // |app_path| is the name of the test. | |
| 23 // |window_create_options| are the options that will be passed to | |
| 24 // chrome.app.window.create() in the test app. | |
| 25 ShellWindow* OpenWindow(const char* app_path, | |
| 26 const char* window_create_options) { | |
| 27 ExtensionTestMessageListener launched_listener("launched", true); | |
| 28 ExtensionTestMessageListener loaded_listener("window_loaded", false); | |
| 29 | |
| 30 // Load and launch the test app. | |
| 31 const Extension* extension = LoadAndLaunchPlatformApp(app_path); | |
| 32 EXPECT_TRUE(extension); | |
| 33 EXPECT_TRUE(launched_listener.WaitUntilSatisfied()); | |
| 34 | |
| 35 // Send the options for window creation. | |
| 36 launched_listener.Reply(window_create_options); | |
| 37 | |
| 38 // Wait for the window to be opened and loaded. | |
| 39 EXPECT_TRUE(loaded_listener.WaitUntilSatisfied()); | |
| 40 | |
| 41 EXPECT_EQ(1U, GetShellWindowCount()); | |
| 42 ShellWindow* shell_window = GetFirstShellWindow(); | |
| 43 return shell_window; | |
| 44 } | |
| 45 | |
| 46 void CheckAlwaysOnTopToFullscreen(ShellWindow* window) { | |
| 47 ASSERT_TRUE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 48 | |
| 49 // The always-on-top property should be temporarily disabled when the window | |
| 50 // enters fullscreen. | |
| 51 window->Fullscreen(); | |
| 52 EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 53 | |
| 54 // From the API's point of view, the always-on-top property is enabled. | |
| 55 EXPECT_TRUE(window->IsAlwaysOnTop()); | |
| 56 | |
| 57 // The always-on-top property is restored when the window exits fullscreen. | |
| 58 window->Restore(); | |
| 59 EXPECT_TRUE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 60 } | |
| 61 | |
| 62 void CheckNormalToFullscreen(ShellWindow* window) { | |
| 63 // If the always-on-top property is false, it should remain this way when | |
| 64 // entering and exiting fullscreen mode. | |
| 65 ASSERT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 66 window->Fullscreen(); | |
| 67 EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 68 window->Restore(); | |
| 69 EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 70 } | |
| 71 | |
| 72 void CheckFullscreenToAlwaysOnTop(ShellWindow* window) { | |
| 73 ASSERT_TRUE(window->GetBaseWindow()->IsFullscreenOrPending()); | |
| 74 | |
| 75 // Now enable always-on-top at runtime and ensure the property does not get | |
| 76 // applied immediately because the window is in fullscreen mode. | |
| 77 window->SetAlwaysOnTop(true); | |
| 78 EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 79 | |
| 80 // From the API's point of view, the always-on-top property is enabled. | |
| 81 EXPECT_TRUE(window->IsAlwaysOnTop()); | |
| 82 | |
| 83 // Ensure the always-on-top property is applied when exiting fullscreen. | |
| 84 window->Restore(); | |
| 85 EXPECT_TRUE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 86 } | |
| 87 }; | |
| 88 | |
| 89 } // namespace | |
| 90 | |
| 91 // Tests are flaky on Mac as transitioning to fullscreen is not instantaneous | |
| 92 // and throws errors when entering/exiting fullscreen too quickly. | |
| 93 #if defined(OS_MACOSX) | |
| 94 #define MAYBE_InitAlwaysOnTopToFullscreen DISABLED_InitAlwaysOnTopToFullscreen | |
| 95 #else | |
| 96 #define MAYBE_InitAlwaysOnTopToFullscreen InitAlwaysOnTopToFullscreen | |
| 97 #endif | |
| 98 | |
| 99 // Tests a window created with always-on-top enabled and ensures that the | |
| 100 // property is temporarily switched off when entering fullscreen mode. | |
| 101 IN_PROC_BROWSER_TEST_F(ShellWindowTest, MAYBE_InitAlwaysOnTopToFullscreen) { | |
| 102 ShellWindow* window = OpenWindow( | |
| 103 kDefaultTestApp, "{ \"alwaysOnTop\": true }"); | |
| 104 ASSERT_TRUE(window); | |
| 105 CheckAlwaysOnTopToFullscreen(window); | |
| 106 | |
| 107 window->SetAlwaysOnTop(false); | |
| 108 CheckNormalToFullscreen(window); | |
| 109 | |
| 110 CloseShellWindow(window); | |
| 111 } | |
| 112 | |
| 113 #if defined(OS_MACOSX) | |
| 114 #define MAYBE_RuntimeAlwaysOnTopToFullscreen DISABLED_RuntimeAlwaysOnTopToFullsc
reen | |
| 115 #else | |
| 116 #define MAYBE_RuntimeAlwaysOnTopToFullscreen RuntimeAlwaysOnTopToFullscreen | |
| 117 #endif | |
| 118 | |
| 119 // Tests a window with always-on-top enabled at runtime and ensures that the | |
| 120 // property is temporarily switched off when entering fullscreen mode. | |
| 121 IN_PROC_BROWSER_TEST_F(ShellWindowTest, MAYBE_RuntimeAlwaysOnTopToFullscreen) { | |
| 122 ShellWindow* window = OpenWindow( | |
| 123 kDefaultTestApp, "{}"); | |
| 124 ASSERT_TRUE(window); | |
| 125 CheckNormalToFullscreen(window); | |
| 126 | |
| 127 window->SetAlwaysOnTop(true); | |
| 128 CheckAlwaysOnTopToFullscreen(window); | |
| 129 | |
| 130 CloseShellWindow(window); | |
| 131 } | |
| 132 | |
| 133 #if defined(OS_MACOSX) | |
| 134 #define MAYBE_InitFullscreenToAlwaysOnTop DISABLED_InitFullscreenToAlwaysOnTop | |
| 135 #else | |
| 136 #define MAYBE_InitFullscreenToAlwaysOnTop InitFullscreenToAlwaysOnTop | |
| 137 #endif | |
| 138 | |
| 139 // Tests a window created initially in fullscreen mode and ensures that the | |
| 140 // always-on-top property does not get applied until it exits fullscreen. | |
| 141 IN_PROC_BROWSER_TEST_F(ShellWindowTest, MAYBE_InitFullscreenToAlwaysOnTop) { | |
| 142 ShellWindow* window = OpenWindow( | |
| 143 kDefaultTestApp, "{ \"state\": \"fullscreen\" }"); | |
| 144 ASSERT_TRUE(window); | |
| 145 CheckFullscreenToAlwaysOnTop(window); | |
| 146 | |
| 147 CloseShellWindow(window); | |
| 148 } | |
| 149 | |
| 150 #if defined(OS_MACOSX) | |
| 151 #define MAYBE_RuntimeFullscreenToAlwaysOnTop DISABLED_RuntimeFullscreenToAlwaysO
nTop | |
| 152 #else | |
| 153 #define MAYBE_RuntimeFullscreenToAlwaysOnTop RuntimeFullscreenToAlwaysOnTop | |
| 154 #endif | |
| 155 | |
| 156 // Tests a window that enters fullscreen mode at runtime and ensures that the | |
| 157 // always-on-top property does not get applied until it exits fullscreen. | |
| 158 IN_PROC_BROWSER_TEST_F(ShellWindowTest, MAYBE_RuntimeFullscreenToAlwaysOnTop) { | |
| 159 ShellWindow* window = OpenWindow( | |
| 160 kDefaultTestApp, "{}"); | |
| 161 ASSERT_TRUE(window); | |
| 162 | |
| 163 window->Fullscreen(); | |
| 164 CheckFullscreenToAlwaysOnTop(window); | |
| 165 | |
| 166 CloseShellWindow(window); | |
| 167 } | |
| 168 | |
| 169 #if defined(OS_MACOSX) | |
| 170 #define MAYBE_InitFullscreenAndAlwaysOnTop DISABLED_InitFullscreenAndAlwaysOnTop | |
| 171 #else | |
| 172 #define MAYBE_InitFullscreenAndAlwaysOnTop InitFullscreenAndAlwaysOnTop | |
| 173 #endif | |
| 174 | |
| 175 // Tests a window created with both fullscreen and always-on-top enabled. Ensure | |
| 176 // that always-on-top is only applied when the window exits fullscreen. | |
| 177 IN_PROC_BROWSER_TEST_F(ShellWindowTest, MAYBE_InitFullscreenAndAlwaysOnTop) { | |
| 178 ShellWindow* window = OpenWindow( | |
| 179 kDefaultTestApp, "{ \"alwaysOnTop\": true, \"state\": \"fullscreen\" }"); | |
| 180 ASSERT_TRUE(window); | |
| 181 | |
| 182 EXPECT_TRUE(window->GetBaseWindow()->IsFullscreenOrPending()); | |
| 183 EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 184 | |
| 185 // From the API's point of view, the always-on-top property is enabled. | |
| 186 EXPECT_TRUE(window->IsAlwaysOnTop()); | |
| 187 | |
| 188 window->Restore(); | |
| 189 EXPECT_TRUE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 190 | |
| 191 CloseShellWindow(window); | |
| 192 } | |
| 193 | |
| 194 #if defined(OS_MACOSX) | |
| 195 #define MAYBE_DisableAlwaysOnTopInFullscreen DISABLED_DisableAlwaysOnTopInFullsc
reen | |
| 196 #else | |
| 197 #define MAYBE_DisableAlwaysOnTopInFullscreen DisableAlwaysOnTopInFullscreen | |
| 198 #endif | |
| 199 | |
| 200 // Tests a window created with always-on-top enabled, but then disabled while | |
| 201 // in fullscreen mode. After exiting fullscreen, always-on-top should remain | |
| 202 // disabled. | |
| 203 IN_PROC_BROWSER_TEST_F(ShellWindowTest, MAYBE_DisableAlwaysOnTopInFullscreen) { | |
| 204 ShellWindow* window = OpenWindow( | |
| 205 kDefaultTestApp, "{ \"alwaysOnTop\": true }"); | |
| 206 ASSERT_TRUE(window); | |
| 207 | |
| 208 // Disable always-on-top while in fullscreen mode. | |
| 209 window->Fullscreen(); | |
| 210 EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 211 window->SetAlwaysOnTop(false); | |
| 212 EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 213 | |
| 214 // Ensure that always-on-top remains disabled. | |
| 215 window->Restore(); | |
| 216 EXPECT_FALSE(window->GetBaseWindow()->IsAlwaysOnTop()); | |
| 217 | |
| 218 CloseShellWindow(window); | |
| 219 } | |
| 220 | |
| 221 } // namespace apps | |
| OLD | NEW |