diff options
Diffstat (limited to 'chrome/browser/extensions')
34 files changed, 149 insertions, 83 deletions
diff --git a/chrome/browser/extensions/active_tab_permission_granter.cc b/chrome/browser/extensions/active_tab_permission_granter.cc index 978bbfc..c2d0cd5e 100644 --- a/chrome/browser/extensions/active_tab_permission_granter.cc +++ b/chrome/browser/extensions/active_tab_permission_granter.cc @@ -55,7 +55,8 @@ void ActiveTabPermissionGranter::GrantIfRequested(const Extension* extension) { -1, // No tab id. GURL()); - if (extension->HasAPIPermission(APIPermission::kActiveTab) || + if (extension->permissions_data()->HasAPIPermission( + APIPermission::kActiveTab) || requires_action_for_script_execution) { URLPattern pattern(UserScript::ValidUserScriptSchemes()); // Pattern parsing could fail if this is an unsupported URL e.g. chrome://. @@ -66,7 +67,8 @@ void ActiveTabPermissionGranter::GrantIfRequested(const Extension* extension) { new_apis.insert(APIPermission::kTab); } - if (extension->HasAPIPermission(APIPermission::kTabCapture)) + if (extension->permissions_data()->HasAPIPermission( + APIPermission::kTabCapture)) new_apis.insert(APIPermission::kTabCaptureForTab); if (!new_apis.empty() || !new_hosts.is_empty()) { diff --git a/chrome/browser/extensions/api/alarms/alarm_manager.h b/chrome/browser/extensions/api/alarms/alarm_manager.h index c676398..9a44370 100644 --- a/chrome/browser/extensions/api/alarms/alarm_manager.h +++ b/chrome/browser/extensions/api/alarms/alarm_manager.h @@ -11,6 +11,7 @@ #include <vector> #include "base/callback.h" +#include "base/gtest_prod_util.h" #include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" #include "base/timer/timer.h" diff --git a/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc b/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc index 78ca0bc..022c8c0 100644 --- a/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc +++ b/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc @@ -14,6 +14,7 @@ #include "chrome/common/extensions/api/app_window.h" #include "chrome/common/extensions/features/feature_channel.h" #include "extensions/common/features/simple_feature.h" +#include "extensions/common/permissions/permissions_data.h" #include "extensions/common/switches.h" #include "third_party/skia/include/core/SkRegion.h" @@ -385,7 +386,7 @@ bool AppCurrentWindowInternalSetShapeFunction::RunWithWindow( bool AppCurrentWindowInternalSetAlwaysOnTopFunction::RunWithWindow( AppWindow* window) { - if (!GetExtension()->HasAPIPermission( + if (!GetExtension()->permissions_data()->HasAPIPermission( extensions::APIPermission::kAlwaysOnTopWindows)) { error_ = kAlwaysOnTopPermission; return false; diff --git a/chrome/browser/extensions/api/app_window/app_window_api.cc b/chrome/browser/extensions/api/app_window/app_window_api.cc index 3f05a81..c6623e0 100644 --- a/chrome/browser/extensions/api/app_window/app_window_api.cc +++ b/chrome/browser/extensions/api/app_window/app_window_api.cc @@ -26,6 +26,7 @@ #include "content/public/common/url_constants.h" #include "extensions/browser/extensions_browser_client.h" #include "extensions/browser/image_util.h" +#include "extensions/common/permissions/permissions_data.h" #include "extensions/common/switches.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/base/ui_base_types.h" @@ -225,7 +226,8 @@ bool AppWindowCreateFunction::RunAsync() { return false; if (options->transparent_background.get() && - (GetExtension()->HasAPIPermission(APIPermission::kExperimental) || + (GetExtension()->permissions_data()->HasAPIPermission( + APIPermission::kExperimental) || CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableExperimentalExtensionApis))) { create_params.transparent_background = *options->transparent_background; @@ -240,7 +242,8 @@ bool AppWindowCreateFunction::RunAsync() { if (options->always_on_top.get()) { create_params.always_on_top = *options->always_on_top.get(); - if (create_params.always_on_top && !GetExtension()->HasAPIPermission( + if (create_params.always_on_top && + !GetExtension()->permissions_data()->HasAPIPermission( APIPermission::kAlwaysOnTopWindows)) { error_ = app_window_constants::kAlwaysOnTopPermission; return false; @@ -419,10 +422,11 @@ bool AppWindowCreateFunction::GetBoundsSpec( AppWindow::Frame AppWindowCreateFunction::GetFrameFromString( const std::string& frame_string) { - if (frame_string == kHtmlFrameOption && - (GetExtension()->HasAPIPermission(APIPermission::kExperimental) || - CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableExperimentalExtensionApis))) { + if (frame_string == kHtmlFrameOption && + (GetExtension()->permissions_data()->HasAPIPermission( + APIPermission::kExperimental) || + CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableExperimentalExtensionApis))) { inject_html_titlebar_ = true; return AppWindow::FRAME_NONE; } diff --git a/chrome/browser/extensions/api/autotest_private/autotest_private_api.cc b/chrome/browser/extensions/api/autotest_private/autotest_private_api.cc index d5a3fe6..92ff460 100644 --- a/chrome/browser/extensions/api/autotest_private/autotest_private_api.cc +++ b/chrome/browser/extensions/api/autotest_private/autotest_private_api.cc @@ -32,11 +32,10 @@ namespace extensions { namespace { base::ListValue* GetHostPermissions(const Extension* ext, bool effective_perm) { - URLPatternSet pattern_set; - if (effective_perm) - pattern_set = ext->permissions_data()->GetEffectiveHostPermissions(); - else - pattern_set = ext->GetActivePermissions()->explicit_hosts(); + const PermissionsData* permissions_data = ext->permissions_data(); + const URLPatternSet& pattern_set = + effective_perm ? permissions_data->GetEffectiveHostPermissions() + : permissions_data->active_permissions()->explicit_hosts(); base::ListValue* permissions = new base::ListValue; for (URLPatternSet::const_iterator perm = pattern_set.begin(); @@ -51,7 +50,7 @@ base::ListValue* GetHostPermissions(const Extension* ext, bool effective_perm) { base::ListValue* GetAPIPermissions(const Extension* ext) { base::ListValue* permissions = new base::ListValue; std::set<std::string> perm_list = - ext->GetActivePermissions()->GetAPIsAsStrings(); + ext->permissions_data()->active_permissions()->GetAPIsAsStrings(); for (std::set<std::string>::const_iterator perm = perm_list.begin(); perm != perm_list.end(); ++perm) { permissions->Append(new base::StringValue(perm->c_str())); diff --git a/chrome/browser/extensions/api/declarative/declarative_api.cc b/chrome/browser/extensions/api/declarative/declarative_api.cc index dbb22a6..f53ead1 100644 --- a/chrome/browser/extensions/api/declarative/declarative_api.cc +++ b/chrome/browser/extensions/api/declarative/declarative_api.cc @@ -17,6 +17,7 @@ #include "content/public/browser/render_view_host.h" #include "extensions/browser/extension_system.h" #include "extensions/common/extension_api.h" +#include "extensions/common/permissions/permissions_data.h" using extensions::api::events::Rule; @@ -59,7 +60,8 @@ bool RulesFunction::HasPermission() { std::string event_name; EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &event_name)); if (IsWebViewEvent(event_name) && - extension_->HasAPIPermission(extensions::APIPermission::kWebView)) + extension_->permissions_data()->HasAPIPermission( + extensions::APIPermission::kWebView)) return true; Feature::Availability availability = ExtensionAPI::GetSharedInstance()->IsAvailable( diff --git a/chrome/browser/extensions/api/declarative/rules_cache_delegate.cc b/chrome/browser/extensions/api/declarative/rules_cache_delegate.cc index 119b2b4..bfe59ac 100644 --- a/chrome/browser/extensions/api/declarative/rules_cache_delegate.cc +++ b/chrome/browser/extensions/api/declarative/rules_cache_delegate.cc @@ -16,6 +16,7 @@ #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system.h" #include "extensions/browser/info_map.h" +#include "extensions/common/permissions/permissions_data.h" namespace { @@ -138,8 +139,10 @@ void RulesCacheDelegate::ReadRulesForInstalledExtensions() { i != extensions->end(); ++i) { bool needs_apis_storing_rules = - (*i)->HasAPIPermission(APIPermission::kDeclarativeContent) || - (*i)->HasAPIPermission(APIPermission::kDeclarativeWebRequest); + (*i)->permissions_data()->HasAPIPermission( + APIPermission::kDeclarativeContent) || + (*i)->permissions_data()->HasAPIPermission( + APIPermission::kDeclarativeWebRequest); bool respects_off_the_record = !(profile_->IsOffTheRecord()) || util::IsIncognitoEnabled((*i)->id(), profile_); diff --git a/chrome/browser/extensions/api/declarative/rules_registry_with_cache_unittest.cc b/chrome/browser/extensions/api/declarative/rules_registry_with_cache_unittest.cc index 4a6660a..dff53b7 100644 --- a/chrome/browser/extensions/api/declarative/rules_registry_with_cache_unittest.cc +++ b/chrome/browser/extensions/api/declarative/rules_registry_with_cache_unittest.cc @@ -23,6 +23,7 @@ #include "extensions/browser/value_store/testing_value_store.h" #include "extensions/common/extension.h" #include "extensions/common/manifest_constants.h" +#include "extensions/common/permissions/permissions_data.h" #include "testing/gtest/include/gtest/gtest.h" using extension_test_util::LoadManifestUnchecked; @@ -348,8 +349,8 @@ TEST_F(RulesRegistryWithCacheTest, RulesPreservedAcrossRestart) { ASSERT_TRUE(error.empty()); extension_service->AddExtension(extension.get()); EXPECT_TRUE(extension_service->extensions()->Contains(extension->id())); - EXPECT_TRUE( - extension->HasAPIPermission(APIPermission::kDeclarativeWebRequest)); + EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( + APIPermission::kDeclarativeWebRequest)); env_.GetExtensionSystem()->SetReady(); // 2. First run, adding a rule for the extension. diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api.cc b/chrome/browser/extensions/api/developer_private/developer_private_api.cc index 5fc8747..f737704 100644 --- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc +++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc @@ -65,6 +65,7 @@ #include "extensions/common/manifest_handlers/icons_handler.h" #include "extensions/common/manifest_handlers/incognito_info.h" #include "extensions/common/manifest_handlers/offline_enabled_info.h" +#include "extensions/common/permissions/permissions_data.h" #include "extensions/common/switches.h" #include "grit/chromium_strings.h" #include "grit/generated_resources.h" @@ -747,7 +748,8 @@ bool DeveloperPrivateShowPermissionsDialogFunction::RunSync() { // Released by InstallUIAbort or InstallUIProceed. AddRef(); std::vector<base::FilePath> retained_file_paths; - if (extension->HasAPIPermission(APIPermission::kFileSystem)) { + if (extension->permissions_data()->HasAPIPermission( + APIPermission::kFileSystem)) { std::vector<apps::SavedFileEntry> retained_file_entries = apps::SavedFilesService::Get(GetProfile()) ->GetAllFileEntries(extension_id_); diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc index 52f113e..c34147f 100644 --- a/chrome/browser/extensions/api/downloads/downloads_api.cc +++ b/chrome/browser/extensions/api/downloads/downloads_api.cc @@ -64,6 +64,7 @@ #include "extensions/browser/extension_function_dispatcher.h" #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_registry.h" +#include "extensions/common/permissions/permissions_data.h" #include "net/base/filename_util.h" #include "net/base/load_flags.h" #include "net/http/http_util.h" @@ -1386,7 +1387,8 @@ bool DownloadsOpenFunction::RunSync() { Fault(download_item->GetState() != DownloadItem::COMPLETE, errors::kNotComplete, &error_) || - Fault(!GetExtension()->HasAPIPermission(APIPermission::kDownloadsOpen), + Fault(!GetExtension()->permissions_data()->HasAPIPermission( + APIPermission::kDownloadsOpen), errors::kOpenPermission, &error_)) return false; @@ -1431,7 +1433,8 @@ bool DownloadsSetShelfEnabledFunction::RunSync() { scoped_ptr<downloads::SetShelfEnabled::Params> params( downloads::SetShelfEnabled::Params::Create(*args_)); EXTENSION_FUNCTION_VALIDATE(params.get()); - if (!GetExtension()->HasAPIPermission(APIPermission::kDownloadsShelf)) { + if (!GetExtension()->permissions_data()->HasAPIPermission( + APIPermission::kDownloadsShelf)) { error_ = download_extension_errors::kShelfPermission; return false; } diff --git a/chrome/browser/extensions/api/file_handlers/app_file_handler_util.cc b/chrome/browser/extensions/api/file_handlers/app_file_handler_util.cc index 5a972af..277bc99 100644 --- a/chrome/browser/extensions/api/file_handlers/app_file_handler_util.cc +++ b/chrome/browser/extensions/api/file_handlers/app_file_handler_util.cc @@ -12,6 +12,7 @@ #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/render_process_host.h" #include "extensions/browser/extension_prefs.h" +#include "extensions/common/permissions/permissions_data.h" #include "net/base/mime_util.h" #include "webkit/browser/fileapi/isolated_context.h" #include "webkit/common/fileapi/file_system_mount_option.h" @@ -329,7 +330,8 @@ void PrepareFilesForWritableApp( } bool HasFileSystemWritePermission(const Extension* extension) { - return extension->HasAPIPermission(APIPermission::kFileSystemWrite); + return extension->permissions_data()->HasAPIPermission( + APIPermission::kFileSystemWrite); } bool ValidateFileEntryAndGetPath( diff --git a/chrome/browser/extensions/api/file_system/file_system_api.cc b/chrome/browser/extensions/api/file_system/file_system_api.cc index 2cd8ddf..ddec04b 100644 --- a/chrome/browser/extensions/api/file_system/file_system_api.cc +++ b/chrome/browser/extensions/api/file_system/file_system_api.cc @@ -35,6 +35,7 @@ #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_system.h" #include "extensions/common/permissions/api_permission.h" +#include "extensions/common/permissions/permissions_data.h" #include "grit/generated_resources.h" #include "net/base/mime_util.h" #include "ui/base/l10n/l10n_util.h" @@ -386,7 +387,8 @@ bool FileSystemGetWritableEntryFunction::RunAsync() { void FileSystemGetWritableEntryFunction::CheckPermissionAndSendResponse() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (is_directory_ && - !extension_->HasAPIPermission(APIPermission::kFileSystemDirectory)) { + !extension_->permissions_data()->HasAPIPermission( + APIPermission::kFileSystemDirectory)) { error_ = kRequiresFileSystemDirectoryError; SendResponse(false); } @@ -869,7 +871,8 @@ bool FileSystemChooseEntryFunction::RunAsync() { picker_type = ui::SelectFileDialog::SELECT_SAVEAS_FILE; } else if (options->type == file_system::CHOOSE_ENTRY_TYPE_OPENDIRECTORY) { is_directory_ = true; - if (!extension_->HasAPIPermission(APIPermission::kFileSystemDirectory)) { + if (!extension_->permissions_data()->HasAPIPermission( + APIPermission::kFileSystemDirectory)) { error_ = kRequiresFileSystemDirectoryError; return false; } diff --git a/chrome/browser/extensions/api/location/location_manager.cc b/chrome/browser/extensions/api/location/location_manager.cc index b436e9e..8762a3f 100644 --- a/chrome/browser/extensions/api/location/location_manager.cc +++ b/chrome/browser/extensions/api/location/location_manager.cc @@ -22,6 +22,7 @@ #include "extensions/browser/extension_system.h" #include "extensions/common/extension.h" #include "extensions/common/permissions/permission_set.h" +#include "extensions/common/permissions/permissions_data.h" using content::BrowserThread; @@ -358,7 +359,8 @@ void LocationManager::Observe(int type, const Extension* extension = content::Details<const Extension>(details).ptr(); - if (extension->HasAPIPermission(APIPermission::kLocation)) { + if (extension->permissions_data()->HasAPIPermission( + APIPermission::kLocation)) { content::GeolocationProvider::GetInstance()-> UserDidOptIntoLocationServices(); } diff --git a/chrome/browser/extensions/api/management/management_api.cc b/chrome/browser/extensions/api/management/management_api.cc index 1e7d3f8..1f45eb3 100644 --- a/chrome/browser/extensions/api/management/management_api.cc +++ b/chrome/browser/extensions/api/management/management_api.cc @@ -193,7 +193,7 @@ scoped_ptr<management::ExtensionInfo> CreateExtensionInfo( } const std::set<std::string> perms = - extension.GetActivePermissions()->GetAPIsAsStrings(); + extension.permissions_data()->active_permissions()->GetAPIsAsStrings(); if (!perms.empty()) { std::set<std::string>::const_iterator perms_iter; for (perms_iter = perms.begin(); perms_iter != perms.end(); ++perms_iter) @@ -203,7 +203,7 @@ scoped_ptr<management::ExtensionInfo> CreateExtensionInfo( if (!extension.is_hosted_app()) { // Skip host permissions for hosted apps. const URLPatternSet host_perms = - extension.GetActivePermissions()->explicit_hosts(); + extension.permissions_data()->active_permissions()->explicit_hosts(); if (!host_perms.is_empty()) { for (URLPatternSet::const_iterator iter = host_perms.begin(); iter != host_perms.end(); ++iter) { diff --git a/chrome/browser/extensions/api/messaging/message_service.cc b/chrome/browser/extensions/api/messaging/message_service.cc index a05331d..8f336f2f4 100644 --- a/chrome/browser/extensions/api/messaging/message_service.cc +++ b/chrome/browser/extensions/api/messaging/message_service.cc @@ -41,6 +41,7 @@ #include "extensions/common/manifest_handlers/background_info.h" #include "extensions/common/manifest_handlers/externally_connectable.h" #include "extensions/common/manifest_handlers/incognito_info.h" +#include "extensions/common/permissions/permissions_data.h" #include "net/base/completion_callback.h" #include "url/gurl.h" @@ -368,8 +369,9 @@ void MessageService::OpenChannelToNativeApp( if (extension_service) { const Extension* extension = extension_service->GetExtensionById(source_extension_id, false); - has_permission = extension && extension->HasAPIPermission( - APIPermission::kNativeMessaging); + has_permission = extension && + extension->permissions_data()->HasAPIPermission( + APIPermission::kNativeMessaging); } if (!has_permission) { diff --git a/chrome/browser/extensions/api/permissions/permissions_api.cc b/chrome/browser/extensions/api/permissions/permissions_api.cc index 977afc9..7d6ff25 100644 --- a/chrome/browser/extensions/api/permissions/permissions_api.cc +++ b/chrome/browser/extensions/api/permissions/permissions_api.cc @@ -15,6 +15,7 @@ #include "extensions/common/extension.h" #include "extensions/common/manifest_handlers/permissions_parser.h" #include "extensions/common/permissions/permission_message_provider.h" +#include "extensions/common/permissions/permissions_data.h" #include "extensions/common/permissions/permissions_info.h" namespace extensions { @@ -60,13 +61,14 @@ bool PermissionsContainsFunction::RunSync() { return false; results_ = Contains::Results::Create( - GetExtension()->GetActivePermissions()->Contains(*permissions.get())); + GetExtension()->permissions_data()->active_permissions()->Contains( + *permissions.get())); return true; } bool PermissionsGetAllFunction::RunSync() { - scoped_ptr<Permissions> permissions = - helpers::PackPermissionSet(GetExtension()->GetActivePermissions().get()); + scoped_ptr<Permissions> permissions = helpers::PackPermissionSet( + GetExtension()->permissions_data()->active_permissions().get()); results_ = GetAll::Results::Create(*permissions); return true; } diff --git a/chrome/browser/extensions/api/preference/preference_api.cc b/chrome/browser/extensions/api/preference/preference_api.cc index 3ef891e..848d315 100644 --- a/chrome/browser/extensions/api/preference/preference_api.cc +++ b/chrome/browser/extensions/api/preference/preference_api.cc @@ -33,6 +33,7 @@ #include "extensions/browser/pref_names.h" #include "extensions/common/error_utils.h" #include "extensions/common/permissions/api_permission.h" +#include "extensions/common/permissions/permissions_data.h" namespace keys = extensions::preference_api_constants; namespace helpers = extensions::preference_helpers; @@ -512,7 +513,7 @@ bool PreferenceFunction::ValidateBrowserPref( APIPermission::ID permission = permission_type == PERMISSION_TYPE_READ ? read_permission : write_permission; - if (!GetExtension()->HasAPIPermission(permission)) { + if (!GetExtension()->permissions_data()->HasAPIPermission(permission)) { error_ = ErrorUtils::FormatErrorMessage( keys::kPermissionErrorMessage, extension_pref_key); return false; diff --git a/chrome/browser/extensions/api/preference/preference_helpers.cc b/chrome/browser/extensions/api/preference/preference_helpers.cc index 09b00f3..237e365 100644 --- a/chrome/browser/extensions/api/preference/preference_helpers.cc +++ b/chrome/browser/extensions/api/preference/preference_helpers.cc @@ -15,6 +15,7 @@ #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_system.h" #include "extensions/common/manifest_handlers/incognito_info.h" +#include "extensions/common/permissions/permissions_data.h" namespace extensions { namespace preference_helpers { @@ -100,7 +101,7 @@ void DispatchEventToExtensions( std::string extension_id = (*it)->id(); // TODO(bauerb): Only iterate over registered event listeners. if (router->ExtensionHasEventListener(extension_id, event_name) && - (*it)->HasAPIPermission(permission) && + (*it)->permissions_data()->HasAPIPermission(permission) && (!incognito || IncognitoInfo::IsSplitMode(it->get()) || util::CanCrossIncognito(it->get(), profile))) { // Inject level of control key-value. diff --git a/chrome/browser/extensions/api/push_messaging/push_messaging_api.cc b/chrome/browser/extensions/api/push_messaging/push_messaging_api.cc index 053b445e..bd725c6 100644 --- a/chrome/browser/extensions/api/push_messaging/push_messaging_api.cc +++ b/chrome/browser/extensions/api/push_messaging/push_messaging_api.cc @@ -33,6 +33,7 @@ #include "extensions/browser/extensions_browser_client.h" #include "extensions/common/extension.h" #include "extensions/common/permissions/api_permission.h" +#include "extensions/common/permissions/permissions_data.h" #include "google_apis/gaia/gaia_constants.h" #include "google_apis/gaia/identity_provider.h" @@ -339,7 +340,8 @@ void PushMessagingAPI::OnExtensionLoaded( if (!InitEventRouterAndHandler()) return; - if (extension->HasAPIPermission(APIPermission::kPushMessaging)) { + if (extension->permissions_data()->HasAPIPermission( + APIPermission::kPushMessaging)) { handler_->RegisterExtension(extension->id()); } } @@ -351,7 +353,8 @@ void PushMessagingAPI::OnExtensionUnloaded( if (!InitEventRouterAndHandler()) return; - if (extension->HasAPIPermission(APIPermission::kPushMessaging)) { + if (extension->permissions_data()->HasAPIPermission( + APIPermission::kPushMessaging)) { handler_->UnregisterExtension(extension->id()); } } @@ -365,7 +368,8 @@ void PushMessagingAPI::Observe(int type, const Extension* extension = content::Details<const InstalledExtensionInfo>(details)->extension; - if (extension->HasAPIPermission(APIPermission::kPushMessaging)) { + if (extension->permissions_data()->HasAPIPermission( + APIPermission::kPushMessaging)) { handler_->SuppressInitialInvalidationsForExtension(extension->id()); } } diff --git a/chrome/browser/extensions/api/web_request/web_request_api.cc b/chrome/browser/extensions/api/web_request/web_request_api.cc index b4e8158d..93ef588 100644 --- a/chrome/browser/extensions/api/web_request/web_request_api.cc +++ b/chrome/browser/extensions/api/web_request/web_request_api.cc @@ -2214,11 +2214,12 @@ bool WebRequestInternalAddEventListenerFunction::RunSync() { // We check automatically whether the extension has the 'webRequest' // permission. For blocking calls we require the additional permission // 'webRequestBlocking'. - if ((!is_web_view_guest && extra_info_spec & - (ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING | - ExtensionWebRequestEventRouter::ExtraInfoSpec::ASYNC_BLOCKING)) && - !extension->HasAPIPermission( - extensions::APIPermission::kWebRequestBlocking)) { + if ((!is_web_view_guest && + extra_info_spec & + (ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING | + ExtensionWebRequestEventRouter::ExtraInfoSpec::ASYNC_BLOCKING)) && + !extension->permissions_data()->HasAPIPermission( + extensions::APIPermission::kWebRequestBlocking)) { error_ = keys::kBlockingPermissionRequired; return false; } diff --git a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc index 0edc00b..0b52214 100644 --- a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc +++ b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc @@ -17,6 +17,7 @@ #include "extensions/browser/event_router.h" #include "extensions/browser/extension_system.h" #include "extensions/common/error_utils.h" +#include "extensions/common/permissions/permissions_data.h" #include "media/audio/audio_manager_base.h" #include "media/audio/audio_output_controller.h" @@ -90,7 +91,7 @@ void WebrtcAudioPrivateEventService::SignalEvent() { it != extensions->end(); ++it) { const std::string& extension_id = (*it)->id(); if (router->ExtensionHasEventListener(extension_id, kEventName) && - (*it)->HasAPIPermission("webrtcAudioPrivate")) { + (*it)->permissions_data()->HasAPIPermission("webrtcAudioPrivate")) { scoped_ptr<Event> event( new Event(kEventName, make_scoped_ptr(new base::ListValue()).Pass())); router->DispatchEventToExtension(extension_id, event.Pass()); diff --git a/chrome/browser/extensions/convert_web_app_browsertest.cc b/chrome/browser/extensions/convert_web_app_browsertest.cc index 955e49c..b53893e 100644 --- a/chrome/browser/extensions/convert_web_app_browsertest.cc +++ b/chrome/browser/extensions/convert_web_app_browsertest.cc @@ -25,6 +25,7 @@ #include "extensions/common/extension_icon_set.h" #include "extensions/common/manifest_handlers/icons_handler.h" #include "extensions/common/permissions/permission_set.h" +#include "extensions/common/permissions/permissions_data.h" namespace extensions { @@ -89,7 +90,11 @@ IN_PROC_BROWSER_TEST_F(ExtensionFromWebAppTest, DISABLED_Basic) { AppLaunchInfo::GetLaunchWebURL(installed_extension_)); EXPECT_EQ(LAUNCH_CONTAINER_TAB, AppLaunchInfo::GetLaunchContainer(installed_extension_)); - EXPECT_EQ(0u, installed_extension_->GetActivePermissions()->apis().size()); + EXPECT_EQ(0u, + installed_extension_->permissions_data() + ->active_permissions() + ->apis() + .size()); EXPECT_EQ(0u, IconsInfo::GetIcons(installed_extension_).map().size()); } diff --git a/chrome/browser/extensions/convert_web_app_unittest.cc b/chrome/browser/extensions/convert_web_app_unittest.cc index b8be22f..48d262b 100644 --- a/chrome/browser/extensions/convert_web_app_unittest.cc +++ b/chrome/browser/extensions/convert_web_app_unittest.cc @@ -23,6 +23,7 @@ #include "extensions/common/extension_resource.h" #include "extensions/common/manifest_handlers/icons_handler.h" #include "extensions/common/permissions/permission_set.h" +#include "extensions/common/permissions/permissions_data.h" #include "extensions/common/url_pattern.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/codec/png_codec.h" @@ -129,7 +130,8 @@ TEST(ExtensionFromWebApp, Basic) { EXPECT_EQ(base::UTF16ToUTF8(web_app.title), extension->name()); EXPECT_EQ(base::UTF16ToUTF8(web_app.description), extension->description()); EXPECT_EQ(web_app.app_url, AppLaunchInfo::GetFullLaunchURL(extension.get())); - EXPECT_EQ(0u, extension->GetActivePermissions()->apis().size()); + EXPECT_EQ(0u, + extension->permissions_data()->active_permissions()->apis().size()); ASSERT_EQ(0u, extension->web_extent().patterns().size()); EXPECT_EQ(web_app.icons.size(), @@ -175,7 +177,8 @@ TEST(ExtensionFromWebApp, Minimal) { EXPECT_EQ("", extension->description()); EXPECT_EQ(web_app.app_url, AppLaunchInfo::GetFullLaunchURL(extension.get())); EXPECT_EQ(0u, IconsInfo::GetIcons(extension.get()).map().size()); - EXPECT_EQ(0u, extension->GetActivePermissions()->apis().size()); + EXPECT_EQ(0u, + extension->permissions_data()->active_permissions()->apis().size()); ASSERT_EQ(0u, extension->web_extent().patterns().size()); } diff --git a/chrome/browser/extensions/extension_disabled_ui.cc b/chrome/browser/extensions/extension_disabled_ui.cc index 3bdc8e5..1bd9f92 100644 --- a/chrome/browser/extensions/extension_disabled_ui.cc +++ b/chrome/browser/extensions/extension_disabled_ui.cc @@ -39,6 +39,7 @@ #include "extensions/common/manifest_handlers/icons_handler.h" #include "extensions/common/permissions/permission_message_provider.h" #include "extensions/common/permissions/permission_set.h" +#include "extensions/common/permissions/permissions_data.h" #include "grit/chromium_strings.h" #include "grit/generated_resources.h" #include "grit/theme_resources.h" @@ -290,7 +291,8 @@ ExtensionDisabledGlobalError::GetBubbleViewMessages() { std::vector<base::string16> messages; std::vector<base::string16> permission_warnings = extensions::PermissionMessageProvider::Get()->GetWarningMessages( - extension_->GetActivePermissions(), extension_->GetType()); + extension_->permissions_data()->active_permissions(), + extension_->GetType()); if (is_remote_install_) { messages.push_back(l10n_util::GetStringFUTF16( extension_->is_app() diff --git a/chrome/browser/extensions/extension_gcm_app_handler_unittest.cc b/chrome/browser/extensions/extension_gcm_app_handler_unittest.cc index 5ec0e8b..24d802f 100644 --- a/chrome/browser/extensions/extension_gcm_app_handler_unittest.cc +++ b/chrome/browser/extensions/extension_gcm_app_handler_unittest.cc @@ -41,6 +41,7 @@ #include "extensions/common/manifest.h" #include "extensions/common/manifest_constants.h" #include "extensions/common/permissions/api_permission.h" +#include "extensions/common/permissions/permissions_data.h" #include "testing/gtest/include/gtest/gtest.h" #if !defined(OS_ANDROID) @@ -257,7 +258,8 @@ class ExtensionGCMAppHandlerTest : public testing::Test { Extension::NO_FLAGS, &error); EXPECT_TRUE(extension.get()) << error; - EXPECT_TRUE(extension->HasAPIPermission(APIPermission::kGcm)); + EXPECT_TRUE( + extension->permissions_data()->HasAPIPermission(APIPermission::kGcm)); return extension; } diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc index f0947c2..f0ba3c7 100644 --- a/chrome/browser/extensions/extension_install_prompt.cc +++ b/chrome/browser/extensions/extension_install_prompt.cc @@ -530,7 +530,7 @@ void ExtensionInstallPrompt::ConfirmStandaloneInstall( const ExtensionInstallPrompt::Prompt& prompt) { DCHECK(ui_loop_ == base::MessageLoop::current()); extension_ = extension; - permissions_ = extension->GetActivePermissions(); + permissions_ = extension->permissions_data()->active_permissions(); delegate_ = delegate; prompt_ = prompt; @@ -556,7 +556,7 @@ void ExtensionInstallPrompt::ConfirmInstall( const ShowDialogCallback& show_dialog_callback) { DCHECK(ui_loop_ == base::MessageLoop::current()); extension_ = extension; - permissions_ = extension->GetActivePermissions(); + permissions_ = extension->permissions_data()->active_permissions(); delegate_ = delegate; prompt_.set_type(INSTALL_PROMPT); show_dialog_callback_ = show_dialog_callback; @@ -583,7 +583,7 @@ void ExtensionInstallPrompt::ConfirmReEnable(Delegate* delegate, const Extension* extension) { DCHECK(ui_loop_ == base::MessageLoop::current()); extension_ = extension; - permissions_ = extension->GetActivePermissions(); + permissions_ = extension->permissions_data()->active_permissions(); delegate_ = delegate; bool is_remote_install = install_ui_->profile() && @@ -607,7 +607,7 @@ void ExtensionInstallPrompt::ConfirmExternalInstall( const Prompt& prompt) { DCHECK(ui_loop_ == base::MessageLoop::current()); extension_ = extension; - permissions_ = extension->GetActivePermissions(); + permissions_ = extension->permissions_data()->active_permissions(); delegate_ = delegate; prompt_ = prompt; show_dialog_callback_ = show_dialog_callback; @@ -634,7 +634,7 @@ void ExtensionInstallPrompt::ReviewPermissions( const std::vector<base::FilePath>& retained_file_paths) { DCHECK(ui_loop_ == base::MessageLoop::current()); extension_ = extension; - permissions_ = extension->GetActivePermissions(); + permissions_ = extension->permissions_data()->active_permissions(); prompt_.set_retained_files(retained_file_paths); delegate_ = delegate; prompt_.set_type(POST_INSTALL_PERMISSIONS_PROMPT); diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index bb23964..c124c72 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -1672,9 +1672,9 @@ void ExtensionService::CheckPermissionsIncrease(const Extension* extension, // to a version that requires additional privileges. is_privilege_increase = extensions::PermissionMessageProvider::Get()->IsPrivilegeIncrease( - granted_permissions, - extension->GetActivePermissions().get(), - extension->GetType()); + granted_permissions, + extension->permissions_data()->active_permissions().get(), + extension->GetType()); } if (is_extension_installed) { diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc index da2e193..a0d61e5 100644 --- a/chrome/browser/extensions/extension_service_unittest.cc +++ b/chrome/browser/extensions/extension_service_unittest.cc @@ -104,6 +104,7 @@ #include "extensions/common/manifest_constants.h" #include "extensions/common/manifest_handlers/background_info.h" #include "extensions/common/permissions/permission_set.h" +#include "extensions/common/permissions/permissions_data.h" #include "extensions/common/switches.h" #include "extensions/common/url_pattern.h" #include "extensions/common/value_builder.h" @@ -1401,8 +1402,9 @@ TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectorySuccess) { expected_patterns.ClearPatterns(); AddPattern(&expected_patterns, "http://*.google.com/*"); AddPattern(&expected_patterns, "https://*.google.com/*"); - EXPECT_EQ(expected_patterns, - extension->GetActivePermissions()->explicit_hosts()); + EXPECT_EQ( + expected_patterns, + extension->permissions_data()->active_permissions()->explicit_hosts()); EXPECT_EQ(std::string(good1), loaded_[1]->id()); EXPECT_EQ(std::string("My extension 2"), loaded_[1]->name()); @@ -2605,7 +2607,7 @@ TEST_F(ExtensionServiceTest, InstallAppsWithUnlimitedStorage) { ValidatePrefKeyCount(++pref_count); ASSERT_EQ(1u, registry_->enabled_extensions().size()); const std::string id1 = extension->id(); - EXPECT_TRUE(extension->HasAPIPermission( + EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( APIPermission::kUnlimitedStorage)); EXPECT_TRUE(extension->web_extent().MatchesURL( extensions::AppLaunchInfo::GetFullLaunchURL(extension))); @@ -2619,7 +2621,7 @@ TEST_F(ExtensionServiceTest, InstallAppsWithUnlimitedStorage) { ValidatePrefKeyCount(++pref_count); ASSERT_EQ(2u, registry_->enabled_extensions().size()); const std::string id2 = extension->id(); - EXPECT_TRUE(extension->HasAPIPermission( + EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( APIPermission::kUnlimitedStorage)); EXPECT_TRUE(extension->web_extent().MatchesURL( extensions::AppLaunchInfo::GetFullLaunchURL(extension))); @@ -4520,7 +4522,7 @@ TEST_F(ExtensionServiceTest, ClearAppData) { ValidatePrefKeyCount(++pref_count); ASSERT_EQ(1u, registry_->enabled_extensions().size()); const std::string id1 = extension->id(); - EXPECT_TRUE(extension->HasAPIPermission( + EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( APIPermission::kUnlimitedStorage)); const GURL origin1( extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); @@ -4533,7 +4535,7 @@ TEST_F(ExtensionServiceTest, ClearAppData) { ValidatePrefKeyCount(++pref_count); ASSERT_EQ(2u, registry_->enabled_extensions().size()); const std::string id2 = extension->id(); - EXPECT_TRUE(extension->HasAPIPermission( + EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( APIPermission::kUnlimitedStorage)); EXPECT_TRUE(extension->web_extent().MatchesURL( extensions::AppLaunchInfo::GetFullLaunchURL(extension))); diff --git a/chrome/browser/extensions/extension_special_storage_policy.cc b/chrome/browser/extensions/extension_special_storage_policy.cc index 219e8ec..57c91fb 100644 --- a/chrome/browser/extensions/extension_special_storage_policy.cc +++ b/chrome/browser/extensions/extension_special_storage_policy.cc @@ -20,6 +20,7 @@ #include "extensions/common/constants.h" #include "extensions/common/extension.h" #include "extensions/common/extension_set.h" +#include "extensions/common/permissions/permissions_data.h" using content::BrowserThread; using extensions::APIPermission; @@ -103,8 +104,10 @@ void ExtensionSpecialStoragePolicy::GrantRightsForExtension( const extensions::Extension* extension) { DCHECK(extension); if (!(NeedsProtection(extension) || - extension->HasAPIPermission(APIPermission::kUnlimitedStorage) || - extension->HasAPIPermission(APIPermission::kFileBrowserHandler) || + extension->permissions_data()->HasAPIPermission( + APIPermission::kUnlimitedStorage) || + extension->permissions_data()->HasAPIPermission( + APIPermission::kFileBrowserHandler) || extensions::AppIsolationInfo::HasIsolatedStorage(extension) || extension->is_app())) { return; @@ -119,11 +122,13 @@ void ExtensionSpecialStoragePolicy::GrantRightsForExtension( if (extension->is_app()) installed_apps_.Add(extension); - if (extension->HasAPIPermission(APIPermission::kUnlimitedStorage) && + if (extension->permissions_data()->HasAPIPermission( + APIPermission::kUnlimitedStorage) && unlimited_extensions_.Add(extension)) change_flags |= SpecialStoragePolicy::STORAGE_UNLIMITED; - if (extension->HasAPIPermission(APIPermission::kFileBrowserHandler)) + if (extension->permissions_data()->HasAPIPermission( + APIPermission::kFileBrowserHandler)) file_handler_extensions_.Add(extension); if (extensions::AppIsolationInfo::HasIsolatedStorage(extension)) @@ -140,8 +145,10 @@ void ExtensionSpecialStoragePolicy::RevokeRightsForExtension( const extensions::Extension* extension) { DCHECK(extension); if (!(NeedsProtection(extension) || - extension->HasAPIPermission(APIPermission::kUnlimitedStorage) || - extension->HasAPIPermission(APIPermission::kFileBrowserHandler) || + extension->permissions_data()->HasAPIPermission( + APIPermission::kUnlimitedStorage) || + extension->permissions_data()->HasAPIPermission( + APIPermission::kFileBrowserHandler) || extensions::AppIsolationInfo::HasIsolatedStorage(extension) || extension->is_app())) { return; @@ -155,11 +162,13 @@ void ExtensionSpecialStoragePolicy::RevokeRightsForExtension( if (extension->is_app()) installed_apps_.Remove(extension); - if (extension->HasAPIPermission(APIPermission::kUnlimitedStorage) && + if (extension->permissions_data()->HasAPIPermission( + APIPermission::kUnlimitedStorage) && unlimited_extensions_.Remove(extension)) change_flags |= SpecialStoragePolicy::STORAGE_UNLIMITED; - if (extension->HasAPIPermission(APIPermission::kFileBrowserHandler)) + if (extension->permissions_data()->HasAPIPermission( + APIPermission::kFileBrowserHandler)) file_handler_extensions_.Remove(extension); if (extensions::AppIsolationInfo::HasIsolatedStorage(extension)) diff --git a/chrome/browser/extensions/extension_storage_monitor.cc b/chrome/browser/extensions/extension_storage_monitor.cc index e89201d..88b5013 100644 --- a/chrome/browser/extensions/extension_storage_monitor.cc +++ b/chrome/browser/extensions/extension_storage_monitor.cc @@ -26,6 +26,7 @@ #include "extensions/browser/extension_system.h" #include "extensions/common/extension.h" #include "extensions/common/manifest_handlers/icons_handler.h" +#include "extensions/common/permissions/permissions_data.h" #include "grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" #include "ui/message_center/message_center.h" @@ -69,7 +70,8 @@ const char kPrefDisableStorageNotifications[] = "disable_storage_notifications"; bool ShouldMonitorStorageFor(const Extension* extension) { // Only monitor storage for extensions that are granted unlimited storage. // Do not monitor storage for component extensions. - return extension->HasAPIPermission(APIPermission::kUnlimitedStorage) && + return extension->permissions_data()->HasAPIPermission( + APIPermission::kUnlimitedStorage) && extension->location() != Manifest::COMPONENT; } diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc index fc1d3c5..7f52623 100644 --- a/chrome/browser/extensions/extension_tab_util.cc +++ b/chrome/browser/extensions/extension_tab_util.cc @@ -402,8 +402,9 @@ void ExtensionTabUtil::ScrubTabValueForExtension( void ExtensionTabUtil::ScrubTabForExtension(const Extension* extension, api::tabs::Tab* tab) { - bool has_permission = extension && extension->HasAPIPermission( - APIPermission::kTab); + bool has_permission = + extension && + extension->permissions_data()->HasAPIPermission(APIPermission::kTab); if (!has_permission) { tab->url.reset(); diff --git a/chrome/browser/extensions/permissions_updater.cc b/chrome/browser/extensions/permissions_updater.cc index c132adb..814c5b3 100644 --- a/chrome/browser/extensions/permissions_updater.cc +++ b/chrome/browser/extensions/permissions_updater.cc @@ -36,7 +36,7 @@ PermissionsUpdater::~PermissionsUpdater() {} void PermissionsUpdater::AddPermissions( const Extension* extension, const PermissionSet* permissions) { scoped_refptr<const PermissionSet> existing( - extension->GetActivePermissions()); + extension->permissions_data()->active_permissions()); scoped_refptr<PermissionSet> total( PermissionSet::CreateUnion(existing.get(), permissions)); scoped_refptr<PermissionSet> added( @@ -53,7 +53,7 @@ void PermissionsUpdater::AddPermissions( void PermissionsUpdater::RemovePermissions( const Extension* extension, const PermissionSet* permissions) { scoped_refptr<const PermissionSet> existing( - extension->GetActivePermissions()); + extension->permissions_data()->active_permissions()); scoped_refptr<PermissionSet> total( PermissionSet::CreateDifference(existing.get(), permissions)); scoped_refptr<PermissionSet> removed( @@ -77,7 +77,8 @@ void PermissionsUpdater::GrantActivePermissions(const Extension* extension) { return; ExtensionPrefs::Get(profile_)->AddGrantedPermissions( - extension->id(), extension->GetActivePermissions().get()); + extension->id(), + extension->permissions_data()->active_permissions().get()); } void PermissionsUpdater::UpdateActivePermissions( diff --git a/chrome/browser/extensions/permissions_updater_unittest.cc b/chrome/browser/extensions/permissions_updater_unittest.cc index 70cd6cf..c9c8c80 100644 --- a/chrome/browser/extensions/permissions_updater_unittest.cc +++ b/chrome/browser/extensions/permissions_updater_unittest.cc @@ -21,6 +21,7 @@ #include "extensions/browser/extension_prefs.h" #include "extensions/common/extension.h" #include "extensions/common/permissions/permission_set.h" +#include "extensions/common/permissions/permissions_data.h" #include "testing/gtest/include/gtest/gtest.h" using extension_test_util::LoadManifest; @@ -130,9 +131,9 @@ TEST_F(PermissionsUpdaterTest, AddAndRemovePermissions) { // Make sure it loaded properly. scoped_refptr<const PermissionSet> permissions = - extension->GetActivePermissions(); + extension->permissions_data()->active_permissions(); ASSERT_EQ(*default_permissions.get(), - *extension->GetActivePermissions().get()); + *extension->permissions_data()->active_permissions().get()); // Add a few permissions. APIPermissionSet apis; @@ -161,7 +162,7 @@ TEST_F(PermissionsUpdaterTest, AddAndRemovePermissions) { scoped_refptr<PermissionSet> active_permissions = PermissionSet::CreateUnion(default_permissions.get(), delta.get()); ASSERT_EQ(*active_permissions.get(), - *extension->GetActivePermissions().get()); + *extension->permissions_data()->active_permissions().get()); // Verify that the new granted and active permissions were also stored // in the extension preferences. In this case, the granted permissions should @@ -197,7 +198,7 @@ TEST_F(PermissionsUpdaterTest, AddAndRemovePermissions) { active_permissions = PermissionSet::CreateDifference(active_permissions.get(), delta.get()); ASSERT_EQ(*active_permissions.get(), - *extension->GetActivePermissions().get()); + *extension->permissions_data()->active_permissions().get()); // Verify that the extension prefs hold the new active permissions and the // same granted permissions. diff --git a/chrome/browser/extensions/suggest_permission_util.cc b/chrome/browser/extensions/suggest_permission_util.cc index 4490762..66a0f6a 100644 --- a/chrome/browser/extensions/suggest_permission_util.cc +++ b/chrome/browser/extensions/suggest_permission_util.cc @@ -11,6 +11,7 @@ #include "extensions/browser/process_manager.h" #include "extensions/common/extension.h" #include "extensions/common/extension_messages.h" +#include "extensions/common/permissions/permissions_data.h" #include "extensions/common/permissions/permissions_info.h" using content::CONSOLE_MESSAGE_LEVEL_WARNING; @@ -49,7 +50,7 @@ bool IsExtensionWithPermissionOrSuggestInConsole( APIPermission::ID permission, const Extension* extension, content::RenderViewHost* host) { - if (extension && extension->HasAPIPermission(permission)) + if (extension && extension->permissions_data()->HasAPIPermission(permission)) return true; if (extension) |