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 |