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