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

Unified Diff: tools/telemetry/telemetry/internal/backends/chrome_inspector/inspector_websocket.py

Issue 1647513002: Delete tools/telemetry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months 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
Index: tools/telemetry/telemetry/internal/backends/chrome_inspector/inspector_websocket.py
diff --git a/tools/telemetry/telemetry/internal/backends/chrome_inspector/inspector_websocket.py b/tools/telemetry/telemetry/internal/backends/chrome_inspector/inspector_websocket.py
deleted file mode 100644
index 03237e622339f3908d7effc55fb0aaaef2932b1d..0000000000000000000000000000000000000000
--- a/tools/telemetry/telemetry/internal/backends/chrome_inspector/inspector_websocket.py
+++ /dev/null
@@ -1,184 +0,0 @@
-# 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 errno
-import json
-import logging
-import socket
-import time
-
-from telemetry.core import exceptions
-from telemetry.internal.backends.chrome_inspector import websocket
-
-class WebSocketDisconnected(exceptions.Error):
- """An attempt was made to use a web socket after it had been disconnected."""
- pass
-
-
-class InspectorWebsocket(object):
-
- # See http://www.jsonrpc.org/specification#error_object.
- METHOD_NOT_FOUND_CODE = -32601
-
- def __init__(self):
- """Create a websocket handler for communicating with Inspectors."""
- self._socket = None
- self._cur_socket_timeout = 0
- self._next_request_id = 0
- self._domain_handlers = {}
- self._pending_callbacks = dict()
-
- def RegisterDomain(self, domain_name, notification_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']
- inspector_backend.RegisterDomain('Console', OnConsoleNotification)
-
- Args:
- domain_name: The devtools domain name. E.g., 'Tracing', 'Memory', 'Page'.
- notification_handler: Handler for devtools notification. Will be
- called if a devtools notification with matching domain is received
- via DispatchNotifications. The handler accepts a single paramater:
- the JSON object representing the notification.
- """
- assert domain_name not in self._domain_handlers
- self._domain_handlers[domain_name] = notification_handler
-
- def UnregisterDomain(self, domain_name):
- """Unregisters a previously registered domain."""
- assert domain_name in self._domain_handlers
- del self._domain_handlers[domain_name]
-
- def Connect(self, url, timeout=10):
- """Connects the websocket.
-
- Raises:
- websocket.WebSocketException
- socket.error
- """
- assert not self._socket
- self._socket = websocket.create_connection(url, timeout=timeout)
- self._cur_socket_timeout = 0
- self._next_request_id = 0
-
- def Disconnect(self):
- """Disconnects the inspector websocket.
-
- Raises:
- websocket.WebSocketException
- socket.error
- """
- if self._socket:
- self._socket.close()
- self._socket = None
-
- def SendAndIgnoreResponse(self, req):
- """Sends a request without waiting for a response.
-
- Raises:
- websocket.WebSocketException: Error from websocket library.
- socket.error: Error from websocket library.
- exceptions.WebSocketDisconnected: The socket was disconnected.
- """
- self._SendRequest(req)
-
- def _SendRequest(self, req):
- if not self._socket:
- raise WebSocketDisconnected()
- req['id'] = self._next_request_id
- self._next_request_id += 1
- data = json.dumps(req)
- self._socket.send(data)
- if logging.getLogger().isEnabledFor(logging.DEBUG):
- logging.debug('sent [%s]', json.dumps(req, indent=2, sort_keys=True))
-
- def SyncRequest(self, req, timeout=10):
- """Sends a request and waits for a response.
-
- Raises:
- websocket.WebSocketException: Error from websocket library.
- socket.error: Error from websocket library.
- exceptions.WebSocketDisconnected: The socket was disconnected.
- """
- self._SendRequest(req)
-
- while True:
- res = self._Receive(timeout)
- if 'id' in res and res['id'] == req['id']:
- return res
-
- def AsyncRequest(self, req, callback):
- """Sends an async request and returns immediately.
-
- Response will be handled in the |callback| later when DispatchNotifications
- is invoked.
-
- Args:
- callback: a function that takes inspector's response as the argument.
- """
- self._SendRequest(req)
- self._pending_callbacks[req['id']] = callback
-
- def DispatchNotifications(self, timeout=10):
- """Waits for responses from the websocket, dispatching them as necessary.
-
- Raises:
- websocket.WebSocketException: Error from websocket library.
- socket.error: Error from websocket library.
- exceptions.WebSocketDisconnected: The socket was disconnected.
- """
- self._Receive(timeout)
-
- def _SetTimeout(self, timeout):
- if self._cur_socket_timeout != timeout:
- self._socket.settimeout(timeout)
- self._cur_socket_timeout = timeout
-
- def _Receive(self, timeout=10):
- if not self._socket:
- raise WebSocketDisconnected()
-
- self._SetTimeout(timeout)
-
- while True:
- try:
- data = self._socket.recv()
- except socket.error, e:
- if e.errno == errno.EAGAIN:
- # Resource is temporarily unavailable. Try again.
- # See https://code.google.com/p/chromium/issues/detail?id=545853#c3
- # for more details.
- time.sleep(0.1)
- else:
- raise
- else:
- break
-
- result = json.loads(data)
- if logging.getLogger().isEnabledFor(logging.DEBUG):
- logging.debug(
- 'got [%s]', json.dumps(result, indent=2, sort_keys=True))
- if 'method' in result:
- self._HandleNotification(result)
- elif 'id' in result:
- self._HandleAsyncResponse(result)
- return result
-
- def _HandleNotification(self, result):
- mname = result['method']
- dot_pos = mname.find('.')
- domain_name = mname[:dot_pos]
- if not domain_name in self._domain_handlers:
- logging.warn('Unhandled inspector message: %s', result)
- return
-
- self._domain_handlers[domain_name](result)
-
- def _HandleAsyncResponse(self, result):
- callback = self._pending_callbacks.pop(result['id'], None)
- if callback:
- callback(result)

Powered by Google App Engine
This is Rietveld 408576698