| 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 44851b7a597304e0db480de47bd3c4fd66c41a5a..75e8a6cd942f2008e8a579cf8feadd617a5b9d12 100644
|
| --- a/content/browser/permissions/permission_service_impl.cc
|
| +++ b/content/browser/permissions/permission_service_impl.cc
|
| @@ -17,6 +17,7 @@
|
|
|
| using blink::mojom::PermissionDescriptorPtr;
|
| using blink::mojom::PermissionName;
|
| +using blink::mojom::PermissionObserverPtr;
|
| using blink::mojom::PermissionStatus;
|
|
|
| namespace content {
|
| @@ -81,17 +82,6 @@ PermissionServiceImpl::PendingRequest::~PendingRequest() {
|
| callback.Run(result);
|
| }
|
|
|
| -PermissionServiceImpl::PendingSubscription::PendingSubscription(
|
| - PermissionType permission,
|
| - const url::Origin& origin,
|
| - const PermissionStatusCallback& callback)
|
| - : id(-1), permission(permission), origin(origin), callback(callback) {}
|
| -
|
| -PermissionServiceImpl::PendingSubscription::~PendingSubscription() {
|
| - if (!callback.is_null())
|
| - callback.Run(PermissionStatus::ASK);
|
| -}
|
| -
|
| PermissionServiceImpl::PermissionServiceImpl(
|
| PermissionServiceContext* context,
|
| mojo::InterfaceRequest<blink::mojom::PermissionService> request)
|
| @@ -226,17 +216,6 @@ void PermissionServiceImpl::CancelPendingOperations() {
|
| it.GetCurrentValue()->id);
|
| }
|
| pending_requests_.Clear();
|
| -
|
| - // Cancel pending subscriptions.
|
| - for (SubscriptionsMap::Iterator<PendingSubscription>
|
| - it(&pending_subscriptions_); !it.IsAtEnd(); it.Advance()) {
|
| - it.GetCurrentValue()->callback.Run(GetPermissionStatusFromType(
|
| - it.GetCurrentValue()->permission, it.GetCurrentValue()->origin));
|
| - it.GetCurrentValue()->callback.Reset();
|
| - permission_manager->UnsubscribePermissionStatusChange(
|
| - it.GetCurrentValue()->id);
|
| - }
|
| - pending_subscriptions_.Clear();
|
| }
|
|
|
| void PermissionServiceImpl::HasPermission(
|
| @@ -267,45 +246,24 @@ void PermissionServiceImpl::RevokePermission(
|
| callback.Run(GetPermissionStatusFromType(permission_type, origin));
|
| }
|
|
|
| -void PermissionServiceImpl::GetNextPermissionChange(
|
| +void PermissionServiceImpl::AddPermissionObserver(
|
| PermissionDescriptorPtr permission,
|
| const url::Origin& origin,
|
| PermissionStatus last_known_status,
|
| - const PermissionStatusCallback& callback) {
|
| + PermissionObserverPtr observer) {
|
| PermissionStatus current_status = GetPermissionStatus(permission, origin);
|
| if (current_status != last_known_status) {
|
| - callback.Run(current_status);
|
| - return;
|
| + observer->OnPermissionStatusChange(current_status);
|
| + last_known_status = current_status;
|
| }
|
|
|
| BrowserContext* browser_context = context_->GetBrowserContext();
|
| DCHECK(browser_context);
|
| - if (!browser_context->GetPermissionManager()) {
|
| - callback.Run(current_status);
|
| + if (!browser_context->GetPermissionManager())
|
| return;
|
| - }
|
| -
|
| - PermissionType permission_type =
|
| - PermissionDescriptorToPermissionType(permission);
|
|
|
| - // We need to pass the id of PendingSubscription in pending_subscriptions_
|
| - // to the callback but SubscribePermissionStatusChange() will also return an
|
| - // id which is different.
|
| - auto subscription =
|
| - base::MakeUnique<PendingSubscription>(permission_type, origin, callback);
|
| - PendingSubscription* subscription_raw = subscription.get();
|
| - int pending_subscription_id =
|
| - pending_subscriptions_.Add(std::move(subscription));
|
| -
|
| - GURL requesting_origin(origin.Serialize());
|
| - GURL embedding_origin = context_->GetEmbeddingOrigin();
|
| - subscription_raw->id =
|
| - browser_context->GetPermissionManager()->SubscribePermissionStatusChange(
|
| - permission_type, requesting_origin,
|
| - // If the embedding_origin is empty, we,ll use the |origin| instead.
|
| - embedding_origin.is_empty() ? requesting_origin : embedding_origin,
|
| - base::Bind(&PermissionServiceImpl::OnPermissionStatusChanged,
|
| - weak_factory_.GetWeakPtr(), pending_subscription_id));
|
| + context_->CreateSubscription(PermissionDescriptorToPermissionType(permission),
|
| + origin, std::move(observer));
|
| }
|
|
|
| PermissionStatus PermissionServiceImpl::GetPermissionStatus(
|
| @@ -346,25 +304,4 @@ void PermissionServiceImpl::ResetPermissionStatus(PermissionType type,
|
| embedding_origin.is_empty() ? requesting_origin : embedding_origin);
|
| }
|
|
|
| -void PermissionServiceImpl::OnPermissionStatusChanged(
|
| - int pending_subscription_id,
|
| - PermissionStatus status) {
|
| - PendingSubscription* subscription =
|
| - pending_subscriptions_.Lookup(pending_subscription_id);
|
| -
|
| - BrowserContext* browser_context = context_->GetBrowserContext();
|
| - DCHECK(browser_context);
|
| - if (browser_context->GetPermissionManager()) {
|
| - browser_context->GetPermissionManager()->UnsubscribePermissionStatusChange(
|
| - subscription->id);
|
| - }
|
| -
|
| - PermissionStatusCallback callback = subscription->callback;
|
| -
|
| - subscription->callback.Reset();
|
| - pending_subscriptions_.Remove(pending_subscription_id);
|
| -
|
| - callback.Run(status);
|
| -}
|
| -
|
| } // namespace content
|
|
|