Index: chrome/browser/apps/app_window_interactive_uitest.cc |
diff --git a/chrome/browser/apps/app_window_interactive_uitest.cc b/chrome/browser/apps/app_window_interactive_uitest.cc |
index b44bf1412ce31988ac1687e48fdf313e05859cda..406ced9b9952c47be12fe260edbbb312d7662a75 100644 |
--- a/chrome/browser/apps/app_window_interactive_uitest.cc |
+++ b/chrome/browser/apps/app_window_interactive_uitest.cc |
@@ -7,7 +7,11 @@ |
#include "chrome/browser/extensions/extension_test_message_listener.h" |
#include "chrome/test/base/interactive_test_utils.h" |
-using namespace apps; |
+#if defined(OS_MACOSX) && !defined(OS_IOS) |
+#include "base/mac/mac_util.h" |
+#endif |
+ |
+using apps::NativeAppWindow; |
// Helper class that has to be created in the stack to check if the fullscreen |
// setting of a NativeWindow has changed since the creation of the object. |
@@ -18,7 +22,7 @@ class FullscreenChangeWaiter { |
initial_fullscreen_state_(window_->IsFullscreen()) {} |
void Wait() { |
- while (initial_fullscreen_state_ != window_->IsFullscreen()) |
+ while (initial_fullscreen_state_ == window_->IsFullscreen()) |
content::RunAllPendingInMessageLoop(); |
} |
@@ -59,38 +63,33 @@ class AppWindowInteractiveTest : public extensions::PlatformAppBrowserTest { |
false, |
false); |
} |
+ |
+ // This method will wait until the application is able to ack a key event. |
+ void WaitUntilKeyFocus() { |
+ ExtensionTestMessageListener key_listener("KeyReceived", false); |
+ |
+ while (!key_listener.was_satisfied()) { |
+ ASSERT_TRUE(SimulateKeyPress(ui::VKEY_Z)); |
+ content::RunAllPendingInMessageLoop(); |
+ } |
+ } |
}; |
-#if defined(OS_LINUX) && defined(USE_AURA) |
-// These tests do not work on Linux Aura because when the window is raised, the |
-// content is not focused thus do not get the key events. |
-// See http://crbug.com/324346 |
-#define MAYBE_ESCDoesNotLeaveFullscreenWindow \ |
- DISABLED_ESCDoesNotLeaveFullscreenWindow |
-#define MAYBE_ESCDoesNotLeaveFullscreenDOM DISABLED_ESCDoesNotLeaveFullscreenDOM |
-// These tests are failing on Linux Aura for unknown reasons. |
-#define MAYBE_ESCLeavesFullscreenWindow DISABLED_ESCLeavesFullscreenWindow |
-#define MAYBE_ESCLeavesFullscreenDOM DISABLED_ESCLeavesFullscreenDOM |
-#elif defined(OS_MACOSX) |
-// These tests are highly flaky on MacOS. |
-#define MAYBE_ESCLeavesFullscreenWindow DISABLED_ESCLeavesFullscreenWindow |
-#define MAYBE_ESCLeavesFullscreenDOM DISABLED_ESCLeavesFullscreenDOM |
-#define MAYBE_ESCDoesNotLeaveFullscreenWindow \ |
- DISABLED_ESCDoesNotLeaveFullscreenWindow |
-#define MAYBE_ESCDoesNotLeaveFullscreenDOM DISABLED_ESCDoesNotLeaveFullscreenDOM |
-#else |
-#define MAYBE_ESCLeavesFullscreenWindow ESCLeavesFullscreenWindow |
-#define MAYBE_ESCLeavesFullscreenDOM ESCLeavesFullscreenDOM |
-#define MAYBE_ESCDoesNotLeaveFullscreenWindow ESCDoesNotLeaveFullscreenWindow |
-#define MAYBE_ESCDoesNotLeaveFullscreenDOM ESCDoesNotLeaveFullscreenDOM |
+IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, ESCLeavesFullscreenWindow) { |
+// This test is flaky on MacOS 10.6. |
+#if defined(OS_MACOSX) && !defined(OS_IOS) |
+ if (base::mac::IsOSSnowLeopard()) |
+ return; |
#endif |
-IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, |
- MAYBE_ESCLeavesFullscreenWindow) { |
ExtensionTestMessageListener launched_listener("Launched", true); |
LoadAndLaunchPlatformApp("leave_fullscreen"); |
ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); |
+ // We start by making sure the window is actually focused. |
+ ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow( |
+ GetFirstShellWindow()->GetNativeWindow())); |
+ |
// When receiving the reply, the application will try to go fullscreen using |
// the Window API but there is no synchronous way to know if that actually |
// succeeded. Also, failure will not be notified. A failure case will only be |
@@ -103,6 +102,12 @@ IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, |
fs_changed.Wait(); |
} |
+ // Depending on the platform, going fullscreen might create an animation. |
+ // We want to make sure that the ESC key we will send next is actually going |
+ // to be received and the application might not receive key events during the |
+ // animation so we should wait for the key focus to be back. |
+ WaitUntilKeyFocus(); |
+ |
// Same idea as above but for leaving fullscreen. Fullscreen mode should be |
// left when ESC is received. |
{ |
@@ -114,11 +119,21 @@ IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, |
} |
} |
-IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, MAYBE_ESCLeavesFullscreenDOM) { |
+IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, ESCLeavesFullscreenDOM) { |
+// This test is flaky on MacOS 10.6. |
+#if defined(OS_MACOSX) && !defined(OS_IOS) |
+ if (base::mac::IsOSSnowLeopard()) |
+ return; |
+#endif |
+ |
ExtensionTestMessageListener launched_listener("Launched", true); |
LoadAndLaunchPlatformApp("leave_fullscreen"); |
ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); |
+ // We start by making sure the window is actually focused. |
+ ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow( |
+ GetFirstShellWindow()->GetNativeWindow())); |
+ |
launched_listener.Reply("dom"); |
// Because the DOM way to go fullscreen requires user gesture, we simulate a |
@@ -132,11 +147,18 @@ IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, MAYBE_ESCLeavesFullscreenDOM) { |
{ |
FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow()); |
+ WaitUntilKeyFocus(); |
ASSERT_TRUE(SimulateKeyPress(ui::VKEY_A)); |
fs_changed.Wait(); |
} |
+ // Depending on the platform, going fullscreen might create an animation. |
+ // We want to make sure that the ESC key we will send next is actually going |
+ // to be received and the application might not receive key events during the |
+ // animation so we should wait for the key focus to be back. |
+ WaitUntilKeyFocus(); |
+ |
// Same idea as above but for leaving fullscreen. Fullscreen mode should be |
// left when ESC is received. |
{ |
@@ -149,11 +171,21 @@ IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, MAYBE_ESCLeavesFullscreenDOM) { |
} |
IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, |
- MAYBE_ESCDoesNotLeaveFullscreenWindow) { |
+ ESCDoesNotLeaveFullscreenWindow) { |
+// This test is flaky on MacOS 10.6. |
+#if defined(OS_MACOSX) && !defined(OS_IOS) |
+ if (base::mac::IsOSSnowLeopard()) |
+ return; |
+#endif |
+ |
ExtensionTestMessageListener launched_listener("Launched", true); |
LoadAndLaunchPlatformApp("prevent_leave_fullscreen"); |
ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); |
+ // We start by making sure the window is actually focused. |
+ ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow( |
+ GetFirstShellWindow()->GetNativeWindow())); |
+ |
// When receiving the reply, the application will try to go fullscreen using |
// the Window API but there is no synchronous way to know if that actually |
// succeeded. Also, failure will not be notified. A failure case will only be |
@@ -166,6 +198,12 @@ IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, |
fs_changed.Wait(); |
} |
+ // Depending on the platform, going fullscreen might create an animation. |
+ // We want to make sure that the ESC key we will send next is actually going |
+ // to be received and the application might not receive key events during the |
+ // animation so we should wait for the key focus to be back. |
+ WaitUntilKeyFocus(); |
+ |
ASSERT_TRUE(SimulateKeyPress(ui::VKEY_ESCAPE)); |
ExtensionTestMessageListener second_key_listener("B_KEY_RECEIVED", false); |
@@ -182,11 +220,21 @@ IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, |
} |
IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, |
- MAYBE_ESCDoesNotLeaveFullscreenDOM) { |
+ ESCDoesNotLeaveFullscreenDOM) { |
+// This test is flaky on MacOS 10.6. |
+#if defined(OS_MACOSX) && !defined(OS_IOS) |
+ if (base::mac::IsOSSnowLeopard()) |
+ return; |
+#endif |
+ |
ExtensionTestMessageListener launched_listener("Launched", true); |
LoadAndLaunchPlatformApp("prevent_leave_fullscreen"); |
ASSERT_TRUE(launched_listener.WaitUntilSatisfied()); |
+ // We start by making sure the window is actually focused. |
+ ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow( |
+ GetFirstShellWindow()->GetNativeWindow())); |
+ |
launched_listener.Reply("dom"); |
// Because the DOM way to go fullscreen requires user gesture, we simulate a |
@@ -200,11 +248,18 @@ IN_PROC_BROWSER_TEST_F(AppWindowInteractiveTest, |
{ |
FullscreenChangeWaiter fs_changed(GetFirstShellWindow()->GetBaseWindow()); |
+ WaitUntilKeyFocus(); |
ASSERT_TRUE(SimulateKeyPress(ui::VKEY_A)); |
fs_changed.Wait(); |
} |
+ // Depending on the platform, going fullscreen might create an animation. |
+ // We want to make sure that the ESC key we will send next is actually going |
+ // to be received and the application might not receive key events during the |
+ // animation so we should wait for the key focus to be back. |
+ WaitUntilKeyFocus(); |
+ |
ASSERT_TRUE(SimulateKeyPress(ui::VKEY_ESCAPE)); |
ExtensionTestMessageListener second_key_listener("B_KEY_RECEIVED", false); |