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

Side by Side Diff: tools/telemetry/telemetry/core/chrome/desktop_browser_finder.py

Issue 12294002: Revert 182991 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright (c) 2012 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 """Finds desktop browsers that can be controlled by telemetry."""
5
6 import logging
7 import os
8 import subprocess
9 import sys
10
11 from telemetry.core import browser
12 from telemetry.core import possible_browser
13 from telemetry.core.chrome import desktop_browser_backend
14 from telemetry.core.chrome import platform
15
16 ALL_BROWSER_TYPES = ','.join([
17 'exact',
18 'release',
19 'debug',
20 'canary',
21 'content-shell-debug',
22 'content-shell-release',
23 'system'])
24
25 class PossibleDesktopBrowser(possible_browser.PossibleBrowser):
26 """A desktop browser that can be controlled."""
27
28 def __init__(self, browser_type, options, executable, is_content_shell):
29 super(PossibleDesktopBrowser, self).__init__(browser_type, options)
30 self._local_executable = executable
31 self._is_content_shell = is_content_shell
32
33 def __repr__(self):
34 return 'PossibleDesktopBrowser(browser_type=%s)' % self.browser_type
35
36 def Create(self):
37 backend = desktop_browser_backend.DesktopBrowserBackend(
38 self._options, self._local_executable, self._is_content_shell)
39 b = browser.Browser(backend, platform.Platform())
40 backend.SetBrowser(b)
41 return b
42
43 def SupportsOptions(self, options):
44 if (len(options.extensions_to_load) != 0) and self._is_content_shell:
45 return False
46 return True
47
48 def FindAllAvailableBrowsers(options):
49 """Finds all the desktop browsers available on this machine."""
50 browsers = []
51
52 has_display = True
53 if (sys.platform.startswith('linux') and
54 os.getenv('DISPLAY') == None):
55 has_display = False
56
57 # Add the explicit browser executable if given.
58 if options.browser_executable:
59 normalized_executable = os.path.expanduser(options.browser_executable)
60 if os.path.exists(normalized_executable):
61 browsers.append(PossibleDesktopBrowser('exact', options,
62 normalized_executable, False))
63 else:
64 logging.warning('%s specified by browser_executable does not exist',
65 normalized_executable)
66
67 # Look for a browser in the standard chrome build locations.
68 if options.chrome_root:
69 chrome_root = options.chrome_root
70 else:
71 chrome_root = os.path.join(os.path.dirname(__file__),
72 '..', '..', '..', '..', '..')
73
74 if sys.platform == 'darwin':
75 chromium_app_name = 'Chromium.app/Contents/MacOS/Chromium'
76 content_shell_app_name = 'Content Shell.app/Contents/MacOS/Content Shell'
77 elif sys.platform.startswith('linux'):
78 chromium_app_name = 'chrome'
79 content_shell_app_name = 'content_shell'
80 elif sys.platform.startswith('win'):
81 chromium_app_name = 'chrome.exe'
82 content_shell_app_name = 'content_shell.exe'
83 else:
84 raise Exception('Platform not recognized')
85
86 build_dirs = ['build',
87 'out',
88 'sconsbuild',
89 'xcodebuild']
90
91 def AddIfFound(browser_type, type_dir, app_name, content_shell):
92 for build_dir in build_dirs:
93 app = os.path.join(chrome_root, build_dir, type_dir, app_name)
94 if os.path.exists(app):
95 browsers.append(PossibleDesktopBrowser(browser_type, options,
96 app, content_shell))
97 return True
98 return False
99
100 # Add local builds
101 AddIfFound('debug', 'Debug', chromium_app_name, False)
102 AddIfFound('content-shell-debug', 'Debug', content_shell_app_name, True)
103 AddIfFound('release', 'Release', chromium_app_name, False)
104 AddIfFound('content-shell-release', 'Release', content_shell_app_name, True)
105
106 # Mac-specific options.
107 if sys.platform == 'darwin':
108 mac_canary = ('/Applications/Google Chrome Canary.app/'
109 'Contents/MacOS/Google Chrome Canary')
110 mac_system = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
111 if os.path.exists(mac_canary):
112 browsers.append(PossibleDesktopBrowser('canary', options,
113 mac_canary, False))
114
115 if os.path.exists(mac_system):
116 browsers.append(PossibleDesktopBrowser('system', options,
117 mac_system, False))
118
119 # Linux specific options.
120 if sys.platform.startswith('linux'):
121 # Look for a google-chrome instance.
122 found = False
123 try:
124 with open(os.devnull, 'w') as devnull:
125 found = subprocess.call(['google-chrome', '--version'],
126 stdout=devnull, stderr=devnull) == 0
127 except OSError:
128 pass
129 if found:
130 browsers.append(
131 PossibleDesktopBrowser('system', options, 'google-chrome', False))
132
133 # Win32-specific options.
134 if sys.platform.startswith('win'):
135 system_path = os.path.join('Google', 'Chrome', 'Application')
136 canary_path = os.path.join('Google', 'Chrome SxS', 'Application')
137
138 win_search_paths = [os.getenv('PROGRAMFILES(X86)'),
139 os.getenv('PROGRAMFILES'),
140 os.getenv('LOCALAPPDATA')]
141
142 for path in win_search_paths:
143 if not path:
144 continue
145 if AddIfFound('canary', os.path.join(path, canary_path),
146 chromium_app_name, False):
147 break
148
149 for path in win_search_paths:
150 if not path:
151 continue
152 if AddIfFound('system', os.path.join(path, system_path),
153 chromium_app_name, False):
154 break
155
156 if len(browsers) and not has_display:
157 logging.warning(
158 'Found (%s), but you do not have a DISPLAY environment set.' %
159 ','.join([b.browser_type for b in browsers]))
160 return []
161
162 return browsers
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698