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

Unified Diff: content/browser/permissions/permission_service_impl.cc

Issue 990303002: Implement PermissionService::GetNextPermissionChange. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permission_impl
Patch Set: review comments Created 5 years, 9 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
Index: content/browser/permissions/permission_service_impl.cc
diff --git a/content/browser/permissions/permission_service_impl.cc b/content/browser/permissions/permission_service_impl.cc
index 333623a7cb02ce78a70ec18179fb18c853dc0338..138158fc3c697301101eb73b95c827ed2299f4a3 100644
--- a/content/browser/permissions/permission_service_impl.cc
+++ b/content/browser/permissions/permission_service_impl.cc
@@ -14,10 +14,12 @@ PermissionType PermissionNameToPermissionType(PermissionName name) {
switch(name) {
case PERMISSION_NAME_GEOLOCATION:
return PERMISSION_GEOLOCATION;
- case PERMISSION_NAME_MIDI_SYSEX:
- return PERMISSION_MIDI_SYSEX;
case PERMISSION_NAME_NOTIFICATIONS:
return PERMISSION_NOTIFICATIONS;
+ case PERMISSION_NAME_PUSH_NOTIFICATIONS:
+ return PERMISSION_PUSH_MESSAGING;
+ case PERMISSION_NAME_MIDI_SYSEX:
+ return PERMISSION_MIDI_SYSEX;
case PERMISSION_NAME_PROTECTED_MEDIA_IDENTIFIER:
return PERMISSION_PROTECTED_MEDIA_IDENTIFIER;
}
@@ -112,8 +114,7 @@ void PermissionServiceImpl::HasPermission(
const mojo::Callback<void(PermissionStatus)>& callback) {
DCHECK(context_->GetBrowserContext());
- callback.Run(GetPermissionStatus(PermissionNameToPermissionType(permission),
- GURL(origin)));
+ callback.Run(GetPermissionStatusFromName(permission, GURL(origin)));
}
void PermissionServiceImpl::RevokePermission(
@@ -122,7 +123,8 @@ void PermissionServiceImpl::RevokePermission(
const mojo::Callback<void(PermissionStatus)>& callback) {
GURL origin_url(origin);
PermissionType permission_type = PermissionNameToPermissionType(permission);
- PermissionStatus status = GetPermissionStatus(permission_type, origin_url);
+ PermissionStatus status = GetPermissionStatusFromType(permission_type,
+ origin_url);
// Resetting the permission should only be possible if the permission is
// already granted.
@@ -133,11 +135,45 @@ void PermissionServiceImpl::RevokePermission(
ResetPermissionStatus(permission_type, origin_url);
- callback.Run(GetPermissionStatus(permission_type, origin_url));
+ callback.Run(GetPermissionStatusFromType(permission_type, origin_url));
+}
+
+void PermissionServiceImpl::GetNextPermissionChange(
+ PermissionName permission,
+ const mojo::String& origin,
+ PermissionStatus last_known_status,
+ const mojo::Callback<void(PermissionStatus)>& callback) {
+ PermissionStatus current_status =
+ GetPermissionStatusFromName(permission, GURL(origin));
+ if (current_status != last_known_status) {
+ callback.Run(current_status);
+ return;
+ }
+
+ int* subscription_id = new int();
+
+ GURL embedding_origin = context_->GetEmbeddingOrigin();
+ *subscription_id =
+ GetContentClient()->browser()->SubscribePermissionStatusChange(
+ PermissionNameToPermissionType(permission),
+ context_->GetBrowserContext(),
+ GURL(origin),
+ // If the embedding_origin is empty, we,ll use the |origin| instead.
+ embedding_origin.is_empty() ? GURL(origin) : embedding_origin,
+ base::Bind(&PermissionServiceImpl::OnPermissionStatusChanged,
+ weak_factory_.GetWeakPtr(),
+ callback,
+ base::Owned(subscription_id)));
+}
+
+PermissionStatus PermissionServiceImpl::GetPermissionStatusFromName(
+ PermissionName permission, const GURL& origin) {
+ return GetPermissionStatusFromType(PermissionNameToPermissionType(permission),
+ origin);
}
-PermissionStatus PermissionServiceImpl::GetPermissionStatus(PermissionType type,
- GURL origin) {
+PermissionStatus PermissionServiceImpl::GetPermissionStatusFromType(
+ PermissionType type, const GURL& origin) {
// If the embedding_origin is empty we'll use |origin| instead.
GURL embedding_origin = context_->GetEmbeddingOrigin();
return GetContentClient()->browser()->GetPermissionStatus(
@@ -146,7 +182,7 @@ PermissionStatus PermissionServiceImpl::GetPermissionStatus(PermissionType type,
}
void PermissionServiceImpl::ResetPermissionStatus(PermissionType type,
- GURL origin) {
+ const GURL& origin) {
// If the embedding_origin is empty we'll use |origin| instead.
GURL embedding_origin = context_->GetEmbeddingOrigin();
GetContentClient()->browser()->ResetPermission(
@@ -154,4 +190,15 @@ void PermissionServiceImpl::ResetPermissionStatus(PermissionType type,
embedding_origin.is_empty() ? origin : embedding_origin);
}
+void PermissionServiceImpl::OnPermissionStatusChanged(
+ const mojo::Callback<void(PermissionStatus)>& callback,
+ int* subscription_id,
Bernhard Bauer 2015/03/23 10:20:43 Could you make this const int*?
+ PermissionStatus status) {
+ GetContentClient()->browser()->UnsubscribePermissionStatusChange(
+ context_->GetBrowserContext(),
+ *subscription_id);
+
+ callback.Run(status);
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698