diff options
Diffstat (limited to 'chromium/webkit/common/blob/blob_data.h')
-rw-r--r-- | chromium/webkit/common/blob/blob_data.h | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/chromium/webkit/common/blob/blob_data.h b/chromium/webkit/common/blob/blob_data.h new file mode 100644 index 00000000000..01d477f61ed --- /dev/null +++ b/chromium/webkit/common/blob/blob_data.h @@ -0,0 +1,103 @@ +// Copyright (c) 2012 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. + +#ifndef WEBKIT_COMMON_BLOB_BLOB_DATA_H_ +#define WEBKIT_COMMON_BLOB_BLOB_DATA_H_ + +#include <string> +#include <vector> + +#include "base/basictypes.h" +#include "base/files/file_path.h" +#include "base/memory/ref_counted.h" +#include "base/time/time.h" +#include "url/gurl.h" +#include "webkit/common/blob/shareable_file_reference.h" +#include "webkit/common/data_element.h" +#include "webkit/common/webkit_storage_common_export.h" + +namespace webkit_blob { + +class WEBKIT_STORAGE_COMMON_EXPORT BlobData + : public base::RefCounted<BlobData> { + public: + typedef webkit_common::DataElement Item; + + // TODO(michaeln): remove the empty ctor when we fully transition to uuids. + BlobData(); + explicit BlobData(const std::string& uuid); + + void AppendData(const std::string& data) { + AppendData(data.c_str(), data.size()); + } + + void AppendData(const char* data, size_t length); + + void AppendFile(const base::FilePath& file_path, uint64 offset, uint64 length, + const base::Time& expected_modification_time); + + // Note: Identifying blobs by url is being deprecated, but while transitioning + // there's a little of both going on in the project. + void AppendBlob(const GURL& blob_url, uint64 offset, uint64 length); + void AppendBlob(const std::string& uuid, uint64 offset, uint64 length); + + void AppendFileSystemFile(const GURL& url, uint64 offset, uint64 length, + const base::Time& expected_modification_time); + + void AttachShareableFileReference(ShareableFileReference* reference) { + shareable_files_.push_back(reference); + } + + const std::string& uuid() const { return uuid_; } + const std::vector<Item>& items() const { return items_; } + const std::string& content_type() const { return content_type_; } + void set_content_type(const std::string& content_type) { + content_type_ = content_type; + } + + const std::string& content_disposition() const { + return content_disposition_; + } + void set_content_disposition(const std::string& content_disposition) { + content_disposition_ = content_disposition; + } + + int64 GetMemoryUsage() const; + + private: + friend class base::RefCounted<BlobData>; + virtual ~BlobData(); + + std::string uuid_; + std::string content_type_; + std::string content_disposition_; + std::vector<Item> items_; + std::vector<scoped_refptr<ShareableFileReference> > shareable_files_; + + DISALLOW_COPY_AND_ASSIGN(BlobData); +}; + +#if defined(UNIT_TEST) +inline bool operator==(const BlobData& a, const BlobData& b) { + if (a.content_type() != b.content_type()) + return false; + if (a.content_disposition() != b.content_disposition()) + return false; + if (a.items().size() != b.items().size()) + return false; + for (size_t i = 0; i < a.items().size(); ++i) { + if (a.items()[i] != b.items()[i]) + return false; + } + return true; +} + +inline bool operator!=(const BlobData& a, const BlobData& b) { + return !(a == b); +} +#endif // defined(UNIT_TEST) + +} // namespace webkit_blob + +#endif // WEBKIT_COMMON_BLOB_BLOB_DATA_H_ |