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

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 shutil 8 import shutil
9 9
10 import pyauto_functional # Must be imported before pyauto 10 import pyauto_functional # Must be imported before pyauto
11 import pyauto 11 import pyauto
12 import test_utils 12 import test_utils
13 from selenium.webdriver.common.keys import Keys 13 from selenium.webdriver.common.keys import Keys
14 14
15 15
16 class FullscreenMouselockTest(pyauto.PyUITest): 16 class FullscreenMouselockTest(pyauto.PyUITest):
17 """TestCase for Fullscreen and Mouse Lock.""" 17 """TestCase for Fullscreen and Mouse Lock."""
18 18
19 def setUp(self):
20 pyauto.PyUITest.setUp(self)
21 self._driver = self.NewWebDriver()
22
23 def Debug(self):
24 """Test method for experimentation.
25
26 This method will not run automatically.
27 """
28 driver = self.NewWebDriver()
Nirnimesh 2012/04/16 19:42:12 why not use self._driver?
dyu1 2012/04/16 23:21:27 Done.
29 page = settings.ContentSettingsPage.FromNavigation(driver)
30 import pdb
31 pdb.set_trace()
32
19 def ExtraChromeFlags(self): 33 def ExtraChromeFlags(self):
20 """Ensures Chrome is launched with custom flags. 34 """Ensures Chrome is launched with custom flags.
21 35
22 Returns: 36 Returns:
23 A list of extra flags to pass to Chrome when it is launched. 37 A list of extra flags to pass to Chrome when it is launched.
24 """ 38 """
25 # Extra flag needed by scroll performance tests. 39 # Extra flag needed by scroll performance tests.
26 return super(FullscreenMouselockTest, 40 return super(FullscreenMouselockTest,
27 self).ExtraChromeFlags() + ['--enable-pointer-lock'] 41 self).ExtraChromeFlags() + ['--enable-pointer-lock']
28 42
29 def testFullScreenMouseLockHooks(self): 43 def testFullScreenMouseLockHooks(self):
30 """Verify fullscreen and mouse lock automation hooks work.""" 44 """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( 45 self.NavigateToURL(self.GetHttpURLForDataPath(
36 'fullscreen_mouselock', 'fullscreen_mouselock.html')) 46 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
37 47
38 # Starting off we shouldn't be fullscreen 48 # Starting off we shouldn't be fullscreen
39 self.assertFalse(self.IsFullscreenForBrowser()) 49 self.assertFalse(self.IsFullscreenForBrowser())
40 self.assertFalse(self.IsFullscreenForTab()) 50 self.assertFalse(self.IsFullscreenForTab())
41 51
42 # Go fullscreen 52 # Go fullscreen
43 driver.find_element_by_id('enterFullscreen').click() 53 self._driver.find_element_by_id('enterFullscreen').click()
44 self.assertTrue(self.WaitUntil(self.IsFullscreenForTab)) 54 self.assertTrue(self.WaitUntil(self.IsFullscreenForTab))
45 55
46 # Bubble should be up prompting to allow fullscreen 56 # Bubble should be up prompting to allow fullscreen
47 self.assertTrue(self.IsFullscreenBubbleDisplayed()) 57 self.assertTrue(self.IsFullscreenBubbleDisplayed())
48 self.assertTrue(self.IsFullscreenBubbleDisplayingButtons()) 58 self.assertTrue(self.IsFullscreenBubbleDisplayingButtons())
49 self.assertTrue(self.IsFullscreenPermissionRequested()) 59 self.assertTrue(self.IsFullscreenPermissionRequested())
50 60
51 # Accept bubble, it should go away. 61 # Accept bubble, it should go away.
52 self.AcceptCurrentFullscreenOrMouseLockRequest() 62 self.AcceptCurrentFullscreenOrMouseLockRequest()
53 self.assertTrue(self.WaitUntil( 63 self.assertTrue(self.WaitUntil(
54 lambda: not self.IsFullscreenBubbleDisplayingButtons())) 64 lambda: not self.IsFullscreenBubbleDisplayingButtons()))
55 65
56 # Try to lock mouse, it won't lock yet but permision will be requested. 66 # Try to lock mouse, it won't lock yet but permision will be requested.
57 self.assertFalse(self.IsMouseLocked()) 67 self.assertFalse(self.IsMouseLocked())
58 driver.find_element_by_id('lockMouse1').click() 68 self._driver.find_element_by_id('lockMouse1').click()
59 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested)) 69 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested))
60 self.assertFalse(self.IsMouseLocked()) 70 self.assertFalse(self.IsMouseLocked())
61 71
62 # Deny mouse lock. 72 # Deny mouse lock.
63 self.DenyCurrentFullscreenOrMouseLockRequest() 73 self.DenyCurrentFullscreenOrMouseLockRequest()
64 self.assertTrue(self.WaitUntil( 74 self.assertTrue(self.WaitUntil(
65 lambda: not self.IsFullscreenBubbleDisplayingButtons())) 75 lambda: not self.IsFullscreenBubbleDisplayingButtons()))
66 self.assertFalse(self.IsMouseLocked()) 76 self.assertFalse(self.IsMouseLocked())
67 77
68 # Try mouse lock again, and accept it. 78 # Try mouse lock again, and accept it.
69 driver.find_element_by_id('lockMouse1').click() 79 self._driver.find_element_by_id('lockMouse1').click()
70 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested)) 80 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested))
71 self.AcceptCurrentFullscreenOrMouseLockRequest() 81 self.AcceptCurrentFullscreenOrMouseLockRequest()
72 self.assertTrue(self.WaitUntil(self.IsMouseLocked)) 82 self.assertTrue(self.WaitUntil(self.IsMouseLocked))
73 83
74 # The following doesn't work - as sending the key to the input field isn't 84 # 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. 85 # picked up by the browser. :( Need an alternative way.
76 # 86 #
77 # # Ideally we wouldn't target a specific element, we'd just send keys to 87 # # Ideally we wouldn't target a specific element, we'd just send keys to
78 # # whatever the current keyboard focus was. 88 # # whatever the current keyboard focus was.
79 # keys_target = driver.find_element_by_id('sendKeysTarget') 89 # keys_target = driver.find_element_by_id('sendKeysTarget')
80 # 90 #
81 # # ESC key should exit fullscreen and mouse lock. 91 # # ESC key should exit fullscreen and mouse lock.
82 # 92 #
83 # print "# ESC key should exit fullscreen and mouse lock." 93 # print "# ESC key should exit fullscreen and mouse lock."
84 # keys_target.send_keys(Keys.ESCAPE) 94 # keys_target.send_keys(Keys.ESCAPE)
85 # self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForBrowser())) 95 # self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForBrowser()))
86 # self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab())) 96 # self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab()))
87 # self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked())) 97 # self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()))
88 # 98 #
89 # # Check we can go browser fullscreen 99 # # Check we can go browser fullscreen
90 # print "# Check we can go browser fullscreen" 100 # print "# Check we can go browser fullscreen"
91 # keys_target.send_keys(Keys.F11) 101 # keys_target.send_keys(Keys.F11)
92 # self.assertTrue(self.WaitUntil(self.IsFullscreenForBrowser)) 102 # self.assertTrue(self.WaitUntil(self.IsFullscreenForBrowser))
93 103
104 def LaunchFullscreenMode(self):
scheib 2012/04/16 21:37:48 Consider naming this so it's clear that it doesn't
dyu1 2012/04/16 23:21:27 Done.
105 """Helper function to launch into Fullscreen mode."""
106 self.NavigateToURL(self.GetHttpURLForDataPath(
107 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
108 # Should not be in fullscreen mode during initial launch.
109 self.assertFalse(self.IsFullscreenForBrowser())
110 self.assertFalse(self.IsFullscreenForTab())
111 # Go into fullscreen mode.
112 self._driver.find_element_by_id('enterFullscreen').click()
113 self.assertTrue(self.WaitUntil(self.IsFullscreenForTab))
114 # Bubble should display prompting to allow fullscreen.
115 self.assertTrue(self.IsFullscreenBubbleDisplayed())
scheib 2012/04/16 21:37:48 FYI: Above these lines are duplicated when testing
dyu1 2012/04/16 23:21:27 There could be a chance for additional duplicates
116 self.assertTrue(self.IsFullscreenBubbleDisplayingButtons())
117 self.assertTrue(self.IsFullscreenPermissionRequested())
118
119 def _AcceptFullscreenOrMouseLockRequest(self):
120 """Helper function to accept Fullscreen or Mouse Lock request."""
121 self.AcceptCurrentFullscreenOrMouseLockRequest()
122 self.assertTrue(self.WaitUntil(
123 lambda: not self.IsFullscreenBubbleDisplayingButtons()))
124
125 def EnableFullscreenAndMouseLockMode(self):
126 """Helper function to enable fullscreen and mouse lock mode."""
127 self.NavigateToURL(self.GetHttpURLForDataPath(
128 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
129 self._driver.find_element_by_id('enterFullscreenAndLockMouse1').click()
130 self.assertTrue(self.WaitUntil(self.IsFullscreenForTab))
Nirnimesh 2012/04/16 19:42:12 why not call LaunchFullscreenMode() instead of 127
dyu1 2012/04/16 23:21:27 Done.
131 # Allow fullscreen.
132 self.AcceptCurrentFullscreenOrMouseLockRequest()
133 self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested))
scheib 2012/04/16 21:37:48 Please add a comment noting that this wait shouldn
dyu1 2012/04/16 23:21:27 Done.
134 # Allow mouse lock.
135 self.AcceptCurrentFullscreenOrMouseLockRequest()
136 self.assertTrue(self.WaitUntil(self.IsMouseLocked))
137
138 def EnableMouseLockMode(self):
Nirnimesh 2012/04/16 19:42:12 _ prefix?
dyu1 2012/04/16 23:21:27 I didn't make this private since later on you'll b
139 """Helper function to enable mouse lock mode."""
Nirnimesh 2012/04/16 19:42:12 Declare the expectations. That the fullscreen_mous
dyu1 2012/04/16 23:21:27 Done.
140 self._driver.find_element_by_id('lockMouse1').click()
141 self.assertTrue(self.IsMouseLockPermissionRequested())
142 self.AcceptCurrentFullscreenOrMouseLockRequest()
143 self.assertTrue(self.IsMouseLocked())
144
145 def testPrefsLineEntryForFullscreenAllowed(self):
146 """Verify line entry when fullscreen is allowed."""
147 self.LaunchFullscreenMode()
148 self._AcceptFullscreenOrMouseLockRequest()
149 # Get the hostname pattern (e.g. http://127.0.0.1:57622).
150 hostname_pattern = (
151 '/'.join(self.GetHttpURLForDataPath('').split('/')[0:3]) + ',*')
Nirnimesh 2012/04/16 19:42:12 this is incomprehensible. Don't split. Just remove
dyu1 2012/04/16 23:21:27 Done and moved to setUp() On 2012/04/16 19:42:12,
152 content_settings = (
153 self.GetPrefsInfo().Prefs()['profile']['content_settings'])
154 self.assertEqual(
155 {hostname_pattern: {'fullscreen': 1}}, # Allow the hostname.
156 content_settings['pattern_pairs'])
157
158 def testPrefsLineEntryForFullscreenExit(self):
159 """Verify line entry is empty when exit fullscreen mode before allowing."""
160 self.LaunchFullscreenMode()
161 self._driver.find_element_by_id('exitFullscreen').click()
162 # Verify exit from fullscreen mode.
163 self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab()))
164 content_settings = (
165 self.GetPrefsInfo().Prefs()['profile']['content_settings'])
166 self.assertEqual({}, content_settings['pattern_pairs'])
167
168 def testPatternsForAllowFullscreenAndPointerLock(self):
Nirnimesh 2012/04/16 19:42:12 the test names are getting too big. Makes it diffi
dyu1 2012/04/16 23:21:27 Done.
169 """Verify hostname pattern and behavior for allowed pointer lock.
170
171 To lock the mouse, the browser needs to be in fullscreen mode.
172 """
173 self.EnableFullscreenAndMouseLockMode()
174 self.EnableMouseLockMode()
175 hostname_pattern = (
176 '/'.join(self.GetHttpURLForDataPath('').split('/')[0:3]) + ',*')
177 expected_pattern = (
178 {hostname_pattern: {'fullscreen': 1, 'mouselock': 1}})
179 content_settings = (
180 self.GetPrefsInfo().Prefs()['profile']['content_settings'])
181 self.assertEqual(expected_pattern, content_settings['pattern_pairs'])
182
183 def testPatternsForAllowMouseLock(self):
184 """Verify hostname pattern and behavior for allowed mouse lock.
185
186 Enable fullscreen mode and enable mouse lock separately.
187 """
188 self.LaunchFullscreenMode()
189 self.AcceptCurrentFullscreenOrMouseLockRequest()
190 self.EnableMouseLockMode()
191 hostname_pattern = (
192 '/'.join(self.GetHttpURLForDataPath('').split('/')[0:3]) + ',*')
193 expected_pattern = (
194 {hostname_pattern: {'fullscreen': 1, 'mouselock': 1}})
195 content_settings = (
196 self.GetPrefsInfo().Prefs()['profile']['content_settings'])
197 self.assertEqual(expected_pattern, content_settings['pattern_pairs'])
198
199 def testNoMouseLockRequest(self):
200 """Verify mouse lock request does not appear.
201
202 When allowing all sites to disable the mouse cursor, the mouse lock request
203 bubble should not show. The mouse cursor should be automatically disabled
204 when clicking on a disable mouse button.
205 """
206 # Allow all sites to disable mouse cursor.
207 self.SetPrefs(pyauto.kDefaultContentSettings, {u'mouselock': 1})
208 self.LaunchFullscreenMode()
209 # Allow for fullscreen mode.
210 self._AcceptFullscreenOrMouseLockRequest()
211 self._driver.find_element_by_id('lockMouse1').click()
212 self.assertTrue(self.WaitUntil(
213 lambda: not self.IsMouseLockPermissionRequested()))
214 self.assertTrue(self.IsMouseLocked())
215
216 def testUnableToLockMouse(self):
217 """Verify mouse lock is disabled.
218
219 When not allowing any site to disable the mouse cursor, the mouse lock
220 request bubble should not show and the mouse cursor should not be disabled.
221 """
222 # Do not allow any site to disable mouse cursor.
223 self.SetPrefs(pyauto.kDefaultContentSettings, {u'mouselock': 2})
224 self.LaunchFullscreenMode()
225 # Allow for fullscreen mode.
226 self._AcceptFullscreenOrMouseLockRequest()
227 self._driver.find_element_by_id('lockMouse1').click()
228 self.assertTrue(self.WaitUntil(
229 lambda: not self.IsMouseLockPermissionRequested()))
scheib 2012/04/16 21:37:48 I'm concerned that there is a race condition here.
dyu1 2012/04/16 23:21:27 If the js callback is successful then check the tw
scheib 2012/04/16 23:55:42 If you can get your python test code to wait for s
dyu1 2012/04/23 18:50:26 Done.
230 self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()))
231
232 def SearchForTextOutsideOfContainer(self):
233 """Verify text outside of container is not visible when fullscreen.
234
235 Verify this test manually until there is a way to find text on screen
236 without using FindInPage().
237
238 The text that is outside of the fullscreen container should only be visible
239 when fullscreen is off. The text should not be visible while in fullscreen
240 mode.
241 """
242 self.NavigateToURL(self.GetHttpURLForDataPath(
243 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
244 # Should not be in fullscreen mode during initial launch.
245 self.assertFalse(self.IsFullscreenForBrowser())
246 self.assertFalse(self.IsFullscreenForTab())
247 self.assertTrue(
248 self.WaitUntil(lambda: self.FindInPage(
249 'This text is outside of the container')['match_count'],
250 expect_retval=1))
251 # Go into fullscreen mode.
252 self._driver.find_element_by_id('enterFullscreen').click()
253 self.assertTrue(self.WaitUntil(self.IsFullscreenForTab))
254 # TODO(dyu): find a way to verify on screen text instead of using
255 # FindInPage() which searches for text in the HTML.
256
94 257
95 if __name__ == '__main__': 258 if __name__ == '__main__':
96 pyauto_functional.Main() 259 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