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