| Index: content/child/permissions/permissions_manager_thread_proxy.cc
|
| diff --git a/content/child/permissions/permissions_manager_thread_proxy.cc b/content/child/permissions/permissions_manager_thread_proxy.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1c9cd47075ac24d4d67c23b513a772272b247ed6
|
| --- /dev/null
|
| +++ b/content/child/permissions/permissions_manager_thread_proxy.cc
|
| @@ -0,0 +1,74 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/child/permissions/permissions_manager_thread_proxy.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/bind_helpers.h"
|
| +#include "base/lazy_instance.h"
|
| +#include "base/location.h"
|
| +#include "base/single_thread_task_runner.h"
|
| +#include "base/threading/thread_local.h"
|
| +#include "content/child/permissions/permissions_manager.h"
|
| +#include "content/child/worker_task_runner.h"
|
| +#include "third_party/WebKit/public/platform/WebURL.h"
|
| +
|
| +using base::LazyInstance;
|
| +using base::ThreadLocalPointer;
|
| +
|
| +namespace content {
|
| +
|
| +namespace {
|
| +
|
| +LazyInstance<ThreadLocalPointer<PermissionsManagerThreadProxy>>::Leaky
|
| + g_permission_manager_tls = LAZY_INSTANCE_INITIALIZER;
|
| +
|
| +} // anonymous namespace
|
| +
|
| +PermissionsManagerThreadProxy*
|
| +PermissionsManagerThreadProxy::GetThreadInstance(
|
| + base::SingleThreadTaskRunner* main_thread_task_runner,
|
| + PermissionsManager* permissions_manager) {
|
| + if (g_permission_manager_tls.Pointer()->Get())
|
| + return g_permission_manager_tls.Pointer()->Get();
|
| +
|
| + PermissionsManagerThreadProxy* instance =
|
| + new PermissionsManagerThreadProxy(main_thread_task_runner,
|
| + permissions_manager);
|
| + DCHECK(WorkerTaskRunner::Instance()->CurrentWorkerId());
|
| + WorkerTaskRunner::Instance()->AddStopObserver(instance);
|
| + return instance;
|
| +}
|
| +
|
| +PermissionsManagerThreadProxy::PermissionsManagerThreadProxy(
|
| + base::SingleThreadTaskRunner* main_thread_task_runner,
|
| + PermissionsManager* permissions_manager)
|
| + : main_thread_task_runner_(main_thread_task_runner),
|
| + permissions_manager_(permissions_manager) {
|
| + g_permission_manager_tls.Pointer()->Set(this);
|
| +}
|
| +
|
| +PermissionsManagerThreadProxy::~PermissionsManagerThreadProxy() {
|
| + g_permission_manager_tls.Pointer()->Set(nullptr);
|
| +}
|
| +
|
| +void PermissionsManagerThreadProxy::queryPermission(
|
| + blink::WebPermissionType type,
|
| + const blink::WebURL& origin,
|
| + blink::WebPermissionQueryCallback* callback) {
|
| + main_thread_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&PermissionsManager::QueryPermissionForWorker,
|
| + base::Unretained(permissions_manager_),
|
| + type,
|
| + origin.string().utf8(),
|
| + base::Unretained(callback),
|
| + WorkerTaskRunner::Instance()->CurrentWorkerId()));
|
| +}
|
| +
|
| +void PermissionsManagerThreadProxy::OnWorkerRunLoopStopped() {
|
| + delete this;
|
| +}
|
| +
|
| +} // namespace content
|
|
|