| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/media_galleries/linux/mtp_read_file_worker.h" | 5 #include "chrome/browser/media_galleries/linux/mtp_read_file_worker.h" |
| 6 | 6 |
| 7 #include <utility> |
| 8 |
| 7 #include "base/bind.h" | 9 #include "base/bind.h" |
| 8 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| 9 #include "base/files/file_util.h" | 11 #include "base/files/file_util.h" |
| 10 #include "base/numerics/safe_conversions.h" | 12 #include "base/numerics/safe_conversions.h" |
| 11 #include "chrome/browser/media_galleries/linux/snapshot_file_details.h" | 13 #include "chrome/browser/media_galleries/linux/snapshot_file_details.h" |
| 12 #include "components/storage_monitor/storage_monitor.h" | 14 #include "components/storage_monitor/storage_monitor.h" |
| 13 #include "content/public/browser/browser_thread.h" | 15 #include "content/public/browser/browser_thread.h" |
| 14 #include "device/media_transfer_protocol/media_transfer_protocol_manager.h" | 16 #include "device/media_transfer_protocol/media_transfer_protocol_manager.h" |
| 15 #include "third_party/cros_system_api/dbus/service_constants.h" | 17 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 16 | 18 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 | 78 |
| 77 void MTPReadFileWorker::OnDidReadDataChunkFromDeviceFile( | 79 void MTPReadFileWorker::OnDidReadDataChunkFromDeviceFile( |
| 78 scoped_ptr<SnapshotFileDetails> snapshot_file_details, | 80 scoped_ptr<SnapshotFileDetails> snapshot_file_details, |
| 79 const std::string& data, | 81 const std::string& data, |
| 80 bool error) { | 82 bool error) { |
| 81 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 83 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 82 DCHECK(snapshot_file_details.get()); | 84 DCHECK(snapshot_file_details.get()); |
| 83 snapshot_file_details->set_error_occurred( | 85 snapshot_file_details->set_error_occurred( |
| 84 error || (data.size() != snapshot_file_details->BytesToRead())); | 86 error || (data.size() != snapshot_file_details->BytesToRead())); |
| 85 if (snapshot_file_details->error_occurred()) { | 87 if (snapshot_file_details->error_occurred()) { |
| 86 OnDidWriteIntoSnapshotFile(snapshot_file_details.Pass()); | 88 OnDidWriteIntoSnapshotFile(std::move(snapshot_file_details)); |
| 87 return; | 89 return; |
| 88 } | 90 } |
| 89 | 91 |
| 90 // To avoid calling |snapshot_file_details| methods and passing ownership of | 92 // To avoid calling |snapshot_file_details| methods and passing ownership of |
| 91 // |snapshot_file_details| in the same_line. | 93 // |snapshot_file_details| in the same_line. |
| 92 SnapshotFileDetails* snapshot_file_details_ptr = snapshot_file_details.get(); | 94 SnapshotFileDetails* snapshot_file_details_ptr = snapshot_file_details.get(); |
| 93 content::BrowserThread::PostTaskAndReplyWithResult( | 95 content::BrowserThread::PostTaskAndReplyWithResult( |
| 94 content::BrowserThread::FILE, | 96 content::BrowserThread::FILE, |
| 95 FROM_HERE, | 97 FROM_HERE, |
| 96 base::Bind(&WriteDataChunkIntoSnapshotFileOnFileThread, | 98 base::Bind(&WriteDataChunkIntoSnapshotFileOnFileThread, |
| 97 snapshot_file_details_ptr->snapshot_file_path(), | 99 snapshot_file_details_ptr->snapshot_file_path(), |
| 98 data), | 100 data), |
| 99 base::Bind(&MTPReadFileWorker::OnDidWriteDataChunkIntoSnapshotFile, | 101 base::Bind(&MTPReadFileWorker::OnDidWriteDataChunkIntoSnapshotFile, |
| 100 weak_ptr_factory_.GetWeakPtr(), | 102 weak_ptr_factory_.GetWeakPtr(), |
| 101 base::Passed(&snapshot_file_details))); | 103 base::Passed(&snapshot_file_details))); |
| 102 } | 104 } |
| 103 | 105 |
| 104 void MTPReadFileWorker::OnDidWriteDataChunkIntoSnapshotFile( | 106 void MTPReadFileWorker::OnDidWriteDataChunkIntoSnapshotFile( |
| 105 scoped_ptr<SnapshotFileDetails> snapshot_file_details, | 107 scoped_ptr<SnapshotFileDetails> snapshot_file_details, |
| 106 uint32_t bytes_written) { | 108 uint32_t bytes_written) { |
| 107 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 109 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 108 DCHECK(snapshot_file_details.get()); | 110 DCHECK(snapshot_file_details.get()); |
| 109 if (snapshot_file_details->AddBytesWritten(bytes_written)) { | 111 if (snapshot_file_details->AddBytesWritten(bytes_written)) { |
| 110 if (!snapshot_file_details->IsSnapshotFileWriteComplete()) { | 112 if (!snapshot_file_details->IsSnapshotFileWriteComplete()) { |
| 111 ReadDataChunkFromDeviceFile(snapshot_file_details.Pass()); | 113 ReadDataChunkFromDeviceFile(std::move(snapshot_file_details)); |
| 112 return; | 114 return; |
| 113 } | 115 } |
| 114 } else { | 116 } else { |
| 115 snapshot_file_details->set_error_occurred(true); | 117 snapshot_file_details->set_error_occurred(true); |
| 116 } | 118 } |
| 117 OnDidWriteIntoSnapshotFile(snapshot_file_details.Pass()); | 119 OnDidWriteIntoSnapshotFile(std::move(snapshot_file_details)); |
| 118 } | 120 } |
| 119 | 121 |
| 120 void MTPReadFileWorker::OnDidWriteIntoSnapshotFile( | 122 void MTPReadFileWorker::OnDidWriteIntoSnapshotFile( |
| 121 scoped_ptr<SnapshotFileDetails> snapshot_file_details) { | 123 scoped_ptr<SnapshotFileDetails> snapshot_file_details) { |
| 122 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 124 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 123 DCHECK(snapshot_file_details.get()); | 125 DCHECK(snapshot_file_details.get()); |
| 124 | 126 |
| 125 if (snapshot_file_details->error_occurred()) { | 127 if (snapshot_file_details->error_occurred()) { |
| 126 content::BrowserThread::PostTask( | 128 content::BrowserThread::PostTask( |
| 127 content::BrowserThread::IO, | 129 content::BrowserThread::IO, |
| 128 FROM_HERE, | 130 FROM_HERE, |
| 129 base::Bind(snapshot_file_details->error_callback(), | 131 base::Bind(snapshot_file_details->error_callback(), |
| 130 base::File::FILE_ERROR_FAILED)); | 132 base::File::FILE_ERROR_FAILED)); |
| 131 return; | 133 return; |
| 132 } | 134 } |
| 133 content::BrowserThread::PostTask( | 135 content::BrowserThread::PostTask( |
| 134 content::BrowserThread::IO, | 136 content::BrowserThread::IO, |
| 135 FROM_HERE, | 137 FROM_HERE, |
| 136 base::Bind(snapshot_file_details->success_callback(), | 138 base::Bind(snapshot_file_details->success_callback(), |
| 137 snapshot_file_details->file_info(), | 139 snapshot_file_details->file_info(), |
| 138 snapshot_file_details->snapshot_file_path())); | 140 snapshot_file_details->snapshot_file_path())); |
| 139 } | 141 } |
| OLD | NEW |