summaryrefslogtreecommitdiffstats
path: root/tools/telemetry/telemetry/browser_finder.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/telemetry/telemetry/browser_finder.py')
-rw-r--r--tools/telemetry/telemetry/browser_finder.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/tools/telemetry/telemetry/browser_finder.py b/tools/telemetry/telemetry/browser_finder.py
new file mode 100644
index 0000000..82a98b2
--- /dev/null
+++ b/tools/telemetry/telemetry/browser_finder.py
@@ -0,0 +1,73 @@
+# Copyright (c) 2012 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 browsers that can be controlled by telemetry."""
+
+import logging
+
+from telemetry import android_browser_finder
+from telemetry import cros_browser_finder
+from telemetry import desktop_browser_finder
+
+ALL_BROWSER_TYPES = (
+ desktop_browser_finder.ALL_BROWSER_TYPES + ',' +
+ android_browser_finder.ALL_BROWSER_TYPES + ',' +
+ cros_browser_finder.ALL_BROWSER_TYPES)
+
+class BrowserTypeRequiredException(Exception):
+ pass
+
+def FindBrowser(options):
+ """Finds the best PossibleBrowser object to run given the provided
+ BrowserOptions object. The returned possiblity object can then be used to
+ connect to and control the located browser.
+ """
+ if options.browser_type == 'exact' and options.browser_executable == None:
+ raise Exception('--browser=exact requires --browser-executable to be set.')
+
+ if options.browser_type != 'exact' and options.browser_executable != None:
+ raise Exception('--browser-executable requires --browser=exact.')
+
+ if options.browser_type == None:
+ raise BrowserTypeRequiredException('browser_type must be specified')
+
+ browsers = []
+ browsers.extend(desktop_browser_finder.FindAllAvailableBrowsers(options))
+ browsers.extend(android_browser_finder.FindAllAvailableBrowsers(options))
+ browsers.extend(cros_browser_finder.FindAllAvailableBrowsers(options))
+
+ if options.browser_type == 'any':
+ types = ALL_BROWSER_TYPES.split(',')
+ def compare_browsers_on_type_priority(x, y):
+ x_idx = types.index(x.browser_type)
+ y_idx = types.index(y.browser_type)
+ return x_idx - y_idx
+ browsers.sort(compare_browsers_on_type_priority)
+ if len(browsers) >= 1:
+ return browsers[0]
+ else:
+ return None
+
+ matching_browsers = [b for b in browsers
+ if b.browser_type == options.browser_type]
+
+ if len(matching_browsers) == 1:
+ return matching_browsers[0]
+ elif len(matching_browsers) > 1:
+ logging.warning('Multiple browsers of the same type found: %s' % (
+ repr(matching_browsers)))
+ return matching_browsers[0]
+ else:
+ return None
+
+def GetAllAvailableBrowserTypes(options):
+ """Returns an array of browser types supported on this system."""
+ browsers = []
+ browsers.extend(desktop_browser_finder.FindAllAvailableBrowsers(options))
+ browsers.extend(android_browser_finder.FindAllAvailableBrowsers(options))
+ browsers.extend(cros_browser_finder.FindAllAvailableBrowsers(options))
+
+ type_list = set([browser.browser_type for browser in browsers])
+ type_list = list(type_list)
+ type_list.sort()
+ return type_list