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; |
-} |