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

Unified Diff: content/child/permissions/permission_dispatcher.cc

Issue 1238673002: content: permissions: add plumbing to revoke permissions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update entire histograms file Created 5 years, 5 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/child/permissions/permission_dispatcher.cc
diff --git a/content/child/permissions/permission_dispatcher.cc b/content/child/permissions/permission_dispatcher.cc
index eb5ac4538f0f9caf86adea7769ed9ab016e18e7b..4a0957ecb7b8646e95b0a977e96abe921e0c83cd 100644
--- a/content/child/permissions/permission_dispatcher.cc
+++ b/content/child/permissions/permission_dispatcher.cc
@@ -75,13 +75,13 @@ bool PermissionDispatcher::IsObservable(blink::WebPermissionType type) {
}
PermissionDispatcher::CallbackInformation::CallbackInformation(
- blink::WebPermissionQueryCallback* callback,
+ blink::WebPermissionCallback* callback,
int worker_thread_id)
: callback_(callback),
worker_thread_id_(worker_thread_id) {
}
-blink::WebPermissionQueryCallback*
+blink::WebPermissionCallback*
PermissionDispatcher::CallbackInformation::callback() const {
return callback_.get();
}
@@ -90,7 +90,7 @@ int PermissionDispatcher::CallbackInformation::worker_thread_id() const {
return worker_thread_id_;
}
-blink::WebPermissionQueryCallback*
+blink::WebPermissionCallback*
PermissionDispatcher::CallbackInformation::ReleaseCallback() {
return callback_.release();
}
@@ -108,11 +108,19 @@ PermissionDispatcher::~PermissionDispatcher() {
void PermissionDispatcher::queryPermission(
blink::WebPermissionType type,
const blink::WebURL& origin,
- blink::WebPermissionQueryCallback* callback) {
+ blink::WebPermissionCallback* callback) {
QueryPermissionInternal(
type, origin.string().utf8(), callback, kNoWorkerThread);
}
+void PermissionDispatcher::revokePermission(
+ blink::WebPermissionType type,
+ const blink::WebURL& origin,
+ blink::WebPermissionCallback* callback) {
+ RevokePermissionInternal(
+ type, origin.string().utf8(), callback, kNoWorkerThread);
+}
+
void PermissionDispatcher::startListening(
blink::WebPermissionType type,
const blink::WebURL& origin,
@@ -141,11 +149,19 @@ void PermissionDispatcher::stopListening(WebPermissionObserver* observer) {
void PermissionDispatcher::QueryPermissionForWorker(
blink::WebPermissionType type,
const std::string& origin,
- blink::WebPermissionQueryCallback* callback,
+ blink::WebPermissionCallback* callback,
int worker_thread_id) {
QueryPermissionInternal(type, origin, callback, worker_thread_id);
}
+void PermissionDispatcher::RevokePermissionForWorker(
+ blink::WebPermissionType type,
+ const std::string& origin,
+ blink::WebPermissionCallback* callback,
+ int worker_thread_id) {
+ RevokePermissionInternal(type, origin, callback, worker_thread_id);
+}
+
void PermissionDispatcher::StartListeningForWorker(
blink::WebPermissionType type,
const std::string& origin,
@@ -183,7 +199,7 @@ void PermissionDispatcher::GetNextPermissionChangeForWorker(
// static
void PermissionDispatcher::RunCallbackOnWorkerThread(
- blink::WebPermissionQueryCallback* callback,
+ blink::WebPermissionCallback* callback,
scoped_ptr<blink::WebPermissionStatus> status) {
callback->onSuccess(status.release());
delete callback;
@@ -200,7 +216,7 @@ PermissionServicePtr& PermissionDispatcher::GetPermissionServicePtr() {
void PermissionDispatcher::QueryPermissionInternal(
blink::WebPermissionType type,
const std::string& origin,
- blink::WebPermissionQueryCallback* callback,
+ blink::WebPermissionCallback* callback,
int worker_thread_id) {
// We need to save the |callback| in an IDMap so if |this| gets deleted, the
// callback will not leak. In the case of |this| gets deleted, the
@@ -211,13 +227,32 @@ void PermissionDispatcher::QueryPermissionInternal(
GetPermissionServicePtr()->HasPermission(
GetPermissionName(type),
origin,
- base::Bind(&PermissionDispatcher::OnQueryPermission,
+ base::Bind(&PermissionDispatcher::OnPermissionResponse,
+ base::Unretained(this),
+ request_id));
+}
+
+void PermissionDispatcher::RevokePermissionInternal(
+ blink::WebPermissionType type,
+ const std::string& origin,
+ blink::WebPermissionCallback* callback,
+ int worker_thread_id) {
+ // We need to save the |callback| in an IDMap so if |this| gets deleted, the
+ // callback will not leak. In the case of |this| gets deleted, the
+ // |permission_service_| pipe will be destroyed too so OnQueryPermission will
+ // not be called.
+ int request_id = pending_callbacks_.Add(
+ new CallbackInformation(callback, worker_thread_id));
+ GetPermissionServicePtr()->RevokePermission(
+ GetPermissionName(type),
+ origin,
+ base::Bind(&PermissionDispatcher::OnPermissionResponse,
base::Unretained(this),
request_id));
}
-void PermissionDispatcher::OnQueryPermission(int request_id,
- PermissionStatus result) {
+void PermissionDispatcher::OnPermissionResponse(int request_id,
+ PermissionStatus result) {
CallbackInformation* callback_information =
pending_callbacks_.Lookup(request_id);
DCHECK(callback_information && callback_information->callback());
@@ -225,7 +260,7 @@ void PermissionDispatcher::OnQueryPermission(int request_id,
new blink::WebPermissionStatus(GetWebPermissionStatus(result)));
if (callback_information->worker_thread_id() != kNoWorkerThread) {
- blink::WebPermissionQueryCallback* callback =
+ blink::WebPermissionCallback* callback =
callback_information->ReleaseCallback();
int worker_thread_id = callback_information->worker_thread_id();
pending_callbacks_.Remove(request_id);
« no previous file with comments | « content/child/permissions/permission_dispatcher.h ('k') | content/child/permissions/permission_dispatcher_thread_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698