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 951966c92e750f67c3ad04e43e095a7529ae6967..20b371e2966a7839eddf4facd0ab6f75b1dd5de5 100644 |
| --- a/chrome/browser/permissions/permission_manager.cc |
| +++ b/chrome/browser/permissions/permission_manager.cc |
| @@ -8,22 +8,38 @@ |
| #include "base/callback.h" |
| #include "build/build_config.h" |
| +#include "chrome/browser/background_sync/background_sync_permission_context.h" |
| #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| -#include "chrome/browser/permissions/permission_context.h" |
| +#include "chrome/browser/media/media_stream_device_permission_context.h" |
| +#include "chrome/browser/media/midi_permission_context.h" |
| +#include "chrome/browser/notifications/notification_permission_context.h" |
| #include "chrome/browser/permissions/permission_context_base.h" |
| #include "chrome/browser/permissions/permission_request_id.h" |
| #include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/push_messaging/push_messaging_permission_context.h" |
| +#include "chrome/browser/storage/durable_storage_permission_context.h" |
| #include "chrome/browser/tab_contents/tab_util.h" |
| +#include "chrome/common/features.h" |
| #include "components/content_settings/core/browser/host_content_settings_map.h" |
| #include "content/public/browser/permission_type.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/render_process_host.h" |
| #include "content/public/browser/web_contents.h" |
| +#if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
| +#include "chrome/browser/media/protected_media_identifier_permission_context.h" |
| +#endif |
| + |
| #if !defined(OS_ANDROID) |
| #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" |
| #endif |
| +#if BUILDFLAG(ANDROID_JAVA_UI) |
| +#include "chrome/browser/geolocation/geolocation_permission_context_android.h" |
| +#else |
| +#include "chrome/browser/geolocation/geolocation_permission_context.h" |
| +#endif |
| + |
| using blink::mojom::PermissionStatus; |
| using content::PermissionType; |
| @@ -99,7 +115,8 @@ ContentSettingsType PermissionTypeToContentSetting(PermissionType permission) { |
| // Returns whether the permission has a constant PermissionStatus value (i.e. |
| // always approved or always denied) |
| // The PermissionTypes for which true is returned should be exactly those which |
| -// return nullptr in PermissionContext::Get since they don't have a context. |
| +// return nullptr in PermissionManager::GetPermissionContext since they don't |
| +// have a context. |
| bool IsConstantPermission(PermissionType type) { |
| switch (type) { |
| case PermissionType::MIDI: |
| @@ -198,6 +215,35 @@ struct PermissionManager::Subscription { |
| PermissionManager::PermissionManager(Profile* profile) |
| : profile_(profile), |
| weak_ptr_factory_(this) { |
| + permission_contexts_[PermissionType::MIDI_SYSEX] = |
| + make_scoped_ptr(new MidiPermissionContext(profile)); |
|
mlamouri (slow - plz ping)
2016/04/11 14:06:05
Use base::WrapUnique() from "base/memory/ptr_util.
raymes
2016/04/12 07:44:54
Done.
|
| + permission_contexts_[PermissionType::PUSH_MESSAGING] = |
| + make_scoped_ptr(new PushMessagingPermissionContext(profile)); |
| + permission_contexts_[PermissionType::NOTIFICATIONS] = |
| + make_scoped_ptr(new NotificationPermissionContext(profile)); |
| +#if !BUILDFLAG(ANDROID_JAVA_UI) |
| + permission_contexts_[PermissionType::GEOLOCATION] = |
| + make_scoped_ptr(new GeolocationPermissionContext(profile)); |
| +#else |
| + permission_contexts_[PermissionType::GEOLOCATION] = |
| + make_scoped_ptr(new GeolocationPermissionContextAndroid(profile)); |
| +#endif |
| +#if defined(OS_CHROMEOS) || defined(OS_ANDROID) |
| + permission_contexts_[PermissionType::PROTECTED_MEDIA_IDENTIFIER] = |
| + make_scoped_ptr(new ProtectedMediaIdentifierPermissionContext(profile)); |
| +#endif |
| + permission_contexts_[PermissionType::DURABLE_STORAGE] = |
| + make_scoped_ptr(new DurableStoragePermissionContext(profile)); |
| + permission_contexts_[PermissionType::AUDIO_CAPTURE] = |
| + make_scoped_ptr(new MediaStreamDevicePermissionContext( |
| + profile, content::PermissionType::AUDIO_CAPTURE, |
| + CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC)); |
| + permission_contexts_[PermissionType::VIDEO_CAPTURE] = |
| + make_scoped_ptr(new MediaStreamDevicePermissionContext( |
| + profile, content::PermissionType::VIDEO_CAPTURE, |
| + CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA)); |
| + permission_contexts_[PermissionType::BACKGROUND_SYNC] = |
| + make_scoped_ptr(new BackgroundSyncPermissionContext(profile)); |
| } |
| PermissionManager::~PermissionManager() { |
| @@ -206,6 +252,12 @@ PermissionManager::~PermissionManager() { |
| ->RemoveObserver(this); |
| } |
| +PermissionContextBase* PermissionManager::GetPermissionContext( |
| + PermissionType type) { |
| + const auto& it = permission_contexts_.find(type); |
| + return it == permission_contexts_.end() ? nullptr : it->second.get(); |
| +} |
| + |
| int PermissionManager::RequestPermission( |
| PermissionType permission, |
| content::RenderFrameHost* render_frame_host, |
| @@ -244,14 +296,13 @@ int PermissionManager::RequestPermissions( |
| if (IsConstantPermission(permission) || |
| IsPermissionBubbleManagerMissing(web_contents) || |
| - !PermissionContext::Get(profile_, permission)) { |
| + !GetPermissionContext(permission)) { |
| OnPermissionsRequestResponseStatus(request_id, i, |
| GetPermissionStatus(permission, requesting_origin, embedding_origin)); |
| continue; |
| } |
| - PermissionContextBase* context = PermissionContext::Get( |
| - profile_, permission); |
| + PermissionContextBase* context = GetPermissionContext(permission); |
| context->RequestPermission( |
| web_contents, request, requesting_origin, |
| base::Bind(&ContentSettingToPermissionStatusCallbackWrapper, |
| @@ -297,8 +348,7 @@ void PermissionManager::CancelPermissionRequest(int request_id) { |
| pending_request->render_frame_id(), |
| request_id); |
| for (PermissionType permission : pending_request->permissions()) { |
| - PermissionContextBase* context = PermissionContext::Get( |
| - profile_, permission); |
| + PermissionContextBase* context = GetPermissionContext(permission); |
| if (!context) |
| continue; |
| context->CancelPermissionRequest(web_contents, request); |
| @@ -309,7 +359,7 @@ void PermissionManager::CancelPermissionRequest(int request_id) { |
| void PermissionManager::ResetPermission(PermissionType permission, |
| const GURL& requesting_origin, |
| const GURL& embedding_origin) { |
| - PermissionContextBase* context = PermissionContext::Get(profile_, permission); |
| + PermissionContextBase* context = GetPermissionContext(permission); |
| if (!context) |
| return; |
| @@ -324,7 +374,7 @@ PermissionStatus PermissionManager::GetPermissionStatus( |
| if (IsConstantPermission(permission)) |
| return GetPermissionStatusForConstantPermission(permission); |
| - PermissionContextBase* context = PermissionContext::Get(profile_, permission); |
| + PermissionContextBase* context = GetPermissionContext(permission); |
| if (!context) |
| return PermissionStatus::DENIED; |
| @@ -364,9 +414,10 @@ int PermissionManager::SubscribePermissionStatusChange( |
| subscription->current_value = GetContentSettingForConstantPermission( |
| permission); |
| } else { |
| - subscription->current_value = PermissionContext::Get(profile_, permission) |
| - ->GetPermissionStatus(subscription->requesting_origin, |
| - subscription->embedding_origin); |
| + subscription->current_value = |
| + GetPermissionContext(permission) |
| + ->GetPermissionStatus(subscription->requesting_origin, |
| + subscription->embedding_origin); |
| } |
| return subscriptions_.Add(subscription); |
| @@ -411,7 +462,7 @@ void PermissionManager::OnContentSettingChanged( |
| continue; |
| ContentSetting new_value = |
| - PermissionContext::Get(profile_, subscription->permission) |
| + GetPermissionContext(subscription->permission) |
| ->GetPermissionStatus(subscription->requesting_origin, |
| subscription->embedding_origin); |
| if (subscription->current_value == new_value) |