| Index: webkit/blob/blob_storage_controller.cc
|
| ===================================================================
|
| --- webkit/blob/blob_storage_controller.cc (revision 61866)
|
| +++ webkit/blob/blob_storage_controller.cc (working copy)
|
| @@ -17,42 +17,6 @@
|
| BlobStorageController::~BlobStorageController() {
|
| }
|
|
|
| -void BlobStorageController::AppendStorageItems(
|
| - BlobData* target_blob_data, BlobData* src_blob_data,
|
| - uint64 offset, uint64 length) {
|
| - DCHECK(target_blob_data && src_blob_data &&
|
| - length != static_cast<uint64>(-1));
|
| -
|
| - std::vector<BlobData::Item>::const_iterator iter =
|
| - src_blob_data->items().begin();
|
| - if (offset) {
|
| - for (; iter != src_blob_data->items().end(); ++iter) {
|
| - if (offset >= iter->length())
|
| - offset -= iter->length();
|
| - else
|
| - break;
|
| - }
|
| - }
|
| -
|
| - for (; iter != src_blob_data->items().end() && length > 0; ++iter) {
|
| - uint64 current_length = iter->length() - offset;
|
| - uint64 new_length = current_length > length ? length : current_length;
|
| - if (iter->type() == BlobData::TYPE_DATA) {
|
| - target_blob_data->AppendData(iter->data(),
|
| - static_cast<uint32>(iter->offset() + offset),
|
| - static_cast<uint32>(new_length));
|
| - } else {
|
| - DCHECK(iter->type() == BlobData::TYPE_FILE);
|
| - target_blob_data->AppendFile(iter->file_path(),
|
| - iter->offset() + offset,
|
| - new_length,
|
| - iter->expected_modification_time());
|
| - }
|
| - length -= new_length;
|
| - offset = 0;
|
| - }
|
| -}
|
| -
|
| void BlobStorageController::RegisterBlobUrl(
|
| const GURL& url, const BlobData* blob_data) {
|
| scoped_refptr<BlobData> target_blob_data = new BlobData();
|
| @@ -78,10 +42,11 @@
|
| break;
|
| }
|
| case BlobData::TYPE_FILE:
|
| - target_blob_data->AppendFile(iter->file_path(),
|
| - iter->offset(),
|
| - iter->length(),
|
| - iter->expected_modification_time());
|
| + AppendFileItem(target_blob_data,
|
| + iter->file_path(),
|
| + iter->offset(),
|
| + iter->length(),
|
| + iter->expected_modification_time());
|
| break;
|
| case BlobData::TYPE_BLOB: {
|
| BlobData* src_blob_data = GetBlobDataFromUrl(iter->blob_url());
|
| @@ -179,4 +144,55 @@
|
| }
|
| }
|
|
|
| +void BlobStorageController::AppendStorageItems(
|
| + BlobData* target_blob_data, BlobData* src_blob_data,
|
| + uint64 offset, uint64 length) {
|
| + DCHECK(target_blob_data && src_blob_data &&
|
| + length != static_cast<uint64>(-1));
|
| +
|
| + std::vector<BlobData::Item>::const_iterator iter =
|
| + src_blob_data->items().begin();
|
| + if (offset) {
|
| + for (; iter != src_blob_data->items().end(); ++iter) {
|
| + if (offset >= iter->length())
|
| + offset -= iter->length();
|
| + else
|
| + break;
|
| + }
|
| + }
|
| +
|
| + for (; iter != src_blob_data->items().end() && length > 0; ++iter) {
|
| + uint64 current_length = iter->length() - offset;
|
| + uint64 new_length = current_length > length ? length : current_length;
|
| + if (iter->type() == BlobData::TYPE_DATA) {
|
| + target_blob_data->AppendData(iter->data(),
|
| + static_cast<uint32>(iter->offset() + offset),
|
| + static_cast<uint32>(new_length));
|
| + } else {
|
| + DCHECK(iter->type() == BlobData::TYPE_FILE);
|
| + AppendFileItem(target_blob_data,
|
| + iter->file_path(),
|
| + iter->offset() + offset,
|
| + new_length,
|
| + iter->expected_modification_time());
|
| + }
|
| + length -= new_length;
|
| + offset = 0;
|
| + }
|
| +}
|
| +
|
| +void BlobStorageController::AppendFileItem(
|
| + BlobData* target_blob_data,
|
| + const FilePath& file_path, uint64 offset, uint64 length,
|
| + const base::Time& expected_modification_time) {
|
| + target_blob_data->AppendFile(file_path, offset, length,
|
| + expected_modification_time);
|
| +
|
| + // It may be a temporary file that should be deleted when no longer needed.
|
| + scoped_refptr<DeletableFileReference> deletable_file =
|
| + DeletableFileReference::Get(file_path);
|
| + if (deletable_file)
|
| + target_blob_data->AttachDeletableFileReference(deletable_file);
|
| +}
|
| +
|
| } // namespace webkit_blob
|
|
|