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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 import urllib2 4 import urllib2
5 import httplib 5 import httplib
6 import socket 6 import socket
7 import json 7 import json
8 8
9 from telemetry import browser_gone_exception 9 from telemetry import browser_gone_exception
10 from telemetry import extension_page
10 from telemetry import inspector_backend 11 from telemetry import inspector_backend
11 from telemetry import tab 12 from telemetry import tab
12 from telemetry import user_agent 13 from telemetry import user_agent
13 from telemetry import util 14 from telemetry import util
14 from telemetry import wpr_modes 15 from telemetry import wpr_modes
15 from telemetry import wpr_server 16 from telemetry import wpr_server
16 17
17 class BrowserBackend(object): 18 class BrowserBackend(object):
18 """A base class for browser backends. Provides basic functionality 19 """A base class for browser backends. Provides basic functionality
19 once a remote-debugger port has been established.""" 20 once a remote-debugger port has been established."""
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 return True 59 return True
59 try: 60 try:
60 util.WaitFor(IsBrowserUp, timeout=30) 61 util.WaitFor(IsBrowserUp, timeout=30)
61 except util.TimeoutException: 62 except util.TimeoutException:
62 raise browser_gone_exception.BrowserGoneException() 63 raise browser_gone_exception.BrowserGoneException()
63 64
64 @property 65 @property
65 def _debugger_url(self): 66 def _debugger_url(self):
66 return 'http://localhost:%i/json' % self._port 67 return 'http://localhost:%i/json' % self._port
67 68
69 def _ListExtensionPages(self, extension_id, timeout=None):
70 req = urllib2.urlopen(self._debugger_url, timeout=timeout)
71 data = req.read()
72 all_contexts = json.loads(data)
73 pages = [ctx for ctx in all_contexts
74 if ctx['url'].startswith('chrome-extension://%s' % extension_id)]
75 return pages
76
68 def _ListTabs(self, timeout=None): 77 def _ListTabs(self, timeout=None):
69 req = urllib2.urlopen(self._debugger_url, timeout=timeout) 78 req = urllib2.urlopen(self._debugger_url, timeout=timeout)
70 data = req.read() 79 data = req.read()
71 all_contexts = json.loads(data) 80 all_contexts = json.loads(data)
72 tabs = [ctx for ctx in all_contexts 81 tabs = [ctx for ctx in all_contexts
73 if not ctx['url'].startswith('chrome-extension://')] 82 if not ctx['url'].startswith('chrome-extension://')]
74 # FIXME(dtu): The remote debugger protocol returns in order of most 83 # FIXME(dtu): The remote debugger protocol returns in order of most
75 # recently created tab first. In order to convert it to the UI tab 84 # recently created tab first. In order to convert it to the UI tab
76 # order, we just reverse the list, which assumes we can't move tabs. 85 # order, we just reverse the list, which assumes we can't move tabs.
77 # We should guarantee that the remote debugger returns in the UI tab order. 86 # We should guarantee that the remote debugger returns in the UI tab order.
(...skipping 17 matching lines...) Expand all
95 104
96 util.WaitFor(lambda: self.num_tabs == target_num_tabs, timeout=5) 105 util.WaitFor(lambda: self.num_tabs == target_num_tabs, timeout=5)
97 106
98 @property 107 @property
99 def num_tabs(self): 108 def num_tabs(self):
100 return len(self._ListTabs()) 109 return len(self._ListTabs())
101 110
102 def GetNthTabUrl(self, index): 111 def GetNthTabUrl(self, index):
103 return self._ListTabs()[index]['url'] 112 return self._ListTabs()[index]['url']
104 113
114 def ConnectToExtensionPage(self, browser, extension_id):
115 ib = inspector_backend.InspectorBackend(self,
116 self._ListExtensionPages(extension_id)[0])
117 return extension_page.ExtensionPage(browser, ib)
118
105 def ConnectToNthTab(self, browser, index): 119 def ConnectToNthTab(self, browser, index):
106 ib = inspector_backend.InspectorBackend(self, self._ListTabs()[index]) 120 ib = inspector_backend.InspectorBackend(self, self._ListTabs()[index])
107 return tab.Tab(browser, ib) 121 return tab.Tab(browser, ib)
108 122
109 def DoesDebuggerUrlExist(self, url): 123 def DoesDebuggerUrlExist(self, url):
110 matches = [t for t in self._ListTabs() 124 matches = [t for t in self._ListTabs()
111 if 'webSocketDebuggerUrl' in t and\ 125 if 'webSocketDebuggerUrl' in t and\
112 t['webSocketDebuggerUrl'] == url] 126 t['webSocketDebuggerUrl'] == url]
113 return len(matches) >= 1 127 return len(matches) >= 1
114 128
115 def CreateForwarder(self, host_port): 129 def CreateForwarder(self, host_port):
116 raise NotImplementedError() 130 raise NotImplementedError()
117 131
118 def IsBrowserRunning(self): 132 def IsBrowserRunning(self):
119 raise NotImplementedError() 133 raise NotImplementedError()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698