Index: tools/telemetry/telemetry/internal/backends/chrome_inspector/inspector_page.py |
diff --git a/tools/telemetry/telemetry/internal/backends/chrome_inspector/inspector_page.py b/tools/telemetry/telemetry/internal/backends/chrome_inspector/inspector_page.py |
deleted file mode 100644 |
index 2c3b087a3a291c1bfbf814e5d9f79b414d2f16a7..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/telemetry/internal/backends/chrome_inspector/inspector_page.py |
+++ /dev/null |
@@ -1,156 +0,0 @@ |
-# Copyright 2013 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. |
-import time |
- |
-from telemetry.util import image_util |
- |
- |
-class InspectorPage(object): |
- """Class that controls a page connected by an inspector_websocket. |
- |
- This class provides utility methods for controlling a page connected by an |
- inspector_websocket. It does not perform any exception handling. All |
- inspector_websocket exceptions must be handled by the caller. |
- """ |
- def __init__(self, inspector_websocket, timeout=60): |
- self._inspector_websocket = inspector_websocket |
- self._inspector_websocket.RegisterDomain('Page', self._OnNotification) |
- |
- self._navigation_pending = False |
- self._navigation_url = '' # Support for legacy backends. |
- self._navigation_frame_id = '' |
- self._navigated_frame_ids = None # Holds frame ids while navigating. |
- self._script_to_evaluate_on_commit = None |
- # Turn on notifications. We need them to get the Page.frameNavigated event. |
- self._EnablePageNotifications(timeout=timeout) |
- |
- def _OnNotification(self, msg): |
- if msg['method'] == 'Page.frameNavigated': |
- url = msg['params']['frame']['url'] |
- if not self._navigated_frame_ids == None: |
- frame_id = msg['params']['frame']['id'] |
- if self._navigation_frame_id == frame_id: |
- self._navigation_frame_id = '' |
- self._navigated_frame_ids = None |
- self._navigation_pending = False |
- else: |
- self._navigated_frame_ids.add(frame_id) |
- elif self._navigation_url == url: |
- # TODO(tonyg): Remove this when Chrome 38 goes stable. |
- self._navigation_url = '' |
- self._navigation_pending = False |
- elif (not url == 'chrome://newtab/' and not url == 'about:blank' |
- and not 'parentId' in msg['params']['frame']): |
- # Marks the navigation as complete and unblocks the |
- # WaitForNavigate call. |
- self._navigation_pending = False |
- |
- def _SetScriptToEvaluateOnCommit(self, source): |
- existing_source = (self._script_to_evaluate_on_commit and |
- self._script_to_evaluate_on_commit['source']) |
- if source == existing_source: |
- return |
- if existing_source: |
- request = { |
- 'method': 'Page.removeScriptToEvaluateOnLoad', |
- 'params': { |
- 'identifier': self._script_to_evaluate_on_commit['id'], |
- } |
- } |
- self._inspector_websocket.SyncRequest(request) |
- self._script_to_evaluate_on_commit = None |
- if source: |
- request = { |
- 'method': 'Page.addScriptToEvaluateOnLoad', |
- 'params': { |
- 'scriptSource': source, |
- } |
- } |
- res = self._inspector_websocket.SyncRequest(request) |
- self._script_to_evaluate_on_commit = { |
- 'id': res['result']['identifier'], |
- 'source': source |
- } |
- |
- def _EnablePageNotifications(self, timeout=60): |
- request = { |
- 'method': 'Page.enable' |
- } |
- res = self._inspector_websocket.SyncRequest(request, timeout) |
- assert len(res['result'].keys()) == 0 |
- |
- def WaitForNavigate(self, timeout=60): |
- """Waits for the navigation to complete. |
- |
- The current page is expect to be in a navigation. This function returns |
- when the navigation is complete or when the timeout has been exceeded. |
- """ |
- start_time = time.time() |
- remaining_time = timeout |
- self._navigation_pending = True |
- while self._navigation_pending and remaining_time > 0: |
- remaining_time = max(timeout - (time.time() - start_time), 0.0) |
- self._inspector_websocket.DispatchNotifications(remaining_time) |
- |
- def Navigate(self, url, script_to_evaluate_on_commit=None, timeout=60): |
- """Navigates to |url|. |
- |
- If |script_to_evaluate_on_commit| is given, the script source string will be |
- evaluated when the navigation is committed. This is after the context of |
- the page exists, but before any script on the page itself has executed. |
- """ |
- |
- self._SetScriptToEvaluateOnCommit(script_to_evaluate_on_commit) |
- request = { |
- 'method': 'Page.navigate', |
- 'params': { |
- 'url': url, |
- } |
- } |
- self._navigated_frame_ids = set() |
- res = self._inspector_websocket.SyncRequest(request, timeout) |
- if 'frameId' in res['result']: |
- # Modern backends are returning frameId from Page.navigate. |
- # Use it here to unblock upon precise navigation. |
- frame_id = res['result']['frameId'] |
- if self._navigated_frame_ids and frame_id in self._navigated_frame_ids: |
- self._navigated_frame_ids = None |
- return |
- self._navigation_frame_id = frame_id |
- else: |
- # TODO(tonyg): Remove this when Chrome 38 goes stable. |
- self._navigated_frame_ids = None |
- self._navigation_url = url |
- self.WaitForNavigate(timeout) |
- |
- def GetCookieByName(self, name, timeout=60): |
- """Returns the value of the cookie by the given |name|.""" |
- request = { |
- 'method': 'Page.getCookies' |
- } |
- res = self._inspector_websocket.SyncRequest(request, timeout) |
- cookies = res['result']['cookies'] |
- for cookie in cookies: |
- if cookie['name'] == name: |
- return cookie['value'] |
- return None |
- |
- def CaptureScreenshot(self, timeout=60): |
- request = { |
- 'method': 'Page.captureScreenshot' |
- } |
- # "Google API are missing..." infobar might cause a viewport resize |
- # which invalidates screenshot request. See crbug.com/459820. |
- for _ in range(2): |
- res = self._inspector_websocket.SyncRequest(request, timeout) |
- if res and ('result' in res) and ('data' in res['result']): |
- return image_util.FromBase64Png(res['result']['data']) |
- return None |
- |
- def CollectGarbage(self, timeout=60): |
- request = { |
- 'method': 'HeapProfiler.collectGarbage' |
- } |
- res = self._inspector_websocket.SyncRequest(request, timeout) |
- assert 'result' in res |