Chromium Code Reviews| 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..8850a86b78f0be8c125c1d2ecd524ffb072d738f 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::OnQueryOrRevokePermission, |
| + 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) { |
|
mlamouri (slow - plz ping)
2015/07/20 17:02:10
nit: indentation
Lalit Maganti
2015/07/21 09:13:35
Done.
|
| 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); |