Index: tools/telemetry/telemetry/core/backends/chrome_inspector/devtools_client_backend.py |
diff --git a/tools/telemetry/telemetry/core/backends/chrome_inspector/devtools_client_backend.py b/tools/telemetry/telemetry/core/backends/chrome_inspector/devtools_client_backend.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0489927e5d141a0d3a50b45642c2c9b6f9872ff2 |
--- /dev/null |
+++ b/tools/telemetry/telemetry/core/backends/chrome_inspector/devtools_client_backend.py |
@@ -0,0 +1,57 @@ |
+# Copyright 2014 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 re |
+ |
+from telemetry import decorators |
+from telemetry.core.backends.chrome_inspector import devtools_http |
+ |
+ |
+class DevToolsClientBackend(object): |
+ def __init__(self, devtools_port): |
+ self._devtools_port = devtools_port |
+ self._devtools_http = devtools_http.DevToolsHttp(devtools_port) |
+ self._tracing_backend = None |
+ |
+ # TODO(chrishenry): This is temporarily exposed during DevTools code |
+ # refactoring. Please do not introduce new usage! crbug.com/423954 |
+ @property |
+ def devtools_http(self): |
+ return self._devtools_http |
+ |
+ def IsAlive(self): |
+ """Whether the DevTools server is available and connectable.""" |
+ try: |
+ self._devtools_http.Request('', timeout=.1) |
+ except devtools_http.DevToolsClientConnectionError: |
+ return False |
+ else: |
+ return True |
+ |
+ @decorators.Cache |
+ def GetChromeBranchNumber(self): |
+ # Detect version information. |
+ resp = self._devtools_http.RequestJson('version') |
+ if 'Protocol-Version' in resp: |
+ if 'Browser' in resp: |
+ branch_number_match = re.search(r'Chrome/\d+\.\d+\.(\d+)\.\d+', |
+ resp['Browser']) |
+ else: |
+ branch_number_match = re.search( |
+ r'Chrome/\d+\.\d+\.(\d+)\.\d+ (Mobile )?Safari', |
+ resp['User-Agent']) |
+ |
+ if branch_number_match: |
+ branch_number = int(branch_number_match.group(1)) |
+ if branch_number: |
+ return branch_number |
+ |
+ # Branch number can't be determined, so fail any branch number checks. |
+ return 0 |
+ |
+ # TODO(chrishenry): This is exposed tempoarily during DevTools code |
+ # refactoring. Instead, we should expose InspectorBackendList or |
+ # equivalent. crbug.com/423954. |
+ def ListInspectableContexts(self): |
+ return self._devtools_http.RequestJson('') |