extension_to_load.py revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import os 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core.chrome import crx_id 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExtensionPathNonExistentException(Exception): 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pass 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MissingPublicKeyException(Exception): 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pass 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExtensionToLoad(object): 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self, path, is_component=False): 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if not os.path.isdir(path): 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) raise ExtensionPathNonExistentException( 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'Extension path not a directory %s' % path) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._path = path 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._local_path = path 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._is_component = is_component 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if is_component and not crx_id.HasPublicKey(path): 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) raise MissingPublicKeyException( 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'Component extension %s must have a public key' % path) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @property 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def extension_id(self): 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) """Unique extension id of this extension.""" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if crx_id.HasPublicKey(self._path): 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # Calculate extension id from the public key. 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return crx_id.GetCRXAppID(os.path.realpath(self._path)) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else: 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # Calculate extension id based on the path on the device. 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return crx_id.GetCRXAppID(os.path.realpath(self._local_path), 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) from_file_path=True) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @property 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def path(self): 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) """Path to extension source directory.""" 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return self._path 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @property 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def local_path(self): 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) """Path to extension destination directory, for remote instances of 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome""" 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return self._local_path 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @local_path.setter 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def local_path(self, local_path): 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._local_path = local_path 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @property 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def is_component(self): 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) """Whether this extension should be loaded as a component extension.""" 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return self._is_component 56