summaryrefslogtreecommitdiffstats
path: root/tools/telemetry
diff options
context:
space:
mode:
authorkochi@chromium.org <kochi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-06 05:05:26 +0000
committerkochi@chromium.org <kochi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-06 05:05:26 +0000
commitd8d13a2ae191fcb47acb11411ce3ed61424b9035 (patch)
tree15ab038349805551967f6e74de0c3835855fa523 /tools/telemetry
parent6ae1107bb2e65db6f4b098c584bae62ed7029dfb (diff)
downloadchromium_src-d8d13a2ae191fcb47acb11411ce3ed61424b9035.zip
chromium_src-d8d13a2ae191fcb47acb11411ce3ed61424b9035.tar.gz
chromium_src-d8d13a2ae191fcb47acb11411ce3ed61424b9035.tar.bz2
Revert 215785 "[telemetry] Add a webdriver backend with support ..."
> [telemetry] Add a webdriver backend with support for IE. > BUG=none > TEST=tools/perf/run_measurement --browser=internet-explorer octane & kraken > > Review URL: https://chromiumcodereview.appspot.com/20672002 TBR=chrisgao@chromium.org Review URL: https://codereview.chromium.org/22336006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@215796 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/telemetry')
-rw-r--r--tools/telemetry/telemetry/core/backends/webdriver/__init__.py3
-rw-r--r--tools/telemetry/telemetry/core/backends/webdriver/webdriver_browser_backend.py69
-rw-r--r--tools/telemetry/telemetry/core/backends/webdriver/webdriver_desktop_browser_finder.py86
-rw-r--r--tools/telemetry/telemetry/core/backends/webdriver/webdriver_tab_backend.py120
-rw-r--r--tools/telemetry/telemetry/core/backends/webdriver/webdriver_tab_list_backend.py47
-rw-r--r--tools/telemetry/telemetry/core/browser_finder.py4
6 files changed, 1 insertions, 328 deletions
diff --git a/tools/telemetry/telemetry/core/backends/webdriver/__init__.py b/tools/telemetry/telemetry/core/backends/webdriver/__init__.py
deleted file mode 100644
index 9228df8..0000000
--- a/tools/telemetry/telemetry/core/backends/webdriver/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
diff --git a/tools/telemetry/telemetry/core/backends/webdriver/webdriver_browser_backend.py b/tools/telemetry/telemetry/core/backends/webdriver/webdriver_browser_backend.py
deleted file mode 100644
index 7b680c7..0000000
--- a/tools/telemetry/telemetry/core/backends/webdriver/webdriver_browser_backend.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from telemetry.core.backends import browser_backend
-from telemetry.core.backends.webdriver import webdriver_tab_list_backend
-
-class WebDriverBrowserBackend(browser_backend.BrowserBackend):
- """The webdriver-based backend for controlling a locally-executed browser
- instance, on Linux, Mac, and Windows.
- """
-
- def __init__(self, driver_creator, supports_extensions, options):
- super(WebDriverBrowserBackend, self).__init__(
- is_content_shell=False,
- supports_extensions=supports_extensions,
- options=options,
- tab_list_backend=webdriver_tab_list_backend.WebDriverTabListBackend)
-
- self._driver_creator = driver_creator
- self._driver = None
- self.webpagereplay_local_http_port = 80
- self.webpagereplay_local_https_port = 443
- self.webpagereplay_remote_http_port = self.webpagereplay_local_http_port
- self.webpagereplay_remote_https_port = self.webpagereplay_local_https_port
-
- def Start(self):
- assert not self._driver
- self._driver = self._driver_creator()
-
- @property
- def driver(self):
- assert self._driver
- return self._driver
-
- @property
- def supports_tab_control(self):
- # Based on webdriver protocol API, only closing a tab is supported while
- # activating or creating a tab is not. Thus, tab control is not supported.
- return False
-
- @property
- def supports_tracing(self):
- # Tracing is not available in IE/Firefox yet and not supported through
- # webdriver API.
- return False
-
- def GetProcessName(self, _):
- # Leave implementation details to subclass as process name depends on the
- # type of browser.
- raise NotImplementedError()
-
- def Close(self):
- self._driver.quit()
- self._driver = None
-
- def CreateForwarder(self, *port_pairs):
- return browser_backend.DoNothingForwarder(*port_pairs)
-
- def IsBrowserRunning(self):
- # Assume the browser is running if not explicitly closed.
- return self._driver is not None
-
- def GetStandardOutput(self):
- # TODO(chrisgao): check if python client can get stdout of browsers.
- return ''
-
- def __del__(self):
- self.Close()
diff --git a/tools/telemetry/telemetry/core/backends/webdriver/webdriver_desktop_browser_finder.py b/tools/telemetry/telemetry/core/backends/webdriver/webdriver_desktop_browser_finder.py
deleted file mode 100644
index a781a97..0000000
--- a/tools/telemetry/telemetry/core/backends/webdriver/webdriver_desktop_browser_finder.py
+++ /dev/null
@@ -1,86 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-"""Finds desktop browsers that can be controlled by telemetry."""
-
-import os
-import sys
-
-from telemetry.core import browser
-from telemetry.core import util
-from telemetry.core import possible_browser
-from telemetry.core import platform
-from telemetry.core.backends.webdriver import webdriver_browser_backend
-
-
-# Add webdriver selenium client to PYTHONPATH.
-sys.path.insert(0, os.path.join(util.GetChromiumSrcDir(),
- 'third_party', 'webdriver', 'pylib'))
-# TODO(chrisgao): Handle failure of import gracefully. crbug.com/266177
-from selenium import webdriver # pylint: disable=F0401
-
-ALL_BROWSER_TYPES = ','.join([
- 'internet-explorer',
- 'internet-explorer-x64'])
-
-
-class PossibleWebDriverBrowser(possible_browser.PossibleBrowser):
- """A browser that can be controlled through webdriver API."""
-
- def __init__(self, browser_type, options):
- super(PossibleWebDriverBrowser, self).__init__(browser_type, options)
-
- def CreateWebDriverBackend(self):
- raise NotImplementedError()
-
- def Create(self):
- backend = self.CreateWebDriverBackend()
- b = browser.Browser(backend, platform.CreatePlatformBackendForCurrentOS())
- return b
-
- def SupportsOptions(self, options):
- # TODO(chrisgao): Check if some options are not supported.
- return True
-
- @property
- def last_modification_time(self):
- return -1
-
- def SelectDefaultBrowser(self, possible_browsers): # pylint: disable=W0613
- return None
-
-
-class PossibleDesktopIE(PossibleWebDriverBrowser):
- def __init__(self, browser_type, options, architecture):
- super(PossibleDesktopIE, self).__init__(browser_type, options)
- self._architecture = architecture
-
- def CreateWebDriverBackend(self):
- def DriverCreator():
- # TODO(chrisgao): Check in IEDriverServer.exe and specify path to it when
- # creating the webdriver instance. crbug.com/266170
- return webdriver.Ie()
- return webdriver_browser_backend.WebDriverBrowserBackend(
- DriverCreator, False, self.options)
-
-
-def FindAllAvailableBrowsers(options):
- """Finds all the desktop browsers available on this machine."""
- browsers = []
-
- # Look for the IE browser in the standard location.
- if sys.platform.startswith('win'):
- ie_path = os.path.join('Internet Explorer', 'iexplore.exe')
- win_search_paths = {
- '32' : { 'path' : os.getenv('PROGRAMFILES(X86)'),
- 'type' : 'internet-explorer'},
- '64' : { 'path' : os.getenv('PROGRAMFILES'),
- 'type' : 'internet-explorer-x64'}}
- for architecture, ie_info in win_search_paths.iteritems():
- if not ie_info['path']:
- continue
- if os.path.exists(os.path.join(ie_info['path'], ie_path)):
- browsers.append(
- PossibleDesktopIE(ie_info['type'], options, architecture))
-
- return browsers
diff --git a/tools/telemetry/telemetry/core/backends/webdriver/webdriver_tab_backend.py b/tools/telemetry/telemetry/core/backends/webdriver/webdriver_tab_backend.py
deleted file mode 100644
index df2e7ae..0000000
--- a/tools/telemetry/telemetry/core/backends/webdriver/webdriver_tab_backend.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-
-# TODO(chrisgao): Make png_bitmap sharable for both chrome and webdriver.
-from telemetry.core.chrome import png_bitmap
-
-class WebDriverTabBackend(object):
- def __init__(self, browser_backend, window_handle):
- self._browser_backend = browser_backend
- self._window_handle = window_handle
-
- def Disconnect(self):
- pass
-
- @property
- def browser(self):
- return self._browser_backend.browser
-
- @property
- def window_handle(self):
- return self._window_handle
-
- @property
- def url(self):
- self._browser_backend.driver.switch_to_window(self._window_handle)
- return self._browser_backend.driver.current_url
-
- def Activate(self):
- # Webdriver doesn't support tab control.
- raise NotImplementedError()
-
- def Close(self):
- self._browser_backend.driver.switch_to_window(self._window_handle)
- self._browser_backend.driver.close()
-
- def WaitForDocumentReadyStateToBeComplete(self, timeout=None):
- # TODO(chrisgao): Double check of document state.
- pass
-
- def WaitForDocumentReadyStateToBeInteractiveOrBetter(self, timeout=None):
- # TODO(chrisgao): Double check of document state.
- pass
-
- @property
- def screenshot_supported(self):
- return True
-
- def Screenshot(self, timeout=None): # pylint: disable=W0613
- if timeout:
- logging.warning('timeout is not supported')
- self._browser_backend.driver.switch_to_window(self._window_handle)
- snap = self._browser_backend.driver.get_screenshot_as_base64()
- if snap:
- return png_bitmap.PngBitmap(snap)
- return None
-
- @property
- def message_output_stream(self):
- # Webdriver has no API for grabbing console messages.
- raise NotImplementedError()
-
- @message_output_stream.setter
- def message_output_stream(self, stream):
- raise NotImplementedError()
-
- def GetDOMStats(self, timeout=None):
- # Webdriver has no API for DOM status.
- raise NotImplementedError()
-
- def PerformActionAndWaitForNavigate(self, action_function, _):
- # TODO(chrisgao): Double check of navigation.
- action_function()
-
- def Navigate(self, url, script_to_evaluate_on_commit=None, timeout=None):
- if script_to_evaluate_on_commit:
- raise NotImplementedError('script_to_evaluate_on_commit is NOT supported')
- self._browser_backend.driver.switch_to_window(self._window_handle)
- if timeout:
- self._browser_backend.driver.set_page_load_timeout(timeout * 1000)
- self._browser_backend.driver.get(url)
-
- def GetCookieByName(self, name, timeout=None):
- if timeout:
- logging.warning('timeout is not supported')
- self._browser_backend.driver.switch_to_window(self._window_handle)
- cookie = self._browser_backend.driver.get_cookie(name)
- if cookie:
- return cookie['value']
- return None
-
- def ExecuteJavaScript(self, expr, timeout=None):
- self._browser_backend.driver.switch_to_window(self._window_handle)
- if timeout:
- logging.warning('timeout is not supported')
- self._browser_backend.driver.execute_script(expr)
-
- def EvaluateJavaScript(self, expr, timeout=None):
- self._browser_backend.driver.switch_to_window(self._window_handle)
- if timeout:
- logging.warning('timeout is not supported')
- return self._browser_backend.driver.execute_script(
- 'return eval(\'%s\')' % expr.replace('\'', '\\\'').replace('\n', ' '))
-
- @property
- def timeline_model(self):
- # IE/Firefox has no timeline.
- raise NotImplementedError()
-
- def StartTimelineRecording(self):
- raise NotImplementedError()
-
- def StopTimelineRecording(self):
- raise NotImplementedError()
-
- def ClearCache(self):
- # Can't find a way to clear cache of a tab in IE/Firefox.
- raise NotImplementedError()
diff --git a/tools/telemetry/telemetry/core/backends/webdriver/webdriver_tab_list_backend.py b/tools/telemetry/telemetry/core/backends/webdriver/webdriver_tab_list_backend.py
deleted file mode 100644
index ea9c834..0000000
--- a/tools/telemetry/telemetry/core/backends/webdriver/webdriver_tab_list_backend.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from telemetry.core.backends.webdriver import webdriver_tab_backend
-
-class WebDriverTabListBackend(object):
- def __init__(self, browser_backend):
- self._browser_backend = browser_backend
- # Stores the window handles.
- self._tab_list = []
-
- def Init(self):
- self._UpdateTabList()
-
- def New(self, timeout=None):
- # Webdriver API doesn't support tab controlling.
- raise NotImplementedError()
-
- def __iter__(self):
- self._UpdateTabList()
- return self._tab_list.__iter__()
-
- def __len__(self):
- self._UpdateTabList()
- return len(self._tab_list)
-
- def __getitem__(self, index):
- self._UpdateTabList()
- if len(self._tab_list) <= index:
- raise IndexError('list index out of range')
- return self._tab_list[index]
-
- def _UpdateTabList(self):
- window_handles = self._browser_backend.driver.window_handles
- old_tab_list = self._tab_list
- self._tab_list = []
- for window_handle in window_handles:
- tab = None
- for old_tab in old_tab_list:
- if old_tab.window_handle == window_handle:
- tab = old_tab
- break
- else:
- tab = webdriver_tab_backend.WebDriverTabBackend(
- self._browser_backend, window_handle)
- self._tab_list.append(tab)
diff --git a/tools/telemetry/telemetry/core/browser_finder.py b/tools/telemetry/telemetry/core/browser_finder.py
index 38514d1..e316e05 100644
--- a/tools/telemetry/telemetry/core/browser_finder.py
+++ b/tools/telemetry/telemetry/core/browser_finder.py
@@ -8,13 +8,11 @@ import logging
from telemetry.core.chrome import android_browser_finder
from telemetry.core.chrome import cros_browser_finder
from telemetry.core.chrome import desktop_browser_finder
-from telemetry.core.backends.webdriver import webdriver_desktop_browser_finder
BROWSER_FINDERS = [
desktop_browser_finder,
android_browser_finder,
- cros_browser_finder,
- webdriver_desktop_browser_finder
+ cros_browser_finder
]
ALL_BROWSER_TYPES = ','.join([bf.ALL_BROWSER_TYPES for bf in BROWSER_FINDERS])