1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
7 from telemetry.core import util
8 from telemetry.core import exceptions
9 from telemetry.unittest import tab_test_case
12 def _IsDocumentVisible(tab):
13 state = tab.EvaluateJavaScript('document.webkitVisibilityState')
14 # TODO(dtu): Remove when crbug.com/166243 is fixed.
16 return state == 'visible'
19 class TabTest(tab_test_case.TabTestCase):
20 def testNavigateAndWaitToForCompleteState(self):
21 self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
22 self._tab.Navigate(self._browser.http_server.UrlOf('blank.html'))
23 self._tab.WaitForDocumentReadyStateToBeComplete()
25 def testNavigateAndWaitToForInteractiveState(self):
26 self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
27 self._tab.Navigate(self._browser.http_server.UrlOf('blank.html'))
28 self._tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
30 def testTabBrowserIsRightBrowser(self):
31 self.assertEquals(self._tab.browser, self._browser)
33 def testRendererCrash(self):
34 self.assertRaises(exceptions.TabCrashException,
35 lambda: self._tab.Navigate('chrome://crash',
38 def testActivateTab(self):
39 if not self._browser.supports_tab_control:
40 logging.warning('Browser does not support tab control, skipping test.')
43 self.assertTrue(_IsDocumentVisible(self._tab))
44 new_tab = self._browser.tabs.New()
45 new_tab.Navigate('about:blank')
46 util.WaitFor(lambda: _IsDocumentVisible(new_tab), timeout=5)
47 self.assertFalse(_IsDocumentVisible(self._tab))
49 util.WaitFor(lambda: _IsDocumentVisible(self._tab), timeout=5)
50 self.assertFalse(_IsDocumentVisible(new_tab))
53 class GpuTabTest(tab_test_case.TabTestCase):
55 self._extra_browser_args = ['--enable-gpu-benchmarking']
56 super(GpuTabTest, self).setUp()
58 def testScreenshot(self):
59 if not self._tab.screenshot_supported:
60 logging.warning('Browser does not support screenshots, skipping test.')
63 self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
65 self._browser.http_server.UrlOf('green_rect.html'))
66 self._tab.WaitForDocumentReadyStateToBeComplete()
67 pixel_ratio = self._tab.EvaluateJavaScript('window.devicePixelRatio || 1')
69 screenshot = self._tab.Screenshot(5)
71 screenshot.GetPixelColor(0 * pixel_ratio, 0 * pixel_ratio).AssertIsRGB(
72 0, 255, 0, tolerance=2)
73 screenshot.GetPixelColor(31 * pixel_ratio, 31 * pixel_ratio).AssertIsRGB(
74 0, 255, 0, tolerance=2)
75 screenshot.GetPixelColor(32 * pixel_ratio, 32 * pixel_ratio).AssertIsRGB(
76 255, 255, 255, tolerance=2)
78 def testScreenshotSync(self):
79 if not self._tab.screenshot_supported:
80 logging.warning('Browser does not support screenshots, skipping test.')
83 self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
85 self._browser.http_server.UrlOf('screenshot_sync.html'))
86 self._tab.WaitForDocumentReadyStateToBeComplete()
89 return self._tab.EvaluateJavaScript('window.__testComplete')
90 util.WaitFor(IsTestComplete, 120)
92 message = self._tab.EvaluateJavaScript('window.__testMessage')
94 logging.error(message)
95 assert self._tab.EvaluateJavaScript('window.__testSuccess')