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

Side by Side Diff: chrome/test/functional/fullscreen_mouselock.py

Issue 10082033: Add tests for fullscreen mode and mouse lock mode. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « chrome/test/functional/PYAUTO_TESTS ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 shutil 9 import shutil
9 10
10 import pyauto_functional # Must be imported before pyauto 11 import pyauto_functional # Must be imported before pyauto
11 import pyauto 12 import pyauto
12 import test_utils 13 import test_utils
13 from selenium.webdriver.common.keys import Keys 14 from selenium.webdriver.common.keys import Keys
15 from webdriver_pages import settings
14 16
15 17
16 class FullscreenMouselockTest(pyauto.PyUITest): 18 class FullscreenMouselockTest(pyauto.PyUITest):
17 """TestCase for Fullscreen and Mouse Lock.""" 19 """TestCase for Fullscreen and Mouse Lock."""
18 20
21 def setUp(self):
22 pyauto.PyUITest.setUp(self)
23 self._driver = self.NewWebDriver()
24 # Get the hostname pattern (e.g. http://127.0.0.1:57622).
25 self._hostname_pattern = (
26 re.sub('/files/$', '', self.GetHttpURLForDataPath('')))
27
28 def Debug(self):
29 """Test method for experimentation.
30
31 This method will not run automatically.
32 """
33 self._driver = self.NewWebDriver()
34 page = settings.ContentSettingsPage.FromNavigation(self._driver)
35 import pdb
36 pdb.set_trace()
37
19 def ExtraChromeFlags(self): 38 def ExtraChromeFlags(self):
20 """Ensures Chrome is launched with custom flags. 39 """Ensures Chrome is launched with custom flags.
21 40
22 Returns: 41 Returns:
23 A list of extra flags to pass to Chrome when it is launched. 42 A list of extra flags to pass to Chrome when it is launched.
24 """ 43 """
25 # Extra flag needed by scroll performance tests. 44 # Extra flag needed by scroll performance tests.
26 return super(FullscreenMouselockTest, 45 return super(FullscreenMouselockTest,
27 self).ExtraChromeFlags() + ['--enable-pointer-lock'] 46 self).ExtraChromeFlags() + ['--enable-pointer-lock']
28 47
29 def testFullScreenMouseLockHooks(self): 48 def testFullScreenMouseLockHooks(self):
30 """Verify fullscreen and mouse lock automation hooks work.""" 49 """Verify fullscreen and mouse lock automation hooks work."""
31
32 from webdriver_pages import settings
33 from webdriver_pages.settings import Behaviors, ContentTypes
34 driver = self.NewWebDriver()
35 self.NavigateToURL(self.GetHttpURLForDataPath( 50 self.NavigateToURL(self.GetHttpURLForDataPath(
36 'fullscreen_mouselock', 'fullscreen_mouselock.html')) 51 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
37 52
38 # Starting off we shouldn't be fullscreen 53 # Starting off we shouldn't be fullscreen
39 self.assertFalse(self.IsFullscreenForBrowser()) 54 self.assertFalse(self.IsFullscreenForBrowser())
40 self.assertFalse(self.IsFullscreenForTab()) 55 self.assertFalse(self.IsFullscreenForTab())
41 56
42 # Go fullscreen 57 # Go fullscreen
43 driver.find_element_by_id('enterFullscreen').click() 58 self._driver.find_element_by_id('enterFullscreen').click()
44 self.assertTrue(self.WaitUntil(self.IsFullscreenForTab)) 59 self.assertTrue(self.WaitUntil(self.IsFullscreenForTab))
45 60
46 # Bubble should be up prompting to allow fullscreen 61 # Bubble should be up prompting to allow fullscreen
47 self.assertTrue(self.IsFullscreenBubbleDisplayed()) 62 self.assertTrue(self.IsFullscreenBubbleDisplayed())
48 self.assertTrue(self.IsFullscreenBubbleDisplayingButtons()) 63 self.assertTrue(self.IsFullscreenBubbleDisplayingButtons())
49 self.assertTrue(self.IsFullscreenPermissionRequested()) 64 self.assertTrue(self.IsFullscreenPermissionRequested())
50 65
51 # Accept bubble, it should go away. 66 # Accept bubble, it should go away.
52 self.AcceptCurrentFullscreenOrMouseLockRequest() 67 self.AcceptCurrentFullscreenOrMouseLockRequest()
53 self.assertTrue(self.WaitUntil( 68 self.assertTrue(self.WaitUntil(
54 lambda: not self.IsFullscreenBubbleDisplayingButtons())) 69 lambda: not self.IsFullscreenBubbleDisplayingButtons()))
55 70
56 # Try to lock mouse, it won't lock yet but permision will be requested. 71 # Try to lock mouse, it won't lock yet but permision will be requested.
57 self.assertFalse(self.IsMouseLocked()) 72 self.assertFalse(self.IsMouseLocked())
58 driver.find_element_by_id('lockMouse1').click() 73 self._driver.find_element_by_id('lockMouse1').click()
59 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested)) 74 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested))
60 self.assertFalse(self.IsMouseLocked()) 75 self.assertFalse(self.IsMouseLocked())
61 76
62 # Deny mouse lock. 77 # Deny mouse lock.
63 self.DenyCurrentFullscreenOrMouseLockRequest() 78 self.DenyCurrentFullscreenOrMouseLockRequest()
64 self.assertTrue(self.WaitUntil( 79 self.assertTrue(self.WaitUntil(
65 lambda: not self.IsFullscreenBubbleDisplayingButtons())) 80 lambda: not self.IsFullscreenBubbleDisplayingButtons()))
66 self.assertFalse(self.IsMouseLocked()) 81 self.assertFalse(self.IsMouseLocked())
67 82
68 # Try mouse lock again, and accept it. 83 # Try mouse lock again, and accept it.
69 driver.find_element_by_id('lockMouse1').click() 84 self._driver.find_element_by_id('lockMouse1').click()
70 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested)) 85 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested))
71 self.AcceptCurrentFullscreenOrMouseLockRequest() 86 self.AcceptCurrentFullscreenOrMouseLockRequest()
72 self.assertTrue(self.WaitUntil(self.IsMouseLocked)) 87 self.assertTrue(self.WaitUntil(self.IsMouseLocked))
73 88
74 # The following doesn't work - as sending the key to the input field isn't 89 # The following doesn't work - as sending the key to the input field isn't
75 # picked up by the browser. :( Need an alternative way. 90 # picked up by the browser. :( Need an alternative way.
76 # 91 #
77 # # Ideally we wouldn't target a specific element, we'd just send keys to 92 # # Ideally we wouldn't target a specific element, we'd just send keys to
78 # # whatever the current keyboard focus was. 93 # # whatever the current keyboard focus was.
79 # keys_target = driver.find_element_by_id('sendKeysTarget') 94 # keys_target = driver.find_element_by_id('sendKeysTarget')
80 # 95 #
81 # # ESC key should exit fullscreen and mouse lock. 96 # # ESC key should exit fullscreen and mouse lock.
82 # 97 #
83 # print "# ESC key should exit fullscreen and mouse lock." 98 # print "# ESC key should exit fullscreen and mouse lock."
84 # keys_target.send_keys(Keys.ESCAPE) 99 # keys_target.send_keys(Keys.ESCAPE)
85 # self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForBrowser())) 100 # self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForBrowser()))
86 # self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab())) 101 # self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab()))
87 # self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked())) 102 # self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()))
88 # 103 #
89 # # Check we can go browser fullscreen 104 # # Check we can go browser fullscreen
90 # print "# Check we can go browser fullscreen" 105 # print "# Check we can go browser fullscreen"
91 # keys_target.send_keys(Keys.F11) 106 # keys_target.send_keys(Keys.F11)
92 # self.assertTrue(self.WaitUntil(self.IsFullscreenForBrowser)) 107 # self.assertTrue(self.WaitUntil(self.IsFullscreenForBrowser))
93 108
109 def LaunchFSAndExpectPrompt(self, buttonAction='enterFullscreen'):
dennis_jeffrey 2012/04/17 17:57:14 prefix function name with underscore if meant to b
dennis_jeffrey 2012/04/17 17:57:14 button_action, here and everywhere else in this fi
dyu1 2012/04/23 18:50:26 Done.
dyu1 2012/04/23 18:50:26 Done.
110 """Helper function to launch fullscreen and expect a prompt.
111
112 Fullscreen is initiated and a bubble prompt appears asking to allow or
113 cancel from fullscreen mode. The actual fullscreen mode doesn't take place
114 until after approving the prompt.
dennis_jeffrey 2012/04/17 17:57:14 (optional) maybe we should say that this helper wi
dyu1 2012/04/23 18:50:26 Done.
115
116 Args:
117 buttonAction: The button id to click to initiate an action. Default is to
118 click enterFullscreen.
dennis_jeffrey 2012/04/17 17:57:14 indent by 4 more spaces
dyu1 2012/04/23 18:50:26 Done.
119 """
120 self.NavigateToURL(self.GetHttpURLForDataPath(
121 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
122 # Should not be in fullscreen mode during initial launch.
123 self.assertFalse(self.IsFullscreenForBrowser())
124 self.assertFalse(self.IsFullscreenForTab())
125 # Go into fullscreen mode.
126 self._driver.find_element_by_id(buttonAction).click()
127 self.assertTrue(self.WaitUntil(self.IsFullscreenForTab))
128 # Bubble should display prompting to allow fullscreen.
129 self.assertTrue(self.IsFullscreenPermissionRequested())
130
131 def _AcceptFullscreenOrMouseLockRequest(self):
132 """Helper function to accept Fullscreen or Mouse Lock request."""
133 self.AcceptCurrentFullscreenOrMouseLockRequest()
134 self.assertTrue(self.WaitUntil(
135 lambda: not self.IsFullscreenBubbleDisplayingButtons()))
136
137 def EnableFullscreenAndMouseLockMode(self):
138 """Helper function to enable fullscreen and mouse lock mode."""
dennis_jeffrey 2012/04/17 17:57:14 nit: try to be consistent with capitalization of "
dyu1 2012/04/23 18:50:26 Done.
139 self.LaunchFSAndExpectPrompt('enterFullscreenAndLockMouse1')
dennis_jeffrey 2012/04/17 17:57:14 button_action=
dyu1 2012/04/23 18:50:26 Done On 2012/04/17 17:57:14, dennis_jeffrey wrote
140 # Allow fullscreen.
141 self.AcceptCurrentFullscreenOrMouseLockRequest()
142 # The wait is needed due to crbug.com/123396. Should be able to click the
143 # fullscreen and mouselock button and be both accepted in a single action.
144 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested))
145 # Allow mouse lock.
146 self.AcceptCurrentFullscreenOrMouseLockRequest()
147 self.assertTrue(self.WaitUntil(self.IsMouseLocked))
148
149 def EnableMouseLockMode(self, buttonAction='lockMouse1'):
150 """Helper function to enable mouse lock mode.
151
152 For now, to lock the mouse, the browser needs to be in fullscreen mode.
153
154 Args:
155 buttonAction: The button id to click to initiate an action. Default is to
156 click lockMouse1.
157 """
158 self._driver.find_element_by_id(buttonAction).click()
159 self.assertTrue(self.IsMouseLockPermissionRequested())
160 self.AcceptCurrentFullscreenOrMouseLockRequest()
161 self.assertTrue(self.IsMouseLocked())
162
163 def testPrefsLineEntryForFullscreenAllowed(self):
164 """Verify line entry when fullscreen is allowed."""
165 self.LaunchFSAndExpectPrompt()
166 self._AcceptFullscreenOrMouseLockRequest()
167 content_settings = (
168 self.GetPrefsInfo().Prefs()['profile']['content_settings'])
169 self.assertEqual(
170 {self._hostname_pattern + ',*': {'fullscreen': 1}}, # Allow hostname.
171 content_settings['pattern_pairs'])
dennis_jeffrey 2012/04/17 17:57:14 nit: should we have a msg='' argument to provide a
dyu1 2012/04/23 18:50:26 I added it although the assertion error shows that
172
173 def testPrefsLineEntryForFullscreenExit(self):
174 """Verify line entry is empty when exit fullscreen mode before allowing."""
175 self.LaunchFSAndExpectPrompt()
176 self._driver.find_element_by_id('exitFullscreen').click()
177 # Verify exit from fullscreen mode.
178 self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab()))
179 content_settings = (
180 self.GetPrefsInfo().Prefs()['profile']['content_settings'])
181 self.assertEqual({}, content_settings['pattern_pairs'])
182
183 def testPatternsForFSAndML(self):
dennis_jeffrey 2012/04/17 17:57:14 there's some inconsistency in function names added
dyu1 2012/04/23 18:50:26 This test is disabled in PYAUTO_TESTS. The name is
184 """Verify hostname pattern and behavior for allowed mouse cursor lock.
185
186 To lock the mouse, the browser needs to be in fullscreen mode.
187 """
188 self.EnableFullscreenAndMouseLockMode()
189 self.EnableMouseLockMode()
190 expected_pattern = (
191 {self._hostname_pattern + ',*': {'fullscreen': 1, 'mouselock': 1}})
192 content_settings = (
193 self.GetPrefsInfo().Prefs()['profile']['content_settings'])
194 self.assertEqual(expected_pattern, content_settings['pattern_pairs'])
195
196 def testPatternsForAllowMouseLock(self):
197 """Verify hostname pattern and behavior for allowed mouse cursor lock.
198
199 Enable fullscreen mode and enable mouse lock separately.
200 """
201 self.LaunchFSAndExpectPrompt()
202 self.AcceptCurrentFullscreenOrMouseLockRequest()
203 self.EnableMouseLockMode()
204 expected_pattern = (
205 {self._hostname_pattern + ',*': {'fullscreen': 1, 'mouselock': 1}})
206 content_settings = (
207 self.GetPrefsInfo().Prefs()['profile']['content_settings'])
208 self.assertEqual(expected_pattern, content_settings['pattern_pairs'])
209
210 def testNoMouseLockRequest(self):
211 """Verify mouse lock request does not appear.
212
213 When allowing all sites to disable the mouse cursor, the mouse lock request
214 bubble should not show. The mouse cursor should be automatically disabled
215 when clicking on a disable mouse button.
216 """
217 # Allow all sites to disable mouse cursor.
218 self.SetPrefs(pyauto.kDefaultContentSettings, {u'mouselock': 1})
219 self.LaunchFSAndExpectPrompt()
220 # Allow for fullscreen mode.
221 self._AcceptFullscreenOrMouseLockRequest()
222 self._driver.find_element_by_id('lockMouse1').click()
223 self.assertTrue(self.WaitUntil(
224 lambda: not self.IsMouseLockPermissionRequested()))
225 self.assertTrue(self.IsMouseLocked())
dennis_jeffrey 2012/04/17 17:57:14 Perhaps the () are unnecessary, (e.g., see line 14
dennis_jeffrey 2012/04/17 19:12:07 Sorry, please ignore this comment. The parens are
226
227 def testUnableToLockMouse(self):
228 """Verify mouse lock is disabled.
229
230 When not allowing any site to disable the mouse cursor, the mouse lock
231 request bubble should not show and the mouse cursor should not be disabled.
232 """
233 # Do not allow any site to disable mouse cursor.
234 self.SetPrefs(pyauto.kDefaultContentSettings, {u'mouselock': 2})
235 self.LaunchFSAndExpectPrompt()
236 # Allow for fullscreen mode.
237 self._AcceptFullscreenOrMouseLockRequest()
238 self._driver.find_element_by_id('lockMouse1').click()
239 self.assertTrue(self.WaitUntil(
240 lambda: not self.IsMouseLockPermissionRequested()))
241 self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()))
242
243 def SearchForTextOutsideOfContainer(self):
244 """Verify text outside of container is not visible when fullscreen.
245
246 Verify this test manually until there is a way to find text on screen
247 without using FindInPage().
248
249 The text that is outside of the fullscreen container should only be visible
250 when fullscreen is off. The text should not be visible while in fullscreen
251 mode.
252 """
253 self.NavigateToURL(self.GetHttpURLForDataPath(
254 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
255 # Should not be in fullscreen mode during initial launch.
256 self.assertFalse(self.IsFullscreenForBrowser())
257 self.assertFalse(self.IsFullscreenForTab())
258 self.assertTrue(
259 self.WaitUntil(lambda: self.FindInPage(
260 'This text is outside of the container')['match_count'],
261 expect_retval=1))
262 # Go into fullscreen mode.
263 self._driver.find_element_by_id('enterFullscreen').click()
264 self.assertTrue(self.WaitUntil(self.IsFullscreenForTab))
265 # TODO(dyu): find a way to verify on screen text instead of using
266 # FindInPage() which searches for text in the HTML.
267
94 268
95 if __name__ == '__main__': 269 if __name__ == '__main__':
96 pyauto_functional.Main() 270 pyauto_functional.Main()
OLDNEW
« no previous file with comments | « chrome/test/functional/PYAUTO_TESTS ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698