| Index: chrome/browser/ui/browser_browsertest.cc
|
| diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc
|
| index 43dc0b35d359ebc9db8175224cf10081a9053669..992d71644c0d57818833b83190fe96dbf4564cc8 100644
|
| --- a/chrome/browser/ui/browser_browsertest.cc
|
| +++ b/chrome/browser/ui/browser_browsertest.cc
|
| @@ -93,6 +93,9 @@ const FilePath::CharType* kTitle2File = FILE_PATH_LITERAL("title2.html");
|
|
|
| const FilePath::CharType kDocRoot[] = FILE_PATH_LITERAL("chrome/test/data");
|
|
|
| +const char* kFullscreenMouseLockHTML =
|
| + "files/fullscreen_mouselock/fullscreen_mouselock.html";
|
| +
|
| // Given a page title, returns the expected window caption string.
|
| std::wstring WindowCaptionFromPageTitle(std::wstring page_title) {
|
| #if defined(OS_MACOSX) || defined(OS_CHROMEOS)
|
| @@ -191,6 +194,10 @@ class FullscreenNotificationObserver
|
|
|
| class BrowserTest : public ExtensionBrowserTest {
|
| protected:
|
| + virtual void SetUpCommandLine(CommandLine* command_line) {
|
| + command_line->AppendSwitch(switches::kEnablePointerLock);
|
| + }
|
| +
|
| // In RTL locales wrap the page title with RTL embedding characters so that it
|
| // matches the value returned by GetWindowTitle().
|
| std::wstring LocaleWindowCaptionFromPageTitle(
|
| @@ -290,8 +297,7 @@ class BrowserTest : public ExtensionBrowserTest {
|
| bool IsFullscreenBubbleDisplayed() {
|
| FullscreenExitBubbleType type =
|
| browser()->fullscreen_controller_->GetFullscreenExitBubbleType();
|
| - // TODO(scheib): Should be FEB_TYPE_NONE, crbug.com/107013 will include fix.
|
| - return type != FEB_TYPE_BROWSER_FULLSCREEN_EXIT_INSTRUCTION;
|
| + return type != FEB_TYPE_NONE;
|
| }
|
|
|
| bool IsFullscreenBubbleDisplayingButtons() {
|
| @@ -307,6 +313,12 @@ class BrowserTest : public ExtensionBrowserTest {
|
| browser()->OnAcceptFullscreenPermission(fullscreen_tab->GetURL(), type);
|
| }
|
|
|
| + void DenyCurrentFullscreenOrMouseLockRequest() {
|
| + FullscreenExitBubbleType type =
|
| + browser()->fullscreen_controller_->GetFullscreenExitBubbleType();
|
| + browser()->OnDenyFullscreenPermission(type);
|
| + }
|
| +
|
| // Helper method to be called by multiple tests.
|
| void TestFullscreenMouseLockContentSettings();
|
| };
|
| @@ -1036,17 +1048,114 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, TestFullscreenBubbleMouseLockState) {
|
| ASSERT_FALSE(IsFullscreenBubbleDisplayingButtons());
|
| }
|
|
|
| -// Tests mouse lock fails before fullscreen is entered.
|
| +// Tests mouse lock then fullscreen.
|
| IN_PROC_BROWSER_TEST_F(BrowserTest, MouseLockThenFullscreen) {
|
| + ASSERT_TRUE(test_server()->Start());
|
| + ui_test_utils::NavigateToURL(browser(),
|
| + test_server()->GetURL(kFullscreenMouseLockHTML));
|
| +
|
| WebContents* tab = browser()->GetSelectedWebContents();
|
| +
|
| ASSERT_FALSE(IsFullscreenBubbleDisplayed());
|
|
|
| - RequestToLockMouse(tab, true);
|
| + // Lock the mouse without a user gesture, expect no response.
|
| + ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
|
| + browser(), ui::VKEY_D, false, false, false, false,
|
| + chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
|
| + content::NotificationService::AllSources()));
|
| ASSERT_FALSE(IsFullscreenBubbleDisplayed());
|
| + ASSERT_FALSE(IsMouseLocked());
|
| +
|
| + // 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_FALSE(IsFullscreenPermissionRequested());
|
| + ASSERT_TRUE(IsMouseLockPermissionRequested());
|
| + ASSERT_FALSE(IsMouseLocked());
|
| +
|
| + // Accept mouse lock.
|
| + AcceptCurrentFullscreenOrMouseLockRequest();
|
| + ASSERT_TRUE(IsMouseLocked());
|
| + ASSERT_FALSE(IsFullscreenBubbleDisplayingButtons());
|
|
|
| + // Enter fullscreen mode, mouse lock should be dropped to present buttons.
|
| ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(tab, true));
|
| ASSERT_TRUE(IsFullscreenPermissionRequested());
|
| ASSERT_FALSE(IsMouseLockPermissionRequested());
|
| + ASSERT_FALSE(IsMouseLocked());
|
| +
|
| + // Request mouse lock also, expect fullscreen and mouse lock buttons.
|
| + ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
|
| + browser(), ui::VKEY_1, false, false, false, false,
|
| + chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
|
| + content::NotificationService::AllSources()));
|
| + ASSERT_TRUE(IsFullscreenPermissionRequested());
|
| + ASSERT_TRUE(IsMouseLockPermissionRequested());
|
| + ASSERT_FALSE(IsMouseLocked());
|
| +
|
| + // Accept fullscreen and mouse lock.
|
| + AcceptCurrentFullscreenOrMouseLockRequest();
|
| + ASSERT_TRUE(IsMouseLocked());
|
| + ASSERT_TRUE(IsFullscreenForTabOrPending());
|
| + ASSERT_FALSE(IsFullscreenBubbleDisplayingButtons());
|
| +}
|
| +
|
| +// Tests mouse lock then fullscreen in same request.
|
| +IN_PROC_BROWSER_TEST_F(BrowserTest, MouseLockAndFullscreen) {
|
| + ASSERT_TRUE(test_server()->Start());
|
| + ui_test_utils::NavigateToURL(browser(),
|
| + test_server()->GetURL(kFullscreenMouseLockHTML));
|
| +
|
| + ASSERT_FALSE(IsFullscreenBubbleDisplayed());
|
| +
|
| + // 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();
|
| + }
|
| + ASSERT_TRUE(IsFullscreenBubbleDisplayed());
|
| + ASSERT_TRUE(IsFullscreenPermissionRequested());
|
| + ASSERT_TRUE(IsMouseLockPermissionRequested());
|
| + ASSERT_FALSE(IsMouseLocked());
|
| + ASSERT_TRUE(IsFullscreenForTabOrPending());
|
| +
|
| + // Deny both first, to make sure we can.
|
| + {
|
| + FullscreenNotificationObserver fullscreen_observer;
|
| + DenyCurrentFullscreenOrMouseLockRequest();
|
| + fullscreen_observer.Wait();
|
| + }
|
| + ASSERT_FALSE(IsMouseLocked());
|
| + ASSERT_FALSE(IsFullscreenForTabOrPending());
|
| + ASSERT_FALSE(IsFullscreenPermissionRequested());
|
| +
|
| + // 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();
|
| + }
|
| + ASSERT_TRUE(IsFullscreenBubbleDisplayed());
|
| + ASSERT_TRUE(IsFullscreenPermissionRequested());
|
| + ASSERT_TRUE(IsMouseLockPermissionRequested());
|
| + ASSERT_FALSE(IsMouseLocked());
|
| + ASSERT_TRUE(IsFullscreenForTabOrPending());
|
| +
|
| + // Accept both, confirm they are enabled and there is no prompt.
|
| + AcceptCurrentFullscreenOrMouseLockRequest();
|
| + ASSERT_TRUE(IsMouseLocked());
|
| + ASSERT_TRUE(IsFullscreenForTabOrPending());
|
| + ASSERT_FALSE(IsFullscreenPermissionRequested());
|
| }
|
|
|
| // Helper method to be called by multiple tests.
|
|
|