summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-08 00:31:09 +0000
committeryoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-08 00:31:09 +0000
commit459a16c2000ca417249892dc9267806edd49c108 (patch)
tree8290f453f0c0aa21eb638354f4063da550c7e3a4
parente6d82052ccf2f23a91546748c77c3710202d897d (diff)
downloadchromium_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.cc1
-rw-r--r--chrome/browser/extensions/active_tab_permission_granter.cc1
-rw-r--r--chrome/browser/extensions/crx_installer.cc1
-rw-r--r--chrome/browser/extensions/extension_prefs.cc1
-rw-r--r--chrome/common/extensions/background_info.cc26
-rw-r--r--chrome/common/extensions/background_info.h9
-rw-r--r--chrome/common/extensions/extension.cc39
-rw-r--r--chrome/common/extensions/extension.h7
-rw-r--r--chrome/common/extensions/extension_manifest_constants.cc3
-rw-r--r--chrome/common/extensions/extension_manifest_constants.h1
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[];