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 940e7832695a83fba7c8b5c1207174df9bce8c44..13cc0a967dc7c2f9b458f267e3ceffe1a2e2a1a3 100644 |
| --- a/content/browser/permissions/permission_service_impl.cc |
| +++ b/content/browser/permissions/permission_service_impl.cc |
| @@ -114,8 +114,7 @@ void PermissionServiceImpl::HasPermission( |
| const mojo::Callback<void(PermissionStatus)>& callback) { |
| DCHECK(context_->GetBrowserContext()); |
| - callback.Run(GetPermissionStatus(PermissionNameToPermissionType(permission), |
| - GURL(origin))); |
| + callback.Run(GetPermissionStatus(permission, GURL(origin))); |
| } |
| void PermissionServiceImpl::RevokePermission( |
| @@ -138,8 +137,43 @@ void PermissionServiceImpl::RevokePermission( |
| callback.Run(GetPermissionStatus(permission_type, origin_url)); |
| } |
| -PermissionStatus PermissionServiceImpl::GetPermissionStatus(PermissionType type, |
| - GURL origin) { |
| +void PermissionServiceImpl::GetNextPermissionChange( |
| + PermissionName permission, |
| + const mojo::String& origin, |
| + PermissionStatus last_known_status, |
| + const mojo::Callback<void(PermissionStatus)>& callback) { |
| + PermissionStatus current_status = |
| + GetPermissionStatus(permission, GURL(origin)); |
| + if (current_status != last_known_status) { |
| + callback.Run(current_status); |
| + return; |
| + } |
| + |
| + PendingSubscription* subscription = new PendingSubscription(); |
| + int id = pending_subscriptions_.Add(subscription); |
|
Bernhard Bauer
2015/03/11 14:06:18
I don't think you need this map. You could create
mlamouri (slow - plz ping)
2015/03/18 16:24:40
Didn't use a scoped_ptr but a raw pointer that is
|
| + |
| + // If the embedding_origin is empty, we,ll use the |origin| instead. |
|
Bernhard Bauer
2015/03/11 14:06:18
Nit: "we'll". Also, move the code here that falls
mlamouri (slow - plz ping)
2015/03/18 16:24:40
Done.
|
| + GURL embedding_origin = context_->GetEmbeddingOrigin(); |
| + subscription->subscription_id = |
| + GetContentClient()->browser()->SubscribePermissionStatusChange( |
| + PermissionNameToPermissionType(permission), |
| + context_->GetBrowserContext(), |
| + GURL(origin), |
| + embedding_origin.is_empty() ? GURL(origin) : embedding_origin, |
| + base::Bind(&PermissionServiceImpl::OnPermissionStatusChanged, |
| + weak_factory_.GetWeakPtr(), |
| + callback, |
| + id)); |
| +} |
| + |
| +PermissionStatus PermissionServiceImpl::GetPermissionStatus( |
|
Bernhard Bauer
2015/03/11 14:06:18
Overloading methods is discouraged by the style gu
mlamouri (slow - plz ping)
2015/03/18 16:24:40
Snif. I fixed that. GetPermissionStatusFromType()
|
| + PermissionName permission, const GURL& origin) { |
| + return GetPermissionStatus(PermissionNameToPermissionType(permission), |
| + origin); |
| +} |
| + |
| +PermissionStatus PermissionServiceImpl::GetPermissionStatus( |
| + 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( |
| @@ -148,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( |
| @@ -156,4 +190,17 @@ void PermissionServiceImpl::ResetPermissionStatus(PermissionType type, |
| embedding_origin.is_empty() ? origin : embedding_origin); |
| } |
| +void PermissionServiceImpl::OnPermissionStatusChanged( |
| + const mojo::Callback<void(PermissionStatus)>& callback, |
|
Bernhard Bauer
2015/03/11 14:06:18
Are you going to call the callback?
mlamouri (slow - plz ping)
2015/03/18 16:24:40
Oups :)
|
| + int pending_subscription_id, |
| + PermissionStatus status) { |
| + PendingSubscription* subscription = |
| + pending_subscriptions_.Lookup(pending_subscription_id); |
| + GetContentClient()->browser()->UnsubscribePermissionStatusChange( |
| + context_->GetBrowserContext(), |
| + subscription->subscription_id); |
| + |
| + pending_subscriptions_.Remove(pending_subscription_id); |
| +} |
| + |
| } // namespace content |