| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/file_system_provider/fileapi/file_stream_reade
r.h" | 5 #include "chrome/browser/chromeos/file_system_provider/fileapi/file_stream_reade
r.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "base/files/file.h" | 8 #include "base/files/file.h" |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "chrome/browser/chromeos/file_system_provider/fileapi/provider_async_fi
le_util.h" | 10 #include "chrome/browser/chromeos/file_system_provider/fileapi/provider_async_fi
le_util.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 // |callback| is executed. Must be called on UI thread. | 107 // |callback| is executed. Must be called on UI thread. |
| 108 void GetMetadataOnUIThread( | 108 void GetMetadataOnUIThread( |
| 109 const ProvidedFileSystemInterface::GetMetadataCallback& callback) { | 109 const ProvidedFileSystemInterface::GetMetadataCallback& callback) { |
| 110 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 110 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 111 | 111 |
| 112 // If the file system got unmounted, then abort the get length operation. | 112 // If the file system got unmounted, then abort the get length operation. |
| 113 if (!file_system_.get()) { | 113 if (!file_system_.get()) { |
| 114 BrowserThread::PostTask( | 114 BrowserThread::PostTask( |
| 115 BrowserThread::IO, | 115 BrowserThread::IO, |
| 116 FROM_HERE, | 116 FROM_HERE, |
| 117 base::Bind(callback, EntryMetadata(), base::File::FILE_ERROR_ABORT)); | 117 base::Bind(callback, |
| 118 base::Passed(make_scoped_ptr<EntryMetadata>(NULL)), |
| 119 base::File::FILE_ERROR_ABORT)); |
| 118 return; | 120 return; |
| 119 } | 121 } |
| 120 | 122 |
| 121 abort_callback_ = file_system_->GetMetadata( | 123 abort_callback_ = file_system_->GetMetadata( |
| 122 file_path_, | 124 file_path_, |
| 125 ProvidedFileSystemInterface::METADATA_FIELD_DEFAULT, |
| 123 base::Bind(&OperationRunner::OnGetMetadataCompletedOnUIThread, | 126 base::Bind(&OperationRunner::OnGetMetadataCompletedOnUIThread, |
| 124 this, | 127 this, |
| 125 callback)); | 128 callback)); |
| 126 } | 129 } |
| 127 | 130 |
| 128 // Aborts the most recent operation (if exists), and calls the callback. | 131 // Aborts the most recent operation (if exists), and calls the callback. |
| 129 void AbortOnUIThread(const storage::AsyncFileUtil::StatusCallback& callback) { | 132 void AbortOnUIThread(const storage::AsyncFileUtil::StatusCallback& callback) { |
| 130 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 133 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 131 | 134 |
| 132 if (abort_callback_.is_null()) { | 135 if (abort_callback_.is_null()) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 159 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 162 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 160 | 163 |
| 161 file_handle_ = file_handle; | 164 file_handle_ = file_handle; |
| 162 BrowserThread::PostTask( | 165 BrowserThread::PostTask( |
| 163 BrowserThread::IO, FROM_HERE, base::Bind(callback, result)); | 166 BrowserThread::IO, FROM_HERE, base::Bind(callback, result)); |
| 164 } | 167 } |
| 165 | 168 |
| 166 // Forwards a metadata to the IO thread. | 169 // Forwards a metadata to the IO thread. |
| 167 void OnGetMetadataCompletedOnUIThread( | 170 void OnGetMetadataCompletedOnUIThread( |
| 168 const ProvidedFileSystemInterface::GetMetadataCallback& callback, | 171 const ProvidedFileSystemInterface::GetMetadataCallback& callback, |
| 169 const EntryMetadata& metadata, | 172 scoped_ptr<EntryMetadata> metadata, |
| 170 base::File::Error result) { | 173 base::File::Error result) { |
| 171 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 174 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 172 BrowserThread::PostTask( | 175 BrowserThread::PostTask( |
| 173 BrowserThread::IO, FROM_HERE, base::Bind(callback, metadata, result)); | 176 BrowserThread::IO, |
| 177 FROM_HERE, |
| 178 base::Bind(callback, base::Passed(&metadata), result)); |
| 174 } | 179 } |
| 175 | 180 |
| 176 // Forwards a response of reading from a file to the IO thread. | 181 // Forwards a response of reading from a file to the IO thread. |
| 177 void OnReadFileCompletedOnUIThread( | 182 void OnReadFileCompletedOnUIThread( |
| 178 const ProvidedFileSystemInterface::ReadChunkReceivedCallback& | 183 const ProvidedFileSystemInterface::ReadChunkReceivedCallback& |
| 179 chunk_received_callback, | 184 chunk_received_callback, |
| 180 int chunk_length, | 185 int chunk_length, |
| 181 bool has_more, | 186 bool has_more, |
| 182 base::File::Error result) { | 187 base::File::Error result) { |
| 183 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 188 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 runner_, | 280 runner_, |
| 276 base::Bind(&FileStreamReader::OnInitializeCompleted, | 281 base::Bind(&FileStreamReader::OnInitializeCompleted, |
| 277 weak_ptr_factory_.GetWeakPtr(), | 282 weak_ptr_factory_.GetWeakPtr(), |
| 278 pending_closure, | 283 pending_closure, |
| 279 error_callback))); | 284 error_callback))); |
| 280 } | 285 } |
| 281 | 286 |
| 282 void FileStreamReader::OnInitializeCompleted( | 287 void FileStreamReader::OnInitializeCompleted( |
| 283 const base::Closure& pending_closure, | 288 const base::Closure& pending_closure, |
| 284 const net::Int64CompletionCallback& error_callback, | 289 const net::Int64CompletionCallback& error_callback, |
| 285 const EntryMetadata& metadata, | 290 scoped_ptr<EntryMetadata> metadata, |
| 286 base::File::Error result) { | 291 base::File::Error result) { |
| 287 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 292 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 288 DCHECK_EQ(INITIALIZING, state_); | 293 DCHECK_EQ(INITIALIZING, state_); |
| 289 | 294 |
| 290 // In case of an error, abort. | 295 // In case of an error, abort. |
| 291 if (result != base::File::FILE_OK) { | 296 if (result != base::File::FILE_OK) { |
| 292 state_ = FAILED; | 297 state_ = FAILED; |
| 293 error_callback.Run(net::FileErrorToNetError(result)); | 298 error_callback.Run(net::FileErrorToNetError(result)); |
| 294 return; | 299 return; |
| 295 } | 300 } |
| 296 | 301 |
| 297 // If the file modification time has changed, then abort. Note, that the file | 302 // If the file modification time has changed, then abort. Note, that the file |
| 298 // may be changed without affecting the modification time. | 303 // may be changed without affecting the modification time. |
| 304 DCHECK(metadata.get()); |
| 299 if (!expected_modification_time_.is_null() && | 305 if (!expected_modification_time_.is_null() && |
| 300 metadata.modification_time != expected_modification_time_) { | 306 metadata->modification_time != expected_modification_time_) { |
| 301 state_ = FAILED; | 307 state_ = FAILED; |
| 302 error_callback.Run(net::ERR_UPLOAD_FILE_CHANGED); | 308 error_callback.Run(net::ERR_UPLOAD_FILE_CHANGED); |
| 303 return; | 309 return; |
| 304 } | 310 } |
| 305 | 311 |
| 306 DCHECK_EQ(base::File::FILE_OK, result); | 312 DCHECK_EQ(base::File::FILE_OK, result); |
| 307 state_ = INITIALIZED; | 313 state_ = INITIALIZED; |
| 308 | 314 |
| 309 // Run the task waiting for the initialization to be completed. | 315 // Run the task waiting for the initialization to be completed. |
| 310 pending_closure.Run(); | 316 pending_closure.Run(); |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 454 callback.Run(net::FileErrorToNetError(result)); | 460 callback.Run(net::FileErrorToNetError(result)); |
| 455 return; | 461 return; |
| 456 } | 462 } |
| 457 | 463 |
| 458 // More data is about to come, so do not call the callback yet. | 464 // More data is about to come, so do not call the callback yet. |
| 459 DCHECK(has_more); | 465 DCHECK(has_more); |
| 460 } | 466 } |
| 461 | 467 |
| 462 void FileStreamReader::OnGetMetadataForGetLengthReceived( | 468 void FileStreamReader::OnGetMetadataForGetLengthReceived( |
| 463 const net::Int64CompletionCallback& callback, | 469 const net::Int64CompletionCallback& callback, |
| 464 const EntryMetadata& metadata, | 470 scoped_ptr<EntryMetadata> metadata, |
| 465 base::File::Error result) { | 471 base::File::Error result) { |
| 466 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 472 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 467 DCHECK_EQ(INITIALIZED, state_); | 473 DCHECK_EQ(INITIALIZED, state_); |
| 468 | 474 |
| 469 // In case of an error, abort. | 475 // In case of an error, abort. |
| 470 if (result != base::File::FILE_OK) { | 476 if (result != base::File::FILE_OK) { |
| 471 state_ = FAILED; | 477 state_ = FAILED; |
| 472 callback.Run(net::FileErrorToNetError(result)); | 478 callback.Run(net::FileErrorToNetError(result)); |
| 473 return; | 479 return; |
| 474 } | 480 } |
| 475 | 481 |
| 476 // If the file modification time has changed, then abort. Note, that the file | 482 // If the file modification time has changed, then abort. Note, that the file |
| 477 // may be changed without affecting the modification time. | 483 // may be changed without affecting the modification time. |
| 484 DCHECK(metadata.get()); |
| 478 if (!expected_modification_time_.is_null() && | 485 if (!expected_modification_time_.is_null() && |
| 479 metadata.modification_time != expected_modification_time_) { | 486 metadata->modification_time != expected_modification_time_) { |
| 480 callback.Run(net::ERR_UPLOAD_FILE_CHANGED); | 487 callback.Run(net::ERR_UPLOAD_FILE_CHANGED); |
| 481 return; | 488 return; |
| 482 } | 489 } |
| 483 | 490 |
| 484 DCHECK_EQ(base::File::FILE_OK, result); | 491 DCHECK_EQ(base::File::FILE_OK, result); |
| 485 callback.Run(metadata.size); | 492 callback.Run(metadata->size); |
| 486 } | 493 } |
| 487 | 494 |
| 488 } // namespace file_system_provider | 495 } // namespace file_system_provider |
| 489 } // namespace chromeos | 496 } // namespace chromeos |
| OLD | NEW |