Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Unified Diff: tools/telemetry/telemetry/core/backends/chrome/inspector_backend.py

Issue 734733002: Revert of Move RegisterDomain/UnregisterDomain and its handling to inspector_websocket. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/telemetry/telemetry/core/backends/chrome/inspector_websocket.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/core/backends/chrome/inspector_backend.py
diff --git a/tools/telemetry/telemetry/core/backends/chrome/inspector_backend.py b/tools/telemetry/telemetry/core/backends/chrome/inspector_backend.py
index 7714f0af36fe57fa1233a34dc7b0d5f53d3ad3c2..1637ac9578e2688095f457cbcc662441e2a65c90 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/inspector_backend.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/inspector_backend.py
@@ -29,11 +29,12 @@
class InspectorBackend(inspector_websocket.InspectorWebsocket):
def __init__(self, browser_backend, context, timeout=60):
- super(InspectorBackend, self).__init__(self._HandleError)
- self.RegisterDomain('Inspector', self._HandleInspectorDomainNotification)
+ super(InspectorBackend, self).__init__(self._HandleNotification,
+ self._HandleError)
self._browser_backend = browser_backend
self._context = context
+ self._domain_handlers = {}
logging.debug('InspectorBackend._Connect() to %s', self.debugger_url)
try:
@@ -57,6 +58,14 @@
def __del__(self):
self.Disconnect()
+
+ def Disconnect(self):
+ for _, handlers in self._domain_handlers.items():
+ _, will_close_handler = handlers
+ will_close_handler()
+ self._domain_handlers = {}
+
+ super(InspectorBackend, self).Disconnect()
@property
def browser(self):
@@ -212,13 +221,25 @@
contexts = self._browser_backend.ListInspectableContexts()
return self._context['id'] in [c['id'] for c in contexts]
- def _HandleInspectorDomainNotification(self, res):
+ def _HandleNotification(self, res):
if (res['method'] == 'Inspector.detached' and
res.get('params', {}).get('reason', '') == 'replaced_with_devtools'):
self._WaitForInspectorToGoAwayAndReconnect()
return
if res['method'] == 'Inspector.targetCrashed':
raise exceptions.TabCrashException(self.browser)
+
+ mname = res['method']
+ dot_pos = mname.find('.')
+ domain_name = mname[:dot_pos]
+ if domain_name in self._domain_handlers:
+ try:
+ self._domain_handlers[domain_name][0](res)
+ except Exception:
+ import traceback
+ traceback.print_exc()
+ else:
+ logging.warn('Unhandled inspector message: %s', res)
def _HandleError(self, elapsed_time):
if self._IsInspectable():
@@ -250,6 +271,29 @@
sys.stderr.write('\n')
sys.stderr.write('Inspector\'s UI closed. Telemetry will now resume.\n')
+ def RegisterDomain(self,
+ domain_name, notification_handler, will_close_handler):
+ """Registers a given domain for handling notification methods.
+
+ For example, given inspector_backend:
+ def OnConsoleNotification(msg):
+ if msg['method'] == 'Console.messageAdded':
+ print msg['params']['message']
+ return
+ def OnConsoleClose(self):
+ pass
+ inspector_backend.RegisterDomain('Console',
+ OnConsoleNotification, OnConsoleClose)
+ """
+ assert domain_name not in self._domain_handlers
+ self._domain_handlers[domain_name] = (notification_handler,
+ will_close_handler)
+
+ def UnregisterDomain(self, domain_name):
+ """Unregisters a previously registered domain."""
+ assert domain_name in self._domain_handlers
+ self._domain_handlers.pop(domain_name)
+
def CollectGarbage(self):
self._page.CollectGarbage()
« no previous file with comments | « no previous file | tools/telemetry/telemetry/core/backends/chrome/inspector_websocket.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698