diff options
Diffstat (limited to 'chrome/browser/extensions/extensions_service.cc')
-rw-r--r-- | chrome/browser/extensions/extensions_service.cc | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc index 99dcd9c..02a7366 100644 --- a/chrome/browser/extensions/extensions_service.cc +++ b/chrome/browser/extensions/extensions_service.cc @@ -38,6 +38,7 @@ #include "chrome/common/chrome_switches.h" #include "chrome/common/extensions/extension.h" #include "chrome/common/extensions/extension_constants.h" +#include "chrome/common/extensions/extension_error_utils.h" #include "chrome/common/extensions/extension_file_util.h" #include "chrome/common/extensions/extension_l10n_util.h" #include "chrome/common/notification_service.h" @@ -675,6 +676,42 @@ void ExtensionsService::SetIsIncognitoEnabled(Extension* extension, NotifyExtensionLoaded(extension); } +bool ExtensionsService::AllowFileAccess(const Extension* extension) { + return (CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableExtensionsFileAccessCheck) || + extension_prefs_->AllowFileAccess(extension->id())); +} + +void ExtensionsService::SetAllowFileAccess(Extension* extension, bool allow) { + extension_prefs_->SetAllowFileAccess(extension->id(), allow); + NotificationService::current()->Notify( + NotificationType::EXTENSION_USER_SCRIPTS_UPDATED, + Source<Profile>(profile_), + Details<Extension>(extension)); +} + +bool ExtensionsService::CanExecuteScriptOnHost(Extension* extension, + const GURL& url, + std::string* error) const { + // No extensions are allowed to execute script on the gallery because that + // would allow extensions to manipulate their own install pages. + if (url.host() == GURL(Extension::ChromeStoreURL()).host()) { + if (error) + *error = errors::kCannotScriptGallery; + return false; + } + + if (extension->HasHostPermission(url)) + return true; + + if (error) { + *error = ExtensionErrorUtils::FormatErrorMessage(errors::kCannotAccessPage, + url.spec()); + } + + return false; +} + void ExtensionsService::CheckForExternalUpdates() { // This installs or updates externally provided extensions. // TODO(aa): Why pass this list into the provider, why not just filter it |