Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Unified Diff: tools/chrome_remote_control/chrome_remote_control/browser_finder.py

Issue 10875044: Basic framework for devtools-based scrolling tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: with the added files Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/chrome_remote_control/chrome_remote_control/browser_finder.py
diff --git a/tools/chrome_remote_control/chrome_remote_control/browser_finder.py b/tools/chrome_remote_control/chrome_remote_control/browser_finder.py
new file mode 100644
index 0000000000000000000000000000000000000000..1144bca139e90ad939afde8816bf6b9946964e22
--- /dev/null
+++ b/tools/chrome_remote_control/chrome_remote_control/browser_finder.py
@@ -0,0 +1,136 @@
+# 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.
+import os as real_os
+import sys as real_sys
+import subprocess as real_subprocess
+
+import browser
+import desktop_browser_backend
+
+"""Finds browsers that can be controlled by chrome_remote_control."""
+
+ALL_BROWSER_TYPES = "exact,release,debug,canary,system"
+DEFAULT_BROWSER_TYPES_TO_RUN = "exact,release,canary,system"
+
+class PossibleBrowser(object):
+ """A browser that can be controlled.
+
+ Call connect() to launch the browser and begin manipulating it..
+ """
+
+ def __init__(self, type, options, executable):
+ self.type = type
+ self._options = options
+ self._local_executable = executable
+
+ def __repr__(self):
+ return "PossibleBrowser(type=%s)" % self.type
+
+ def Create(self):
+ if self._local_executable:
+ backend = desktop_browser_backend.DesktopBrowserBackend(
+ self._local_executable, self._options)
+ return browser.Browser(backend)
+ raise Exception("Not implemented.")
+
+def FindBestPossibleBrowser(options,
+ os = real_os,
+ sys = real_sys,
+ subprocess = real_subprocess):
+ """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."""
+
+ browsers = FindAllPossibleBrowsers(options, os, sys, subprocess)
+ if len(browsers):
+ return browsers[0]
+ return None
+
+def GetAllAvailableBrowserTypes(options):
+ """Returns an array of browser types supported on this system."""
+ browsers = FindAllPossibleBrowsers(options)
+ type_set = set([browser.type for browser in browsers])
+ type_list = list(type_list)
+ type_list.sort()
+ return type_list
+
+def FindAllPossibleBrowsers(options,
+ os = real_os,
+ sys = real_sys,
+ subprocess = real_subprocess):
+ """Finds all browsers that can be created given the options. Returns an array
+ of PossibleBrowser objects, sorted and filtered by
+ options.browser_types_to_use."""
+ browsers = _UnsortedFindAllLocalBrowserPossibilities(options,
+ os, sys, subprocess)
+ selected_browsers = [browser
+ for browser in browsers
+ if browser.type in options.browser_types_to_use]
+ def compare_browsers_on_priority(x, y):
+ x_idx = options.browser_types_to_use.index(x.type)
+ y_idx = options.browser_types_to_use.index(y.type)
+ return x_idx - y_idx
+ selected_browsers.sort(compare_browsers_on_priority)
+ return selected_browsers
+
+def _UnsortedFindAllLocalBrowserPossibilities(options,
+ os = real_os,
+ sys = real_sys,
+ subprocess = real_subprocess):
+ browsers = []
+
+ # Add the explicit browser executable if given.
+ if options.browser_executable:
+ if os.path.exists(options.browser_executable):
+ browsers.append(PossibleBrowser("exact", options,
+ options.browser_executable))
+
+ # Look for a browser in the standard chrome build locations.
+ if options.chrome_root:
+ chrome_root = options.chrome_root
+ else:
+ chrome_root = os.path.join(os.path.dirname(__file__), "../../../")
+
+ if sys.platform == 'darwin':
+ app_name = "Chromium.app/Contents/MacOS/Chromium"
+ elif sys.platform.startswith('linux'):
+ app_name = "chrome"
+ elif sys.platform == 'win':
+ app_name = "chrome.exe"
+ else:
+ raise Exception("Platform not recognized")
+
+ debug_app = os.path.join(chrome_root, "out", "Debug", app_name)
+ if os.path.exists(debug_app):
+ browsers.append(PossibleBrowser("debug", options, debug_app))
+
+ release_app = os.path.join(chrome_root, "out", "Release", app_name)
+ if os.path.exists(release_app):
+ browsers.append(PossibleBrowser("release", options, release_app))
+
+ # Mac-specific options.
+ if sys.platform == 'darwin':
+ mac_canary = ("/Applications/Google Chrome Canary.app/"
+ "Contents/MacOS/Google Chrome Canary")
+ mac_stable = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
+ if os.path.exists(mac_canary):
+ browsers.append(PossibleBrowser("canary", options, mac_canary))
+
+ if os.path.exists(mac_stable):
+ browsers.append(PossibleBrowser("system", options, mac_stable))
+
+ # Linux specific options.
+ if sys.platform.startswith('linux'):
+ # Look for a google-chrome instance.
+ found = False
+ try:
+ with open(real_os.devnull, 'w') as devnull:
+ found = subprocess.call(['google-chrome', '--version'],
+ stdout=devnull, stderr=devnull) == 0
+ except OSError:
+ pass
+ if found:
+ browsers.append(PossibleBrowser("system", options, 'google-chrome'))
+
+ return browsers

Powered by Google App Engine
This is Rietveld 408576698