Index: content/child/permissions/permission_dispatcher.cc |
diff --git a/content/child/permissions/permission_dispatcher.cc b/content/child/permissions/permission_dispatcher.cc |
index 4a0957ecb7b8646e95b0a977e96abe921e0c83cd..4fa87ebb30c53c11381c95c935286ddd670f5016 100644 |
--- a/content/child/permissions/permission_dispatcher.cc |
+++ b/content/child/permissions/permission_dispatcher.cc |
@@ -9,6 +9,7 @@ |
#include "content/public/common/service_registry.h" |
#include "third_party/WebKit/public/platform/WebURL.h" |
#include "third_party/WebKit/public/platform/modules/permissions/WebPermissionObserver.h" |
+#include "third_party/WebKit/public/web/WebUserGestureIndicator.h" |
using blink::WebPermissionObserver; |
@@ -113,6 +114,14 @@ void PermissionDispatcher::queryPermission( |
type, origin.string().utf8(), callback, kNoWorkerThread); |
} |
+void PermissionDispatcher::requestPermission( |
+ blink::WebPermissionType type, |
+ const blink::WebURL& origin, |
+ blink::WebPermissionCallback* callback) { |
+ RequestPermissionInternal( |
+ type, origin.string().utf8(), callback, kNoWorkerThread); |
+} |
+ |
void PermissionDispatcher::revokePermission( |
blink::WebPermissionType type, |
const blink::WebURL& origin, |
@@ -154,6 +163,14 @@ void PermissionDispatcher::QueryPermissionForWorker( |
QueryPermissionInternal(type, origin, callback, worker_thread_id); |
} |
+void PermissionDispatcher::RequestPermissionForWorker( |
+ blink::WebPermissionType type, |
+ const std::string& origin, |
+ blink::WebPermissionCallback* callback, |
+ int worker_thread_id) { |
+ RequestPermissionInternal(type, origin, callback, worker_thread_id); |
+} |
+ |
void PermissionDispatcher::RevokePermissionForWorker( |
blink::WebPermissionType type, |
const std::string& origin, |
@@ -232,6 +249,26 @@ void PermissionDispatcher::QueryPermissionInternal( |
request_id)); |
} |
+void PermissionDispatcher::RequestPermissionInternal( |
+ 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()->RequestPermission( |
+ GetPermissionName(type), |
+ origin, |
+ blink::WebUserGestureIndicator::isProcessingUserGesture(), |
+ base::Bind(&PermissionDispatcher::OnPermissionResponse, |
+ base::Unretained(this), |
+ request_id)); |
+} |
+ |
void PermissionDispatcher::RevokePermissionInternal( |
blink::WebPermissionType type, |
const std::string& origin, |