diff options
author | achuith@chromium.org <achuith@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-28 09:18:23 +0000 |
---|---|---|
committer | achuith@chromium.org <achuith@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-28 09:18:23 +0000 |
commit | b84a6c8c714748d7828f3ef9f955905ea57a189e (patch) | |
tree | db28ad0d5ee432b0d225f2dcb11a6d7a337d3bda /tools | |
parent | f4895bcbc5d5dd80c17350d7f2e6c5d4c890ba89 (diff) | |
download | chromium_src-b84a6c8c714748d7828f3ef9f955905ea57a189e.zip chromium_src-b84a6c8c714748d7828f3ef9f955905ea57a189e.tar.gz chromium_src-b84a6c8c714748d7828f3ef9f955905ea57a189e.tar.bz2 |
Browser.Request exceptions cleanup.
This cleans up a bunch of redundant code, and ensures that the clients of telemetry see BrowserConnectionGoneException/BrowserGoneException instead of exceptions from network libraries.
BUG=264972
TEST=unittests
NOTRY=True
Review URL: https://chromiumcodereview.appspot.com/20822003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@214124 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools')
4 files changed, 24 insertions, 40 deletions
diff --git a/tools/telemetry/telemetry/core/chrome/browser_backend.py b/tools/telemetry/telemetry/core/chrome/browser_backend.py index c910e6d..1d06b5e 100644 --- a/tools/telemetry/telemetry/core/chrome/browser_backend.py +++ b/tools/telemetry/telemetry/core/chrome/browser_backend.py @@ -126,7 +126,8 @@ class BrowserBackend(object): def IsBrowserUp(): try: self.Request('', timeout=timeout) - except (socket.error, httplib.BadStatusLine, urllib2.URLError): + except (exceptions.BrowserGoneException, + exceptions.BrowserConnectionGoneException): return False else: return True @@ -183,12 +184,19 @@ class BrowserBackend(object): self._inspector_protocol_version = 1.0 self._chrome_branch_number = 1025 - def Request(self, path, timeout=None): + def Request(self, path, timeout=None, throw_network_exception=False): url = 'http://localhost:%i/json' % self._port if path: url += '/' + path - req = urllib2.urlopen(url, timeout=timeout) - return req.read() + try: + req = urllib2.urlopen(url, timeout=timeout) + return req.read() + except (socket.error, httplib.BadStatusLine, urllib2.URLError) as e: + if throw_network_exception: + raise e + if not self.IsBrowserRunning(): + raise exceptions.BrowserGoneException() + raise exceptions.BrowserConnectionGoneException() @property def chrome_branch_number(self): diff --git a/tools/telemetry/telemetry/core/chrome/extension_dict_backend.py b/tools/telemetry/telemetry/core/chrome/extension_dict_backend.py index 4b4e2a7..d84a995 100644 --- a/tools/telemetry/telemetry/core/chrome/extension_dict_backend.py +++ b/tools/telemetry/telemetry/core/chrome/extension_dict_backend.py @@ -1,14 +1,10 @@ # Copyright (c) 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. -import httplib import json import re -import socket -import urllib2 import weakref -from telemetry.core import exceptions from telemetry.core import extension_page from telemetry.core.chrome import inspector_backend @@ -64,13 +60,8 @@ class ExtensionDictBackend(object): return None def _GetExtensionInfoList(self, timeout=None): - try: - data = self._browser_backend.Request('', timeout=timeout) - return self._FilterExtensions(json.loads(data)) - except (socket.error, httplib.BadStatusLine, urllib2.URLError): - if not self._browser_backend.IsBrowserRunning(): - raise exceptions.BrowserGoneException() - raise exceptions.BrowserConnectionGoneException() + data = self._browser_backend.Request('', timeout=timeout) + return self._FilterExtensions(json.loads(data)) def _FilterExtensions(self, all_pages): return [page_info for page_info in all_pages diff --git a/tools/telemetry/telemetry/core/chrome/misc_web_contents_backend.py b/tools/telemetry/telemetry/core/chrome/misc_web_contents_backend.py index 27f77fe..f3a4ab7 100644 --- a/tools/telemetry/telemetry/core/chrome/misc_web_contents_backend.py +++ b/tools/telemetry/telemetry/core/chrome/misc_web_contents_backend.py @@ -1,12 +1,8 @@ # Copyright (c) 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. -import httplib import json -import socket -import urllib2 -from telemetry.core import exceptions from telemetry.core import web_contents from telemetry.core.chrome import inspector_backend @@ -31,13 +27,8 @@ class MiscWebContentsBackend(object): debugger_url) def _ListWebContents(self, timeout=None): - try: - data = self._browser_backend.Request('', timeout=timeout) - return json.loads(data) - except (socket.error, httplib.BadStatusLine, urllib2.URLError): - if not self._browser_backend.IsBrowserRunning(): - raise exceptions.BrowserGoneException() - raise exceptions.BrowserConnectionGoneException() + data = self._browser_backend.Request('', timeout=timeout) + return json.loads(data) def _FindWebContentsInfo(self): for web_contents_info in self._ListWebContents(): diff --git a/tools/telemetry/telemetry/core/chrome/tab_list_backend.py b/tools/telemetry/telemetry/core/chrome/tab_list_backend.py index b212a9e..b61e4ab 100644 --- a/tools/telemetry/telemetry/core/chrome/tab_list_backend.py +++ b/tools/telemetry/telemetry/core/chrome/tab_list_backend.py @@ -1,14 +1,11 @@ # Copyright (c) 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. -import httplib import json -import socket import urllib2 import weakref from telemetry.core import util -from telemetry.core import exceptions from telemetry.core import tab from telemetry.core.chrome import inspector_backend @@ -44,7 +41,8 @@ class TabListBackend(object): tab_id = debugger_url.split('/')[-1] try: response = self._browser_backend.Request('close/%s' % tab_id, - timeout=timeout) + timeout=timeout, + throw_network_exception=True) except urllib2.HTTPError: raise Exception('Unable to close tab, tab id not found: %s' % tab_id) assert response == 'Target is closing' @@ -62,7 +60,8 @@ class TabListBackend(object): tab_id = debugger_url.split('/')[-1] try: response = self._browser_backend.Request('activate/%s' % tab_id, - timeout=timeout) + timeout=timeout, + throw_network_exception=True) except urllib2.HTTPError: raise Exception('Unable to activate tab, tab id not found: %s' % tab_id) assert response == 'Target activated' @@ -113,15 +112,10 @@ class TabListBackend(object): # TODO: For compatibility with Chrome before r177683. # This check is not completely correct, see crbug.com/190592. return not context['url'].startswith('chrome-extension://') - try: - data = self._browser_backend.Request('', timeout=timeout) - all_contexts = json.loads(data) - tabs = filter(_IsTab, all_contexts) - return tabs - except (socket.error, httplib.BadStatusLine, urllib2.URLError): - if not self._browser_backend.IsBrowserRunning(): - raise exceptions.BrowserGoneException() - raise exceptions.BrowserConnectionGoneException() + data = self._browser_backend.Request('', timeout=timeout) + all_contexts = json.loads(data) + tabs = filter(_IsTab, all_contexts) + return tabs def _UpdateTabList(self): def GetDebuggerUrl(tab_info): |