Index: tools/telemetry/telemetry/browser_backend.py |
=================================================================== |
--- tools/telemetry/telemetry/browser_backend.py (revision 182312) |
+++ tools/telemetry/telemetry/browser_backend.py (working copy) |
@@ -10,6 +10,7 @@ |
import sys |
from telemetry import browser_gone_exception |
+from telemetry import extension_dict_backend |
from telemetry import options_for_unittests |
from telemetry import tab_list_backend |
from telemetry import tracing_backend |
@@ -18,15 +19,19 @@ |
from telemetry import wpr_modes |
from telemetry import wpr_server |
+class ExtensionsNotSupportedException(Exception): |
+ pass |
+ |
class BrowserBackend(object): |
"""A base class for browser backends. Provides basic functionality |
once a remote-debugger port has been established.""" |
WEBPAGEREPLAY_HOST = '127.0.0.1' |
- def __init__(self, is_content_shell, options): |
+ def __init__(self, is_content_shell, supports_extensions, options): |
self.browser_type = options.browser_type |
self.is_content_shell = is_content_shell |
+ self._supports_extensions = supports_extensions |
self.options = options |
self._browser = None |
self._port = None |
@@ -47,6 +52,10 @@ |
'such as about:flags settings, cookies, and ' |
'extensions.\n') |
self._tab_list_backend = tab_list_backend.TabListBackend(self) |
+ self._extension_dict_backend = None |
+ if supports_extensions: |
+ self._extension_dict_backend = \ |
+ extension_dict_backend.ExtensionDictBackend(self) |
def SetBrowser(self, browser): |
self._browser = browser |
@@ -57,9 +66,18 @@ |
return self._browser |
@property |
+ def supports_extensions(self): |
+ """True if this browser backend supports extensions.""" |
+ return self._supports_extensions |
+ |
+ @property |
def tab_list_backend(self): |
return self._tab_list_backend |
+ @property |
+ def extension_dict_backend(self): |
+ return self._extension_dict_backend |
+ |
def GetBrowserStartupArgs(self): |
args = [] |
args.extend(self.options.extra_browser_args) |
@@ -73,6 +91,12 @@ |
self.webpagereplay_remote_https_port)) |
args.extend(user_agent.GetChromeUserAgentArgumentFromType( |
self.options.browser_user_agent_type)) |
+ |
+ extensions = ','.join( |
+ [extension.path for extension in self.options.extensions_to_load]) |
+ if len(self.options.extensions_to_load) > 0: |
+ args.append('--load-extension=%s' % extensions) |
+ |
return args |
@property |
@@ -92,6 +116,17 @@ |
except util.TimeoutException: |
raise browser_gone_exception.BrowserGoneException() |
+ def AllExtensionsLoaded(): |
+ for e in self.options.extensions_to_load: |
+ extension_id = e.extension_id() |
+ if not extension_id in self._extension_dict_backend: |
+ return False |
+ extension_object = self._extension_dict_backend[extension_id] |
+ extension_object.WaitForDocumentReadyStateToBeInteractiveOrBetter() |
+ return True |
+ if self._supports_extensions: |
+ util.WaitFor(AllExtensionsLoaded, timeout=30) |
+ |
def _PostBrowserStartupInitialization(self): |
# Detect version information. |
data = self.Request('version') |