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 6from telemetry.core import platform 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, supports_extensions, browser_options, tab_list_backend): 19 assert browser_options.browser_type 20 self.browser_type = browser_options.browser_type 21 self._supports_extensions = supports_extensions 22 self.browser_options = browser_options 23 self._browser = None 24 self._tab_list_backend_class = tab_list_backend 25 self._forwarder_factory = None 26 27 def AddReplayServerOptions(self, extra_wpr_args): 28 pass 29 30 def SetBrowser(self, browser): 31 self._browser = browser 32 if self.browser_options.netsim: 33 host_platform = platform.GetHostPlatform() 34 if not host_platform.CanLaunchApplication('ipfw'): 35 host_platform.InstallApplication('ipfw') 36 37 @property 38 def browser(self): 39 return self._browser 40 41 @property 42 def supports_extensions(self): 43 """True if this browser backend supports extensions.""" 44 return self._supports_extensions 45 46 @property 47 def wpr_mode(self): 48 return self.browser_options.wpr_mode 49 50 @property 51 def supports_tab_control(self): 52 raise NotImplementedError() 53 54 @property 55 @decorators.Cache 56 def tab_list_backend(self): 57 return self._tab_list_backend_class(self) 58 59 @property 60 def supports_tracing(self): 61 raise NotImplementedError() 62 63 @property 64 def supports_system_info(self): 65 return False 66 67 @property 68 def forwarder_factory(self): 69 if not self._forwarder_factory: 70 self._forwarder_factory = do_nothing_forwarder.DoNothingForwarderFactory() 71 return self._forwarder_factory 72 73 def StartTracing(self, trace_options, custom_categories=None, 74 timeout=web_contents.DEFAULT_WEB_CONTENTS_TIMEOUT): 75 raise NotImplementedError() 76 77 @property 78 def is_tracing_running(self): 79 return False 80 81 def StopTracing(self): 82 raise NotImplementedError() 83 84 def GetRemotePort(self, port): 85 return port 86 87 def Start(self): 88 raise NotImplementedError() 89 90 def IsBrowserRunning(self): 91 raise NotImplementedError() 92 93 def GetStandardOutput(self): 94 raise NotImplementedError() 95 96 def GetStackTrace(self): 97 raise NotImplementedError() 98 99 def GetSystemInfo(self): 100 raise NotImplementedError() 101