Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: chrome/browser/apps/app_window_interactive_uitest.cc

Issue 116023002: Enable all ESC-Fullscreen tests (Chrome Apps) for all platforms. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/test/data/extensions/platform_apps/leave_fullscreen/main.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "chrome/test/base/interactive_test_utils.h" 8 #include "chrome/test/base/interactive_test_utils.h"
9 9
10 using namespace apps; 10 #if defined(OS_MACOSX) && !defined(OS_IOS)
11 #include "base/mac/mac_util.h"
12 #endif
13
14 using apps::NativeAppWindow;
11 15
12 // Helper class that has to be created in the stack to check if the fullscreen 16 // Helper class that has to be created in the stack to check if the fullscreen
13 // setting of a NativeWindow has changed since the creation of the object. 17 // setting of a NativeWindow has changed since the creation of the object.
14 class FullscreenChangeWaiter { 18 class FullscreenChangeWaiter {
15 public: 19 public:
16 explicit FullscreenChangeWaiter(NativeAppWindow* window) 20 explicit FullscreenChangeWaiter(NativeAppWindow* window)
17 : window_(window), 21 : window_(window),
18 initial_fullscreen_state_(window_->IsFullscreen()) {} 22 initial_fullscreen_state_(window_->IsFullscreen()) {}
19 23
20 void Wait() { 24 void Wait() {
21 while (initial_fullscreen_state_ != window_->IsFullscreen()) 25 while (initial_fullscreen_state_ == window_->IsFullscreen())
22 content::RunAllPendingInMessageLoop(); 26 content::RunAllPendingInMessageLoop();
23 } 27 }
24 28
25 private: 29 private:
26 NativeAppWindow* window_; 30 NativeAppWindow* window_;
27 bool initial_fullscreen_state_; 31 bool initial_fullscreen_state_;
28 32
29 DISALLOW_COPY_AND_ASSIGN(FullscreenChangeWaiter); 33 DISALLOW_COPY_AND_ASSIGN(FullscreenChangeWaiter);
30 }; 34 };
31 35
(...skipping 20 matching lines...) Expand all
52 56
53 bool SimulateKeyPress(ui::KeyboardCode key) { 57 bool SimulateKeyPress(ui::KeyboardCode key) {
54 return ui_test_utils::SendKeyPressToWindowSync( 58 return ui_test_utils::SendKeyPressToWindowSync(
55 GetFirstShellWindow()->GetNativeWindow(), 59 GetFirstShellWindow()->GetNativeWindow(),
56 key, 60 key,
57 false, 61 false,
58 false, 62 false,
59 false, 63 false,
60 false); 64 false);
61 } 65 }
66
67 // This method will wait until the application is able to ack a key event.
68 void WaitUntilKeyFocus() {
69 ExtensionTestMessageListener key_listener("KeyReceived", false);
70
71 while (!key_listener.was_satisfied()) {
72 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_Z));
73 content::RunAllPendingInMessageLoop();
74 }
75 }
62 }; 76 };
63 77
64 #if defined(OS_LINUX) && defined(USE_AURA) 78 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, ESCLeavesFullscreenWindow) {
65 // These tests do not work on Linux Aura because when the window is raised, the 79 // This test is flaky on MacOS 10.6.
66 // content is not focused thus do not get the key events. 80 #if defined(OS_MACOSX) && !defined(OS_IOS)
67 // See http://crbug.com/324346 81 if (base::mac::IsOSSnowLeopard())
68 #define MAYBE_ESCDoesNotLeaveFullscreenWindow \ 82 return;
69 DISABLED_ESCDoesNotLeaveFullscreenWindow
70 #define MAYBE_ESCDoesNotLeaveFullscreenDOM DISABLED_ESCDoesNotLeaveFullscreenDOM
71 // These tests are failing on Linux Aura for unknown reasons.
72 #define MAYBE_ESCLeavesFullscreenWindow DISABLED_ESCLeavesFullscreenWindow
73 #define MAYBE_ESCLeavesFullscreenDOM DISABLED_ESCLeavesFullscreenDOM
74 #elif defined(OS_MACOSX)
75 // These tests are highly flaky on MacOS.
76 #define MAYBE_ESCLeavesFullscreenWindow DISABLED_ESCLeavesFullscreenWindow
77 #define MAYBE_ESCLeavesFullscreenDOM DISABLED_ESCLeavesFullscreenDOM
78 #define MAYBE_ESCDoesNotLeaveFullscreenWindow \
79 DISABLED_ESCDoesNotLeaveFullscreenWindow
80 #define MAYBE_ESCDoesNotLeaveFullscreenDOM DISABLED_ESCDoesNotLeaveFullscreenDOM
81 #else
82 #define MAYBE_ESCLeavesFullscreenWindow ESCLeavesFullscreenWindow
83 #define MAYBE_ESCLeavesFullscreenDOM ESCLeavesFullscreenDOM
84 #define MAYBE_ESCDoesNotLeaveFullscreenWindow ESCDoesNotLeaveFullscreenWindow
85 #define MAYBE_ESCDoesNotLeaveFullscreenDOM ESCDoesNotLeaveFullscreenDOM
86 #endif 83 #endif
87 84
88 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest,
89 MAYBE_ESCLeavesFullscreenWindow) {
90 ExtensionTestMessageListener launched_listener("Launched", true); 85 ExtensionTestMessageListener launched_listener("Launched", true);
91 LoadAndLaunchPlatformApp("leave_fullscreen"); 86 LoadAndLaunchPlatformApp("leave_fullscreen");
92 ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); 87 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
93 88
89 // We start by making sure the window is actually focused.
90 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(
91 GetFirstShellWindow()->GetNativeWindow()));
92
94 // When receiving the reply, the application will try to go fullscreen using 93 // When receiving the reply, the application will try to go fullscreen using
95 // the Window API but there is no synchronous way to know if that actually 94 // the Window API but there is no synchronous way to know if that actually
96 // succeeded. Also, failure will not be notified. A failure case will only be 95 // succeeded. Also, failure will not be notified. A failure case will only be
97 // known with a timeout. 96 // known with a timeout.
98 { 97 {
99 FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow()); 98 FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow());
100 99
101 launched_listener.Reply("window"); 100 launched_listener.Reply("window");
102 101
103 fs_changed.Wait(); 102 fs_changed.Wait();
104 } 103 }
105 104
105 // Depending on the platform, going fullscreen might create an animation.
106 // We want to make sure that the ESC key we will send next is actually going
107 // to be received and the application might not receive key events during the
108 // animation so we should wait for the key focus to be back.
109 WaitUntilKeyFocus();
110
106 // Same idea as above but for leaving fullscreen. Fullscreen mode should be 111 // Same idea as above but for leaving fullscreen. Fullscreen mode should be
107 // left when ESC is received. 112 // left when ESC is received.
108 { 113 {
109 FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow()); 114 FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow());
110 115
111 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_ESCAPE)); 116 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_ESCAPE));
112 117
113 fs_changed.Wait(); 118 fs_changed.Wait();
114 } 119 }
115 } 120 }
116 121
117 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, MAYBE_ESCLeavesFullscreenDOM) { 122 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, ESCLeavesFullscreenDOM) {
123 // This test is flaky on MacOS 10.6.
124 #if defined(OS_MACOSX) && !defined(OS_IOS)
125 if (base::mac::IsOSSnowLeopard())
126 return;
127 #endif
128
118 ExtensionTestMessageListener launched_listener("Launched", true); 129 ExtensionTestMessageListener launched_listener("Launched", true);
119 LoadAndLaunchPlatformApp("leave_fullscreen"); 130 LoadAndLaunchPlatformApp("leave_fullscreen");
120 ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); 131 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
121 132
133 // We start by making sure the window is actually focused.
134 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(
135 GetFirstShellWindow()->GetNativeWindow()));
136
122 launched_listener.Reply("dom"); 137 launched_listener.Reply("dom");
123 138
124 // Because the DOM way to go fullscreen requires user gesture, we simulate a 139 // Because the DOM way to go fullscreen requires user gesture, we simulate a
125 // key event to get the window entering in fullscreen mode. The reply will 140 // key event to get the window entering in fullscreen mode. The reply will
126 // make the window listen for the key event. The reply will be sent to the 141 // make the window listen for the key event. The reply will be sent to the
127 // renderer process before the keypress and should be received in that order. 142 // renderer process before the keypress and should be received in that order.
128 // When receiving the key event, the application will try to go fullscreen 143 // When receiving the key event, the application will try to go fullscreen
129 // using the Window API but there is no synchronous way to know if that 144 // using the Window API but there is no synchronous way to know if that
130 // actually succeeded. Also, failure will not be notified. A failure case will 145 // actually succeeded. Also, failure will not be notified. A failure case will
131 // only be known with a timeout. 146 // only be known with a timeout.
132 { 147 {
133 FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow()); 148 FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow());
134 149
150 WaitUntilKeyFocus();
135 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_A)); 151 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_A));
136 152
137 fs_changed.Wait(); 153 fs_changed.Wait();
138 } 154 }
139 155
156 // Depending on the platform, going fullscreen might create an animation.
157 // We want to make sure that the ESC key we will send next is actually going
158 // to be received and the application might not receive key events during the
159 // animation so we should wait for the key focus to be back.
160 WaitUntilKeyFocus();
161
140 // Same idea as above but for leaving fullscreen. Fullscreen mode should be 162 // Same idea as above but for leaving fullscreen. Fullscreen mode should be
141 // left when ESC is received. 163 // left when ESC is received.
142 { 164 {
143 FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow()); 165 FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow());
144 166
145 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_ESCAPE)); 167 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_ESCAPE));
146 168
147 fs_changed.Wait(); 169 fs_changed.Wait();
148 } 170 }
149 } 171 }
150 172
151 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, 173 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest,
152 MAYBE_ESCDoesNotLeaveFullscreenWindow) { 174 ESCDoesNotLeaveFullscreenWindow) {
175 // This test is flaky on MacOS 10.6.
176 #if defined(OS_MACOSX) && !defined(OS_IOS)
177 if (base::mac::IsOSSnowLeopard())
178 return;
179 #endif
180
153 ExtensionTestMessageListener launched_listener("Launched", true); 181 ExtensionTestMessageListener launched_listener("Launched", true);
154 LoadAndLaunchPlatformApp("prevent_leave_fullscreen"); 182 LoadAndLaunchPlatformApp("prevent_leave_fullscreen");
155 ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); 183 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
156 184
185 // We start by making sure the window is actually focused.
186 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(
187 GetFirstShellWindow()->GetNativeWindow()));
188
157 // When receiving the reply, the application will try to go fullscreen using 189 // When receiving the reply, the application will try to go fullscreen using
158 // the Window API but there is no synchronous way to know if that actually 190 // the Window API but there is no synchronous way to know if that actually
159 // succeeded. Also, failure will not be notified. A failure case will only be 191 // succeeded. Also, failure will not be notified. A failure case will only be
160 // known with a timeout. 192 // known with a timeout.
161 { 193 {
162 FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow()); 194 FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow());
163 195
164 launched_listener.Reply("window"); 196 launched_listener.Reply("window");
165 197
166 fs_changed.Wait(); 198 fs_changed.Wait();
167 } 199 }
168 200
201 // Depending on the platform, going fullscreen might create an animation.
202 // We want to make sure that the ESC key we will send next is actually going
203 // to be received and the application might not receive key events during the
204 // animation so we should wait for the key focus to be back.
205 WaitUntilKeyFocus();
206
169 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_ESCAPE)); 207 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_ESCAPE));
170 208
171 ExtensionTestMessageListener second_key_listener("B_KEY_RECEIVED", false); 209 ExtensionTestMessageListener second_key_listener("B_KEY_RECEIVED", false);
172 210
173 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_B)); 211 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_B));
174 212
175 ASSERT_TRUE(second_key_listener.WaitUntilSatisfied()); 213 ASSERT_TRUE(second_key_listener.WaitUntilSatisfied());
176 214
177 // We assume that at that point, if we had to leave fullscreen, we should be. 215 // We assume that at that point, if we had to leave fullscreen, we should be.
178 // However, by nature, we can not guarantee that and given that we do test 216 // However, by nature, we can not guarantee that and given that we do test
179 // that nothing happens, we might end up with random-success when the feature 217 // that nothing happens, we might end up with random-success when the feature
180 // is broken. 218 // is broken.
181 EXPECT_TRUE(GetFirstShellWindow()->GetBaseWindow()->IsFullscreen()); 219 EXPECT_TRUE(GetFirstShellWindow()->GetBaseWindow()->IsFullscreen());
182 } 220 }
183 221
184 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, 222 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest,
185 MAYBE_ESCDoesNotLeaveFullscreenDOM) { 223 ESCDoesNotLeaveFullscreenDOM) {
224 // This test is flaky on MacOS 10.6.
225 #if defined(OS_MACOSX) && !defined(OS_IOS)
226 if (base::mac::IsOSSnowLeopard())
227 return;
228 #endif
229
186 ExtensionTestMessageListener launched_listener("Launched", true); 230 ExtensionTestMessageListener launched_listener("Launched", true);
187 LoadAndLaunchPlatformApp("prevent_leave_fullscreen"); 231 LoadAndLaunchPlatformApp("prevent_leave_fullscreen");
188 ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); 232 ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
189 233
234 // We start by making sure the window is actually focused.
235 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(
236 GetFirstShellWindow()->GetNativeWindow()));
237
190 launched_listener.Reply("dom"); 238 launched_listener.Reply("dom");
191 239
192 // Because the DOM way to go fullscreen requires user gesture, we simulate a 240 // Because the DOM way to go fullscreen requires user gesture, we simulate a
193 // key event to get the window entering in fullscreen mode. The reply will 241 // key event to get the window entering in fullscreen mode. The reply will
194 // make the window listen for the key event. The reply will be sent to the 242 // make the window listen for the key event. The reply will be sent to the
195 // renderer process before the keypress and should be received in that order. 243 // renderer process before the keypress and should be received in that order.
196 // When receiving the key event, the application will try to go fullscreen 244 // When receiving the key event, the application will try to go fullscreen
197 // using the Window API but there is no synchronous way to know if that 245 // using the Window API but there is no synchronous way to know if that
198 // actually succeeded. Also, failure will not be notified. A failure case will 246 // actually succeeded. Also, failure will not be notified. A failure case will
199 // only be known with a timeout. 247 // only be known with a timeout.
200 { 248 {
201 FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow()); 249 FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow());
202 250
251 WaitUntilKeyFocus();
203 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_A)); 252 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_A));
204 253
205 fs_changed.Wait(); 254 fs_changed.Wait();
206 } 255 }
207 256
257 // Depending on the platform, going fullscreen might create an animation.
258 // We want to make sure that the ESC key we will send next is actually going
259 // to be received and the application might not receive key events during the
260 // animation so we should wait for the key focus to be back.
261 WaitUntilKeyFocus();
262
208 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_ESCAPE)); 263 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_ESCAPE));
209 264
210 ExtensionTestMessageListener second_key_listener("B_KEY_RECEIVED", false); 265 ExtensionTestMessageListener second_key_listener("B_KEY_RECEIVED", false);
211 266
212 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_B)); 267 ASSERT_TRUE(SimulateKeyPress(ui::VKEY_B));
213 268
214 ASSERT_TRUE(second_key_listener.WaitUntilSatisfied()); 269 ASSERT_TRUE(second_key_listener.WaitUntilSatisfied());
215 270
216 // We assume that at that point, if we had to leave fullscreen, we should be. 271 // We assume that at that point, if we had to leave fullscreen, we should be.
217 // However, by nature, we can not guarantee that and given that we do test 272 // However, by nature, we can not guarantee that and given that we do test
(...skipping 19 matching lines...) Expand all
237 #define MAYBE_TestShow TestShow 292 #define MAYBE_TestShow TestShow
238 #endif 293 #endif
239 294
240 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, MAYBE_TestCreate) { 295 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, MAYBE_TestCreate) {
241 ASSERT_TRUE(RunAppWindowInteractiveTest("testCreate")) << message_; 296 ASSERT_TRUE(RunAppWindowInteractiveTest("testCreate")) << message_;
242 } 297 }
243 298
244 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, MAYBE_TestShow) { 299 IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, MAYBE_TestShow) {
245 ASSERT_TRUE(RunAppWindowInteractiveTest("testShow")) << message_; 300 ASSERT_TRUE(RunAppWindowInteractiveTest("testShow")) << message_;
246 } 301 }
OLDNEW
« no previous file with comments | « no previous file | chrome/test/data/extensions/platform_apps/leave_fullscreen/main.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698