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

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

Issue 2573573002: Switch PermissionStatus events to an observer model. (Closed)
Patch Set: Rebased. Created 3 years, 12 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 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
« no previous file with comments | « content/browser/permissions/permission_service_impl.h ('k') | third_party/WebKit/Source/modules/permissions/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698