Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(440)

Side by Side Diff: chrome/common/extensions/extension.h

Issue 8786004: Revert "Restrict extension features based on the extension type." (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/chrome_tests.gypi ('k') | chrome/common/extensions/extension.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "base/synchronization/lock.h"
20 #include "chrome/common/extensions/extension_constants.h" 20 #include "chrome/common/extensions/extension_constants.h"
21 #include "chrome/common/extensions/extension_icon_set.h" 21 #include "chrome/common/extensions/extension_icon_set.h"
22 #include "chrome/common/extensions/extension_permission_set.h" 22 #include "chrome/common/extensions/extension_permission_set.h"
23 #include "chrome/common/extensions/manifest.h"
24 #include "chrome/common/extensions/user_script.h" 23 #include "chrome/common/extensions/user_script.h"
25 #include "chrome/common/extensions/url_pattern.h" 24 #include "chrome/common/extensions/url_pattern.h"
26 #include "chrome/common/extensions/url_pattern_set.h" 25 #include "chrome/common/extensions/url_pattern_set.h"
27 #include "googleurl/src/gurl.h" 26 #include "googleurl/src/gurl.h"
28 #include "ui/gfx/size.h" 27 #include "ui/gfx/size.h"
29 #include "webkit/glue/web_intent_service_data.h" 28 #include "webkit/glue/web_intent_service_data.h"
30 29
31 class ExtensionAction; 30 class ExtensionAction;
32 class ExtensionResource; 31 class ExtensionResource;
33 class ExtensionSidebarDefaults; 32 class ExtensionSidebarDefaults;
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 367
369 // Returns the base extension url for a given |extension_id|. 368 // Returns the base extension url for a given |extension_id|.
370 static GURL GetBaseURLFromExtensionId(const std::string& extension_id); 369 static GURL GetBaseURLFromExtensionId(const std::string& extension_id);
371 370
372 // Adds an extension to the scripting whitelist. Used for testing only. 371 // Adds an extension to the scripting whitelist. Used for testing only.
373 static void SetScriptingWhitelist(const ScriptingWhitelist& whitelist); 372 static void SetScriptingWhitelist(const ScriptingWhitelist& whitelist);
374 static const ScriptingWhitelist* GetScriptingWhitelist(); 373 static const ScriptingWhitelist* GetScriptingWhitelist();
375 374
376 // Parses the host and api permissions from the specified permission |key| 375 // Parses the host and api permissions from the specified permission |key|
377 // in the manifest |source|. 376 // in the manifest |source|.
378 bool ParsePermissions(const extensions::Manifest* source, 377 bool ParsePermissions(const base::DictionaryValue* source,
379 const char* key, 378 const char* key,
380 int flags, 379 int flags,
381 std::string* error, 380 std::string* error,
382 ExtensionAPIPermissionSet* api_permissions, 381 ExtensionAPIPermissionSet* api_permissions,
383 URLPatternSet* host_permissions); 382 URLPatternSet* host_permissions);
384 383
385 bool HasAPIPermission(ExtensionAPIPermission::ID permission) const; 384 bool HasAPIPermission(ExtensionAPIPermission::ID permission) const;
386 bool HasAPIPermission(const std::string& function_name) const; 385 bool HasAPIPermission(const std::string& function_name) const;
387 386
388 const URLPatternSet& GetEffectiveHostPermissions() const; 387 const URLPatternSet& GetEffectiveHostPermissions() const;
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 const GURL& options_url() const { return options_url_; } 524 const GURL& options_url() const { return options_url_; }
526 const GURL& devtools_url() const { return devtools_url_; } 525 const GURL& devtools_url() const { return devtools_url_; }
527 const ExtensionPermissionSet* optional_permission_set() const { 526 const ExtensionPermissionSet* optional_permission_set() const {
528 return optional_permission_set_.get(); 527 return optional_permission_set_.get();
529 } 528 }
530 const ExtensionPermissionSet* required_permission_set() const { 529 const ExtensionPermissionSet* required_permission_set() const {
531 return required_permission_set_.get(); 530 return required_permission_set_.get();
532 } 531 }
533 const GURL& update_url() const { return update_url_; } 532 const GURL& update_url() const { return update_url_; }
534 const ExtensionIconSet& icons() const { return icons_; } 533 const ExtensionIconSet& icons() const { return icons_; }
535 const extensions::Manifest* manifest() const { 534 const base::DictionaryValue* manifest_value() const {
536 return manifest_.get(); 535 return manifest_value_.get();
537 } 536 }
538 const std::string default_locale() const { return default_locale_; } 537 const std::string default_locale() const { return default_locale_; }
539 const URLOverrideMap& GetChromeURLOverrides() const { 538 const URLOverrideMap& GetChromeURLOverrides() const {
540 return chrome_url_overrides_; 539 return chrome_url_overrides_;
541 } 540 }
542 const std::string omnibox_keyword() const { return omnibox_keyword_; } 541 const std::string omnibox_keyword() const { return omnibox_keyword_; }
543 bool incognito_split_mode() const { return incognito_split_mode_; } 542 bool incognito_split_mode() const { return incognito_split_mode_; }
544 bool offline_enabled() const { return offline_enabled_; } 543 bool offline_enabled() const { return offline_enabled_; }
545 const std::vector<TtsVoice>& tts_voices() const { return tts_voices_; } 544 const std::vector<TtsVoice>& tts_voices() const { return tts_voices_; }
546 const std::vector<webkit_glue::WebIntentServiceData>& 545 const std::vector<webkit_glue::WebIntentServiceData>&
547 intents_services() const { 546 intents_services() const {
548 return intents_services_; 547 return intents_services_;
549 } 548 }
550 549
551 bool wants_file_access() const { return wants_file_access_; } 550 bool wants_file_access() const { return wants_file_access_; }
552 int creation_flags() const { return creation_flags_; } 551 int creation_flags() const { return creation_flags_; }
553 bool from_webstore() const { return (creation_flags_ & FROM_WEBSTORE) != 0; } 552 bool from_webstore() const { return (creation_flags_ & FROM_WEBSTORE) != 0; }
554 bool from_bookmark() const { return (creation_flags_ & FROM_BOOKMARK) != 0; } 553 bool from_bookmark() const { return (creation_flags_ & FROM_BOOKMARK) != 0; }
555 554
556 const std::string& content_security_policy() const { 555 const std::string& content_security_policy() const {
557 return content_security_policy_; 556 return content_security_policy_;
558 } 557 }
559 558
560 // App-related. 559 // App-related.
561 bool is_app() const { 560 bool is_app() const { return is_app_; }
562 return is_packaged_app() || is_hosted_app() || is_platform_app(); 561 bool is_platform_app() const { return is_platform_app_; }
562 bool is_hosted_app() const { return is_app() && !web_extent().is_empty(); }
563 bool is_packaged_app() const {
564 return !is_platform_app() && is_app() && web_extent().is_empty();
563 } 565 }
564 bool is_platform_app() const { return manifest()->IsPlatformApp(); }
565 bool is_hosted_app() const { return manifest()->IsHostedApp(); }
566 bool is_packaged_app() const { return manifest()->IsPackagedApp(); }
567 bool is_storage_isolated() const { return is_app() && is_storage_isolated_; } 566 bool is_storage_isolated() const { return is_app() && is_storage_isolated_; }
568 const URLPatternSet& web_extent() const { return extent_; } 567 const URLPatternSet& web_extent() const { return extent_; }
569 const std::string& launch_local_path() const { return launch_local_path_; } 568 const std::string& launch_local_path() const { return launch_local_path_; }
570 const std::string& launch_web_url() const { return launch_web_url_; } 569 const std::string& launch_web_url() const { return launch_web_url_; }
571 extension_misc::LaunchContainer launch_container() const { 570 extension_misc::LaunchContainer launch_container() const {
572 return launch_container_; 571 return launch_container_;
573 } 572 }
574 int launch_width() const { return launch_width_; } 573 int launch_width() const { return launch_width_; }
575 int launch_height() const { return launch_height_; } 574 int launch_height() const { return launch_height_; }
576 575
577 // Theme-related. 576 // Theme-related.
578 bool is_theme() const { return manifest()->IsTheme(); } 577 bool is_theme() const { return is_theme_; }
579 base::DictionaryValue* GetThemeImages() const { return theme_images_.get(); } 578 base::DictionaryValue* GetThemeImages() const { return theme_images_.get(); }
580 base::DictionaryValue* GetThemeColors() const {return theme_colors_.get(); } 579 base::DictionaryValue* GetThemeColors() const {return theme_colors_.get(); }
581 base::DictionaryValue* GetThemeTints() const { return theme_tints_.get(); } 580 base::DictionaryValue* GetThemeTints() const { return theme_tints_.get(); }
582 base::DictionaryValue* GetThemeDisplayProperties() const { 581 base::DictionaryValue* GetThemeDisplayProperties() const {
583 return theme_display_properties_.get(); 582 return theme_display_properties_.get();
584 } 583 }
585 584
586 private: 585 private:
587 friend class base::RefCountedThreadSafe<Extension>; 586 friend class base::RefCountedThreadSafe<Extension>;
588 587
(...skipping 21 matching lines...) Expand all
610 // sure the drive letter is uppercase. 609 // sure the drive letter is uppercase.
611 static FilePath MaybeNormalizePath(const FilePath& path); 610 static FilePath MaybeNormalizePath(const FilePath& path);
612 611
613 // Returns true if this extension id is from a trusted provider. 612 // Returns true if this extension id is from a trusted provider.
614 static bool IsTrustedId(const std::string& id); 613 static bool IsTrustedId(const std::string& id);
615 614
616 Extension(const FilePath& path, Location location); 615 Extension(const FilePath& path, Location location);
617 ~Extension(); 616 ~Extension();
618 617
619 // Initialize the extension from a parsed manifest. 618 // Initialize the extension from a parsed manifest.
620 // Takes ownership of the manifest |value|. 619 bool InitFromValue(const base::DictionaryValue& value, int flags,
621 bool InitFromValue(extensions::Manifest* value, int flags,
622 std::string* error); 620 std::string* error);
623 621
624 // Helper function for implementing HasCachedImage/GetCachedImage. A return 622 // Helper function for implementing HasCachedImage/GetCachedImage. A return
625 // value of NULL means there is no matching image cached (we allow caching an 623 // value of NULL means there is no matching image cached (we allow caching an
626 // empty SkBitmap). 624 // empty SkBitmap).
627 SkBitmap* GetCachedImageImpl(const ExtensionResource& source, 625 SkBitmap* GetCachedImageImpl(const ExtensionResource& source,
628 const gfx::Size& max_size) const; 626 const gfx::Size& max_size) const;
629 627
630 // Helper method that loads a UserScript object from a 628 // Helper method that loads a UserScript object from a
631 // dictionary in the content_script list of the manifest. 629 // dictionary in the content_script list of the manifest.
632 bool LoadUserScriptHelper(const base::DictionaryValue* content_script, 630 bool LoadUserScriptHelper(const base::DictionaryValue* content_script,
633 int definition_index, 631 int definition_index,
634 int flags, 632 int flags,
635 std::string* error, 633 std::string* error,
636 UserScript* result); 634 UserScript* result);
637 635
638 // Helper method that loads either the include_globs or exclude_globs list 636 // Helper method that loads either the include_globs or exclude_globs list
639 // from an entry in the content_script lists of the manifest. 637 // from an entry in the content_script lists of the manifest.
640 bool LoadGlobsHelper(const base::DictionaryValue* content_script, 638 bool LoadGlobsHelper(const base::DictionaryValue* content_script,
641 int content_script_index, 639 int content_script_index,
642 const char* globs_property_name, 640 const char* globs_property_name,
643 std::string* error, 641 std::string* error,
644 void(UserScript::*add_method)(const std::string& glob), 642 void(UserScript::*add_method)(const std::string& glob),
645 UserScript *instance); 643 UserScript *instance);
646 644
647 // Helpers to load various chunks of the manifest. 645 // Helpers to load various chunks of the manifest.
648 bool LoadExtent(const extensions::Manifest* manifest, 646 bool LoadIsApp(const base::DictionaryValue* manifest, std::string* error);
647 bool LoadExtent(const base::DictionaryValue* manifest,
649 const char* key, 648 const char* key,
650 URLPatternSet* extent, 649 URLPatternSet* extent,
651 const char* list_error, 650 const char* list_error,
652 const char* value_error, 651 const char* value_error,
653 URLPattern::ParseOption parse_strictness, 652 URLPattern::ParseOption parse_strictness,
654 std::string* error); 653 std::string* error);
655 bool LoadLaunchContainer(const extensions::Manifest* manifest, 654 bool LoadLaunchContainer(const base::DictionaryValue* manifest,
656 std::string* error); 655 std::string* error);
657 bool LoadLaunchURL(const extensions::Manifest* manifest, 656 bool LoadLaunchURL(const base::DictionaryValue* manifest,
658 std::string* error); 657 std::string* error);
659 bool LoadAppIsolation(const extensions::Manifest* manifest, 658 bool LoadAppIsolation(const base::DictionaryValue* manifest,
660 std::string* error); 659 std::string* error);
661 bool LoadWebIntentServices(const extensions::Manifest* manifest, 660 bool LoadWebIntentServices(const base::DictionaryValue& manifest,
662 std::string* error); 661 std::string* error);
662 bool EnsureNotHybridApp(const base::DictionaryValue* manifest,
663 std::string* error);
663 664
664 // Helper method to load an ExtensionAction from the page_action or 665 // Helper method to load an ExtensionAction from the page_action or
665 // browser_action entries in the manifest. 666 // browser_action entries in the manifest.
666 ExtensionAction* LoadExtensionActionHelper( 667 ExtensionAction* LoadExtensionActionHelper(
667 const base::DictionaryValue* extension_action, std::string* error); 668 const base::DictionaryValue* extension_action, std::string* error);
668 669
669 // Helper method to load an FileBrowserHandlerList from the manifest. 670 // Helper method to load an FileBrowserHandlerList from the manifest.
670 FileBrowserHandlerList* LoadFileBrowserHandlers( 671 FileBrowserHandlerList* LoadFileBrowserHandlers(
671 const base::ListValue* extension_actions, std::string* error); 672 const base::ListValue* extension_actions, std::string* error);
672 // Helper method to load an FileBrowserHandler from manifest. 673 // Helper method to load an FileBrowserHandler from manifest.
673 FileBrowserHandler* LoadFileBrowserHandler( 674 FileBrowserHandler* LoadFileBrowserHandler(
674 const base::DictionaryValue* file_browser_handlers, std::string* error); 675 const base::DictionaryValue* file_browser_handlers, std::string* error);
675 676
676 // Helper method to load an ExtensionSidebarDefaults from the sidebar manifest 677 // Helper method to load an ExtensionSidebarDefaults from the sidebar manifest
677 // entry. 678 // entry.
678 ExtensionSidebarDefaults* LoadExtensionSidebarDefaults( 679 ExtensionSidebarDefaults* LoadExtensionSidebarDefaults(
679 const base::DictionaryValue* sidebar, std::string* error); 680 const base::DictionaryValue* sidebar, std::string* error);
680 681
681 // Returns true if the extension has more than one "UI surface". For example, 682 // Returns true if the extension has more than one "UI surface". For example,
682 // an extension that has a browser action and a page action. 683 // an extension that has a browser action and a page action.
683 bool HasMultipleUISurfaces() const; 684 bool HasMultipleUISurfaces() const;
684 685
686 // Figures out if a source contains keys not associated with themes - we
687 // don't want to allow scripts and such to be bundled with themes.
688 bool ContainsNonThemeKeys(const base::DictionaryValue& source) const;
689
685 // Updates the launch URL and extents for the extension using the given 690 // Updates the launch URL and extents for the extension using the given
686 // |override_url|. 691 // |override_url|.
687 void OverrideLaunchUrl(const GURL& override_url); 692 void OverrideLaunchUrl(const GURL& override_url);
688 693
689 // Returns true if this extension can specify |api|. 694 // Returns true if this extension can specify |api|.
690 bool CanSpecifyAPIPermission(const ExtensionAPIPermission* api, 695 bool CanSpecifyAPIPermission(const ExtensionAPIPermission* api,
691 std::string* error) const; 696 std::string* error) const;
692 bool CanSpecifyComponentOnlyPermission() const; 697 bool CanSpecifyComponentOnlyPermission() const;
693 bool CanSpecifyExperimentalPermission() const; 698 bool CanSpecifyExperimentalPermission() const;
694 699
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 813
809 // A map of color names to colors. 814 // A map of color names to colors.
810 scoped_ptr<base::DictionaryValue> theme_colors_; 815 scoped_ptr<base::DictionaryValue> theme_colors_;
811 816
812 // A map of color names to colors. 817 // A map of color names to colors.
813 scoped_ptr<base::DictionaryValue> theme_tints_; 818 scoped_ptr<base::DictionaryValue> theme_tints_;
814 819
815 // A map of display properties. 820 // A map of display properties.
816 scoped_ptr<base::DictionaryValue> theme_display_properties_; 821 scoped_ptr<base::DictionaryValue> theme_display_properties_;
817 822
823 // Whether the extension is a theme.
824 bool is_theme_;
825
818 // The homepage for this extension. Useful if it is not hosted by Google and 826 // The homepage for this extension. Useful if it is not hosted by Google and
819 // therefore does not have a Gallery URL. 827 // therefore does not have a Gallery URL.
820 GURL homepage_url_; 828 GURL homepage_url_;
821 829
822 // URL for fetching an update manifest 830 // URL for fetching an update manifest
823 GURL update_url_; 831 GURL update_url_;
824 832
825 // The manifest that this extension was created from. 833 // A copy of the manifest that this extension was created from.
826 scoped_ptr<extensions::Manifest> manifest_; 834 scoped_ptr<base::DictionaryValue> manifest_value_;
827 835
828 // A map of chrome:// hostnames (newtab, downloads, etc.) to Extension URLs 836 // A map of chrome:// hostnames (newtab, downloads, etc.) to Extension URLs
829 // which override the handling of those URLs. (see ExtensionOverrideUI). 837 // which override the handling of those URLs. (see ExtensionOverrideUI).
830 URLOverrideMap chrome_url_overrides_; 838 URLOverrideMap chrome_url_overrides_;
831 839
840 // Whether this extension uses app features.
841 bool is_app_;
842
843 // Whether this app uses platform features.
844 bool is_platform_app_;
845
832 // Whether this extension requests isolated storage. 846 // Whether this extension requests isolated storage.
833 bool is_storage_isolated_; 847 bool is_storage_isolated_;
834 848
835 // The local path inside the extension to use with the launcher. 849 // The local path inside the extension to use with the launcher.
836 std::string launch_local_path_; 850 std::string launch_local_path_;
837 851
838 // A web url to use with the launcher. Note that this might be relative or 852 // A web url to use with the launcher. Note that this might be relative or
839 // absolute. If relative, it is relative to web_origin. 853 // absolute. If relative, it is relative to web_origin.
840 std::string launch_web_url_; 854 std::string launch_web_url_;
841 855
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
932 // only contain the removed permissions. 946 // only contain the removed permissions.
933 const ExtensionPermissionSet* permissions; 947 const ExtensionPermissionSet* permissions;
934 948
935 UpdatedExtensionPermissionsInfo( 949 UpdatedExtensionPermissionsInfo(
936 const Extension* extension, 950 const Extension* extension,
937 const ExtensionPermissionSet* permissions, 951 const ExtensionPermissionSet* permissions,
938 Reason reason); 952 Reason reason);
939 }; 953 };
940 954
941 #endif // CHROME_COMMON_EXTENSIONS_EXTENSION_H_ 955 #endif // CHROME_COMMON_EXTENSIONS_EXTENSION_H_
OLDNEW
« no previous file with comments | « chrome/chrome_tests.gypi ('k') | chrome/common/extensions/extension.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698