Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 CHROME_COMMON_EXTENSIONS_EXTENSION_H_ | 5 #ifndef CHROME_COMMON_EXTENSIONS_EXTENSION_H_ |
| 6 #define CHROME_COMMON_EXTENSIONS_EXTENSION_H_ | 6 #define CHROME_COMMON_EXTENSIONS_EXTENSION_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <set> | 10 #include <set> |
| 11 #include <string> | 11 #include <string> |
| 12 #include <vector> | 12 #include <vector> |
| 13 | 13 |
| 14 #include "base/file_path.h" | 14 #include "base/file_path.h" |
| 15 #include "base/gtest_prod_util.h" | 15 #include "base/gtest_prod_util.h" |
| 16 #include "base/memory/linked_ptr.h" | 16 #include "base/memory/linked_ptr.h" |
| 17 #include "base/memory/ref_counted.h" | 17 #include "base/memory/ref_counted.h" |
| 18 #include "base/memory/scoped_ptr.h" | 18 #include "base/memory/scoped_ptr.h" |
| 19 #include "base/synchronization/lock.h" | |
| 19 #include "chrome/common/extensions/extension_constants.h" | 20 #include "chrome/common/extensions/extension_constants.h" |
| 20 #include "chrome/common/extensions/extension_icon_set.h" | 21 #include "chrome/common/extensions/extension_icon_set.h" |
| 21 #include "chrome/common/extensions/extension_permission_set.h" | 22 #include "chrome/common/extensions/extension_permission_set.h" |
| 22 #include "chrome/common/extensions/user_script.h" | 23 #include "chrome/common/extensions/user_script.h" |
| 23 #include "chrome/common/extensions/url_pattern.h" | 24 #include "chrome/common/extensions/url_pattern.h" |
| 24 #include "chrome/common/extensions/url_pattern_set.h" | 25 #include "chrome/common/extensions/url_pattern_set.h" |
| 25 #include "googleurl/src/gurl.h" | 26 #include "googleurl/src/gurl.h" |
| 26 #include "ui/gfx/size.h" | 27 #include "ui/gfx/size.h" |
| 27 | 28 |
| 28 class ExtensionAction; | 29 class ExtensionAction; |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 198 std::string* error); | 199 std::string* error); |
| 199 | 200 |
| 200 // Return the update url used by gallery/webstore extensions. | 201 // Return the update url used by gallery/webstore extensions. |
| 201 static GURL GalleryUpdateUrl(bool secure); | 202 static GURL GalleryUpdateUrl(bool secure); |
| 202 | 203 |
| 203 // Given two install sources, return the one which should take priority | 204 // Given two install sources, return the one which should take priority |
| 204 // over the other. If an extension is installed from two sources A and B, | 205 // over the other. If an extension is installed from two sources A and B, |
| 205 // its install source should be set to GetHigherPriorityLocation(A, B). | 206 // its install source should be set to GetHigherPriorityLocation(A, B). |
| 206 static Location GetHigherPriorityLocation(Location loc1, Location loc2); | 207 static Location GetHigherPriorityLocation(Location loc1, Location loc2); |
| 207 | 208 |
| 208 // Returns the full list of permission messages that this extension | |
| 209 // should display at install time. | |
| 210 ExtensionPermissionMessages GetPermissionMessages() const; | |
| 211 | |
| 212 // Returns the full list of permission messages that this extension | |
| 213 // should display at install time. The messages are returned as strings | |
| 214 // for convenience. | |
| 215 std::vector<string16> GetPermissionMessageStrings() const; | |
| 216 | |
| 217 // Icon sizes used by the extension system. | 209 // Icon sizes used by the extension system. |
| 218 static const int kIconSizes[]; | 210 static const int kIconSizes[]; |
| 219 | 211 |
| 220 // Max size (both dimensions) for browser and page actions. | 212 // Max size (both dimensions) for browser and page actions. |
| 221 static const int kPageActionIconMaxSize; | 213 static const int kPageActionIconMaxSize; |
| 222 static const int kBrowserActionIconMaxSize; | 214 static const int kBrowserActionIconMaxSize; |
| 223 static const int kSidebarIconMaxSize; | 215 static const int kSidebarIconMaxSize; |
| 224 | 216 |
| 225 // Valid schemes for web extent URLPatterns. | 217 // Valid schemes for web extent URLPatterns. |
| 226 static const int kValidWebExtentSchemes; | 218 static const int kValidWebExtentSchemes; |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 364 // --apps-gallery-url switch. The URL returned will not contain a trailing | 356 // --apps-gallery-url switch. The URL returned will not contain a trailing |
| 365 // slash. Do not use this as a prefix/extent for the store. Instead see | 357 // slash. Do not use this as a prefix/extent for the store. Instead see |
| 366 // ExtensionService::GetWebStoreApp or | 358 // ExtensionService::GetWebStoreApp or |
| 367 // ExtensionService::IsDownloadFromGallery | 359 // ExtensionService::IsDownloadFromGallery |
| 368 static std::string ChromeStoreLaunchURL(); | 360 static std::string ChromeStoreLaunchURL(); |
| 369 | 361 |
| 370 // Adds an extension to the scripting whitelist. Used for testing only. | 362 // Adds an extension to the scripting whitelist. Used for testing only. |
| 371 static void SetScriptingWhitelist(const ScriptingWhitelist& whitelist); | 363 static void SetScriptingWhitelist(const ScriptingWhitelist& whitelist); |
| 372 static const ScriptingWhitelist* GetScriptingWhitelist(); | 364 static const ScriptingWhitelist* GetScriptingWhitelist(); |
| 373 | 365 |
| 366 // Parses the host and api permissions from the specified permission |key| | |
| 367 // in the manifest |source|. | |
| 368 bool ParsePermissions(const base::DictionaryValue* source, | |
| 369 const char* key, | |
| 370 int flags, | |
| 371 std::string* error, | |
| 372 ExtensionAPIPermissionSet* api_permissions, | |
| 373 URLPatternSet* host_permissions); | |
| 374 | |
| 374 bool HasAPIPermission(ExtensionAPIPermission::ID permission) const; | 375 bool HasAPIPermission(ExtensionAPIPermission::ID permission) const; |
| 375 bool HasAPIPermission(const std::string& function_name) const; | 376 bool HasAPIPermission(const std::string& function_name) const; |
| 376 | 377 |
| 377 const URLPatternSet& GetEffectiveHostPermissions() const; | 378 const URLPatternSet& GetEffectiveHostPermissions() const; |
| 378 | 379 |
| 379 // Whether or not the extension is allowed permission for a URL pattern from | 380 // Whether or not the extension is allowed permission for a URL pattern from |
| 380 // the manifest. http, https, and chrome://favicon/ is allowed for all | 381 // the manifest. http, https, and chrome://favicon/ is allowed for all |
| 381 // extensions, while component extensions are allowed access to | 382 // extensions, while component extensions are allowed access to |
| 382 // chrome://resources. | 383 // chrome://resources. |
| 383 bool CanSpecifyHostPermission(const URLPattern& pattern) const; | 384 bool CanSpecifyHostPermission(const URLPattern& pattern) const; |
| 384 | 385 |
| 385 // Whether the extension has access to the given URL. | 386 // Whether the extension has access to the given URL. |
| 386 bool HasHostPermission(const GURL& url) const; | 387 bool HasHostPermission(const GURL& url) const; |
| 387 | 388 |
| 388 // Whether the extension has effective access to all hosts. This is true if | 389 // Whether the extension has effective access to all hosts. This is true if |
| 389 // there is a content script that matches all hosts, if there is a host | 390 // there is a content script that matches all hosts, if there is a host |
| 390 // permission grants access to all hosts (like <all_urls>) or an api | 391 // permission grants access to all hosts (like <all_urls>) or an api |
| 391 // permission that effectively grants access to all hosts (e.g. proxy, | 392 // permission that effectively grants access to all hosts (e.g. proxy, |
| 392 // network, etc.) | 393 // network, etc.) |
| 393 bool HasEffectiveAccessToAllHosts() const; | 394 bool HasEffectiveAccessToAllHosts() const; |
| 394 | 395 |
| 395 // Whether the extension effectively has all permissions (for example, by | 396 // Whether the extension effectively has all permissions (for example, by |
| 396 // having an NPAPI plugin). | 397 // having an NPAPI plugin). |
| 397 bool HasFullPermissions() const; | 398 bool HasFullPermissions() const; |
| 398 | 399 |
| 400 // Returns the full list of permission messages that this extension | |
| 401 // should display at install time. | |
| 402 ExtensionPermissionMessages GetPermissionMessages() const; | |
| 403 | |
| 404 // Returns the full list of permission messages that this extension | |
| 405 // should display at install time. The messages are returned as strings | |
| 406 // for convenience. | |
| 407 std::vector<string16> GetPermissionMessageStrings() const; | |
| 408 | |
| 409 // Sets the active |permissions|. | |
| 410 void SetActivePermissions(const ExtensionPermissionSet* permissions) const; | |
| 411 | |
| 412 // Gets the extension's active permission set. | |
| 413 scoped_refptr<const ExtensionPermissionSet> GetActivePermissions() const; | |
| 414 | |
| 399 // Whether context menu should be shown for page and browser actions. | 415 // Whether context menu should be shown for page and browser actions. |
| 400 bool ShowConfigureContextMenus() const; | 416 bool ShowConfigureContextMenus() const; |
| 401 | 417 |
| 402 // Returns the Homepage URL for this extension. If homepage_url was not | 418 // Returns the Homepage URL for this extension. If homepage_url was not |
| 403 // specified in the manifest, this returns the Google Gallery URL. For | 419 // specified in the manifest, this returns the Google Gallery URL. For |
| 404 // third-party extensions, this returns a blank GURL. | 420 // third-party extensions, this returns a blank GURL. |
| 405 GURL GetHomepageURL() const; | 421 GURL GetHomepageURL() const; |
| 406 | 422 |
| 407 // Returns a list of paths (relative to the extension dir) for images that | 423 // Returns a list of paths (relative to the extension dir) for images that |
| 408 // the browser might load (like themes and page action icons). | 424 // the browser might load (like themes and page action icons). |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 483 const std::vector<NaClModuleInfo>& nacl_modules() const { | 499 const std::vector<NaClModuleInfo>& nacl_modules() const { |
| 484 return nacl_modules_; | 500 return nacl_modules_; |
| 485 } | 501 } |
| 486 const std::vector<InputComponentInfo>& input_components() const { | 502 const std::vector<InputComponentInfo>& input_components() const { |
| 487 return input_components_; | 503 return input_components_; |
| 488 } | 504 } |
| 489 const GURL& background_url() const { return background_url_; } | 505 const GURL& background_url() const { return background_url_; } |
| 490 const GURL& options_url() const { return options_url_; } | 506 const GURL& options_url() const { return options_url_; } |
| 491 const GURL& devtools_url() const { return devtools_url_; } | 507 const GURL& devtools_url() const { return devtools_url_; } |
| 492 const std::vector<GURL>& toolstrips() const { return toolstrips_; } | 508 const std::vector<GURL>& toolstrips() const { return toolstrips_; } |
| 493 const ExtensionPermissionSet* permission_set() const { | 509 const ExtensionPermissionSet* optional_permission_set() const { |
| 494 return permission_set_.get(); | 510 return optional_permission_set_.get(); |
| 511 } | |
| 512 const ExtensionPermissionSet* required_permission_set() const { | |
| 513 return required_permission_set_.get(); | |
| 495 } | 514 } |
| 496 const GURL& update_url() const { return update_url_; } | 515 const GURL& update_url() const { return update_url_; } |
| 497 const ExtensionIconSet& icons() const { return icons_; } | 516 const ExtensionIconSet& icons() const { return icons_; } |
| 498 const base::DictionaryValue* manifest_value() const { | 517 const base::DictionaryValue* manifest_value() const { |
| 499 return manifest_value_.get(); | 518 return manifest_value_.get(); |
| 500 } | 519 } |
| 501 const std::string default_locale() const { return default_locale_; } | 520 const std::string default_locale() const { return default_locale_; } |
| 502 const URLOverrideMap& GetChromeURLOverrides() const { | 521 const URLOverrideMap& GetChromeURLOverrides() const { |
| 503 return chrome_url_overrides_; | 522 return chrome_url_overrides_; |
| 504 } | 523 } |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 538 | 557 |
| 539 private: | 558 private: |
| 540 friend class base::RefCountedThreadSafe<Extension>; | 559 friend class base::RefCountedThreadSafe<Extension>; |
| 541 | 560 |
| 542 // We keep a cache of images loaded from extension resources based on their | 561 // We keep a cache of images loaded from extension resources based on their |
| 543 // path and a string representation of a size that may have been used to | 562 // path and a string representation of a size that may have been used to |
| 544 // scale it (or the empty string if the image is at its original size). | 563 // scale it (or the empty string if the image is at its original size). |
| 545 typedef std::pair<FilePath, std::string> ImageCacheKey; | 564 typedef std::pair<FilePath, std::string> ImageCacheKey; |
| 546 typedef std::map<ImageCacheKey, SkBitmap> ImageCache; | 565 typedef std::map<ImageCacheKey, SkBitmap> ImageCache; |
| 547 | 566 |
| 567 class RuntimeData : public base::RefCountedThreadSafe<RuntimeData> { | |
|
Mihai Parparita -not on Chrome
2011/07/21 21:18:13
I don't think making this ref counted buys you any
jstritar
2011/07/22 19:21:55
Done.
| |
| 568 public: | |
| 569 RuntimeData(); | |
| 570 explicit RuntimeData(const ExtensionPermissionSet* active); | |
| 571 ~RuntimeData(); | |
| 572 | |
| 573 void SetActivePermissions(const ExtensionPermissionSet* active); | |
| 574 scoped_refptr<const ExtensionPermissionSet> GetActivePermissions() const; | |
| 575 | |
| 576 private: | |
| 577 friend class base::RefCountedThreadSafe<RuntimeData>; | |
| 578 scoped_refptr<const ExtensionPermissionSet> active_permissions_; | |
| 579 }; | |
| 580 | |
| 548 // Normalize the path for use by the extension. On Windows, this will make | 581 // Normalize the path for use by the extension. On Windows, this will make |
| 549 // sure the drive letter is uppercase. | 582 // sure the drive letter is uppercase. |
| 550 static FilePath MaybeNormalizePath(const FilePath& path); | 583 static FilePath MaybeNormalizePath(const FilePath& path); |
| 551 | 584 |
| 552 // Returns true if this extension id is from a trusted provider. | 585 // Returns true if this extension id is from a trusted provider. |
| 553 static bool IsTrustedId(const std::string& id); | 586 static bool IsTrustedId(const std::string& id); |
| 554 | 587 |
| 555 Extension(const FilePath& path, Location location); | 588 Extension(const FilePath& path, Location location); |
| 556 ~Extension(); | 589 ~Extension(); |
| 557 | 590 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 660 // Default locale for fall back. Can be empty if extension is not localized. | 693 // Default locale for fall back. Can be empty if extension is not localized. |
| 661 std::string default_locale_; | 694 std::string default_locale_; |
| 662 | 695 |
| 663 // If true, a separate process will be used for the extension in incognito | 696 // If true, a separate process will be used for the extension in incognito |
| 664 // mode. | 697 // mode. |
| 665 bool incognito_split_mode_; | 698 bool incognito_split_mode_; |
| 666 | 699 |
| 667 // Defines the set of URLs in the extension's web content. | 700 // Defines the set of URLs in the extension's web content. |
| 668 URLPatternSet extent_; | 701 URLPatternSet extent_; |
| 669 | 702 |
| 670 // The set of permissions that the extension effectively has access to. | 703 // The extension runtime data. |
| 671 scoped_ptr<ExtensionPermissionSet> permission_set_; | 704 mutable base::Lock runtime_data_lock_; |
| 705 mutable RuntimeData runtime_data_; | |
|
jstritar
2011/07/19 17:10:53
I kept this in Extension to simplify these changes
| |
| 706 | |
| 707 // The set of permissions the extension can request at runtime. | |
| 708 scoped_ptr<const ExtensionPermissionSet> optional_permission_set_; | |
| 709 | |
| 710 // The extension's required / default set of permissions. | |
| 711 scoped_ptr<const ExtensionPermissionSet> required_permission_set_; | |
| 672 | 712 |
| 673 // The icons for the extension. | 713 // The icons for the extension. |
| 674 ExtensionIconSet icons_; | 714 ExtensionIconSet icons_; |
| 675 | 715 |
| 676 // The base extension url for the extension. | 716 // The base extension url for the extension. |
| 677 GURL extension_url_; | 717 GURL extension_url_; |
| 678 | 718 |
| 679 // The location the extension was loaded from. | 719 // The location the extension was loaded from. |
| 680 Location location_; | 720 Location location_; |
| 681 | 721 |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 857 | 897 |
| 858 // Was the extension already disabled? | 898 // Was the extension already disabled? |
| 859 bool already_disabled; | 899 bool already_disabled; |
| 860 | 900 |
| 861 // The extension being unloaded - this should always be non-NULL. | 901 // The extension being unloaded - this should always be non-NULL. |
| 862 const Extension* extension; | 902 const Extension* extension; |
| 863 | 903 |
| 864 UnloadedExtensionInfo(const Extension* extension, Reason reason); | 904 UnloadedExtensionInfo(const Extension* extension, Reason reason); |
| 865 }; | 905 }; |
| 866 | 906 |
| 907 // The details sent for EXTENSION_PERMISSIONS_UPDATED notifications. | |
| 908 struct UpdatedExtensionPermissionsInfo { | |
| 909 enum Reason { | |
| 910 ADDED, // The permissions were added to the extension. | |
| 911 REMOVED, // The permissions were removed from the extension. | |
| 912 }; | |
| 913 | |
| 914 Reason reason; | |
| 915 | |
| 916 // The extension who's permissions have changed. | |
| 917 const Extension* extension; | |
| 918 | |
| 919 // The permissions that have changed. For Reason::ADDED, this would contain | |
| 920 // only the permissions that have added, and for Reason::REMOVED, this would | |
| 921 // only contain the removed permissions. | |
| 922 const ExtensionPermissionSet* permissions; | |
| 923 | |
| 924 UpdatedExtensionPermissionsInfo( | |
| 925 const Extension* extension, | |
| 926 const ExtensionPermissionSet* permissions, | |
| 927 Reason reason); | |
| 928 }; | |
| 929 | |
| 867 #endif // CHROME_COMMON_EXTENSIONS_EXTENSION_H_ | 930 #endif // CHROME_COMMON_EXTENSIONS_EXTENSION_H_ |
| OLD | NEW |