1# Copyright 2013 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5from telemetry import decorators 6 7from telemetry.core import web_contents 8from telemetry.core.forwarders import do_nothing_forwarder 9 10 11class ExtensionsNotSupportedException(Exception): 12 pass 13 14 15class BrowserBackend(object): 16 """A base class for browser backends.""" 17 18 def __init__(self, is_content_shell, supports_extensions, browser_options, 19 tab_list_backend): 20 assert browser_options.browser_type 21 self.browser_type = browser_options.browser_type 22 self.is_content_shell = is_content_shell 23 self._supports_extensions = supports_extensions 24 self.browser_options = browser_options 25 self._browser = None 26 self._tab_list_backend_class = tab_list_backend 27 self._forwarder_factory = None 28 29 def AddReplayServerOptions(self, extra_wpr_args): 30 pass 31 32 def SetBrowser(self, browser): 33 self._browser = browser 34 if (self.browser_options.netsim and 35 not browser.platform.CanLaunchApplication('ipfw')): 36 browser.platform.InstallApplication('ipfw') 37 38 @property 39 def browser(self): 40 return self._browser 41 42 @property 43 def supports_extensions(self): 44 """True if this browser backend supports extensions.""" 45 return self._supports_extensions 46 47 @property 48 def wpr_mode(self): 49 return self.browser_options.wpr_mode 50 51 @property 52 def supports_tab_control(self): 53 raise NotImplementedError() 54 55 @property 56 @decorators.Cache 57 def tab_list_backend(self): 58 return self._tab_list_backend_class(self) 59 60 @property 61 def supports_tracing(self): 62 raise NotImplementedError() 63 64 @property 65 def supports_system_info(self): 66 return False 67 68 @property 69 def forwarder_factory(self): 70 if not self._forwarder_factory: 71 self._forwarder_factory = do_nothing_forwarder.DoNothingForwarderFactory() 72 return self._forwarder_factory 73 74 def StartTracing(self, custom_categories=None, 75 timeout=web_contents.DEFAULT_WEB_CONTENTS_TIMEOUT): 76 raise NotImplementedError() 77 78 @property 79 def is_tracing_running(self): 80 return False 81 82 def StopTracing(self): 83 raise NotImplementedError() 84 85 def GetRemotePort(self, port): 86 return port 87 88 def Start(self): 89 raise NotImplementedError() 90 91 def IsBrowserRunning(self): 92 raise NotImplementedError() 93 94 def GetStandardOutput(self): 95 raise NotImplementedError() 96 97 def GetStackTrace(self): 98 raise NotImplementedError() 99 100 def GetSystemInfo(self): 101 raise NotImplementedError() 102