| Index: tools/telemetry/telemetry/browser_backend.py
|
| diff --git a/tools/telemetry/telemetry/browser_backend.py b/tools/telemetry/telemetry/browser_backend.py
|
| index 5ec3205a2ddabe26a906d69780c359c664f251e1..8beb268c2d5fcefeb13eff29dcd3119a9f3bf83d 100644
|
| --- a/tools/telemetry/telemetry/browser_backend.py
|
| +++ b/tools/telemetry/telemetry/browser_backend.py
|
| @@ -8,6 +8,7 @@ import json
|
| import re
|
|
|
| from telemetry import browser_gone_exception
|
| +from telemetry import extension_page
|
| from telemetry import inspector_backend
|
| from telemetry import tab
|
| from telemetry import user_agent
|
| @@ -87,6 +88,18 @@ class BrowserBackend(object):
|
| req = urllib2.urlopen(url, timeout=timeout)
|
| return req.read()
|
|
|
| + def _ListExtensionPages(self, extension_id, timeout=None):
|
| + try:
|
| + data = self._Request('', timeout=timeout)
|
| + all_contexts = json.loads(data)
|
| + pages = [ctx for ctx in all_contexts
|
| + if ctx['url'].startswith('chrome-extension://%s' % extension_id)]
|
| + return pages
|
| + except (socket.error, httplib.BadStatusLine, urllib2.URLError):
|
| + if not self.IsBrowserRunning():
|
| + raise browser_gone_exception.BrowserGoneException()
|
| + raise BrowserConnectionGoneException()
|
| +
|
| def _ListTabs(self, timeout=None):
|
| try:
|
| data = self._Request('', timeout=timeout)
|
| @@ -104,6 +117,13 @@ class BrowserBackend(object):
|
| raise browser_gone_exception.BrowserGoneException()
|
| raise BrowserConnectionGoneException()
|
|
|
| + def _GetTabByUrl(self, url):
|
| + for target in self._ListTabs():
|
| + if target['url'] == url:
|
| + return target
|
| +
|
| + return None
|
| +
|
| def NewTab(self, timeout=None):
|
| data = self._Request('new', timeout=timeout)
|
| new_tab = json.loads(data)
|
| @@ -126,10 +146,26 @@ class BrowserBackend(object):
|
| def GetNthTabUrl(self, index):
|
| return self._ListTabs()[index]['url']
|
|
|
| + def ConnectToExtensionPage(self, browser, extension_id):
|
| + page = self._ListExtensionPages(extension_id)[0]
|
| + if page is None:
|
| + return None
|
| +
|
| + ib = inspector_backend.InspectorBackend(self, page)
|
| + return extension_page.ExtensionPage(tab.Tab(browser, ib))
|
| +
|
| def ConnectToNthTab(self, browser, index):
|
| ib = inspector_backend.InspectorBackend(self, self._ListTabs()[index])
|
| return tab.Tab(browser, ib)
|
|
|
| + def ConnectToPageByUrl(self, browser, url):
|
| + selected_page = self._GetTabByUrl(url)
|
| + if selected_page is None:
|
| + return None
|
| +
|
| + ib = inspector_backend.InspectorBackend(self, selected_page)
|
| + return tab.Tab(browser, ib)
|
| +
|
| def DoesDebuggerUrlExist(self, url):
|
| matches = [t for t in self._ListTabs()
|
| if 'webSocketDebuggerUrl' in t and\
|
|
|