| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef EXTENSIONS_COMMON_EXTENSION_H_ | 5 #ifndef EXTENSIONS_COMMON_EXTENSION_H_ |
| 6 #define EXTENSIONS_COMMON_EXTENSION_H_ | 6 #define EXTENSIONS_COMMON_EXTENSION_H_ |
| 7 | 7 |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <iosfwd> | 9 #include <iosfwd> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 namespace gfx { | 41 namespace gfx { |
| 42 class ImageSkia; | 42 class ImageSkia; |
| 43 } | 43 } |
| 44 | 44 |
| 45 namespace extensions { | 45 namespace extensions { |
| 46 class PermissionsData; | 46 class PermissionsData; |
| 47 class APIPermissionSet; | 47 class APIPermissionSet; |
| 48 class ManifestPermissionSet; | 48 class ManifestPermissionSet; |
| 49 class PermissionSet; | 49 class PermissionSet; |
| 50 | 50 |
| 51 // Uniquely identifies an Extension, using 32 characters from the alphabet |
| 52 // 'a'-'p'. An empty string represents "no extension". |
| 53 // |
| 54 // Note: If this gets used heavily in files that don't otherwise need to include |
| 55 // extension.h, we should pull it into a dedicated header. |
| 56 typedef std::string ExtensionId; |
| 57 |
| 51 // Represents a Chrome extension. | 58 // Represents a Chrome extension. |
| 52 // Once created, an Extension object is immutable, with the exception of its | 59 // Once created, an Extension object is immutable, with the exception of its |
| 53 // RuntimeData. This makes it safe to use on any thread, since access to the | 60 // RuntimeData. This makes it safe to use on any thread, since access to the |
| 54 // RuntimeData is protected by a lock. | 61 // RuntimeData is protected by a lock. |
| 55 class Extension : public base::RefCountedThreadSafe<Extension> { | 62 class Extension : public base::RefCountedThreadSafe<Extension> { |
| 56 public: | 63 public: |
| 57 struct ManifestData; | 64 struct ManifestData; |
| 58 | 65 |
| 59 typedef std::map<const std::string, linked_ptr<ManifestData> > | 66 typedef std::map<const std::string, linked_ptr<ManifestData> > |
| 60 ManifestDataMap; | 67 ManifestDataMap; |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 const base::DictionaryValue& value, | 171 const base::DictionaryValue& value, |
| 165 int flags, | 172 int flags, |
| 166 std::string* error); | 173 std::string* error); |
| 167 | 174 |
| 168 // In a few special circumstances, we want to create an Extension and give it | 175 // In a few special circumstances, we want to create an Extension and give it |
| 169 // an explicit id. Most consumers should just use the other Create() method. | 176 // an explicit id. Most consumers should just use the other Create() method. |
| 170 static scoped_refptr<Extension> Create(const base::FilePath& path, | 177 static scoped_refptr<Extension> Create(const base::FilePath& path, |
| 171 Manifest::Location location, | 178 Manifest::Location location, |
| 172 const base::DictionaryValue& value, | 179 const base::DictionaryValue& value, |
| 173 int flags, | 180 int flags, |
| 174 const std::string& explicit_id, | 181 const ExtensionId& explicit_id, |
| 175 std::string* error); | 182 std::string* error); |
| 176 | 183 |
| 177 // Valid schemes for web extent URLPatterns. | 184 // Valid schemes for web extent URLPatterns. |
| 178 static const int kValidWebExtentSchemes; | 185 static const int kValidWebExtentSchemes; |
| 179 | 186 |
| 180 // Valid schemes for host permission URLPatterns. | 187 // Valid schemes for host permission URLPatterns. |
| 181 static const int kValidHostPermissionSchemes; | 188 static const int kValidHostPermissionSchemes; |
| 182 | 189 |
| 183 // The mimetype used for extensions. | 190 // The mimetype used for extensions. |
| 184 static const char kMimeType[]; | 191 static const char kMimeType[]; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 // Does a simple base64 encoding of |input| into |output|. | 227 // Does a simple base64 encoding of |input| into |output|. |
| 221 static bool ProducePEM(const std::string& input, std::string* output); | 228 static bool ProducePEM(const std::string& input, std::string* output); |
| 222 | 229 |
| 223 // Expects base64 encoded |input| and formats into |output| including | 230 // Expects base64 encoded |input| and formats into |output| including |
| 224 // the appropriate header & footer. | 231 // the appropriate header & footer. |
| 225 static bool FormatPEMForFileOutput(const std::string& input, | 232 static bool FormatPEMForFileOutput(const std::string& input, |
| 226 std::string* output, | 233 std::string* output, |
| 227 bool is_public); | 234 bool is_public); |
| 228 | 235 |
| 229 // Returns the base extension url for a given |extension_id|. | 236 // Returns the base extension url for a given |extension_id|. |
| 230 static GURL GetBaseURLFromExtensionId(const std::string& extension_id); | 237 static GURL GetBaseURLFromExtensionId(const ExtensionId& extension_id); |
| 231 | 238 |
| 232 // DEPRECATED: These methods have been moved to PermissionsData. | 239 // DEPRECATED: These methods have been moved to PermissionsData. |
| 233 // TODO(rdevlin.cronin): remove these once all calls have been updated. | 240 // TODO(rdevlin.cronin): remove these once all calls have been updated. |
| 234 bool HasAPIPermission(APIPermission::ID permission) const; | 241 bool HasAPIPermission(APIPermission::ID permission) const; |
| 235 bool HasAPIPermission(const std::string& permission_name) const; | 242 bool HasAPIPermission(const std::string& permission_name) const; |
| 236 scoped_refptr<const PermissionSet> GetActivePermissions() const; | 243 scoped_refptr<const PermissionSet> GetActivePermissions() const; |
| 237 | 244 |
| 238 // Whether context menu should be shown for page and browser actions. | 245 // Whether context menu should be shown for page and browser actions. |
| 239 bool ShowConfigureContextMenus() const; | 246 bool ShowConfigureContextMenus() const; |
| 240 | 247 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 267 // Sets |data| to be associated with the key. Takes ownership of |data|. | 274 // Sets |data| to be associated with the key. Takes ownership of |data|. |
| 268 // Can only be called before InitValue is finished. Not thread-safe; | 275 // Can only be called before InitValue is finished. Not thread-safe; |
| 269 // all SetManifestData calls should be on only one thread. | 276 // all SetManifestData calls should be on only one thread. |
| 270 void SetManifestData(const std::string& key, ManifestData* data); | 277 void SetManifestData(const std::string& key, ManifestData* data); |
| 271 | 278 |
| 272 // Accessors: | 279 // Accessors: |
| 273 | 280 |
| 274 const base::FilePath& path() const { return path_; } | 281 const base::FilePath& path() const { return path_; } |
| 275 const GURL& url() const { return extension_url_; } | 282 const GURL& url() const { return extension_url_; } |
| 276 Manifest::Location location() const; | 283 Manifest::Location location() const; |
| 277 const std::string& id() const; | 284 const ExtensionId& id() const; |
| 278 const base::Version* version() const { return version_.get(); } | 285 const base::Version* version() const { return version_.get(); } |
| 279 const std::string VersionString() const; | 286 const std::string VersionString() const; |
| 280 const std::string& name() const { return name_; } | 287 const std::string& name() const { return name_; } |
| 281 const std::string& short_name() const { return short_name_; } | 288 const std::string& short_name() const { return short_name_; } |
| 282 const std::string& non_localized_name() const { return non_localized_name_; } | 289 const std::string& non_localized_name() const { return non_localized_name_; } |
| 283 // Base64-encoded version of the key used to sign this extension. | 290 // Base64-encoded version of the key used to sign this extension. |
| 284 // In pseudocode, returns | 291 // In pseudocode, returns |
| 285 // base::Base64Encode(RSAPrivateKey(pem_file).ExportPublicKey()). | 292 // base::Base64Encode(RSAPrivateKey(pem_file).ExportPublicKey()). |
| 286 const std::string& public_key() const { return public_key_; } | 293 const std::string& public_key() const { return public_key_; } |
| 287 const std::string& description() const { return description_; } | 294 const std::string& description() const { return description_; } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 // Theme-related. | 340 // Theme-related. |
| 334 bool is_theme() const; | 341 bool is_theme() const; |
| 335 | 342 |
| 336 private: | 343 private: |
| 337 friend class base::RefCountedThreadSafe<Extension>; | 344 friend class base::RefCountedThreadSafe<Extension>; |
| 338 | 345 |
| 339 // Chooses the extension ID for an extension based on a variety of criteria. | 346 // Chooses the extension ID for an extension based on a variety of criteria. |
| 340 // The chosen ID will be set in |manifest|. | 347 // The chosen ID will be set in |manifest|. |
| 341 static bool InitExtensionID(extensions::Manifest* manifest, | 348 static bool InitExtensionID(extensions::Manifest* manifest, |
| 342 const base::FilePath& path, | 349 const base::FilePath& path, |
| 343 const std::string& explicit_id, | 350 const ExtensionId& explicit_id, |
| 344 int creation_flags, | 351 int creation_flags, |
| 345 base::string16* error); | 352 base::string16* error); |
| 346 | 353 |
| 347 Extension(const base::FilePath& path, | 354 Extension(const base::FilePath& path, |
| 348 scoped_ptr<extensions::Manifest> manifest); | 355 scoped_ptr<extensions::Manifest> manifest); |
| 349 virtual ~Extension(); | 356 virtual ~Extension(); |
| 350 | 357 |
| 351 // Initialize the extension from a parsed manifest. | 358 // Initialize the extension from a parsed manifest. |
| 352 // TODO(aa): Rename to just Init()? There's no Value here anymore. | 359 // TODO(aa): Rename to just Init()? There's no Value here anymore. |
| 353 // TODO(aa): It is really weird the way this class essentially contains a copy | 360 // TODO(aa): It is really weird the way this class essentially contains a copy |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 // granted it that access). | 460 // granted it that access). |
| 454 bool wants_file_access_; | 461 bool wants_file_access_; |
| 455 | 462 |
| 456 // The flags that were passed to InitFromValue. | 463 // The flags that were passed to InitFromValue. |
| 457 int creation_flags_; | 464 int creation_flags_; |
| 458 | 465 |
| 459 DISALLOW_COPY_AND_ASSIGN(Extension); | 466 DISALLOW_COPY_AND_ASSIGN(Extension); |
| 460 }; | 467 }; |
| 461 | 468 |
| 462 typedef std::vector<scoped_refptr<const Extension> > ExtensionList; | 469 typedef std::vector<scoped_refptr<const Extension> > ExtensionList; |
| 463 typedef std::set<std::string> ExtensionIdSet; | 470 typedef std::set<ExtensionId> ExtensionIdSet; |
| 464 typedef std::vector<std::string> ExtensionIdList; | 471 typedef std::vector<ExtensionId> ExtensionIdList; |
| 465 | 472 |
| 466 // Handy struct to pass core extension info around. | 473 // Handy struct to pass core extension info around. |
| 467 struct ExtensionInfo { | 474 struct ExtensionInfo { |
| 468 ExtensionInfo(const base::DictionaryValue* manifest, | 475 ExtensionInfo(const base::DictionaryValue* manifest, |
| 469 const std::string& id, | 476 const ExtensionId& id, |
| 470 const base::FilePath& path, | 477 const base::FilePath& path, |
| 471 Manifest::Location location); | 478 Manifest::Location location); |
| 472 ~ExtensionInfo(); | 479 ~ExtensionInfo(); |
| 473 | 480 |
| 474 scoped_ptr<base::DictionaryValue> extension_manifest; | 481 scoped_ptr<base::DictionaryValue> extension_manifest; |
| 475 std::string extension_id; | 482 ExtensionId extension_id; |
| 476 base::FilePath extension_path; | 483 base::FilePath extension_path; |
| 477 Manifest::Location extension_location; | 484 Manifest::Location extension_location; |
| 478 | 485 |
| 479 private: | 486 private: |
| 480 DISALLOW_COPY_AND_ASSIGN(ExtensionInfo); | 487 DISALLOW_COPY_AND_ASSIGN(ExtensionInfo); |
| 481 }; | 488 }; |
| 482 | 489 |
| 483 struct InstalledExtensionInfo { | 490 struct InstalledExtensionInfo { |
| 484 // The extension being installed - this should always be non-NULL. | 491 // The extension being installed - this should always be non-NULL. |
| 485 const Extension* extension; | 492 const Extension* extension; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 532 | 539 |
| 533 UpdatedExtensionPermissionsInfo( | 540 UpdatedExtensionPermissionsInfo( |
| 534 const Extension* extension, | 541 const Extension* extension, |
| 535 const PermissionSet* permissions, | 542 const PermissionSet* permissions, |
| 536 Reason reason); | 543 Reason reason); |
| 537 }; | 544 }; |
| 538 | 545 |
| 539 } // namespace extensions | 546 } // namespace extensions |
| 540 | 547 |
| 541 #endif // EXTENSIONS_COMMON_EXTENSION_H_ | 548 #endif // EXTENSIONS_COMMON_EXTENSION_H_ |
| OLD | NEW |