blob: bec211c901d0e6af837f9f18f5c68256883e5668 [file] [log] [blame]
# 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