diff options
author | yoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-08 00:31:09 +0000 |
---|---|---|
committer | yoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-08 00:31:09 +0000 |
commit | 459a16c2000ca417249892dc9267806edd49c108 (patch) | |
tree | 8290f453f0c0aa21eb638354f4063da550c7e3a4 | |
parent | e6d82052ccf2f23a91546748c77c3710202d897d (diff) | |
download | chromium_src-459a16c2000ca417249892dc9267806edd49c108.zip chromium_src-459a16c2000ca417249892dc9267806edd49c108.tar.gz chromium_src-459a16c2000ca417249892dc9267806edd49c108.tar.bz2 |
Move some extension manifest consistency checks to BackgroundManifestHandler.
BUG=162530
TBR=rdsmith@chromium.org
Review URL: https://chromiumcodereview.appspot.com/16398010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@204990 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/download/download_crx_util.cc | 1 | ||||
-rw-r--r-- | chrome/browser/extensions/active_tab_permission_granter.cc | 1 | ||||
-rw-r--r-- | chrome/browser/extensions/crx_installer.cc | 1 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_prefs.cc | 1 | ||||
-rw-r--r-- | chrome/common/extensions/background_info.cc | 26 | ||||
-rw-r--r-- | chrome/common/extensions/background_info.h | 9 | ||||
-rw-r--r-- | chrome/common/extensions/extension.cc | 39 | ||||
-rw-r--r-- | chrome/common/extensions/extension.h | 7 | ||||
-rw-r--r-- | chrome/common/extensions/extension_manifest_constants.cc | 3 | ||||
-rw-r--r-- | chrome/common/extensions/extension_manifest_constants.h | 1 |
10 files changed, 34 insertions, 55 deletions
diff --git a/chrome/browser/download/download_crx_util.cc b/chrome/browser/download/download_crx_util.cc index d3afa8b..043f990 100644 --- a/chrome/browser/download/download_crx_util.cc +++ b/chrome/browser/download/download_crx_util.cc @@ -16,6 +16,7 @@ #include "chrome/browser/ui/host_desktop.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/chrome_notification_types.h" +#include "chrome/common/extensions/user_script.h" #include "content/public/browser/download_item.h" #include "content/public/browser/notification_service.h" diff --git a/chrome/browser/extensions/active_tab_permission_granter.cc b/chrome/browser/extensions/active_tab_permission_granter.cc index 15b970d..a11d8af 100644 --- a/chrome/browser/extensions/active_tab_permission_granter.cc +++ b/chrome/browser/extensions/active_tab_permission_granter.cc @@ -13,6 +13,7 @@ #include "chrome/common/extensions/extension_messages.h" #include "chrome/common/extensions/permissions/permission_set.h" #include "chrome/common/extensions/permissions/permissions_data.h" +#include "chrome/common/extensions/user_script.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/navigation_details.h" #include "content/public/browser/notification_service.h" diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc index 62adf5b..cb67863 100644 --- a/chrome/browser/extensions/crx_installer.cc +++ b/chrome/browser/extensions/crx_installer.cc @@ -42,6 +42,7 @@ #include "chrome/common/extensions/manifest_handlers/icons_handler.h" #include "chrome/common/extensions/manifest_handlers/shared_module_info.h" #include "chrome/common/extensions/manifest_url_handler.h" +#include "chrome/common/extensions/user_script.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/resource_dispatcher_host.h" diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc index f4e7149..a601786 100644 --- a/chrome/browser/extensions/extension_prefs.cc +++ b/chrome/browser/extensions/extension_prefs.cc @@ -24,6 +24,7 @@ #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" #include "chrome/common/extensions/permissions/permission_set.h" #include "chrome/common/extensions/permissions/permissions_info.h" +#include "chrome/common/extensions/user_script.h" #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "components/user_prefs/pref_registry_syncable.h" diff --git a/chrome/common/extensions/background_info.cc b/chrome/common/extensions/background_info.cc index 05fedf7..d1ee95c 100644 --- a/chrome/common/extensions/background_info.cc +++ b/chrome/common/extensions/background_info.cc @@ -79,14 +79,12 @@ bool BackgroundInfo::AllowJSAccess(const Extension* extension) { // static bool BackgroundInfo::HasPersistentBackgroundPage(const Extension* extension) { - const BackgroundInfo& info = GetBackgroundInfo(extension); - return info.has_background_page() && info.is_persistent_; + return GetBackgroundInfo(extension).has_persistent_background_page(); } // static bool BackgroundInfo::HasLazyBackgroundPage(const Extension* extension) { - const BackgroundInfo& info = GetBackgroundInfo(extension); - return info.has_background_page() && !info.is_persistent_; + return GetBackgroundInfo(extension).has_lazy_background_page(); } bool BackgroundInfo::Parse(const Extension* extension, string16* error) { @@ -240,6 +238,20 @@ bool BackgroundManifestHandler::Parse(Extension* extension, string16* error) { scoped_ptr<BackgroundInfo> info(new BackgroundInfo); if (!info->Parse(extension, error)) return false; + + // Platform apps must have background pages. + if (extension->is_platform_app() && !info->has_background_page()) { + *error = ASCIIToUTF16(errors::kBackgroundRequiredForPlatformApps); + return false; + } + // Lazy background pages are incompatible with the webRequest API. + if (info->has_lazy_background_page() && + PermissionsData::GetInitialAPIPermissions(extension)->count( + APIPermission::kWebRequest)) { + *error = ASCIIToUTF16(errors::kWebRequestConflictsWithLazyBackground); + return false; + } + extension->SetManifestData(kBackground, info.release()); return true; } @@ -281,6 +293,10 @@ bool BackgroundManifestHandler::Validate( return true; } +bool BackgroundManifestHandler::AlwaysParseForType(Manifest::Type type) const { + return type == Manifest::TYPE_PLATFORM_APP; +} + const std::vector<std::string> BackgroundManifestHandler::Keys() const { static const char* keys[] = { keys::kBackgroundAllowJsAccess, @@ -294,4 +310,4 @@ const std::vector<std::string> BackgroundManifestHandler::Keys() const { return std::vector<std::string>(keys, keys + arraysize(keys)); } -} // extensions +} // namespace extensions diff --git a/chrome/common/extensions/background_info.h b/chrome/common/extensions/background_info.h index 881b947..5807a30 100644 --- a/chrome/common/extensions/background_info.h +++ b/chrome/common/extensions/background_info.h @@ -32,6 +32,14 @@ class BackgroundInfo : public Extension::ManifestData { return background_url_.is_valid() || !background_scripts_.empty(); } + bool has_persistent_background_page() const { + return has_background_page() && is_persistent_; + } + + bool has_lazy_background_page() const { + return has_background_page() && !is_persistent_; + } + bool Parse(const Extension* extension, string16* error); private: @@ -75,6 +83,7 @@ class BackgroundManifestHandler : public ManifestHandler { virtual bool Validate(const Extension* extension, std::string* error, std::vector<InstallWarning>* warnings) const OVERRIDE; + virtual bool AlwaysParseForType(Manifest::Type type) const OVERRIDE; private: virtual const std::vector<std::string> Keys() const OVERRIDE; diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc index 1844618..5220397 100644 --- a/chrome/common/extensions/extension.cc +++ b/chrome/common/extensions/extension.cc @@ -23,19 +23,13 @@ #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_version_info.h" -// TODO(rdevlin.cronin): Remove these once all references have been removed as -// part of crbug.com/159265. -#include "chrome/common/extensions/background_info.h" #include "chrome/common/extensions/extension_manifest_constants.h" -#include "chrome/common/extensions/incognito_handler.h" #include "chrome/common/extensions/manifest.h" #include "chrome/common/extensions/manifest_handler.h" -#include "chrome/common/extensions/manifest_url_handler.h" #include "chrome/common/extensions/permissions/api_permission_set.h" #include "chrome/common/extensions/permissions/permission_set.h" #include "chrome/common/extensions/permissions/permissions_data.h" #include "chrome/common/extensions/permissions/permissions_info.h" -#include "chrome/common/extensions/user_script.h" #include "chrome/common/url_constants.h" #include "extensions/common/constants.h" #include "extensions/common/error_utils.h" @@ -174,12 +168,6 @@ scoped_refptr<Extension> Extension::Create(const base::FilePath& path, return NULL; } - if (!extension->CheckPlatformAppFeatures(&error) || - !extension->CheckConflictingFeatures(&error)) { - *utf8_error = UTF16ToUTF8(error); - return NULL; - } - return extension; } @@ -824,33 +812,6 @@ bool Extension::CheckMinimumChromeVersion(string16* error) const { return true; } -bool Extension::CheckPlatformAppFeatures(string16* error) const { - if (!is_platform_app()) - return true; - - if (!BackgroundInfo::HasBackgroundPage(this)) { - *error = ASCIIToUTF16(errors::kBackgroundRequiredForPlatformApps); - return false; - } - - if (!IncognitoInfo::IsSplitMode(this)) { - *error = ASCIIToUTF16(errors::kInvalidIncognitoModeForPlatformApp); - return false; - } - - return true; -} - -bool Extension::CheckConflictingFeatures(string16* error) const { - if (BackgroundInfo::HasLazyBackgroundPage(this) && - HasAPIPermission(APIPermission::kWebRequest)) { - *error = ASCIIToUTF16(errors::kWebRequestConflictsWithLazyBackground); - return false; - } - - return true; -} - ExtensionInfo::ExtensionInfo(const DictionaryValue* manifest, const std::string& id, const base::FilePath& path, diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h index a225894..ed7d94e 100644 --- a/chrome/common/extensions/extension.h +++ b/chrome/common/extensions/extension.h @@ -24,7 +24,6 @@ #include "chrome/common/extensions/manifest.h" #include "chrome/common/extensions/permissions/api_permission.h" #include "chrome/common/extensions/permissions/permission_message.h" -#include "chrome/common/extensions/user_script.h" #include "extensions/common/extension_resource.h" #include "extensions/common/install_warning.h" #include "extensions/common/url_pattern.h" @@ -372,12 +371,6 @@ class Extension : public base::RefCountedThreadSafe<Extension> { bool CheckMinimumChromeVersion(string16* error) const; - // Check that platform app features are valid. Called after InitFromValue. - bool CheckPlatformAppFeatures(string16* error) const; - - // Check that features don't conflict. Called after InitFromValue. - bool CheckConflictingFeatures(string16* error) const; - // The extension's human-readable name. Name is used for display purpose. It // might be wrapped with unicode bidi control characters so that it is // displayed correctly in RTL context. diff --git a/chrome/common/extensions/extension_manifest_constants.cc b/chrome/common/extensions/extension_manifest_constants.cc index 6dcb67a..b38f0ed 100644 --- a/chrome/common/extensions/extension_manifest_constants.cc +++ b/chrome/common/extensions/extension_manifest_constants.cc @@ -334,9 +334,6 @@ const char kInvalidImportVersion[] = "Invalid value for 'import[*].minimum_version'."; const char kInvalidIncognitoBehavior[] = "Invalid value for 'incognito'."; -const char kInvalidIncognitoModeForPlatformApp[] = - "Invalid value for 'incognito'. Packaged apps must use split incognito " - "mode."; const char kInvalidInputComponents[] = "Invalid value for 'input_components'"; const char kInvalidInputComponentDescription[] = diff --git a/chrome/common/extensions/extension_manifest_constants.h b/chrome/common/extensions/extension_manifest_constants.h index cfa7111..9f50e71 100644 --- a/chrome/common/extensions/extension_manifest_constants.h +++ b/chrome/common/extensions/extension_manifest_constants.h @@ -275,7 +275,6 @@ namespace extension_manifest_errors { extern const char kInvalidImportId[]; extern const char kInvalidImportVersion[]; extern const char kInvalidIncognitoBehavior[]; - extern const char kInvalidIncognitoModeForPlatformApp[]; extern const char kInvalidInputComponents[]; extern const char kInvalidInputComponentDescription[]; extern const char kInvalidInputComponentLayoutName[]; |