| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import logging | 6 import logging |
| 7 import os | 7 import os |
| 8 import re | 8 import re |
| 9 import shutil | 9 import shutil |
| 10 import time | 10 import time |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 # The wait is needed due to crbug.com/123396. Should be able to click the | 157 # The wait is needed due to crbug.com/123396. Should be able to click the |
| 158 # fullscreen and mouselock button and be both accepted in a single action. | 158 # fullscreen and mouselock button and be both accepted in a single action. |
| 159 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested)) | 159 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested)) |
| 160 # Allow mouse lock. | 160 # Allow mouse lock. |
| 161 self.AcceptCurrentFullscreenOrMouseLockRequest() | 161 self.AcceptCurrentFullscreenOrMouseLockRequest() |
| 162 self.assertTrue(self.WaitUntil(self.IsMouseLocked)) | 162 self.assertTrue(self.WaitUntil(self.IsMouseLocked)) |
| 163 | 163 |
| 164 def _EnableMouseLockMode(self, button_action='lockMouse1'): | 164 def _EnableMouseLockMode(self, button_action='lockMouse1'): |
| 165 """Helper function to enable mouse lock mode. | 165 """Helper function to enable mouse lock mode. |
| 166 | 166 |
| 167 For now, to lock the mouse, the browser needs to be in fullscreen mode. | |
| 168 | |
| 169 Args: | 167 Args: |
| 170 button_action: The button id to click to initiate an action. Default is to | 168 button_action: The button id to click to initiate an action. Default is to |
| 171 click lockMouse1. | 169 click lockMouse1. |
| 172 """ | 170 """ |
| 173 self._driver.find_element_by_id(button_action).click() | 171 self._driver.find_element_by_id(button_action).click() |
| 174 self.assertTrue(self.IsMouseLockPermissionRequested()) | 172 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested)) |
| 175 self.AcceptCurrentFullscreenOrMouseLockRequest() | 173 self.AcceptCurrentFullscreenOrMouseLockRequest() |
| 176 self.assertTrue(self.IsMouseLocked()) | 174 self.assertTrue(self.IsMouseLocked()) |
| 177 | 175 |
| 178 def testPrefsForFullscreenAllowed(self): | 176 def testPrefsForFullscreenAllowed(self): |
| 179 """Verify prefs when fullscreen is allowed.""" | 177 """Verify prefs when fullscreen is allowed.""" |
| 180 self._LaunchFSAndExpectPrompt() | 178 self._LaunchFSAndExpectPrompt() |
| 181 self._AcceptFullscreenOrMouseLockRequest() | 179 self._AcceptFullscreenOrMouseLockRequest() |
| 182 content_settings = ( | 180 content_settings = ( |
| 183 self.GetPrefsInfo().Prefs()['profile']['content_settings']) | 181 self.GetPrefsInfo().Prefs()['profile']['content_settings']) |
| 184 self.assertEqual( | 182 self.assertEqual( |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked())) | 279 self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked())) |
| 282 | 280 |
| 283 def testMouseLockInBrowserFS(self): | 281 def testMouseLockInBrowserFS(self): |
| 284 """Verify mouse lock in browser fullscreen requires allow prompt.""" | 282 """Verify mouse lock in browser fullscreen requires allow prompt.""" |
| 285 self._InitiateBrowserFullscreen() | 283 self._InitiateBrowserFullscreen() |
| 286 self._driver.set_script_timeout(2) | 284 self._driver.set_script_timeout(2) |
| 287 self._driver.execute_script('lockMouse1AndSetLockResult()') | 285 self._driver.execute_script('lockMouse1AndSetLockResult()') |
| 288 # Bubble should display prompting to allow mouselock. | 286 # Bubble should display prompting to allow mouselock. |
| 289 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested)) | 287 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested)) |
| 290 self.AcceptCurrentFullscreenOrMouseLockRequest() | 288 self.AcceptCurrentFullscreenOrMouseLockRequest() |
| 291 | |
| 292 # Waits until lock_result gets 'success' or 'failure'. | 289 # Waits until lock_result gets 'success' or 'failure'. |
| 293 lock_result = self._driver.execute_script('return lock_result') | 290 lock_result = self._driver.execute_script('return lock_result') |
| 294 self.assertEqual(lock_result, 'success', | 291 self.assertEqual(lock_result, 'success', |
| 295 msg='Mouse was not locked in browser fullscreen.') | 292 msg='Mouse was not locked in browser fullscreen.') |
| 296 | 293 |
| 297 def testNoMouseLockWhenCancelFS(self): | 294 def testNoMouseLockWhenCancelFS(self): |
| 298 """Verify mouse lock breaks when canceling tab fullscreen. | 295 """Verify mouse lock breaks when canceling tab fullscreen. |
| 299 | 296 |
| 300 This test uses javascript to initiate exit of tab fullscreen after mouse | 297 This test uses javascript to initiate exit of tab fullscreen after mouse |
| 301 lock success callback. | 298 lock success callback. |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 Mouse lock breaks when the focus is placed on another new window. | 348 Mouse lock breaks when the focus is placed on another new window. |
| 352 """ | 349 """ |
| 353 self._LaunchFSAndExpectPrompt() | 350 self._LaunchFSAndExpectPrompt() |
| 354 self.AcceptCurrentFullscreenOrMouseLockRequest() | 351 self.AcceptCurrentFullscreenOrMouseLockRequest() |
| 355 # Open a new window to shift focus away. | 352 # Open a new window to shift focus away. |
| 356 self.OpenNewBrowserWindow(True) | 353 self.OpenNewBrowserWindow(True) |
| 357 self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab())) | 354 self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab())) |
| 358 self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()), | 355 self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()), |
| 359 msg='Mouse lock did not break when browser lost focus.') | 356 msg='Mouse lock did not break when browser lost focus.') |
| 360 | 357 |
| 358 def testMouseLockLostOnReload(self): |
| 359 """Verify mouse lock is lost on page reload.""" |
| 360 self.NavigateToURL(self.GetHttpURLForDataPath( |
| 361 'fullscreen_mouselock', 'fullscreen_mouselock.html')) |
| 362 self._EnableMouseLockMode() |
| 363 self.ReloadActiveTab() |
| 364 self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()), |
| 365 msg='Mouse lock did not break when page is reloaded.') |
| 366 |
| 361 def ExitTabFSToBrowserFS(self): | 367 def ExitTabFSToBrowserFS(self): |
| 362 """Verify exiting tab fullscreen leaves browser in browser fullscreen. | 368 """Verify exiting tab fullscreen leaves browser in browser fullscreen. |
| 363 | 369 |
| 370 This test is semi-automated. |
| 371 |
| 364 The browser initiates browser fullscreen, then initiates tab fullscreen. The | 372 The browser initiates browser fullscreen, then initiates tab fullscreen. The |
| 365 test verifies that existing tab fullscreen by simulating ESC key press or | 373 test verifies that existing tab fullscreen by simulating ESC key press or |
| 366 clicking the js function to exitFullscreen() will exit the tab fullscreen | 374 clicking the js function to exitFullscreen() will exit the tab fullscreen |
| 367 leaving browser fullscreen intact. | 375 leaving browser fullscreen intact. |
| 368 """ | 376 """ |
| 369 self._InitiateBrowserFullscreen() | 377 self._InitiateBrowserFullscreen() |
| 370 # Initiate tab fullscreen. | 378 # Initiate tab fullscreen. |
| 371 self._driver.find_element_by_id('enterFullscreen').click() | 379 self._driver.find_element_by_id('enterFullscreen').click() |
| 372 self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab())) | 380 self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab())) |
| 373 # Require manual intervention to send ESC key due to crbug.com/123930. | 381 # Require manual intervention to send ESC key due to crbug.com/123930. |
| 374 # TODO(dyu): Update to a full test once associated bug is fixed. | 382 # TODO(dyu): Update to a full test once associated bug is fixed. |
| 375 print "Press ESC key to exit tab fullscreen." | 383 logging.info('Press ESC key to exit tab fullscreen.') |
| 376 time.sleep(5) | 384 time.sleep(5) |
| 377 self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab())) | 385 self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab())) |
| 378 self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForBrowser()), | 386 self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForBrowser()), |
| 379 msg='Not in browser fullscreen mode.') | 387 msg='Not in browser fullscreen mode.') |
| 380 | 388 |
| 381 self._driver.find_element_by_id('enterFullscreen').click() | 389 self._driver.find_element_by_id('enterFullscreen').click() |
| 382 self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab())) | 390 self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab())) |
| 383 # Exit tab fullscreen by clicking button exitFullscreen(). | 391 # Exit tab fullscreen by clicking button exitFullscreen(). |
| 384 self._driver.find_element_by_id('exitFullscreen').click() | 392 self._driver.find_element_by_id('exitFullscreen').click() |
| 385 self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab())) | 393 self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab())) |
| 386 self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForBrowser()), | 394 self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForBrowser()), |
| 387 msg='Not in browser fullscreen mode.') | 395 msg='Not in browser fullscreen mode.') |
| 388 | 396 |
| 389 def F11KeyExitsTabAndBrowserFS(self): | 397 def F11KeyExitsTabAndBrowserFS(self): |
| 390 """Verify existing tab fullscreen exits all fullscreen modes. | 398 """Verify existing tab fullscreen exits all fullscreen modes. |
| 391 | 399 |
| 400 This test is semi-automated. |
| 401 |
| 392 The browser initiates browser fullscreen, then initiates tab fullscreen. The | 402 The browser initiates browser fullscreen, then initiates tab fullscreen. The |
| 393 test verifies that existing tab fullscreen by simulating F11 key press or | 403 test verifies that existing tab fullscreen by simulating F11 key press or |
| 394 CMD + SHIFT + F keys on the Mac will exit the tab fullscreen and the | 404 CMD + SHIFT + F keys on the Mac will exit the tab fullscreen and the |
| 395 browser fullscreen. | 405 browser fullscreen. |
| 396 """ | 406 """ |
| 397 self._InitiateBrowserFullscreen() | 407 self._InitiateBrowserFullscreen() |
| 398 # Initiate tab fullscreen. | 408 # Initiate tab fullscreen. |
| 399 self._driver.find_element_by_id('enterFullscreen').click() | 409 self._driver.find_element_by_id('enterFullscreen').click() |
| 400 self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab())) | 410 self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab())) |
| 401 # Require manual intervention to send F11 key due to crbug.com/123930. | 411 # Require manual intervention to send F11 key due to crbug.com/123930. |
| 402 # TODO(dyu): Update to a full test once associated bug is fixed. | 412 # TODO(dyu): Update to a full test once associated bug is fixed. |
| 403 print "Press F11 key to exit tab fullscreen." | 413 logging.info('Press F11 key to exit tab fullscreen.') |
| 404 time.sleep(5) | 414 time.sleep(5) |
| 405 self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab())) | 415 self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab())) |
| 406 self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForBrowser()), | 416 self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForBrowser()), |
| 407 msg='Browser is in fullscreen mode.') | 417 msg='Browser is in fullscreen mode.') |
| 408 | 418 |
| 409 def SearchForTextOutsideOfContainer(self): | 419 def SearchForTextOutsideOfContainer(self): |
| 410 """Verify text outside of container is not visible when fullscreen. | 420 """Verify text outside of container is not visible when fullscreen. |
| 411 | 421 |
| 422 This test is semi-automated. |
| 423 |
| 412 Verify this test manually until there is a way to find text on screen | 424 Verify this test manually until there is a way to find text on screen |
| 413 without using FindInPage(). | 425 without using FindInPage(). |
| 414 | 426 |
| 415 The text that is outside of the fullscreen container should only be visible | 427 The text that is outside of the fullscreen container should only be visible |
| 416 when fullscreen is off. The text should not be visible while in fullscreen | 428 when fullscreen is off. The text should not be visible while in fullscreen |
| 417 mode. | 429 mode. |
| 418 """ | 430 """ |
| 419 self.NavigateToURL(self.GetHttpURLForDataPath( | 431 self.NavigateToURL(self.GetHttpURLForDataPath( |
| 420 'fullscreen_mouselock', 'fullscreen_mouselock.html')) | 432 'fullscreen_mouselock', 'fullscreen_mouselock.html')) |
| 421 # Should not be in fullscreen mode during initial launch. | 433 # Should not be in fullscreen mode during initial launch. |
| 422 self.assertFalse(self.IsFullscreenForBrowser()) | 434 self.assertFalse(self.IsFullscreenForBrowser()) |
| 423 self.assertFalse(self.IsFullscreenForTab()) | 435 self.assertFalse(self.IsFullscreenForTab()) |
| 424 self.assertTrue( | 436 self.assertTrue( |
| 425 self.WaitUntil(lambda: self.FindInPage( | 437 self.WaitUntil(lambda: self.FindInPage( |
| 426 'This text is outside of the container')['match_count'], | 438 'This text is outside of the container')['match_count'], |
| 427 expect_retval=1)) | 439 expect_retval=1)) |
| 428 # Go into fullscreen mode. | 440 # Go into fullscreen mode. |
| 429 self._driver.find_element_by_id('enterFullscreen').click() | 441 self._driver.find_element_by_id('enterFullscreen').click() |
| 430 self.assertTrue(self.WaitUntil(self.IsFullscreenForTab)) | 442 self.assertTrue(self.WaitUntil(self.IsFullscreenForTab)) |
| 431 time.sleep(5) | 443 time.sleep(5) |
| 432 # TODO(dyu): find a way to verify on screen text instead of using | 444 # TODO(dyu): find a way to verify on screen text instead of using |
| 433 # FindInPage() which searches for text in the HTML. | 445 # FindInPage() which searches for text in the HTML. |
| 434 | 446 |
| 447 def SameMouseLockMovement(self): |
| 448 """Verify the correct feel of mouse movement data when mouse is locked. |
| 449 |
| 450 This test is semi-automated. |
| 451 |
| 452 This test loads the same web page in two different tabs while in mouse lock |
| 453 mode. Each tab loads the web page from a different URL (e.g. by loading it |
| 454 from a localhost server and a file url). The test verifies |
| 455 that the mouse lock movements work the same in both |
| 456 tabs. |
| 457 """ |
| 458 url1 = self.GetHttpURLForDataPath( |
| 459 'fullscreen_mouselock', 'fullscreen_mouselock.html') |
| 460 url2 = self.GetFileURLForDataPath( |
| 461 'fullscreen_mouselock', 'fullscreen_mouselock.html') |
| 462 tab2 = 'f1-4' |
| 463 self.NavigateToURL(url1) |
| 464 self.RunCommand(pyauto.IDC_NEW_TAB) # Open new tab. |
| 465 self.NavigateToURL(url2, 0, 1) |
| 466 self._driver.switch_to_window(tab2) |
| 467 self._EnableMouseLockMode() # Lock mouse in tab 2. |
| 468 raw_input('Manually move the mouse cursor on the page in tab 2. Shift+Tab \ |
| 469 into tab 1, click on lockMouse1() button, and move the mouse \ |
| 470 cursor on the page in tab 1. Verify mouse movement is smooth.') |
| 471 |
| 435 | 472 |
| 436 if __name__ == '__main__': | 473 if __name__ == '__main__': |
| 437 pyauto_functional.Main() | 474 pyauto_functional.Main() |
| OLD | NEW |