Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / backends / webdriver / webdriver_desktop_browser_finder.py
index 2453b20..c89594c 100644 (file)
@@ -8,11 +8,11 @@ import os
 import sys
 
 from telemetry.core import browser
+from telemetry.core import platform as platform_module
 from telemetry.core import possible_browser
-from telemetry.core import platform
 from telemetry.core import util
 from telemetry.core.backends.webdriver import webdriver_ie_backend
-from telemetry.page import cloud_storage
+from telemetry.util import support_binaries
 
 # Try to import the selenium python lib which may be not available.
 util.AddDirToPythonPath(
@@ -22,16 +22,6 @@ try:
 except ImportError:
   webdriver = None
 
-ALL_BROWSER_TYPES = []
-if webdriver:
-  ALL_BROWSER_TYPES = [
-      'internet-explorer',
-      'internet-explorer-x64']
-else:
-  logging.warning('Webdriver backend is unsupported without selenium pylib. '
-                  'For installation of selenium pylib, please refer to '
-                  'https://code.google.com/p/selenium/wiki/PythonBindings.')
-
 
 class PossibleWebDriverBrowser(possible_browser.PossibleBrowser):
   """A browser that can be controlled through webdriver API."""
@@ -39,18 +29,27 @@ class PossibleWebDriverBrowser(possible_browser.PossibleBrowser):
   def __init__(self, browser_type, finder_options):
     target_os = sys.platform.lower()
     super(PossibleWebDriverBrowser, self).__init__(browser_type, target_os,
-        finder_options)
-    assert browser_type in ALL_BROWSER_TYPES, \
-        'Please add %s to ALL_BROWSER_TYPES' % browser_type
+        finder_options, False)
+    assert browser_type in FindAllBrowserTypes(), \
+        ('Please add %s to webdriver_desktop_browser_finder.FindAllBrowserTypes'
+         % browser_type)
 
   def CreateWebDriverBackend(self, platform_backend):
     raise NotImplementedError()
 
+  def _InitPlatformIfNeeded(self):
+    if self._platform:
+      return
+
+    self._platform = platform_module.GetHostPlatform()
+
+    # pylint: disable=W0212
+    self._platform_backend = self._platform._platform_backend
+
   def Create(self):
-    platform_backend = platform.CreatePlatformBackendForCurrentOS()
-    backend = self.CreateWebDriverBackend(platform_backend)
-    b = browser.Browser(backend, platform_backend)
-    return b
+    self._InitPlatformIfNeeded()
+    backend = self.CreateWebDriverBackend(self._platform_backend)
+    return browser.Browser(backend, self._platform_backend)
 
   def SupportsOptions(self, finder_options):
     if len(finder_options.extensions_to_load) != 0:
@@ -73,9 +72,8 @@ class PossibleDesktopIE(PossibleWebDriverBrowser):
   def CreateWebDriverBackend(self, platform_backend):
     assert webdriver
     def DriverCreator():
-      ie_driver_exe = os.path.join(util.GetTelemetryDir(), 'bin',
-                                   'IEDriverServer_%s.exe' % self._architecture)
-      cloud_storage.GetIfChanged(ie_driver_exe, cloud_storage.PUBLIC_BUCKET)
+      ie_driver_exe = support_binaries.FindPath(
+          'IEDriverServer_%s' % self._architecture, 'win')
       return webdriver.Ie(executable_path=ie_driver_exe)
     return webdriver_ie_backend.WebDriverIEBackend(
         platform_backend, DriverCreator, self.finder_options.browser_options)
@@ -83,6 +81,17 @@ class PossibleDesktopIE(PossibleWebDriverBrowser):
 def SelectDefaultBrowser(_):
   return None
 
+def FindAllBrowserTypes():
+  if webdriver:
+    return [
+        'internet-explorer',
+        'internet-explorer-x64']
+  else:
+    logging.warning('Webdriver backend is unsupported without selenium pylib. '
+                    'For installation of selenium pylib, please refer to '
+                    'https://code.google.com/p/selenium/wiki/PythonBindings.')
+  return []
+
 def FindAllAvailableBrowsers(finder_options):
   """Finds all the desktop browsers available on this machine."""
   browsers = []
@@ -92,16 +101,15 @@ def FindAllAvailableBrowsers(finder_options):
   # 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']:
+    search_paths = (
+        (32, os.getenv('PROGRAMFILES(X86)'), 'internet-explorer'),
+        (64, os.getenv('PROGRAMFILES'), 'internet-explorer-x64'),
+    )
+    for architecture, search_path, browser_type in search_paths:
+      if not search_path:
         continue
-      if os.path.exists(os.path.join(ie_info['path'], ie_path)):
+      if os.path.exists(os.path.join(search_path, ie_path)):
         browsers.append(
-            PossibleDesktopIE(ie_info['type'], finder_options, architecture))
+            PossibleDesktopIE(browser_type, finder_options, architecture))
 
   return browsers