| Index: chrome/browser/permissions/permission_manager.cc
|
| diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc
|
| index de4666487cc49a6389702160eab3b09b5cbca702..e890aea26b0a94bb4ec5f78a184249846e77bb7d 100644
|
| --- a/chrome/browser/permissions/permission_manager.cc
|
| +++ b/chrome/browser/permissions/permission_manager.cc
|
| @@ -4,8 +4,6 @@
|
|
|
| #include "chrome/browser/permissions/permission_manager.h"
|
|
|
| -#include <stddef.h>
|
| -
|
| #include <memory>
|
| #include <utility>
|
|
|
| @@ -86,6 +84,7 @@ ContentSettingsType PermissionTypeToContentSetting(PermissionType permission) {
|
| case PermissionType::MIDI_SYSEX:
|
| return CONTENT_SETTINGS_TYPE_MIDI_SYSEX;
|
| case PermissionType::PUSH_MESSAGING:
|
| + return CONTENT_SETTINGS_TYPE_PUSH_MESSAGING;
|
| case PermissionType::NOTIFICATIONS:
|
| return CONTENT_SETTINGS_TYPE_NOTIFICATIONS;
|
| case PermissionType::GEOLOCATION:
|
| @@ -146,13 +145,14 @@ void PermissionRequestResponseCallbackWrapper(
|
| // CONTENT_SETTING_DEFAULT is returned if the permission needs further handling.
|
| // This function should only be called when IsConstantPermission has returned
|
| // true for the PermissionType.
|
| -ContentSetting GetContentSettingForConstantPermission(PermissionType type) {
|
| +blink::mojom::PermissionStatus GetPermissionStatusForConstantPermission(
|
| + PermissionType type) {
|
| DCHECK(IsConstantPermission(type));
|
| switch (type) {
|
| case PermissionType::MIDI:
|
| - return CONTENT_SETTING_ALLOW;
|
| + return PermissionStatus::GRANTED;
|
| default:
|
| - return CONTENT_SETTING_DEFAULT;
|
| + return PermissionStatus::DENIED;
|
| }
|
| }
|
|
|
| @@ -212,7 +212,7 @@ struct PermissionManager::Subscription {
|
| GURL requesting_origin;
|
| GURL embedding_origin;
|
| base::Callback<void(PermissionStatus)> callback;
|
| - ContentSetting current_value;
|
| + PermissionStatus current_value;
|
| };
|
|
|
| // static
|
| @@ -223,39 +223,37 @@ PermissionManager* PermissionManager::Get(Profile* profile) {
|
| PermissionManager::PermissionManager(Profile* profile)
|
| : profile_(profile),
|
| weak_ptr_factory_(this) {
|
| - permission_contexts_[PermissionType::MIDI_SYSEX] =
|
| + permission_contexts_[CONTENT_SETTINGS_TYPE_MIDI_SYSEX] =
|
| base::MakeUnique<MidiPermissionContext>(profile);
|
| - permission_contexts_[PermissionType::PUSH_MESSAGING] =
|
| + permission_contexts_[CONTENT_SETTINGS_TYPE_PUSH_MESSAGING] =
|
| base::MakeUnique<NotificationPermissionContext>(
|
| - profile, PermissionType::PUSH_MESSAGING);
|
| - permission_contexts_[PermissionType::NOTIFICATIONS] =
|
| + profile, CONTENT_SETTINGS_TYPE_PUSH_MESSAGING);
|
| + permission_contexts_[CONTENT_SETTINGS_TYPE_NOTIFICATIONS] =
|
| base::MakeUnique<NotificationPermissionContext>(
|
| - profile, PermissionType::NOTIFICATIONS);
|
| + profile, CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
|
| #if !defined(OS_ANDROID)
|
| - permission_contexts_[PermissionType::GEOLOCATION] =
|
| + permission_contexts_[CONTENT_SETTINGS_TYPE_GEOLOCATION] =
|
| base::MakeUnique<GeolocationPermissionContext>(profile);
|
| #else
|
| - permission_contexts_[PermissionType::GEOLOCATION] =
|
| + permission_contexts_[CONTENT_SETTINGS_TYPE_GEOLOCATION] =
|
| base::MakeUnique<GeolocationPermissionContextAndroid>(profile);
|
| #endif
|
| #if defined(OS_CHROMEOS) || defined(OS_ANDROID)
|
| - permission_contexts_[PermissionType::PROTECTED_MEDIA_IDENTIFIER] =
|
| + permission_contexts_[CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER] =
|
| base::MakeUnique<ProtectedMediaIdentifierPermissionContext>(profile);
|
| #endif
|
| - permission_contexts_[PermissionType::DURABLE_STORAGE] =
|
| + permission_contexts_[CONTENT_SETTINGS_TYPE_DURABLE_STORAGE] =
|
| base::MakeUnique<DurableStoragePermissionContext>(profile);
|
| - permission_contexts_[PermissionType::AUDIO_CAPTURE] =
|
| + permission_contexts_[CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC] =
|
| base::MakeUnique<MediaStreamDevicePermissionContext>(
|
| - profile, content::PermissionType::AUDIO_CAPTURE,
|
| - CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC);
|
| - permission_contexts_[PermissionType::VIDEO_CAPTURE] =
|
| + profile, CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC);
|
| + permission_contexts_[CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA] =
|
| base::MakeUnique<MediaStreamDevicePermissionContext>(
|
| - profile, content::PermissionType::VIDEO_CAPTURE,
|
| - CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA);
|
| - permission_contexts_[PermissionType::BACKGROUND_SYNC] =
|
| + profile, CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA);
|
| + permission_contexts_[CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC] =
|
| base::MakeUnique<BackgroundSyncPermissionContext>(profile);
|
| #if BUILDFLAG(ENABLE_PLUGINS)
|
| - permission_contexts_[PermissionType::FLASH] =
|
| + permission_contexts_[CONTENT_SETTINGS_TYPE_PLUGINS] =
|
| base::MakeUnique<FlashPermissionContext>(profile);
|
| #endif
|
| }
|
| @@ -267,6 +265,35 @@ PermissionManager::~PermissionManager() {
|
| }
|
|
|
| int PermissionManager::RequestPermission(
|
| + ContentSettingsType content_settings_type,
|
| + content::RenderFrameHost* render_frame_host,
|
| + const GURL& requesting_origin,
|
| + bool user_gesture,
|
| + const base::Callback<void(PermissionStatus)>& callback) {
|
| + // TODO(timloh): We should be operating on ContentSettingsType instead of
|
| + // converting these back to PermissionType.
|
| + PermissionType permission_type;
|
| + bool success = PermissionUtil::GetPermissionType(content_settings_type,
|
| + &permission_type);
|
| + DCHECK(success);
|
| + return RequestPermissions(
|
| + std::vector<PermissionType>(1, permission_type), render_frame_host,
|
| + requesting_origin, user_gesture,
|
| + base::Bind(&PermissionRequestResponseCallbackWrapper, callback));
|
| +}
|
| +
|
| +PermissionStatus PermissionManager::GetPermissionStatus(
|
| + ContentSettingsType permission,
|
| + const GURL& requesting_origin,
|
| + const GURL& embedding_origin) {
|
| + PermissionContextBase* context = GetPermissionContext(permission);
|
| + return ContentSettingToPermissionStatus(
|
| + context->GetPermissionStatus(requesting_origin.GetOrigin(),
|
| + embedding_origin.GetOrigin())
|
| + .content_setting);
|
| +}
|
| +
|
| +int PermissionManager::RequestPermission(
|
| PermissionType permission,
|
| content::RenderFrameHost* render_frame_host,
|
| const GURL& requesting_origin,
|
| @@ -306,16 +333,17 @@ int PermissionManager::RequestPermissions(
|
| const PermissionType permission = permissions[i];
|
|
|
| if (IsConstantPermission(permission) ||
|
| - !GetPermissionContext(permission)) {
|
| + !GetPermissionContext(PermissionTypeToContentSetting(permission))) {
|
| // Track permission request usages even for constant permissions.
|
| PermissionUmaUtil::PermissionRequested(permission, requesting_origin,
|
| embedding_origin, profile_);
|
| - OnPermissionsRequestResponseStatus(request_id, i,
|
| - GetPermissionStatus(permission, requesting_origin, embedding_origin));
|
| + OnPermissionsRequestResponseStatus(
|
| + request_id, i, GetPermissionStatusForConstantPermission(permission));
|
| continue;
|
| }
|
|
|
| - PermissionContextBase* context = GetPermissionContext(permission);
|
| + PermissionContextBase* context =
|
| + GetPermissionContext(PermissionTypeToContentSetting(permission));
|
| context->RequestPermission(
|
| web_contents, request, requesting_origin, user_gesture,
|
| base::Bind(&ContentSettingToPermissionStatusCallbackWrapper,
|
| @@ -331,7 +359,7 @@ int PermissionManager::RequestPermissions(
|
| }
|
|
|
| PermissionContextBase* PermissionManager::GetPermissionContext(
|
| - PermissionType type) {
|
| + ContentSettingsType type) {
|
| const auto& it = permission_contexts_.find(type);
|
| return it == permission_contexts_.end() ? nullptr : it->second.get();
|
| }
|
| @@ -364,7 +392,8 @@ void PermissionManager::CancelPermissionRequest(int request_id) {
|
| pending_request->render_frame_id(),
|
| request_id);
|
| for (PermissionType permission : pending_request->permissions()) {
|
| - PermissionContextBase* context = GetPermissionContext(permission);
|
| + PermissionContextBase* context =
|
| + GetPermissionContext(PermissionTypeToContentSetting(permission));
|
| if (!context)
|
| continue;
|
| context->CancelPermissionRequest(web_contents, request);
|
| @@ -376,7 +405,8 @@ void PermissionManager::ResetPermission(PermissionType permission,
|
| const GURL& requesting_origin,
|
| const GURL& embedding_origin) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| - PermissionContextBase* context = GetPermissionContext(permission);
|
| + PermissionContextBase* context =
|
| + GetPermissionContext(PermissionTypeToContentSetting(permission));
|
| if (!context)
|
| return;
|
|
|
| @@ -389,8 +419,10 @@ PermissionStatus PermissionManager::GetPermissionStatus(
|
| const GURL& requesting_origin,
|
| const GURL& embedding_origin) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| - return ContentSettingToPermissionStatus(GetPermissionStatusInternal(
|
| - permission, requesting_origin, embedding_origin));
|
| + if (IsConstantPermission(permission))
|
| + return GetPermissionStatusForConstantPermission(permission);
|
| + return GetPermissionStatus(PermissionTypeToContentSetting(permission),
|
| + requesting_origin, embedding_origin);
|
| }
|
|
|
| void PermissionManager::RegisterPermissionUsage(PermissionType permission,
|
| @@ -423,8 +455,8 @@ int PermissionManager::SubscribePermissionStatusChange(
|
| subscription->embedding_origin = embedding_origin;
|
| subscription->callback = callback;
|
|
|
| - subscription->current_value = GetPermissionStatusInternal(
|
| - permission, requesting_origin, embedding_origin);
|
| + subscription->current_value =
|
| + GetPermissionStatus(permission, requesting_origin, embedding_origin);
|
|
|
| return subscriptions_.Add(std::move(subscription));
|
| }
|
| @@ -440,7 +472,7 @@ void PermissionManager::UnsubscribePermissionStatusChange(int subscription_id) {
|
| }
|
|
|
| bool PermissionManager::IsPermissionKillSwitchOn(
|
| - content::PermissionType permission) {
|
| + ContentSettingsType permission) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| return GetPermissionContext(permission)->IsPermissionKillSwitchOn();
|
| }
|
| @@ -470,7 +502,7 @@ void PermissionManager::OnContentSettingChanged(
|
| !secondary_pattern.Matches(subscription->embedding_origin))
|
| continue;
|
|
|
| - ContentSetting new_value = GetPermissionStatusInternal(
|
| + PermissionStatus new_value = GetPermissionStatus(
|
| subscription->permission, subscription->requesting_origin,
|
| subscription->embedding_origin);
|
| if (subscription->current_value == new_value)
|
| @@ -480,25 +512,9 @@ void PermissionManager::OnContentSettingChanged(
|
|
|
| // Add the callback to |callbacks| which will be run after the loop to
|
| // prevent re-entrance issues.
|
| - callbacks.push_back(
|
| - base::Bind(subscription->callback,
|
| - ContentSettingToPermissionStatus(new_value)));
|
| + callbacks.push_back(base::Bind(subscription->callback, new_value));
|
| }
|
|
|
| for (const auto& callback : callbacks)
|
| callback.Run();
|
| }
|
| -
|
| -ContentSetting PermissionManager::GetPermissionStatusInternal(
|
| - PermissionType permission,
|
| - const GURL& requesting_origin,
|
| - const GURL& embedding_origin) {
|
| - if (IsConstantPermission(permission))
|
| - return GetContentSettingForConstantPermission(permission);
|
| -
|
| - PermissionContextBase* context = GetPermissionContext(permission);
|
| - return context
|
| - ->GetPermissionStatus(requesting_origin.GetOrigin(),
|
| - embedding_origin.GetOrigin())
|
| - .content_setting;
|
| -}
|
|
|