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