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