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

Unified Diff: chrome/common/extensions/extension.cc

Issue 12256031: Add a non-const APIPermissionSet to Extension to be manipulated during initialization. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 10 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/extensions/extension.cc
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
index 73c2d524faed6fde21c75e510c223050629e0ac2..9b7eabfc39d6767b2c32714d5cd17001d03ce105 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -39,6 +39,7 @@
#include "chrome/common/extensions/manifest_handler.h"
#include "chrome/common/extensions/manifest_handler_helpers.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_info.h"
#include "chrome/common/extensions/user_script.h"
@@ -1406,18 +1407,18 @@ bool Extension::InitFromValue(int flags, string16* error) {
if (is_app() && !LoadAppFeatures(error))
return false;
- APIPermissionSet api_permissions;
+ initial_api_permissions_.reset(new APIPermissionSet);
URLPatternSet host_permissions;
if (!ParsePermissions(keys::kPermissions,
error,
- &api_permissions,
+ initial_api_permissions_.get(),
&host_permissions)) {
return false;
}
// Check for any permissions that are optional only.
- for (APIPermissionSet::const_iterator i = api_permissions.begin();
- i != api_permissions.end(); ++i) {
+ for (APIPermissionSet::const_iterator i = initial_api_permissions_->begin();
+ i != initial_api_permissions_->end(); ++i) {
if ((*i)->info()->must_be_optional()) {
*error = ErrorUtils::FormatErrorMessageUTF16(
errors::kPermissionMustBeOptional, (*i)->info()->name());
@@ -1429,9 +1430,9 @@ bool Extension::InitFromValue(int flags, string16* error) {
// app.window API to platform apps, with no dependency on any permissions.
// See http://crbug.com/120069.
if (is_platform_app()) {
- api_permissions.insert(APIPermission::kAppCurrentWindowInternal);
- api_permissions.insert(APIPermission::kAppRuntime);
- api_permissions.insert(APIPermission::kAppWindow);
+ initial_api_permissions_->insert(APIPermission::kAppCurrentWindowInternal);
+ initial_api_permissions_->insert(APIPermission::kAppRuntime);
+ initial_api_permissions_->insert(APIPermission::kAppWindow);
}
APIPermissionSet optional_api_permissions;
@@ -1443,18 +1444,18 @@ bool Extension::InitFromValue(int flags, string16* error) {
return false;
}
- if (ContainsManifestForbiddenPermission(api_permissions, error) ||
+ if (ContainsManifestForbiddenPermission(*initial_api_permissions_, error) ||
ContainsManifestForbiddenPermission(optional_api_permissions, error)) {
return false;
}
- if (!LoadAppIsolation(api_permissions, error))
+ if (!LoadAppIsolation(error))
return false;
- if (!LoadSharedFeatures(api_permissions, error))
+ if (!LoadSharedFeatures(error))
return false;
- if (!LoadExtensionFeatures(&api_permissions, error))
+ if (!LoadExtensionFeatures(error))
return false;
if (!LoadManagedModeFeatures(error))
@@ -1468,17 +1469,17 @@ bool Extension::InitFromValue(int flags, string16* error) {
finished_parsing_manifest_ = true;
runtime_data_.SetActivePermissions(new PermissionSet(
- this, api_permissions, host_permissions));
+ this, *initial_api_permissions_, host_permissions));
required_permission_set_ = new PermissionSet(
- this, api_permissions, host_permissions);
+ this, *initial_api_permissions_, host_permissions);
optional_permission_set_ = new PermissionSet(
optional_api_permissions, optional_host_permissions, URLPatternSet());
+ initial_api_permissions_.reset();
return true;
}
-bool Extension::LoadAppIsolation(const APIPermissionSet& api_permissions,
- string16* error) {
+bool Extension::LoadAppIsolation(string16* error) {
// Platform apps always get isolated storage.
if (is_platform_app()) {
is_storage_isolated_ = true;
@@ -1487,7 +1488,8 @@ bool Extension::LoadAppIsolation(const APIPermissionSet& api_permissions,
// Other apps only get it if it is requested _and_ experimental APIs are
// enabled.
- if (!api_permissions.count(APIPermission::kExperimental) || !is_app())
+ if (!initial_api_permissions()->count(APIPermission::kExperimental)
+ || !is_app())
return true;
Value* tmp_isolation = NULL;
@@ -1808,9 +1810,7 @@ bool Extension::LoadLaunchURL(string16* error) {
return true;
}
-bool Extension::LoadSharedFeatures(
- const APIPermissionSet& api_permissions,
- string16* error) {
+bool Extension::LoadSharedFeatures(string16* error) {
if (!LoadDescription(error) ||
!LoadIcons(error) ||
!ManifestHandler::ParseExtension(this, error) ||
@@ -1821,9 +1821,9 @@ bool Extension::LoadSharedFeatures(
!LoadOfflineEnabled(error) ||
// LoadBackgroundScripts() must be called before LoadBackgroundPage().
!LoadBackgroundScripts(error) ||
- !LoadBackgroundPage(api_permissions, error) ||
- !LoadBackgroundPersistent(api_permissions, error) ||
- !LoadBackgroundAllowJSAccess(api_permissions, error))
+ !LoadBackgroundPage(error) ||
+ !LoadBackgroundPersistent(error) ||
+ !LoadBackgroundAllowJSAccess(error))
return false;
return true;
@@ -2147,27 +2147,21 @@ bool Extension::LoadBackgroundScripts(const std::string& key, string16* error) {
return true;
}
-bool Extension::LoadBackgroundPage(
- const APIPermissionSet& api_permissions,
- string16* error) {
+bool Extension::LoadBackgroundPage(string16* error) {
if (is_platform_app()) {
- return LoadBackgroundPage(
- keys::kPlatformAppBackgroundPage, api_permissions, error);
+ return LoadBackgroundPage(keys::kPlatformAppBackgroundPage, error);
}
- if (!LoadBackgroundPage(keys::kBackgroundPage, api_permissions, error))
+ if (!LoadBackgroundPage(keys::kBackgroundPage, error))
return false;
if (background_url_.is_empty()) {
return LoadBackgroundPage(
- keys::kBackgroundPageLegacy, api_permissions, error);
+ keys::kBackgroundPageLegacy, error);
}
return true;
}
-bool Extension::LoadBackgroundPage(
- const std::string& key,
- const APIPermissionSet& api_permissions,
- string16* error) {
+bool Extension::LoadBackgroundPage(const std::string& key, string16* error) {
base::Value* background_page_value = NULL;
if (!manifest_->Get(key, &background_page_value))
return true;
@@ -2188,7 +2182,7 @@ bool Extension::LoadBackgroundPage(
background_url_ = GURL(background_str);
// Make sure "background" permission is set.
- if (!api_permissions.count(APIPermission::kBackground)) {
+ if (!initial_api_permissions()->count(APIPermission::kBackground)) {
*error = ASCIIToUTF16(errors::kBackgroundPermissionNeeded);
return false;
}
@@ -2212,9 +2206,7 @@ bool Extension::LoadBackgroundPage(
return true;
}
-bool Extension::LoadBackgroundPersistent(
- const APIPermissionSet& api_permissions,
- string16* error) {
+bool Extension::LoadBackgroundPersistent(string16* error) {
if (is_platform_app()) {
background_page_is_persistent_ = false;
return true;
@@ -2237,9 +2229,7 @@ bool Extension::LoadBackgroundPersistent(
return true;
}
-bool Extension::LoadBackgroundAllowJSAccess(
- const APIPermissionSet& api_permissions,
- string16* error) {
+bool Extension::LoadBackgroundAllowJSAccess(string16* error) {
Value* allow_js_access = NULL;
if (!manifest_->Get(keys::kBackgroundAllowJsAccess, &allow_js_access))
return true;
@@ -2253,14 +2243,13 @@ bool Extension::LoadBackgroundAllowJSAccess(
return true;
}
-bool Extension::LoadExtensionFeatures(APIPermissionSet* api_permissions,
- string16* error) {
+bool Extension::LoadExtensionFeatures(string16* error) {
if (manifest_->HasKey(keys::kConvertedFromUserScript))
manifest_->GetBoolean(keys::kConvertedFromUserScript,
&converted_from_user_script_);
if (!LoadContentScripts(error) ||
- !LoadSystemIndicator(api_permissions, error) ||
+ !LoadSystemIndicator(error) ||
!LoadIncognitoMode(error) ||
!LoadContentSecurityPolicy(error))
return false;
@@ -2298,8 +2287,7 @@ bool Extension::LoadContentScripts(string16* error) {
return true;
}
-bool Extension::LoadSystemIndicator(APIPermissionSet* api_permissions,
- string16* error) {
+bool Extension::LoadSystemIndicator(string16* error) {
if (!manifest_->HasKey(keys::kSystemIndicator)) {
// There was no manifest entry for the system indicator.
return true;
@@ -2321,7 +2309,7 @@ bool Extension::LoadSystemIndicator(APIPermissionSet* api_permissions,
// Because the manifest was successfully parsed, auto-grant the permission.
// TODO(dewittj) Add this for all extension action APIs.
- api_permissions->insert(APIPermission::kSystemIndicator);
+ initial_api_permissions()->insert(APIPermission::kSystemIndicator);
return true;
}
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698