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 |