Index: tools/telemetry/telemetry/internal/browser/tab.py |
diff --git a/tools/telemetry/telemetry/internal/browser/tab.py b/tools/telemetry/telemetry/internal/browser/tab.py |
deleted file mode 100644 |
index 9c1f79f9e16471b44df3ff6fc4036d0fd04435c2..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/telemetry/internal/browser/tab.py |
+++ /dev/null |
@@ -1,259 +0,0 @@ |
-# Copyright 2012 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-from telemetry.internal.browser import web_contents |
-from telemetry.internal.image_processing import video |
- |
-DEFAULT_TAB_TIMEOUT = 60 |
- |
- |
-class Tab(web_contents.WebContents): |
- """Represents a tab in the browser |
- |
- The important parts of the Tab object are in the runtime and page objects. |
- E.g.: |
- # Navigates the tab to a given url. |
- tab.Navigate('http://www.google.com/') |
- |
- # Evaluates 1+1 in the tab's JavaScript context. |
- tab.Evaluate('1+1') |
- """ |
- def __init__(self, inspector_backend, tab_list_backend, browser): |
- super(Tab, self).__init__(inspector_backend) |
- self._tab_list_backend = tab_list_backend |
- self._browser = browser |
- |
- @property |
- def browser(self): |
- """The browser in which this tab resides.""" |
- return self._browser |
- |
- @property |
- def url(self): |
- """Returns the URL of the tab, as reported by devtools. |
- |
- Raises: |
- devtools_http.DevToolsClientConnectionError |
- """ |
- return self._inspector_backend.url |
- |
- @property |
- def dom_stats(self): |
- """A dictionary populated with measured DOM statistics. |
- |
- Currently this dictionary contains: |
- { |
- 'document_count': integer, |
- 'node_count': integer, |
- 'event_listener_count': integer |
- } |
- |
- Raises: |
- inspector_memory.InspectorMemoryException |
- exceptions.TimeoutException |
- exceptions.DevtoolsTargetCrashException |
- """ |
- dom_counters = self._inspector_backend.GetDOMStats( |
- timeout=DEFAULT_TAB_TIMEOUT) |
- assert (len(dom_counters) == 3 and |
- all([x in dom_counters for x in ['document_count', 'node_count', |
- 'event_listener_count']])) |
- return dom_counters |
- |
- def Activate(self): |
- """Brings this tab to the foreground asynchronously. |
- |
- Not all browsers or browser versions support this method. |
- Be sure to check browser.supports_tab_control. |
- |
- Please note: this is asynchronous. There is a delay between this call |
- and the page's documentVisibilityState becoming 'visible', and yet more |
- delay until the actual tab is visible to the user. None of these delays |
- are included in this call. |
- |
- Raises: |
- devtools_http.DevToolsClientConnectionError |
- devtools_client_backend.TabNotFoundError |
- tab_list_backend.TabUnexpectedResponseException |
- """ |
- self._tab_list_backend.ActivateTab(self.id) |
- |
- def Close(self): |
- """Closes this tab. |
- |
- Not all browsers or browser versions support this method. |
- Be sure to check browser.supports_tab_control. |
- |
- Raises: |
- devtools_http.DevToolsClientConnectionError |
- devtools_client_backend.TabNotFoundError |
- tab_list_backend.TabUnexpectedResponseException |
- exceptions.TimeoutException |
- """ |
- self._tab_list_backend.CloseTab(self.id) |
- |
- @property |
- def screenshot_supported(self): |
- """True if the browser instance is capable of capturing screenshots.""" |
- return self._inspector_backend.screenshot_supported |
- |
- def Screenshot(self, timeout=DEFAULT_TAB_TIMEOUT): |
- """Capture a screenshot of the tab's contents. |
- |
- Returns: |
- A telemetry.core.Bitmap. |
- Raises: |
- exceptions.WebSocketDisconnected |
- exceptions.TimeoutException |
- exceptions.DevtoolsTargetCrashException |
- """ |
- return self._inspector_backend.Screenshot(timeout) |
- |
- @property |
- def video_capture_supported(self): |
- """True if the browser instance is capable of capturing video.""" |
- return self.browser.platform.CanCaptureVideo() |
- |
- def Highlight(self, color): |
- """Synchronously highlights entire tab contents with the given RgbaColor. |
- |
- TODO(tonyg): It is possible that the z-index hack here might not work for |
- all pages. If this happens, DevTools also provides a method for this. |
- |
- Raises: |
- exceptions.EvaluateException |
- exceptions.WebSocketDisconnected |
- exceptions.TimeoutException |
- exceptions.DevtoolsTargetCrashException |
- """ |
- self.ExecuteJavaScript(""" |
- (function() { |
- var screen = document.createElement('div'); |
- screen.style.background = 'rgba(%d, %d, %d, %d)'; |
- screen.style.position = 'fixed'; |
- screen.style.top = '0'; |
- screen.style.left = '0'; |
- screen.style.width = '100%%'; |
- screen.style.height = '100%%'; |
- screen.style.zIndex = '2147483638'; |
- document.body.appendChild(screen); |
- requestAnimationFrame(function() { |
- requestAnimationFrame(function() { |
- window.__telemetry_screen_%d = screen; |
- }); |
- }); |
- })(); |
- """ % (color.r, color.g, color.b, color.a, int(color))) |
- self.WaitForJavaScriptExpression( |
- '!!window.__telemetry_screen_%d' % int(color), 5) |
- |
- def ClearHighlight(self, color): |
- """Clears a highlight of the given bitmap.RgbaColor. |
- |
- Raises: |
- exceptions.EvaluateException |
- exceptions.WebSocketDisconnected |
- exceptions.TimeoutException |
- exceptions.DevtoolsTargetCrashException |
- """ |
- self.ExecuteJavaScript(""" |
- (function() { |
- document.body.removeChild(window.__telemetry_screen_%d); |
- requestAnimationFrame(function() { |
- requestAnimationFrame(function() { |
- window.__telemetry_screen_%d = null; |
- console.time('__ClearHighlight.video_capture_start'); |
- console.timeEnd('__ClearHighlight.video_capture_start'); |
- }); |
- }); |
- })(); |
- """ % (int(color), int(color))) |
- self.WaitForJavaScriptExpression( |
- '!window.__telemetry_screen_%d' % int(color), 5) |
- |
- def StartVideoCapture(self, min_bitrate_mbps, |
- highlight_bitmap=video.HIGHLIGHT_ORANGE_FRAME): |
- """Starts capturing video of the tab's contents. |
- |
- This works by flashing the entire tab contents to a arbitrary color and then |
- starting video recording. When the frames are processed, we can look for |
- that flash as the content bounds. |
- |
- Args: |
- min_bitrate_mbps: The minimum caputre bitrate in MegaBits Per Second. |
- The platform is free to deliver a higher bitrate if it can do so |
- without increasing overhead. |
- |
- Raises: |
- exceptions.EvaluateException |
- exceptions.WebSocketDisconnected |
- exceptions.TimeoutException |
- exceptions.DevtoolsTargetCrashException |
- ValueError: If the required |min_bitrate_mbps| can't be achieved. |
- """ |
- self.Highlight(highlight_bitmap) |
- self.browser.platform.StartVideoCapture(min_bitrate_mbps) |
- self.ClearHighlight(highlight_bitmap) |
- |
- @property |
- def is_video_capture_running(self): |
- return self.browser.platform.is_video_capture_running |
- |
- def StopVideoCapture(self): |
- """Stops recording video of the tab's contents. |
- |
- This looks for the initial color flash in the first frame to establish the |
- tab content boundaries and then omits all frames displaying the flash. |
- |
- Returns: |
- video: A video object which is a telemetry.core.Video |
- """ |
- return self.browser.platform.StopVideoCapture() |
- |
- def GetCookieByName(self, name, timeout=DEFAULT_TAB_TIMEOUT): |
- """Returns the value of the cookie by the given |name|. |
- |
- Raises: |
- exceptions.WebSocketDisconnected |
- exceptions.TimeoutException |
- exceptions.DevtoolsTargetCrashException |
- """ |
- return self._inspector_backend.GetCookieByName(name, timeout) |
- |
- def CollectGarbage(self): |
- """Forces a garbage collection. |
- |
- Raises: |
- exceptions.WebSocketDisconnected |
- exceptions.TimeoutException |
- exceptions.DevtoolsTargetCrashException |
- """ |
- self._inspector_backend.CollectGarbage() |
- |
- def ClearCache(self, force): |
- """Clears the browser's networking related disk, memory and other caches. |
- |
- Args: |
- force: Iff true, navigates to about:blank which destroys the previous |
- renderer, ensuring that even "live" resources in the memory cache are |
- cleared. |
- |
- Raises: |
- exceptions.EvaluateException |
- exceptions.WebSocketDisconnected |
- exceptions.TimeoutException |
- exceptions.DevtoolsTargetCrashException |
- errors.DeviceUnresponsiveError |
- """ |
- self.browser.platform.FlushDnsCache() |
- self.ExecuteJavaScript(""" |
- if (window.chrome && chrome.benchmarking && |
- chrome.benchmarking.clearCache) { |
- chrome.benchmarking.clearCache(); |
- chrome.benchmarking.clearPredictorCache(); |
- chrome.benchmarking.clearHostResolverCache(); |
- } |
- """) |
- if force: |
- self.Navigate('about:blank') |