Index: chrome/browser/ui/fullscreen_controller_interactive_browsertest.cc |
diff --git a/chrome/browser/ui/fullscreen_controller_interactive_browsertest.cc b/chrome/browser/ui/fullscreen_controller_interactive_browsertest.cc |
index e21efb75cd5d0971f88e8a780eaa4befe195f94c..0981483b7e98a77cb43a75b9312e140c3a50d882 100644 |
--- a/chrome/browser/ui/fullscreen_controller_interactive_browsertest.cc |
+++ b/chrome/browser/ui/fullscreen_controller_interactive_browsertest.cc |
@@ -318,3 +318,155 @@ IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest, |
ASSERT_TRUE(IsMouseLocked()); |
} |
+// Tests mouse lock is exited on page navigation. |
+// (Similar to fullscreen version in FullscreenControllerTest) |
+IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest, |
+ TestTabExitsMouseLockOnNavigation) { |
+ ASSERT_TRUE(test_server()->Start()); |
+ ui_test_utils::NavigateToURL(browser(), |
+ test_server()->GetURL(kFullscreenMouseLockHTML)); |
+ |
+ // Lock the mouse with a user gesture. |
+ ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( |
+ browser(), ui::VKEY_1, false, false, false, false, |
+ chrome::NOTIFICATION_MOUSE_LOCK_CHANGED, |
+ content::NotificationService::AllSources())); |
+ ASSERT_TRUE(IsFullscreenBubbleDisplayed()); |
+ ASSERT_TRUE(IsMouseLockPermissionRequested()); |
+ ASSERT_FALSE(IsMouseLocked()); |
+ |
+ // Accept mouse lock. |
+ AcceptCurrentFullscreenOrMouseLockRequest(); |
+ ASSERT_TRUE(IsMouseLocked()); |
+ |
+ ui_test_utils::NavigateToURL(browser(), GURL("chrome://newtab")); |
+ |
+ ASSERT_FALSE(IsMouseLocked()); |
+} |
+ |
+// Tests mouse lock is exited when navigating back. |
+// (Similar to fullscreen version in FullscreenControllerTest) |
+IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest, |
+ TestTabExitsMouseLockOnGoBack) { |
+ ASSERT_TRUE(test_server()->Start()); |
+ |
+ // Navigate twice to provide a place to go back to. |
+ ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); |
+ ui_test_utils::NavigateToURL(browser(), |
+ test_server()->GetURL(kFullscreenMouseLockHTML)); |
+ |
+ // Lock the mouse with a user gesture. |
+ ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( |
+ browser(), ui::VKEY_1, false, false, false, false, |
+ chrome::NOTIFICATION_MOUSE_LOCK_CHANGED, |
+ content::NotificationService::AllSources())); |
+ ASSERT_TRUE(IsFullscreenBubbleDisplayed()); |
+ ASSERT_TRUE(IsMouseLockPermissionRequested()); |
+ ASSERT_FALSE(IsMouseLocked()); |
+ |
+ // Accept mouse lock. |
+ AcceptCurrentFullscreenOrMouseLockRequest(); |
+ ASSERT_TRUE(IsMouseLocked()); |
+ |
+ GoBack(); |
+ |
+ ASSERT_FALSE(IsMouseLocked()); |
+} |
+ |
+// Tests mouse lock is not exited on sub frame navigation. |
+// (Similar to fullscreen version in FullscreenControllerTest) |
+IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest, |
+ TestTabDoesntExitMouseLockOnSubFrameNavigation) { |
+ ASSERT_TRUE(test_server()->Start()); |
+ |
+ // Create URLs for test page and test page with #fragment. |
+ GURL url(test_server()->GetURL(kFullscreenMouseLockHTML)); |
+ GURL url_with_fragment(url.spec() + "#fragment"); |
+ |
+ // Navigate to test page. |
+ ui_test_utils::NavigateToURL(browser(), url); |
+ |
+ // Lock the mouse with a user gesture. |
+ ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( |
+ browser(), ui::VKEY_1, false, false, false, false, |
+ chrome::NOTIFICATION_MOUSE_LOCK_CHANGED, |
+ content::NotificationService::AllSources())); |
+ ASSERT_TRUE(IsFullscreenBubbleDisplayed()); |
+ ASSERT_TRUE(IsMouseLockPermissionRequested()); |
+ ASSERT_FALSE(IsMouseLocked()); |
+ |
+ // Accept mouse lock. |
+ AcceptCurrentFullscreenOrMouseLockRequest(); |
+ ASSERT_TRUE(IsMouseLocked()); |
+ |
+ // Navigate to url with fragment. Mouse lock should persist. |
+ ui_test_utils::NavigateToURL(browser(), url_with_fragment); |
+ ASSERT_TRUE(IsMouseLocked()); |
+} |
+ |
+// Tests Mouse Lock and Fullscreen are exited upon reload. |
+IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest, |
+ ReloadExitsMouseLockAndFullscreen) { |
+ ASSERT_TRUE(test_server()->Start()); |
+ ui_test_utils::NavigateToURL(browser(), |
+ test_server()->GetURL(kFullscreenMouseLockHTML)); |
+ |
+ ASSERT_FALSE(IsMouseLockPermissionRequested()); |
+ |
+ // Request mouse lock. |
+ ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( |
+ browser(), ui::VKEY_1, false, false, false, false, |
+ chrome::NOTIFICATION_MOUSE_LOCK_CHANGED, |
+ content::NotificationService::AllSources())); |
+ ASSERT_TRUE(IsMouseLockPermissionRequested()); |
+ |
+ // Reload. Mouse lock request should be cleared. |
+ { |
+ MouseLockNotificationObserver mouselock_observer; |
+ Reload(); |
+ mouselock_observer.Wait(); |
+ ASSERT_FALSE(IsMouseLockPermissionRequested()); |
+ } |
+ |
+ // Request mouse lock. |
+ ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( |
+ browser(), ui::VKEY_1, false, false, false, false, |
+ chrome::NOTIFICATION_MOUSE_LOCK_CHANGED, |
+ content::NotificationService::AllSources())); |
+ ASSERT_TRUE(IsMouseLockPermissionRequested()); |
+ |
+ // Accept mouse lock. |
+ AcceptCurrentFullscreenOrMouseLockRequest(); |
+ ASSERT_TRUE(IsMouseLocked()); |
+ ASSERT_TRUE(IsFullscreenBubbleDisplayed()); |
+ |
+ // Reload. Mouse should be unlocked. |
+ { |
+ MouseLockNotificationObserver mouselock_observer; |
+ Reload(); |
+ mouselock_observer.Wait(); |
+ ASSERT_FALSE(IsMouseLocked()); |
+ } |
+ |
+ // Request to lock the mouse and enter fullscreen. |
+ { |
+ FullscreenNotificationObserver fullscreen_observer; |
+ ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( |
+ browser(), ui::VKEY_B, false, true, false, false, |
+ chrome::NOTIFICATION_MOUSE_LOCK_CHANGED, |
+ content::NotificationService::AllSources())); |
+ fullscreen_observer.Wait(); |
+ } |
+ |
+ // We are fullscreen. |
+ ASSERT_TRUE(IsFullscreenForTabOrPending()); |
+ |
+ // Reload. Mouse should be unlocked and fullscreen exited. |
+ { |
+ FullscreenNotificationObserver fullscreen_observer; |
+ Reload(); |
+ fullscreen_observer.Wait(); |
+ ASSERT_FALSE(IsMouseLocked()); |
+ ASSERT_FALSE(IsFullscreenForTabOrPending()); |
+ } |
+} |