Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1648)

Unified Diff: chrome/browser/permissions/permission_manager.cc

Issue 2714603002: Make PermissionManager use ContentSettingsType internally more (Closed)
Patch Set: address comments Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/permissions/permission_manager.h ('k') | chrome/browser/permissions/permission_uma_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/permissions/permission_manager.cc
diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc
index 145868d29d19fa29401cb62dfe663e0a5116463d..8758ef7f6bf8fab9bbe6f92cbb8e9c745b85f76b 100644
--- a/chrome/browser/permissions/permission_manager.cc
+++ b/chrome/browser/permissions/permission_manager.cc
@@ -81,6 +81,8 @@ void ContentSettingToPermissionStatusCallbackWrapper(
// Helper method to convert PermissionType to ContentSettingType.
ContentSettingsType PermissionTypeToContentSetting(PermissionType permission) {
switch (permission) {
+ case PermissionType::MIDI:
+ return CONTENT_SETTINGS_TYPE_MIDI;
case PermissionType::MIDI_SYSEX:
return CONTENT_SETTINGS_TYPE_MIDI_SYSEX;
case PermissionType::PUSH_MESSAGING:
@@ -98,9 +100,6 @@ ContentSettingsType PermissionTypeToContentSetting(PermissionType permission) {
#endif
case PermissionType::DURABLE_STORAGE:
return CONTENT_SETTINGS_TYPE_DURABLE_STORAGE;
- case PermissionType::MIDI:
- // This will hit the NOTREACHED below.
- break;
case PermissionType::AUDIO_CAPTURE:
return CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC;
case PermissionType::VIDEO_CAPTURE:
@@ -121,16 +120,10 @@ 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 PermissionManager::GetPermissionContext since they don't
-// have a context.
-bool IsConstantPermission(PermissionType type) {
- switch (type) {
- case PermissionType::MIDI:
- return true;
- default:
- return false;
- }
+// The ContentSettingsTypes for which true is returned will also return nullptr
+// in PermissionManager::GetPermissionContext since they don't have a context.
+bool IsConstantPermission(ContentSettingsType type) {
+ return type == CONTENT_SETTINGS_TYPE_MIDI;
}
void PermissionRequestResponseCallbackWrapper(
@@ -146,10 +139,10 @@ void PermissionRequestResponseCallbackWrapper(
// This function should only be called when IsConstantPermission has returned
// true for the PermissionType.
blink::mojom::PermissionStatus GetPermissionStatusForConstantPermission(
- PermissionType type) {
+ ContentSettingsType type) {
DCHECK(IsConstantPermission(type));
switch (type) {
- case PermissionType::MIDI:
+ case CONTENT_SETTINGS_TYPE_MIDI:
return PermissionStatus::GRANTED;
default:
return PermissionStatus::DENIED;
@@ -160,10 +153,11 @@ blink::mojom::PermissionStatus GetPermissionStatusForConstantPermission(
class PermissionManager::PendingRequest {
public:
- PendingRequest(content::RenderFrameHost* render_frame_host,
- const std::vector<PermissionType> permissions,
- const base::Callback<
- void(const std::vector<PermissionStatus>&)>& callback)
+ PendingRequest(
+ content::RenderFrameHost* render_frame_host,
+ const std::vector<ContentSettingsType>& permissions,
+ const base::Callback<void(const std::vector<PermissionStatus>&)>&
+ callback)
: render_process_id_(render_frame_host->GetProcess()->GetID()),
render_frame_id_(render_frame_host->GetRoutingID()),
callback_(callback),
@@ -190,7 +184,7 @@ class PermissionManager::PendingRequest {
return callback_;
}
- std::vector<PermissionType> permissions() const {
+ std::vector<ContentSettingsType> permissions() const {
return permissions_;
}
@@ -202,13 +196,13 @@ class PermissionManager::PendingRequest {
int render_process_id_;
int render_frame_id_;
const base::Callback<void(const std::vector<PermissionStatus>&)> callback_;
- std::vector<PermissionType> permissions_;
+ std::vector<ContentSettingsType> permissions_;
std::vector<PermissionStatus> results_;
size_t remaining_results_;
};
struct PermissionManager::Subscription {
- PermissionType permission;
+ ContentSettingsType permission;
GURL requesting_origin;
GURL embedding_origin;
base::Callback<void(PermissionStatus)> callback;
@@ -270,50 +264,19 @@ int PermissionManager::RequestPermission(
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,
- bool user_gesture,
- const base::Callback<void(PermissionStatus)>& callback) {
return RequestPermissions(
- std::vector<PermissionType>(1, permission),
- render_frame_host,
- requesting_origin,
- user_gesture,
+ std::vector<ContentSettingsType>(1, content_settings_type),
+ render_frame_host, requesting_origin, user_gesture,
base::Bind(&PermissionRequestResponseCallbackWrapper, callback));
}
int PermissionManager::RequestPermissions(
- const std::vector<PermissionType>& permissions,
+ const std::vector<ContentSettingsType>& permissions,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
bool user_gesture,
- const base::Callback<void(
- const std::vector<PermissionStatus>&)>& callback) {
+ const base::Callback<void(const std::vector<PermissionStatus>&)>&
+ callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (permissions.empty()) {
callback.Run(std::vector<PermissionStatus>());
@@ -330,10 +293,9 @@ int PermissionManager::RequestPermissions(
const PermissionRequestID request(render_frame_host, request_id);
for (size_t i = 0; i < permissions.size(); ++i) {
- const PermissionType permission = permissions[i];
+ const ContentSettingsType permission = permissions[i];
- if (IsConstantPermission(permission) ||
- !GetPermissionContext(PermissionTypeToContentSetting(permission))) {
+ if (IsConstantPermission(permission) || !GetPermissionContext(permission)) {
// Track permission request usages even for constant permissions.
PermissionUmaUtil::PermissionRequested(permission, requesting_origin,
embedding_origin, profile_);
@@ -342,8 +304,7 @@ int PermissionManager::RequestPermissions(
continue;
}
- PermissionContextBase* context =
- GetPermissionContext(PermissionTypeToContentSetting(permission));
+ PermissionContextBase* context = GetPermissionContext(permission);
context->RequestPermission(
web_contents, request, requesting_origin, user_gesture,
base::Bind(&ContentSettingToPermissionStatusCallbackWrapper,
@@ -358,6 +319,49 @@ int PermissionManager::RequestPermissions(
return request_id;
}
+PermissionStatus PermissionManager::GetPermissionStatus(
+ ContentSettingsType permission,
+ const GURL& requesting_origin,
+ const GURL& embedding_origin) {
+ if (IsConstantPermission(permission))
+ return GetPermissionStatusForConstantPermission(permission);
+ 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,
+ bool user_gesture,
+ const base::Callback<void(PermissionStatus)>& callback) {
+ ContentSettingsType content_settings_type =
+ PermissionTypeToContentSetting(permission);
+ return RequestPermissions(
+ std::vector<ContentSettingsType>(1, content_settings_type),
+ render_frame_host, requesting_origin, user_gesture,
+ base::Bind(&PermissionRequestResponseCallbackWrapper, callback));
+}
+
+int PermissionManager::RequestPermissions(
+ const std::vector<PermissionType>& permissions,
+ content::RenderFrameHost* render_frame_host,
+ const GURL& requesting_origin,
+ bool user_gesture,
+ const base::Callback<void(const std::vector<PermissionStatus>&)>&
+ callback) {
+ std::vector<ContentSettingsType> content_settings_types;
+ std::transform(permissions.begin(), permissions.end(),
+ back_inserter(content_settings_types),
+ PermissionTypeToContentSetting);
+ return RequestPermissions(content_settings_types, render_frame_host,
+ requesting_origin, user_gesture, callback);
+}
+
PermissionContextBase* PermissionManager::GetPermissionContext(
ContentSettingsType type) {
const auto& it = permission_contexts_.find(type);
@@ -391,9 +395,8 @@ void PermissionManager::CancelPermissionRequest(int request_id) {
const PermissionRequestID request(pending_request->render_process_id(),
pending_request->render_frame_id(),
request_id);
- for (PermissionType permission : pending_request->permissions()) {
- PermissionContextBase* context =
- GetPermissionContext(PermissionTypeToContentSetting(permission));
+ for (ContentSettingsType permission : pending_request->permissions()) {
+ PermissionContextBase* context = GetPermissionContext(permission);
if (!context)
continue;
context->CancelPermissionRequest(web_contents, request);
@@ -419,8 +422,6 @@ PermissionStatus PermissionManager::GetPermissionStatus(
const GURL& requesting_origin,
const GURL& embedding_origin) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- if (IsConstantPermission(permission))
- return GetPermissionStatusForConstantPermission(permission);
return GetPermissionStatus(PermissionTypeToContentSetting(permission),
requesting_origin, embedding_origin);
}
@@ -434,14 +435,15 @@ int PermissionManager::SubscribePermissionStatusChange(
if (subscriptions_.IsEmpty())
HostContentSettingsMapFactory::GetForProfile(profile_)->AddObserver(this);
+ ContentSettingsType content_type = PermissionTypeToContentSetting(permission);
auto subscription = base::MakeUnique<Subscription>();
- subscription->permission = permission;
+ subscription->permission = content_type;
subscription->requesting_origin = requesting_origin;
subscription->embedding_origin = embedding_origin;
subscription->callback = callback;
subscription->current_value =
- GetPermissionStatus(permission, requesting_origin, embedding_origin);
+ GetPermissionStatus(content_type, requesting_origin, embedding_origin);
return subscriptions_.Add(std::move(subscription));
}
@@ -475,10 +477,8 @@ void PermissionManager::OnContentSettingChanged(
Subscription* subscription = iter.GetCurrentValue();
if (IsConstantPermission(subscription->permission))
continue;
- if (PermissionTypeToContentSetting(subscription->permission) !=
- content_type) {
+ if (subscription->permission != content_type)
continue;
- }
if (primary_pattern.IsValid() &&
!primary_pattern.Matches(subscription->requesting_origin))
« no previous file with comments | « chrome/browser/permissions/permission_manager.h ('k') | chrome/browser/permissions/permission_uma_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698