| Index: webkit/browser/quota/quota_manager_proxy.cc
|
| diff --git a/webkit/browser/quota/quota_manager_proxy.cc b/webkit/browser/quota/quota_manager_proxy.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..20b42c3d3e34090a826de02aece308da83085f42
|
| --- /dev/null
|
| +++ b/webkit/browser/quota/quota_manager_proxy.cc
|
| @@ -0,0 +1,160 @@
|
| +// Copyright 2014 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 "webkit/browser/quota/quota_manager_proxy.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/bind_helpers.h"
|
| +#include "base/callback.h"
|
| +#include "base/sequenced_task_runner.h"
|
| +#include "base/single_thread_task_runner.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +#include "base/task_runner_util.h"
|
| +
|
| +namespace quota {
|
| +
|
| +namespace {
|
| +
|
| +void DidGetUsageAndQuota(
|
| + base::SequencedTaskRunner* original_task_runner,
|
| + const QuotaManagerProxy::GetUsageAndQuotaCallback& callback,
|
| + QuotaStatusCode status, int64 usage, int64 quota) {
|
| + if (!original_task_runner->RunsTasksOnCurrentThread()) {
|
| + original_task_runner->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&DidGetUsageAndQuota,
|
| + make_scoped_refptr(original_task_runner),
|
| + callback, status, usage, quota));
|
| + return;
|
| + }
|
| + callback.Run(status, usage, quota);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +void QuotaManagerProxy::RegisterClient(QuotaClient* client) {
|
| + if (!io_thread_->BelongsToCurrentThread() &&
|
| + io_thread_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&QuotaManagerProxy::RegisterClient, this, client))) {
|
| + return;
|
| + }
|
| +
|
| + if (manager_)
|
| + manager_->RegisterClient(client);
|
| + else
|
| + client->OnQuotaManagerDestroyed();
|
| +}
|
| +
|
| +void QuotaManagerProxy::NotifyStorageAccessed(
|
| + QuotaClient::ID client_id,
|
| + const GURL& origin,
|
| + StorageType type) {
|
| + if (!io_thread_->BelongsToCurrentThread()) {
|
| + io_thread_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&QuotaManagerProxy::NotifyStorageAccessed, this, client_id,
|
| + origin, type));
|
| + return;
|
| + }
|
| +
|
| + if (manager_)
|
| + manager_->NotifyStorageAccessed(client_id, origin, type);
|
| +}
|
| +
|
| +void QuotaManagerProxy::NotifyStorageModified(
|
| + QuotaClient::ID client_id,
|
| + const GURL& origin,
|
| + StorageType type,
|
| + int64 delta) {
|
| + if (!io_thread_->BelongsToCurrentThread()) {
|
| + io_thread_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&QuotaManagerProxy::NotifyStorageModified, this, client_id,
|
| + origin, type, delta));
|
| + return;
|
| + }
|
| +
|
| + if (manager_)
|
| + manager_->NotifyStorageModified(client_id, origin, type, delta);
|
| +}
|
| +
|
| +void QuotaManagerProxy::NotifyOriginInUse(
|
| + const GURL& origin) {
|
| + if (!io_thread_->BelongsToCurrentThread()) {
|
| + io_thread_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&QuotaManagerProxy::NotifyOriginInUse, this, origin));
|
| + return;
|
| + }
|
| +
|
| + if (manager_)
|
| + manager_->NotifyOriginInUse(origin);
|
| +}
|
| +
|
| +void QuotaManagerProxy::NotifyOriginNoLongerInUse(
|
| + const GURL& origin) {
|
| + if (!io_thread_->BelongsToCurrentThread()) {
|
| + io_thread_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&QuotaManagerProxy::NotifyOriginNoLongerInUse, this,
|
| + origin));
|
| + return;
|
| + }
|
| + if (manager_)
|
| + manager_->NotifyOriginNoLongerInUse(origin);
|
| +}
|
| +
|
| +void QuotaManagerProxy::SetUsageCacheEnabled(QuotaClient::ID client_id,
|
| + const GURL& origin,
|
| + StorageType type,
|
| + bool enabled) {
|
| + if (!io_thread_->BelongsToCurrentThread()) {
|
| + io_thread_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&QuotaManagerProxy::SetUsageCacheEnabled, this,
|
| + client_id, origin, type, enabled));
|
| + return;
|
| + }
|
| + if (manager_)
|
| + manager_->SetUsageCacheEnabled(client_id, origin, type, enabled);
|
| +}
|
| +
|
| +void QuotaManagerProxy::GetUsageAndQuota(
|
| + base::SequencedTaskRunner* original_task_runner,
|
| + const GURL& origin,
|
| + StorageType type,
|
| + const GetUsageAndQuotaCallback& callback) {
|
| + if (!io_thread_->BelongsToCurrentThread()) {
|
| + io_thread_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&QuotaManagerProxy::GetUsageAndQuota, this,
|
| + make_scoped_refptr(original_task_runner),
|
| + origin, type, callback));
|
| + return;
|
| + }
|
| + if (!manager_) {
|
| + DidGetUsageAndQuota(original_task_runner, callback, kQuotaErrorAbort, 0, 0);
|
| + return;
|
| + }
|
| + manager_->GetUsageAndQuota(
|
| + origin, type,
|
| + base::Bind(&DidGetUsageAndQuota,
|
| + make_scoped_refptr(original_task_runner), callback));
|
| +}
|
| +
|
| +QuotaManager* QuotaManagerProxy::quota_manager() const {
|
| + DCHECK(!io_thread_.get() || io_thread_->BelongsToCurrentThread());
|
| + return manager_;
|
| +}
|
| +
|
| +QuotaManagerProxy::QuotaManagerProxy(
|
| + QuotaManager* manager, base::SingleThreadTaskRunner* io_thread)
|
| + : manager_(manager), io_thread_(io_thread) {
|
| +}
|
| +
|
| +QuotaManagerProxy::~QuotaManagerProxy() {
|
| +}
|
| +
|
| +} // namespace quota
|
|
|