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 |