Chromium Code Reviews| 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 |