Index: webkit/blob/blob_data_handle.cc |
=================================================================== |
--- webkit/blob/blob_data_handle.cc (revision 0) |
+++ webkit/blob/blob_data_handle.cc (revision 0) |
@@ -0,0 +1,56 @@ |
+// 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_data_handle.h" |
+ |
+#include "base/bind.h" |
+#include "base/location.h" |
+#include "base/logging.h" |
+#include "base/sequenced_task_runner.h" |
+#include "webkit/blob/blob_data.h" |
+#include "webkit/blob/blob_storage_context.h" |
+ |
+namespace webkit_blob { |
+ |
+BlobDataHandle::BlobDataHandle(BlobData* blob_data, BlobStorageContext* context, |
+ base::SequencedTaskRunner* task_runner) |
+ : blob_data_(blob_data), |
+ context_(context->AsWeakPtr()), |
+ io_task_runner_(task_runner) { |
+ // Ensures the uuid remains registered and the underlying data is not deleted. |
+ DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); |
+ context_->IncrementBlobRefCount(blob_data->uuid()); |
+ blob_data_->AddRef(); |
+} |
+ |
+BlobDataHandle::~BlobDataHandle() { |
+ if (io_task_runner_->RunsTasksOnCurrentThread()) { |
+ // Note: Do not test context_ or alter the blob_data_ refcount |
+ // on the wrong thread. |
+ if (context_.get()) |
+ context_->DecrementBlobRefCount(blob_data_->uuid()); |
+ blob_data_->Release(); |
+ return; |
+ } |
+ |
+ io_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&DeleteHelper, context_, base::Unretained(blob_data_))); |
+} |
+ |
+BlobData* BlobDataHandle::data() const { |
+ DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); |
+ return blob_data_; |
+} |
+ |
+// static |
+void BlobDataHandle::DeleteHelper( |
+ base::WeakPtr<BlobStorageContext> context, |
+ BlobData* blob_data) { |
+ if (context.get()) |
+ context->DecrementBlobRefCount(blob_data->uuid()); |
+ blob_data->Release(); |
+} |
+ |
+} // namespace webkit_blob |
Property changes on: webkit\blob\blob_data_handle.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |