Chromium Code Reviews| Index: chrome/browser/permissions/permission_manager.cc |
| diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc |
| index 8275f1cb6f4f4e3345cc8e6a33bc6bed49c25e00..7dac69a226e6953d01a19bae954e97f54142360d 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,22 @@ 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) { |
| + PermissionType permission_type; |
| + bool success = PermissionUtil::GetPermissionType(content_settings_type, |
| + &permission_type); |
| + DCHECK(success); |
| + return RequestPermissions( |
|
raymes
2017/02/07 04:46:15
I think it would be better to have functions that
Timothy Loh
2017/02/08 04:01:06
I think we can't do this until we add MIDI as a Co
|
| + std::vector<PermissionType>(1, permission_type), render_frame_host, |
| + requesting_origin, user_gesture, |
| + base::Bind(&PermissionRequestResponseCallbackWrapper, callback)); |
| +} |
| + |
| +int PermissionManager::RequestPermission( |
| PermissionType permission, |
| content::RenderFrameHost* render_frame_host, |
| const GURL& requesting_origin, |
| @@ -306,16 +320,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 +346,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 +379,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 +392,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 +406,20 @@ 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); |
| +} |
| + |
| +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())); |
|
raymes
2017/02/07 04:46:15
nit: function order should match the header
Timothy Loh
2017/02/08 04:01:06
Done.
|
| } |
| void PermissionManager::RegisterPermissionUsage(PermissionType permission, |
| @@ -423,8 +452,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 +469,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 +499,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,23 +509,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()); |
| -} |