| Index: content/browser/indexed_db/indexed_db_backing_store.cc
|
| diff --git a/content/browser/indexed_db/indexed_db_backing_store.cc b/content/browser/indexed_db/indexed_db_backing_store.cc
|
| index 4ae9ed4f236722b4c76dbcb62ee677b4223794c9..fdc072826a6490d40e81ad00ac08a08cd5a2a454 100644
|
| --- a/content/browser/indexed_db/indexed_db_backing_store.cc
|
| +++ b/content/browser/indexed_db/indexed_db_backing_store.cc
|
| @@ -2339,8 +2339,12 @@ class LocalWriteClosure : public FileWriterDelegate::DelegateWriteCallback,
|
| }
|
|
|
| bool success = write_status == FileWriterDelegate::SUCCESS_COMPLETED;
|
| -
|
| - if (success && !last_modified_.is_null()) {
|
| + if (success && !bytes_written_) {
|
| + // LocalFileStreamWriter only creates a file if data is actually written.
|
| + // If none was then create one now.
|
| + task_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&LocalWriteClosure::CreateEmptyFile, this));
|
| + } else if (success && !last_modified_.is_null()) {
|
| task_runner_->PostTask(
|
| FROM_HERE, base::Bind(&LocalWriteClosure::UpdateTimeStamp, this));
|
| } else {
|
| @@ -2403,6 +2407,19 @@ class LocalWriteClosure : public FileWriterDelegate::DelegateWriteCallback,
|
| chained_blob_writer_->ReportWriteCompletion(true, bytes_written_);
|
| }
|
|
|
| + // Create an empty file.
|
| + void CreateEmptyFile() {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| + base::File file(file_path_,
|
| + base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
|
| + bool success = file.created();
|
| + file.Close();
|
| + if (success && !last_modified_.is_null())
|
| + UpdateTimeStamp();
|
| + else
|
| + chained_blob_writer_->ReportWriteCompletion(success, bytes_written_);
|
| + }
|
| +
|
| scoped_refptr<IndexedDBBackingStore::Transaction::ChainedBlobWriter>
|
| chained_blob_writer_;
|
| scoped_refptr<base::SequencedTaskRunner> task_runner_;
|
|
|