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

Unified Diff: tools/telemetry/telemetry/browser_backend.py

Issue 11412238: Proof of concept for running extension API stack through dev tools. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years 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/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\

Powered by Google App Engine
This is Rietveld 408576698