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