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

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

Issue 14651017: Move RuntimeData and related permissions out of Extension class (Closed) Base URL: http://git.chromium.org/chromium/src.git@dc_unref_permissions
Patch Set: Latest master Created 7 years, 7 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') | chrome/common/extensions/extension_messages.cc » ('j') | 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 eacb9135adda3bff9584b0f9a07ae8556a9eb91a..e9e3fc6fc5f1f5cf37e88aa7e935548d09e792fc 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -405,89 +405,15 @@ const Extension::ScriptingWhitelist* Extension::GetScriptingWhitelist() {
}
bool Extension::HasAPIPermission(APIPermission::ID permission) const {
- base::AutoLock auto_lock(runtime_data_lock_);
- return runtime_data_.GetActivePermissions()->HasAPIPermission(permission);
+ return PermissionsData::HasAPIPermission(this, permission);
}
bool Extension::HasAPIPermission(const std::string& function_name) const {
- base::AutoLock auto_lock(runtime_data_lock_);
- return runtime_data_.GetActivePermissions()->
- HasAccessToFunction(function_name, true);
-}
-
-bool Extension::HasAPIPermissionForTab(int tab_id,
- APIPermission::ID permission) const {
- base::AutoLock auto_lock(runtime_data_lock_);
- if (runtime_data_.GetActivePermissions()->HasAPIPermission(permission))
- return true;
- scoped_refptr<const PermissionSet> tab_specific_permissions =
- runtime_data_.GetTabSpecificPermissions(tab_id);
- return tab_specific_permissions.get() &&
- tab_specific_permissions->HasAPIPermission(permission);
-}
-
-bool Extension::CheckAPIPermissionWithParam(APIPermission::ID permission,
- const APIPermission::CheckParam* param) const {
- base::AutoLock auto_lock(runtime_data_lock_);
- return runtime_data_.GetActivePermissions()->
- CheckAPIPermissionWithParam(permission, param);
-}
-
-const URLPatternSet& Extension::GetEffectiveHostPermissions() const {
- base::AutoLock auto_lock(runtime_data_lock_);
- return runtime_data_.GetActivePermissions()->effective_hosts();
-}
-
-bool Extension::CanSilentlyIncreasePermissions() const {
- return location() != Manifest::INTERNAL;
-}
-
-bool Extension::HasHostPermission(const GURL& url) const {
- base::AutoLock auto_lock(runtime_data_lock_);
- return runtime_data_.GetActivePermissions()->
- HasExplicitAccessToOrigin(url);
-}
-
-bool Extension::HasEffectiveAccessToAllHosts() const {
- base::AutoLock auto_lock(runtime_data_lock_);
- return runtime_data_.GetActivePermissions()->HasEffectiveAccessToAllHosts();
-}
-
-bool Extension::HasFullPermissions() const {
- base::AutoLock auto_lock(runtime_data_lock_);
- return runtime_data_.GetActivePermissions()->HasEffectiveFullAccess();
-}
-
-PermissionMessages Extension::GetPermissionMessages() const {
- base::AutoLock auto_lock(runtime_data_lock_);
- if (IsTrustedId(id())) {
- return PermissionMessages();
- } else {
- return runtime_data_.GetActivePermissions()->GetPermissionMessages(
- GetType());
- }
-}
-
-std::vector<string16> Extension::GetPermissionMessageStrings() const {
- base::AutoLock auto_lock(runtime_data_lock_);
- if (IsTrustedId(id()))
- return std::vector<string16>();
- else
- return runtime_data_.GetActivePermissions()->GetWarningMessages(GetType());
-}
-
-bool Extension::ShouldSkipPermissionWarnings() const {
- return IsTrustedId(id());
-}
-
-void Extension::SetActivePermissions(const PermissionSet* permissions) const {
- base::AutoLock auto_lock(runtime_data_lock_);
- runtime_data_.SetActivePermissions(permissions);
+ return PermissionsData::HasAPIPermission(this, function_name);
}
scoped_refptr<const PermissionSet> Extension::GetActivePermissions() const {
- base::AutoLock auto_lock(runtime_data_lock_);
- return runtime_data_.GetActivePermissions();
+ return PermissionsData::GetActivePermissions(this);
}
bool Extension::ShowConfigureContextMenus() const {
@@ -503,114 +429,6 @@ GURL Extension::GetFullLaunchURL() const {
url().Resolve(launch_local_path());
}
-bool Extension::CanExecuteScriptOnPage(const GURL& document_url,
- const GURL& top_frame_url,
- int tab_id,
- const UserScript* script,
- std::string* error) const {
- base::AutoLock auto_lock(runtime_data_lock_);
- // The gallery is special-cased as a restricted URL for scripting to prevent
- // access to special JS bindings we expose to the gallery (and avoid things
- // like extensions removing the "report abuse" link).
- // TODO(erikkay): This seems like the wrong test. Shouldn't we we testing
- // against the store app extent?
- GURL store_url(extension_urls::GetWebstoreLaunchURL());
- if ((document_url.host() == store_url.host()) &&
- !CanExecuteScriptEverywhere() &&
- !CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kAllowScriptingGallery)) {
- if (error)
- *error = errors::kCannotScriptGallery;
- return false;
- }
-
- if (!CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kExtensionsOnChromeURLs)) {
- if (document_url.SchemeIs(chrome::kChromeUIScheme) &&
- !CanExecuteScriptEverywhere()) {
- if (error)
- *error = errors::kCannotAccessChromeUrl;
- return false;
- }
- }
-
- if (top_frame_url.SchemeIs(extensions::kExtensionScheme) &&
- top_frame_url.GetOrigin() !=
- GetBaseURLFromExtensionId(id()).GetOrigin() &&
- !CanExecuteScriptEverywhere()) {
- if (error)
- *error = errors::kCannotAccessExtensionUrl;
- return false;
- }
-
- // If a tab ID is specified, try the tab-specific permissions.
- if (tab_id >= 0) {
- scoped_refptr<const PermissionSet> tab_permissions =
- runtime_data_.GetTabSpecificPermissions(tab_id);
- if (tab_permissions.get() &&
- tab_permissions->explicit_hosts().MatchesSecurityOrigin(document_url)) {
- return true;
- }
- }
-
- bool can_access = false;
-
- if (script) {
- // If a script is specified, use its matches.
- can_access = script->MatchesURL(document_url);
- } else {
- // Otherwise, see if this extension has permission to execute script
- // programmatically on pages.
- can_access = runtime_data_.GetActivePermissions()->
- HasExplicitAccessToOrigin(document_url);
- }
-
- if (!can_access && error) {
- *error = ErrorUtils::FormatErrorMessage(errors::kCannotAccessPage,
- document_url.spec());
- }
-
- return can_access;
-}
-
-bool Extension::CanExecuteScriptEverywhere() const {
- if (location() == Manifest::COMPONENT)
- return true;
-
- ScriptingWhitelist* whitelist = ExtensionConfig::GetInstance()->whitelist();
-
- for (ScriptingWhitelist::const_iterator it = whitelist->begin();
- it != whitelist->end(); ++it) {
- if (id() == *it) {
- return true;
- }
- }
-
- return false;
-}
-
-bool Extension::CanCaptureVisiblePage(const GURL& page_url,
- int tab_id,
- std::string* error) const {
- if (tab_id >= 0) {
- scoped_refptr<const PermissionSet> tab_permissions =
- GetTabSpecificPermissions(tab_id);
- if (tab_permissions.get() &&
- tab_permissions->explicit_hosts().MatchesSecurityOrigin(page_url)) {
- return true;
- }
- }
-
- if (HasHostPermission(page_url) || page_url.GetOrigin() == url())
- return true;
-
- if (error) {
- *error = ErrorUtils::FormatErrorMessage(errors::kCannotAccessPage,
- page_url.spec());
- }
- return false;
-}
-
bool Extension::UpdatesFromGallery() const {
return extension_urls::IsWebstoreUpdateUrl(ManifestURL::GetUpdateURL(this));
}
@@ -732,24 +550,6 @@ bool Extension::ShouldDisplayInExtensionSettings() const {
return true;
}
-scoped_refptr<const PermissionSet> Extension::GetTabSpecificPermissions(
- int tab_id) const {
- base::AutoLock auto_lock(runtime_data_lock_);
- return runtime_data_.GetTabSpecificPermissions(tab_id);
-}
-
-void Extension::UpdateTabSpecificPermissions(
- int tab_id,
- scoped_refptr<const PermissionSet> permissions) const {
- base::AutoLock auto_lock(runtime_data_lock_);
- runtime_data_.UpdateTabSpecificPermissions(tab_id, permissions);
-}
-
-void Extension::ClearTabSpecificPermissions(int tab_id) const {
- base::AutoLock auto_lock(runtime_data_lock_);
- runtime_data_.ClearTabSpecificPermissions(tab_id);
-}
-
Extension::ManifestData* Extension::GetManifestData(const std::string& key)
const {
DCHECK(finished_parsing_manifest_ || thread_checker_.CalledOnValidThread());
@@ -820,46 +620,6 @@ bool Extension::is_theme() const {
return manifest()->is_theme();
}
-Extension::RuntimeData::RuntimeData() {}
-Extension::RuntimeData::RuntimeData(const PermissionSet* active)
- : active_permissions_(active) {}
-Extension::RuntimeData::~RuntimeData() {}
-
-void Extension::RuntimeData::SetActivePermissions(
- const PermissionSet* active) {
- active_permissions_ = active;
-}
-
-scoped_refptr<const PermissionSet>
- Extension::RuntimeData::GetActivePermissions() const {
- return active_permissions_;
-}
-
-scoped_refptr<const PermissionSet>
- Extension::RuntimeData::GetTabSpecificPermissions(int tab_id) const {
- CHECK_GE(tab_id, 0);
- TabPermissionsMap::const_iterator it = tab_specific_permissions_.find(tab_id);
- return (it != tab_specific_permissions_.end()) ? it->second : NULL;
-}
-
-void Extension::RuntimeData::UpdateTabSpecificPermissions(
- int tab_id,
- scoped_refptr<const PermissionSet> permissions) {
- CHECK_GE(tab_id, 0);
- if (tab_specific_permissions_.count(tab_id)) {
- tab_specific_permissions_[tab_id] = PermissionSet::CreateUnion(
- tab_specific_permissions_[tab_id],
- permissions.get());
- } else {
- tab_specific_permissions_[tab_id] = permissions;
- }
-}
-
-void Extension::RuntimeData::ClearTabSpecificPermissions(int tab_id) {
- CHECK_GE(tab_id, 0);
- tab_specific_permissions_.erase(tab_id);
-}
-
// static
bool Extension::InitExtensionID(extensions::Manifest* manifest,
const base::FilePath& path,
@@ -901,12 +661,6 @@ bool Extension::InitExtensionID(extensions::Manifest* manifest,
}
}
-// static
-bool Extension::IsTrustedId(const std::string& id) {
- // See http://b/4946060 for more details.
- return id == std::string("nckgahadagoaajjgafhacjanaoiihapd");
-}
-
Extension::Extension(const base::FilePath& path,
scoped_ptr<extensions::Manifest> manifest)
: manifest_version_(0),
@@ -963,9 +717,10 @@ bool Extension::InitFromValue(int flags, string16* error) {
if (!LoadSharedFeatures(error))
return false;
- if (manifest_->HasKey(keys::kConvertedFromUserScript))
+ if (manifest_->HasKey(keys::kConvertedFromUserScript)) {
manifest_->GetBoolean(keys::kConvertedFromUserScript,
&converted_from_user_script_);
+ }
if (HasMultipleUISurfaces()) {
*error = ASCIIToUTF16(errors::kOneUISurfaceOnly);
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | chrome/common/extensions/extension_messages.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698