| Index: webkit/blob/blob_data.h
|
| ===================================================================
|
| --- webkit/blob/blob_data.h (revision 103169)
|
| +++ webkit/blob/blob_data.h (working copy)
|
| @@ -28,69 +28,61 @@
|
| TYPE_BLOB
|
| };
|
|
|
| - class Item {
|
| - public:
|
| + struct Item {
|
| Item();
|
| ~Item();
|
|
|
| - Type type() const { return type_; }
|
| - const std::string& data() const { return data_; }
|
| - const FilePath& file_path() const { return file_path_; }
|
| - const GURL& blob_url() const { return blob_url_; }
|
| - uint64 offset() const { return offset_; }
|
| - uint64 length() const { return length_; }
|
| - const base::Time& expected_modification_time() const {
|
| - return expected_modification_time_;
|
| - }
|
| -
|
| void SetToData(const std::string& data) {
|
| SetToData(data, 0, static_cast<uint32>(data.size()));
|
| }
|
|
|
| void SetToData(const std::string& data, uint32 offset, uint32 length) {
|
| // TODO(jianli): Need to implement ref-counting vector storage.
|
| - type_ = TYPE_DATA;
|
| - data_ = data;
|
| - offset_ = offset;
|
| - length_ = length;
|
| + type = TYPE_DATA;
|
| + this->data = data;
|
| + this->offset = offset;
|
| + this->length = length;
|
| }
|
|
|
| + void SetToData(const char* data, size_t length) {
|
| + type = TYPE_DATA;
|
| + this->data.assign(data, length);
|
| + this->offset = 0;
|
| + this->length = length;
|
| + }
|
| +
|
| void SetToFile(const FilePath& file_path, uint64 offset, uint64 length,
|
| const base::Time& expected_modification_time) {
|
| - type_ = TYPE_FILE;
|
| - file_path_ = file_path;
|
| - offset_ = offset;
|
| - length_ = length;
|
| - expected_modification_time_ = expected_modification_time;
|
| + type = TYPE_FILE;
|
| + this->file_path = file_path;
|
| + this->offset = offset;
|
| + this->length = length;
|
| + this->expected_modification_time = expected_modification_time;
|
| }
|
|
|
| void SetToBlob(const GURL& blob_url, uint64 offset, uint64 length) {
|
| - type_ = TYPE_BLOB;
|
| - blob_url_ = blob_url;
|
| - offset_ = offset;
|
| - length_ = length;
|
| + type = TYPE_BLOB;
|
| + this->blob_url = blob_url;
|
| + this->offset = offset;
|
| + this->length = length;
|
| }
|
|
|
| - private:
|
| - Type type_;
|
| -
|
| - // For Data type.
|
| - std::string data_;
|
| -
|
| - // For File type.
|
| - FilePath file_path_;
|
| -
|
| - // For Blob typ.
|
| - GURL blob_url_;
|
| -
|
| - uint64 offset_;
|
| - uint64 length_;
|
| - base::Time expected_modification_time_;
|
| + Type type;
|
| + std::string data; // For Data type.
|
| + GURL blob_url; // For Blob type.
|
| + FilePath file_path; // For File type.
|
| + base::Time expected_modification_time; // Also for File type.
|
| + uint64 offset;
|
| + uint64 length;
|
| };
|
|
|
| BlobData();
|
| explicit BlobData(const WebKit::WebBlobData& data);
|
|
|
| + void AppendItem(const Item& item) {
|
| + items_.push_back(item);
|
| + }
|
| +
|
| void AppendData(const std::string& data) {
|
| // TODO(jianli): Consider writing the big data to the disk.
|
| AppendData(data, 0, static_cast<uint32>(data.size()));
|
| @@ -133,9 +125,14 @@
|
| content_disposition_ = content_disposition;
|
| }
|
|
|
| - // Should only be called by the IPC ParamTraits for this class.
|
| - void swap_items(std::vector<Item>* items) {
|
| - items_.swap(*items);
|
| + int64 GetMemoryUsage() const {
|
| + int64 memory = 0;
|
| + for (std::vector<Item>::const_iterator iter = items_.begin();
|
| + iter != items_.end(); ++iter) {
|
| + if (iter->type == TYPE_DATA)
|
| + memory += iter->data.size();
|
| + }
|
| + return memory;
|
| }
|
|
|
| private:
|
| @@ -153,23 +150,23 @@
|
|
|
| #if defined(UNIT_TEST)
|
| inline bool operator==(const BlobData::Item& a, const BlobData::Item& b) {
|
| - if (a.type() != b.type())
|
| + if (a.type != b.type)
|
| return false;
|
| - if (a.type() == BlobData::TYPE_DATA) {
|
| - return a.data() == b.data() &&
|
| - a.offset() == b.offset() &&
|
| - a.length() == b.length();
|
| + if (a.type == BlobData::TYPE_DATA) {
|
| + return a.data == b.data &&
|
| + a.offset == b.offset &&
|
| + a.length == b.length;
|
| }
|
| - if (a.type() == BlobData::TYPE_FILE) {
|
| - return a.file_path() == b.file_path() &&
|
| - a.offset() == b.offset() &&
|
| - a.length() == b.length() &&
|
| - a.expected_modification_time() == b.expected_modification_time();
|
| + if (a.type == BlobData::TYPE_FILE) {
|
| + return a.file_path == b.file_path &&
|
| + a.offset == b.offset &&
|
| + a.length == b.length &&
|
| + a.expected_modification_time == b.expected_modification_time;
|
| }
|
| - if (a.type() == BlobData::TYPE_BLOB) {
|
| - return a.blob_url() == b.blob_url() &&
|
| - a.offset() == b.offset() &&
|
| - a.length() == b.length();
|
| + if (a.type == BlobData::TYPE_BLOB) {
|
| + return a.blob_url == b.blob_url &&
|
| + a.offset == b.offset &&
|
| + a.length == b.length;
|
| }
|
| return false;
|
| }
|
|
|