diff options
Diffstat (limited to 'catapult/telemetry/telemetry/internal/browser/extension_to_load.py')
-rw-r--r-- | catapult/telemetry/telemetry/internal/browser/extension_to_load.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/catapult/telemetry/telemetry/internal/browser/extension_to_load.py b/catapult/telemetry/telemetry/internal/browser/extension_to_load.py new file mode 100644 index 00000000..bec211c9 --- /dev/null +++ b/catapult/telemetry/telemetry/internal/browser/extension_to_load.py @@ -0,0 +1,57 @@ +# Copyright 2013 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 + +from telemetry.internal.backends.chrome import crx_id + + +class ExtensionPathNonExistentException(Exception): + pass + +class MissingPublicKeyException(Exception): + pass + +class ExtensionToLoad(object): + def __init__(self, path, browser_type): + if not os.path.isdir(path): + raise ExtensionPathNonExistentException( + 'Extension path not a directory %s' % path) + self._path = path + self._local_path = path + # It is possible that we are running telemetry on Windows targeting + # a remote CrOS or Android device. In this case, we need the + # browser_type argument to determine how we should encode + # the extension path. + self._is_win = (os.name == 'nt' + and not (browser_type.startswith('android') + or browser_type.startswith('cros'))) + + @property + def extension_id(self): + """Unique extension id of this extension.""" + if crx_id.HasPublicKey(self._path): + # Calculate extension id from the public key. + return crx_id.GetCRXAppID(os.path.realpath(self._path)) + else: + # Calculate extension id based on the path on the device. + return crx_id.GetCRXAppID( + os.path.realpath(self._local_path), + from_file_path=True, + is_win_path=self._is_win) + + @property + def path(self): + """Path to extension source directory.""" + return self._path + + @property + def local_path(self): + """Path to extension destination directory, for remote instances of + chrome""" + return self._local_path + + @local_path.setter + def local_path(self, local_path): + self._local_path = local_path + |