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

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

Issue 990303002: Implement PermissionService::GetNextPermissionChange. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permission_impl
Patch Set: cosmetic changes Created 5 years, 9 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 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

Powered by Google App Engine
This is Rietveld 408576698