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\ |