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

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

Issue 1057453004: Permissions: glue between Mojo and Blink for permission observing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review commetns 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/child/permissions/permission_dispatcher_thread_proxy.cc
diff --git a/content/child/permissions/permission_dispatcher_thread_proxy.cc b/content/child/permissions/permission_dispatcher_thread_proxy.cc
index 1d8d96b204408e69ebb42f658b85bb038e895918..0ecdfa48a8d67654ae985a75db97a1c79dfee993 100644
--- a/content/child/permissions/permission_dispatcher_thread_proxy.cc
+++ b/content/child/permissions/permission_dispatcher_thread_proxy.cc
@@ -13,6 +13,7 @@
#include "content/child/permissions/permission_dispatcher.h"
#include "content/child/worker_task_runner.h"
#include "third_party/WebKit/public/platform/WebURL.h"
+#include "third_party/WebKit/public/platform/modules/permissions/WebPermissionObserver.h"
using base::LazyInstance;
using base::ThreadLocalPointer;
@@ -67,6 +68,57 @@ void PermissionDispatcherThreadProxy::queryPermission(
WorkerTaskRunner::Instance()->CurrentWorkerId()));
}
+void PermissionDispatcherThreadProxy::startListening(
+ blink::WebPermissionType type,
+ const blink::WebURL& origin,
+ blink::WebPermissionObserver* observer) {
+ if (!PermissionDispatcher::IsObservable(type))
+ return;
+
+ RegisterObserver(observer);
+
+ main_thread_task_runner_->PostTask(FROM_HERE,
+ base::Bind(&PermissionDispatcher::StartListeningForWorker,
+ base::Unretained(permission_dispatcher_),
+ type,
+ origin.string().utf8(),
+ WorkerTaskRunner::Instance()->CurrentWorkerId(),
+ base::Bind(&PermissionDispatcherThreadProxy::OnPermissionChanged,
+ base::Unretained(this),
+ type,
+ origin.string().utf8(),
+ base::Unretained(observer))));
+}
+
+void PermissionDispatcherThreadProxy::stopListening(
+ blink::WebPermissionObserver* observer) {
+ UnregisterObserver(observer);
+}
+
+void PermissionDispatcherThreadProxy::OnPermissionChanged(
+ blink::WebPermissionType type,
+ const std::string& origin,
+ blink::WebPermissionObserver* observer,
+ blink::WebPermissionStatus status) {
+ if (!IsObserverRegistered(observer))
+ return;
+
+ observer->permissionChanged(type, status);
+
+ main_thread_task_runner_->PostTask(FROM_HERE,
+ base::Bind(&PermissionDispatcher::GetNextPermissionChangeForWorker,
+ base::Unretained(permission_dispatcher_),
+ type,
+ origin,
+ status,
+ WorkerTaskRunner::Instance()->CurrentWorkerId(),
+ base::Bind(&PermissionDispatcherThreadProxy::OnPermissionChanged,
+ base::Unretained(this),
+ type,
+ origin,
+ base::Unretained(observer))));
+}
+
void PermissionDispatcherThreadProxy::OnWorkerRunLoopStopped() {
delete this;
}

Powered by Google App Engine
This is Rietveld 408576698