• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.core import forwarders
6from telemetry.core.backends import browser_backend
7from telemetry.core.backends.webdriver import webdriver_tab_list_backend
8
9
10class WebDriverBrowserBackend(browser_backend.BrowserBackend):
11  """The webdriver-based backend for controlling a locally-executed browser
12  instance, on Linux, Mac, and Windows.
13  """
14
15  def __init__(self, driver_creator, supports_extensions, browser_options):
16    super(WebDriverBrowserBackend, self).__init__(
17        is_content_shell=False,
18        supports_extensions=supports_extensions,
19        browser_options=browser_options,
20        tab_list_backend=webdriver_tab_list_backend.WebDriverTabListBackend)
21
22    self._driver_creator = driver_creator
23    self._driver = None
24    self.wpr_port_pairs = forwarders.PortPairs(
25        http=forwarders.PortPair(80, 80),
26        https=forwarders.PortPair(443, 443),
27        dns=forwarders.PortPair(53, 53))
28
29  def Start(self):
30    assert not self._driver
31    self._driver = self._driver_creator()
32
33  @property
34  def driver(self):
35    assert self._driver
36    return self._driver
37
38  @property
39  def supports_tab_control(self):
40    # Based on webdriver protocol API, only closing a tab is supported while
41    # activating or creating a tab is not. Thus, tab control is not supported.
42    return False
43
44  @property
45  def supports_tracing(self):
46    # Tracing is not available in IE/Firefox yet and not supported through
47    # webdriver API.
48    return False
49
50  def GetProcessName(self, cmd_line):
51    # Leave implementation details to subclass as process name depends on the
52    # type of browser.
53    raise NotImplementedError()
54
55  def Close(self):
56    if self._driver:
57      self._driver.quit()
58      self._driver = None
59
60  def IsBrowserRunning(self):
61    # Assume the browser is running if not explicitly closed.
62    return self._driver is not None
63
64  def __del__(self):
65    self.Close()
66