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

Unified Diff: tools/perf/profile_creators/extensions_profile_creator.py

Issue 847583002: Fix telemetry extension profile generator for OSX. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@telemetry_profile_generation4_2
Patch Set: Created 5 years, 11 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
« no previous file with comments | « no previous file | tools/perf/profile_creators/many_extensions_profile_creator.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/perf/profile_creators/extensions_profile_creator.py
diff --git a/tools/perf/profile_creators/extensions_profile_creator.py b/tools/perf/profile_creators/extensions_profile_creator.py
index f0b8e4719ce961debf4fd493768c2e22a7ccab97..8d51f453e0628b6d3e831fc13bd13f6cd6a802ef 100644
--- a/tools/perf/profile_creators/extensions_profile_creator.py
+++ b/tools/perf/profile_creators/extensions_profile_creator.py
@@ -54,7 +54,7 @@ class _ExtensionPageTest(page_test.PageTest):
# Sleep for a bit to allow safe browsing and other data to load +
# extensions to install.
if not self._extensions_installed:
- sleep_seconds = 5 * 60
+ sleep_seconds = 15
logging.info("Sleeping for %d seconds." % sleep_seconds)
time.sleep(sleep_seconds)
self._extensions_installed = True
@@ -78,14 +78,16 @@ class _ExtensionPageTest(page_test.PageTest):
installed_extensions)
-def _ExternalExtensionsPath():
+def _ExternalExtensionsPath(profile_path):
"""Returns the OS-dependent path at which to install the extension deployment
- files"""
+ files.
+
+ |profile_path| is the path of the profile that will be used to launch the
+ browser.
+ """
if platform.system() == 'Darwin':
- return os.path.join('/Library', 'Application Support', 'Google', 'Chrome',
- 'External Extensions')
- elif platform.system() == 'Linux':
- return os.path.join('/opt', 'google', 'chrome', 'extensions' )
+ return str(profile_path) + '/External Extensions'
+
else:
raise NotImplementedError('Extension install on %s is not yet supported' %
platform.system())
@@ -101,9 +103,15 @@ def _DownloadExtension(extension_id, output_dir):
Returns:
Extension file downloaded."""
extension_download_path = os.path.join(output_dir, "%s.crx" % extension_id)
+
+ # Ideally, the Chrome version would be dynamically extracted from the binary.
+ # Instead, we use a Chrome version whose release date is expected to be
+ # about a hundred years in the future.
+ chrome_version = '1000.0.0.0'
extension_url = (
"https://clients2.google.com/service/update2/crx?response=redirect"
- "&x=id%%3D%s%%26lang%%3Den-US%%26uc" % extension_id)
+ "&prodversion=%s&x=id%%3D%s%%26lang%%3Den-US%%26uc"
+ % (chrome_version, extension_id))
response = urllib2.urlopen(extension_url)
assert(response.getcode() == 200)
@@ -145,14 +153,14 @@ class ExtensionsProfileCreator(profile_creator.ProfileCreator):
Subclasses are meant to be run interactively.
"""
def __init__(self, extensions_to_install=None, theme_to_install=None):
- self._CheckTestEnvironment()
super(ExtensionsProfileCreator, self).__init__()
# List of extensions to install.
- self._extensions_to_install = list(extensions_to_install or [])
-
- # Theme to install (if any).
- self._theme_to_install = theme_to_install
+ self._extensions_to_install = []
+ if extensions_to_install:
+ self._extensions_to_install.extend(extensions_to_install)
+ if theme_to_install:
+ self._extensions_to_install.append(theme_to_install)
# Directory to download extension files into.
self._extension_download_dir = None
@@ -160,23 +168,14 @@ class ExtensionsProfileCreator(profile_creator.ProfileCreator):
# List of files to delete after run.
self._files_to_cleanup = []
- def _CheckTestEnvironment(self):
- # Running this script on a corporate network or other managed environment
- # could potentially alter the profile contents.
- hostname = socket.gethostname()
- if hostname.endswith('corp.google.com'):
- raise Exception("It appears you are connected to a corporate network "
- "(hostname=%s). This script needs to be run off the corp "
- "network." % hostname)
-
- prompt = ("\n!!!This script must be run on a fresh OS installation, "
- "disconnected from any corporate network. Are you sure you want to "
- "continue? (y/N) ")
- if (raw_input(prompt).lower() != 'y'):
- sys.exit(-1)
-
def Run(self, options):
- self._PrepareExtensionInstallFiles()
+ # Installing extensions requires that the profile directory exist before
+ # the browser is launched.
+ if not options.browser_options.profile_dir:
+ options.browser_options.profile_dir = tempfile.mkdtemp()
+ options.browser_options.disable_default_apps = False
+
+ self._PrepareExtensionInstallFiles(options.browser_options.profile_dir)
expectations = test_expectations.TestExpectations()
results = results_options.CreateResults(
@@ -204,24 +203,23 @@ class ExtensionsProfileCreator(profile_creator.ProfileCreator):
'\n'.join(map(str, results.pages_that_failed)))
raise Exception('ExtensionsProfileCreator failed.')
- def _PrepareExtensionInstallFiles(self):
+ def _PrepareExtensionInstallFiles(self, profile_path):
"""Download extension archives and create extension install files."""
extensions_to_install = self._extensions_to_install
- if self._theme_to_install:
- extensions_to_install.append(self._theme_to_install)
if not extensions_to_install:
raise ValueError("No extensions or themes to install:",
extensions_to_install)
# Create external extensions path if it doesn't exist already.
- external_extensions_dir = _ExternalExtensionsPath()
+ external_extensions_dir = _ExternalExtensionsPath(profile_path)
if not os.path.isdir(external_extensions_dir):
os.makedirs(external_extensions_dir)
self._extension_download_dir = tempfile.mkdtemp()
num_extensions = len(extensions_to_install)
- for i, extension_id in extensions_to_install:
+ for i in range(num_extensions):
+ extension_id = extensions_to_install[i]
logging.info("Downloading %s - %d/%d" % (
extension_id, (i + 1), num_extensions))
extension_path = _DownloadExtension(extension_id,
« no previous file with comments | « no previous file | tools/perf/profile_creators/many_extensions_profile_creator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698