| OLD | NEW |
| 1 # Copyright 2012 The Chromium Authors. All rights reserved. | 1 # Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import logging | 5 import logging |
| 6 import tempfile | 6 import tempfile |
| 7 import time | 7 import time |
| 8 | 8 |
| 9 from telemetry.core import exceptions | 9 from telemetry.core import exceptions |
| 10 from telemetry import decorators | 10 from telemetry import decorators |
| 11 from telemetry.internal.image_processing import video | 11 from telemetry.internal.image_processing import video |
| 12 from telemetry.testing import tab_test_case | 12 from telemetry.testing import tab_test_case |
| 13 from telemetry.timeline import model | 13 from telemetry.timeline import model |
| 14 from telemetry.timeline import tracing_config | 14 from telemetry.timeline import tracing_config |
| 15 from telemetry.util import image_util | 15 from telemetry.util import image_util |
| 16 from telemetry.util import rgba_color | 16 from telemetry.util import rgba_color |
| 17 | 17 |
| 18 import py_utils | 18 import py_utils |
| 19 | 19 |
| 20 | 20 |
| 21 def _IsDocumentVisible(tab): | 21 def _IsDocumentVisible(tab): |
| 22 return not tab.EvaluateJavaScript2('document.hidden || document.webkitHidden') | 22 return not tab.EvaluateJavaScript('document.hidden || document.webkitHidden') |
| 23 | 23 |
| 24 | 24 |
| 25 class FakePlatformBackend(object): | 25 class FakePlatformBackend(object): |
| 26 def __init__(self): | 26 def __init__(self): |
| 27 self.platform = FakePlatform() | 27 self.platform = FakePlatform() |
| 28 | 28 |
| 29 def DidStartBrowser(self, _, _2): | 29 def DidStartBrowser(self, _, _2): |
| 30 pass | 30 pass |
| 31 | 31 |
| 32 def WillCloseBrowser(self, _, _2): | 32 def WillCloseBrowser(self, _, _2): |
| (...skipping 28 matching lines...) Expand all Loading... |
| 61 | 61 |
| 62 def testTabBrowserIsRightBrowser(self): | 62 def testTabBrowserIsRightBrowser(self): |
| 63 self.assertEquals(self._tab.browser, self._browser) | 63 self.assertEquals(self._tab.browser, self._browser) |
| 64 | 64 |
| 65 def testRendererCrash(self): | 65 def testRendererCrash(self): |
| 66 self.assertRaises(exceptions.DevtoolsTargetCrashException, | 66 self.assertRaises(exceptions.DevtoolsTargetCrashException, |
| 67 lambda: self._tab.Navigate('chrome://crash', | 67 lambda: self._tab.Navigate('chrome://crash', |
| 68 timeout=30)) | 68 timeout=30)) |
| 69 | 69 |
| 70 def testTimeoutExceptionIncludeConsoleMessage(self): | 70 def testTimeoutExceptionIncludeConsoleMessage(self): |
| 71 self._tab.EvaluateJavaScript2(""" | 71 self._tab.EvaluateJavaScript(""" |
| 72 window.__set_timeout_called = false; | 72 window.__set_timeout_called = false; |
| 73 function buggyReference() { | 73 function buggyReference() { |
| 74 window.__set_timeout_called = true; | 74 window.__set_timeout_called = true; |
| 75 if (window.__one.not_defined === undefined) | 75 if (window.__one.not_defined === undefined) |
| 76 window.__one = 1; | 76 window.__one = 1; |
| 77 } | 77 } |
| 78 setTimeout(buggyReference, 200);""") | 78 setTimeout(buggyReference, 200);""") |
| 79 self._tab.WaitForJavaScriptCondition2( | 79 self._tab.WaitForJavaScriptExpression( |
| 80 'window.__set_timeout_called === true', timeout=5) | 80 'window.__set_timeout_called === true', 5) |
| 81 with self.assertRaises(py_utils.TimeoutException) as context: | 81 with self.assertRaises(py_utils.TimeoutException) as context: |
| 82 self._tab.WaitForJavaScriptCondition2( | 82 self._tab.WaitForJavaScriptExpression( |
| 83 'window.__one === 1', timeout=1) | 83 'window.__one === 1', 1) |
| 84 self.assertIn( | 84 self.assertIn( |
| 85 ("(error) :5: Uncaught TypeError: Cannot read property 'not_defined' " | 85 ("(error) :5: Uncaught TypeError: Cannot read property 'not_defined' " |
| 86 'of undefined\n'), | 86 'of undefined\n'), |
| 87 context.exception.message) | 87 context.exception.message) |
| 88 | 88 |
| 89 @decorators.Enabled('has tabs') | 89 @decorators.Enabled('has tabs') |
| 90 def testActivateTab(self): | 90 def testActivateTab(self): |
| 91 py_utils.WaitFor(lambda: _IsDocumentVisible(self._tab), timeout=5) | 91 py_utils.WaitFor(lambda: _IsDocumentVisible(self._tab), timeout=5) |
| 92 new_tab = self._browser.tabs.New() | 92 new_tab = self._browser.tabs.New() |
| 93 new_tab.Navigate('about:blank') | 93 new_tab.Navigate('about:blank') |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 second_tab.Navigate('about:blank') | 149 second_tab.Navigate('about:blank') |
| 150 second_tab.WaitForDocumentReadyStateToBeInteractiveOrBetter() | 150 second_tab.WaitForDocumentReadyStateToBeInteractiveOrBetter() |
| 151 third_tab = self._browser.tabs.New() | 151 third_tab = self._browser.tabs.New() |
| 152 third_tab.Navigate('about:blank') | 152 third_tab.Navigate('about:blank') |
| 153 third_tab.WaitForDocumentReadyStateToBeInteractiveOrBetter() | 153 third_tab.WaitForDocumentReadyStateToBeInteractiveOrBetter() |
| 154 third_tab.Close() | 154 third_tab.Close() |
| 155 config = tracing_config.TracingConfig() | 155 config = tracing_config.TracingConfig() |
| 156 config.chrome_trace_config.SetLowOverheadFilter() | 156 config.chrome_trace_config.SetLowOverheadFilter() |
| 157 config.enable_chrome_trace = True | 157 config.enable_chrome_trace = True |
| 158 self._browser.platform.tracing_controller.StartTracing(config) | 158 self._browser.platform.tracing_controller.StartTracing(config) |
| 159 first_tab.ExecuteJavaScript2('console.time("first-tab-marker");') | 159 first_tab.ExecuteJavaScript('console.time("first-tab-marker");') |
| 160 first_tab.ExecuteJavaScript2('console.timeEnd("first-tab-marker");') | 160 first_tab.ExecuteJavaScript('console.timeEnd("first-tab-marker");') |
| 161 second_tab.ExecuteJavaScript2('console.time("second-tab-marker");') | 161 second_tab.ExecuteJavaScript('console.time("second-tab-marker");') |
| 162 second_tab.ExecuteJavaScript2('console.timeEnd("second-tab-marker");') | 162 second_tab.ExecuteJavaScript('console.timeEnd("second-tab-marker");') |
| 163 trace_data = self._browser.platform.tracing_controller.StopTracing() | 163 trace_data = self._browser.platform.tracing_controller.StopTracing() |
| 164 timeline_model = model.TimelineModel(trace_data) | 164 timeline_model = model.TimelineModel(trace_data) |
| 165 | 165 |
| 166 # Assert that the renderer_thread of the first tab contains | 166 # Assert that the renderer_thread of the first tab contains |
| 167 # 'first-tab-marker'. | 167 # 'first-tab-marker'. |
| 168 renderer_thread = timeline_model.GetRendererThreadFromTabId( | 168 renderer_thread = timeline_model.GetRendererThreadFromTabId( |
| 169 first_tab.id) | 169 first_tab.id) |
| 170 first_tab_markers = [ | 170 first_tab_markers = [ |
| 171 renderer_thread.IterAllSlicesOfName('first-tab-marker')] | 171 renderer_thread.IterAllSlicesOfName('first-tab-marker')] |
| 172 self.assertEquals(1, len(first_tab_markers)) | 172 self.assertEquals(1, len(first_tab_markers)) |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 | 204 |
| 205 # Test flaky on mac: crbug.com/358664, chromeos: crbug.com/483212. | 205 # Test flaky on mac: crbug.com/358664, chromeos: crbug.com/483212. |
| 206 @decorators.Disabled('android', 'mac', 'chromeos') | 206 @decorators.Disabled('android', 'mac', 'chromeos') |
| 207 @decorators.Disabled('win') # catapult/issues/2282 | 207 @decorators.Disabled('win') # catapult/issues/2282 |
| 208 def testScreenshot(self): | 208 def testScreenshot(self): |
| 209 if not self._tab.screenshot_supported: | 209 if not self._tab.screenshot_supported: |
| 210 logging.warning('Browser does not support screenshots, skipping test.') | 210 logging.warning('Browser does not support screenshots, skipping test.') |
| 211 return | 211 return |
| 212 | 212 |
| 213 self.Navigate('green_rect.html') | 213 self.Navigate('green_rect.html') |
| 214 pixel_ratio = self._tab.EvaluateJavaScript2('window.devicePixelRatio || 1') | 214 pixel_ratio = self._tab.EvaluateJavaScript('window.devicePixelRatio || 1') |
| 215 | 215 |
| 216 screenshot = self._tab.Screenshot(5) | 216 screenshot = self._tab.Screenshot(5) |
| 217 assert screenshot is not None | 217 assert screenshot is not None |
| 218 image_util.GetPixelColor( | 218 image_util.GetPixelColor( |
| 219 screenshot, 0 * pixel_ratio, 0 * pixel_ratio).AssertIsRGB( | 219 screenshot, 0 * pixel_ratio, 0 * pixel_ratio).AssertIsRGB( |
| 220 0, 255, 0, tolerance=2) | 220 0, 255, 0, tolerance=2) |
| 221 image_util.GetPixelColor( | 221 image_util.GetPixelColor( |
| 222 screenshot, 31 * pixel_ratio, 31 * pixel_ratio).AssertIsRGB( | 222 screenshot, 31 * pixel_ratio, 31 * pixel_ratio).AssertIsRGB( |
| 223 0, 255, 0, tolerance=2) | 223 0, 255, 0, tolerance=2) |
| 224 image_util.GetPixelColor( | 224 image_util.GetPixelColor( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 239 self._tab.Navigate(self.UrlOfUnittestFile('cast.html')) | 239 self._tab.Navigate(self.UrlOfUnittestFile('cast.html')) |
| 240 self._tab.WaitForDocumentReadyStateToBeComplete() | 240 self._tab.WaitForDocumentReadyStateToBeComplete() |
| 241 self._tab.action_runner.TapElement(selector='#start_session_button') | 241 self._tab.action_runner.TapElement(selector='#start_session_button') |
| 242 # Wait for media router dialog | 242 # Wait for media router dialog |
| 243 start_time = time.time() | 243 start_time = time.time() |
| 244 while (time.time() - start_time < 5 and | 244 while (time.time() - start_time < 5 and |
| 245 len(self.tabs) != 2): | 245 len(self.tabs) != 2): |
| 246 time.sleep(1) | 246 time.sleep(1) |
| 247 self.assertEquals(len(self.tabs), 2) | 247 self.assertEquals(len(self.tabs), 2) |
| 248 self.assertEquals(self.tabs[1].url, 'chrome://media-router/') | 248 self.assertEquals(self.tabs[1].url, 'chrome://media-router/') |
| OLD | NEW |