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

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: fix chromecast/ 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
« no previous file with comments | « content/browser/permissions/permission_service_impl.h ('k') | content/common/permission_service.mojom » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 8ed8ffd932ff60cd97af6efdbee4ad045df16e32..fa2e1022a8a7c03830b3eabfa5305364201ba16b 100644
--- a/content/browser/permissions/permission_service_impl.cc
+++ b/content/browser/permissions/permission_service_impl.cc
@@ -139,8 +139,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(
@@ -149,7 +148,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.
@@ -160,15 +160,55 @@ void PermissionServiceImpl::RevokePermission(
ResetPermissionStatus(permission_type, origin_url);
- callback.Run(GetPermissionStatus(permission_type, origin_url));
+ callback.Run(GetPermissionStatusFromType(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 =
+ GetPermissionStatusFromName(permission, GURL(origin));
+ if (current_status != last_known_status) {
+ callback.Run(current_status);
+ return;
+ }
+
+ BrowserContext* browser_context = context_->GetBrowserContext();
+ DCHECK(browser_context);
+ if (!browser_context->GetPermissionManager()) {
+ callback.Run(current_status);
+ return;
+ }
+
+ int* subscription_id = new int();
+
+ GURL embedding_origin = context_->GetEmbeddingOrigin();
+ *subscription_id =
+ browser_context->GetPermissionManager()->SubscribePermissionStatusChange(
+ PermissionNameToPermissionType(permission),
+ 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::GetPermissionStatusFromType(
+ PermissionType type, const GURL& origin) {
BrowserContext* browser_context = context_->GetBrowserContext();
DCHECK(browser_context);
if (!browser_context->GetPermissionManager())
- return content::PERMISSION_STATUS_DENIED;
+ return PERMISSION_STATUS_DENIED;
// If the embedding_origin is empty we'll use |origin| instead.
GURL embedding_origin = context_->GetEmbeddingOrigin();
@@ -177,7 +217,7 @@ PermissionStatus PermissionServiceImpl::GetPermissionStatus(PermissionType type,
}
void PermissionServiceImpl::ResetPermissionStatus(PermissionType type,
- GURL origin) {
+ const GURL& origin) {
BrowserContext* browser_context = context_->GetBrowserContext();
DCHECK(browser_context);
if (!browser_context->GetPermissionManager())
@@ -189,4 +229,18 @@ void PermissionServiceImpl::ResetPermissionStatus(PermissionType type,
type, origin, embedding_origin.is_empty() ? origin : embedding_origin);
}
+void PermissionServiceImpl::OnPermissionStatusChanged(
+ const mojo::Callback<void(PermissionStatus)>& callback,
+ const int* subscription_id,
+ PermissionStatus status) {
+ callback.Run(status);
+
+ BrowserContext* browser_context = context_->GetBrowserContext();
+ DCHECK(browser_context);
+ if (!browser_context->GetPermissionManager())
+ return;
+ browser_context->GetPermissionManager()->UnsubscribePermissionStatusChange(
+ *subscription_id);
+}
+
} // namespace content
« no previous file with comments | « content/browser/permissions/permission_service_impl.h ('k') | content/common/permission_service.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698