| Index: webkit/blob/blob_storage_host.cc
|
| ===================================================================
|
| --- webkit/blob/blob_storage_host.cc (revision 0)
|
| +++ webkit/blob/blob_storage_host.cc (revision 0)
|
| @@ -0,0 +1,111 @@
|
| +// Copyright (c) 2013 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/blob/blob_storage_host.h"
|
| +
|
| +#include "base/sequenced_task_runner.h"
|
| +#include "googleurl/src/gurl.h"
|
| +#include "webkit/blob/blob_data_handle.h"
|
| +#include "webkit/blob/blob_storage_context.h"
|
| +
|
| +namespace webkit_blob {
|
| +
|
| +BlobStorageHost::BlobStorageHost(BlobStorageContext* context)
|
| + : context_(context->AsWeakPtr()) {
|
| +}
|
| +
|
| +BlobStorageHost::~BlobStorageHost() {
|
| + if (!context_)
|
| + return;
|
| + for (std::set<GURL>::iterator iter = public_blob_urls_.begin();
|
| + iter != public_blob_urls_.end(); ++iter) {
|
| + context_->RevokePublicBlobURL(*iter);
|
| + }
|
| + for (BlobReferenceMap::iterator iter = blobs_inuse_map_.begin();
|
| + iter != blobs_inuse_map_.end(); ++iter) {
|
| + for (int i = 0; i < iter->second; ++i)
|
| + context_->DecrementBlobRefCount(iter->first);
|
| + }
|
| +}
|
| +
|
| +bool BlobStorageHost::StartBuildingBlob(const std::string& uuid) {
|
| + if (!context_ || uuid.empty() || context_->IsInUse(uuid))
|
| + return false;
|
| + context_->StartBuildingBlob(uuid);
|
| + blobs_inuse_map_[uuid] = 1;
|
| + return true;
|
| +}
|
| +
|
| +bool BlobStorageHost::AppendBlobDataItem(
|
| + const std::string& uuid, const BlobData::Item& data_item) {
|
| + if (!context_ || !IsBeingBuiltInHost(uuid))
|
| + return false;
|
| + context_->AppendBlobDataItem(uuid, data_item);
|
| + return true;
|
| +}
|
| +
|
| +bool BlobStorageHost::CancelBuildingBlob(const std::string& uuid) {
|
| + if (!context_ || !IsBeingBuiltInHost(uuid))
|
| + return false;
|
| + blobs_inuse_map_.erase(uuid);
|
| + context_->CancelBuildingBlob(uuid);
|
| + return true;
|
| +}
|
| +
|
| +bool BlobStorageHost::FinishBuildingBlob(
|
| + const std::string& uuid, const std::string& content_type) {
|
| + if (!context_ || !IsBeingBuiltInHost(uuid))
|
| + return false;
|
| + context_->FinishBuildingBlob(uuid, content_type);
|
| + return true;
|
| +}
|
| +
|
| +bool BlobStorageHost::IncrementBlobRefCount(const std::string& uuid) {
|
| + if (!context_ || !context_->IsInUse(uuid) || context_->IsBeingBuilt(uuid))
|
| + return false;
|
| + context_->IncrementBlobRefCount(uuid);
|
| + blobs_inuse_map_[uuid] += 1;
|
| + return true;
|
| +}
|
| +
|
| +bool BlobStorageHost::DecrementBlobRefCount(const std::string& uuid) {
|
| + if (!context_ || !IsInUseInHost(uuid))
|
| + return false;
|
| + context_->DecrementBlobRefCount(uuid);
|
| + blobs_inuse_map_[uuid] -= 1;
|
| + if (blobs_inuse_map_[uuid] == 0)
|
| + blobs_inuse_map_.erase(uuid);
|
| + return true;
|
| +}
|
| +
|
| +bool BlobStorageHost::RegisterPublicBlobURL(
|
| + const GURL& blob_url, const std::string& uuid) {
|
| + if (!context_ || !IsInUseInHost(uuid) || context_->IsUrlRegistered(blob_url))
|
| + return false;
|
| + context_->RegisterPublicBlobURL(blob_url, uuid);
|
| + public_blob_urls_.insert(blob_url);
|
| + return true;
|
| +}
|
| +
|
| +bool BlobStorageHost::RevokePublicBlobURL(const GURL& blob_url) {
|
| + if (!context_ || !IsUrlRegisteredInHost(blob_url))
|
| + return false;
|
| + context_->RevokePublicBlobURL(blob_url);
|
| + public_blob_urls_.erase(blob_url);
|
| + return true;
|
| +}
|
| +
|
| +bool BlobStorageHost::IsInUseInHost(const std::string& uuid) {
|
| + return blobs_inuse_map_.find(uuid) != blobs_inuse_map_.end();
|
| +}
|
| +
|
| +bool BlobStorageHost::IsBeingBuiltInHost(const std::string& uuid) {
|
| + return IsInUseInHost(uuid) && context_->IsBeingBuilt(uuid);
|
| +}
|
| +
|
| +bool BlobStorageHost::IsUrlRegisteredInHost(const GURL& blob_url) {
|
| + return public_blob_urls_.find(blob_url) != public_blob_urls_.end();
|
| +}
|
| +
|
| +} // namespace webkit_blob
|
|
|
| Property changes on: webkit\blob\blob_storage_host.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|