| 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;
|
| }
|
|
|