| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_device_task_helper.h" | 5 #include "chrome/browser/media_galleries/linux/mtp_device_task_helper.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/numerics/safe_conversions.h" | 10 #include "base/numerics/safe_conversions.h" |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 return HandleDeviceError(error_callback, base::File::FILE_ERROR_FAILED); | 102 return HandleDeviceError(error_callback, base::File::FILE_ERROR_FAILED); |
| 103 | 103 |
| 104 GetMediaTransferProtocolManager()->ReadDirectory( | 104 GetMediaTransferProtocolManager()->ReadDirectory( |
| 105 device_handle_, dir_id, | 105 device_handle_, dir_id, |
| 106 base::Bind(&MTPDeviceTaskHelper::OnDidReadDirectory, | 106 base::Bind(&MTPDeviceTaskHelper::OnDidReadDirectory, |
| 107 weak_ptr_factory_.GetWeakPtr(), | 107 weak_ptr_factory_.GetWeakPtr(), |
| 108 success_callback, | 108 success_callback, |
| 109 error_callback)); | 109 error_callback)); |
| 110 } | 110 } |
| 111 | 111 |
| 112 void MTPDeviceTaskHelper::ReadDirectoryEntryIds( |
| 113 const uint32 directory_id, |
| 114 const ReadDirectoryEntryIdsSuccessCallback& success_callback, |
| 115 const ErrorCallback& error_callback) { |
| 116 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 117 if (device_handle_.empty()) |
| 118 return HandleDeviceError(error_callback, base::File::FILE_ERROR_FAILED); |
| 119 |
| 120 GetMediaTransferProtocolManager()->ReadDirectoryEntryIds( |
| 121 device_handle_, directory_id, |
| 122 base::Bind(&MTPDeviceTaskHelper::OnDidReadDirectoryEntryIds, |
| 123 weak_ptr_factory_.GetWeakPtr(), success_callback, |
| 124 error_callback)); |
| 125 } |
| 126 |
| 112 void MTPDeviceTaskHelper::WriteDataIntoSnapshotFile( | 127 void MTPDeviceTaskHelper::WriteDataIntoSnapshotFile( |
| 113 const SnapshotRequestInfo& request_info, | 128 const SnapshotRequestInfo& request_info, |
| 114 const base::File::Info& snapshot_file_info) { | 129 const base::File::Info& snapshot_file_info) { |
| 115 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 130 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 116 if (device_handle_.empty()) { | 131 if (device_handle_.empty()) { |
| 117 return HandleDeviceError(request_info.error_callback, | 132 return HandleDeviceError(request_info.error_callback, |
| 118 base::File::FILE_ERROR_FAILED); | 133 base::File::FILE_ERROR_FAILED); |
| 119 } | 134 } |
| 120 | 135 |
| 121 if (!read_file_worker_) | 136 if (!read_file_worker_) |
| 122 read_file_worker_.reset(new MTPReadFileWorker(device_handle_)); | 137 read_file_worker_.reset(new MTPReadFileWorker(device_handle_)); |
| 123 read_file_worker_->WriteDataIntoSnapshotFile(request_info, | 138 read_file_worker_->WriteDataIntoSnapshotFile(request_info, |
| 124 snapshot_file_info); | 139 snapshot_file_info); |
| 125 } | 140 } |
| 126 | 141 |
| 127 void MTPDeviceTaskHelper::ReadBytes( | 142 void MTPDeviceTaskHelper::ReadBytes( |
| 128 const MTPDeviceAsyncDelegate::ReadBytesRequest& request) { | 143 const MTPDeviceAsyncDelegate::ReadBytesRequest& request) { |
| 129 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 144 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 130 if (device_handle_.empty()) { | 145 if (device_handle_.empty()) { |
| 131 return HandleDeviceError(request.error_callback, | 146 return HandleDeviceError(request.error_callback, |
| 132 base::File::FILE_ERROR_FAILED); | 147 base::File::FILE_ERROR_FAILED); |
| 133 } | 148 } |
| 134 | 149 |
| 135 GetMediaTransferProtocolManager()->GetFileInfo( | 150 GetMediaTransferProtocolManager()->GetFileInfo( |
| 136 device_handle_, request.file_id, | 151 device_handle_, request.file_id, |
| 137 base::Bind(&MTPDeviceTaskHelper::OnGetFileInfoToReadBytes, | 152 base::Bind(&MTPDeviceTaskHelper::OnGetFileInfoToReadBytes, |
| 138 weak_ptr_factory_.GetWeakPtr(), request)); | 153 weak_ptr_factory_.GetWeakPtr(), request)); |
| 139 } | 154 } |
| 140 | 155 |
| 156 // TODO(yawano) storage_name is not used, delete it. |
| 141 void MTPDeviceTaskHelper::CopyFileFromLocal( | 157 void MTPDeviceTaskHelper::CopyFileFromLocal( |
| 142 const std::string& storage_name, | 158 const std::string& storage_name, |
| 143 const int source_file_descriptor, | 159 const int source_file_descriptor, |
| 144 const uint32 parent_id, | 160 const uint32 parent_id, |
| 145 const std::string& file_name, | 161 const std::string& file_name, |
| 146 const CopyFileFromLocalSuccessCallback& success_callback, | 162 const CopyFileFromLocalSuccessCallback& success_callback, |
| 147 const ErrorCallback& error_callback) { | 163 const ErrorCallback& error_callback) { |
| 148 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 164 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 149 | 165 |
| 150 GetMediaTransferProtocolManager()->CopyFileFromLocal( | 166 GetMediaTransferProtocolManager()->CopyFileFromLocal( |
| 151 device_handle_, source_file_descriptor, parent_id, file_name, | 167 device_handle_, source_file_descriptor, parent_id, file_name, |
| 152 base::Bind(&MTPDeviceTaskHelper::OnCopyFileFromLocal, | 168 base::Bind(&MTPDeviceTaskHelper::OnCopyFileFromLocal, |
| 153 weak_ptr_factory_.GetWeakPtr(), success_callback, | 169 weak_ptr_factory_.GetWeakPtr(), success_callback, |
| 154 error_callback)); | 170 error_callback)); |
| 155 } | 171 } |
| 156 | 172 |
| 173 void MTPDeviceTaskHelper::DeleteObject( |
| 174 const uint32 object_id, |
| 175 const DeleteObjectSuccessCallback& success_callback, |
| 176 const ErrorCallback& error_callback) { |
| 177 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 178 |
| 179 GetMediaTransferProtocolManager()->DeleteObject( |
| 180 device_handle_, object_id, |
| 181 base::Bind(&MTPDeviceTaskHelper::OnDeleteObject, |
| 182 weak_ptr_factory_.GetWeakPtr(), success_callback, |
| 183 error_callback)); |
| 184 } |
| 185 |
| 157 void MTPDeviceTaskHelper::CloseStorage() const { | 186 void MTPDeviceTaskHelper::CloseStorage() const { |
| 158 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 187 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 159 if (device_handle_.empty()) | 188 if (device_handle_.empty()) |
| 160 return; | 189 return; |
| 161 GetMediaTransferProtocolManager()->CloseStorage(device_handle_, | 190 GetMediaTransferProtocolManager()->CloseStorage(device_handle_, |
| 162 base::Bind(&DoNothing)); | 191 base::Bind(&DoNothing)); |
| 163 } | 192 } |
| 164 | 193 |
| 165 void MTPDeviceTaskHelper::OnDidOpenStorage( | 194 void MTPDeviceTaskHelper::OnDidOpenStorage( |
| 166 const OpenStorageCallback& completion_callback, | 195 const OpenStorageCallback& completion_callback, |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 entry.size = file_enum.Size(); | 244 entry.size = file_enum.Size(); |
| 216 entry.last_modified_time = file_enum.LastModifiedTime(); | 245 entry.last_modified_time = file_enum.LastModifiedTime(); |
| 217 entries.push_back(entry); | 246 entries.push_back(entry); |
| 218 } | 247 } |
| 219 content::BrowserThread::PostTask( | 248 content::BrowserThread::PostTask( |
| 220 content::BrowserThread::IO, | 249 content::BrowserThread::IO, |
| 221 FROM_HERE, | 250 FROM_HERE, |
| 222 base::Bind(success_callback, entries, has_more)); | 251 base::Bind(success_callback, entries, has_more)); |
| 223 } | 252 } |
| 224 | 253 |
| 254 void MTPDeviceTaskHelper::OnDidReadDirectoryEntryIds( |
| 255 const ReadDirectoryEntryIdsSuccessCallback& success_callback, |
| 256 const ErrorCallback& error_callback, |
| 257 const std::vector<uint32>& file_ids, |
| 258 const bool error) const { |
| 259 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 260 |
| 261 if (error) |
| 262 return HandleDeviceError(error_callback, base::File::FILE_ERROR_FAILED); |
| 263 |
| 264 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, |
| 265 base::Bind(success_callback, file_ids)); |
| 266 } |
| 267 |
| 225 void MTPDeviceTaskHelper::OnGetFileInfoToReadBytes( | 268 void MTPDeviceTaskHelper::OnGetFileInfoToReadBytes( |
| 226 const MTPDeviceAsyncDelegate::ReadBytesRequest& request, | 269 const MTPDeviceAsyncDelegate::ReadBytesRequest& request, |
| 227 const MtpFileEntry& file_entry, | 270 const MtpFileEntry& file_entry, |
| 228 bool error) { | 271 bool error) { |
| 229 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 272 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 230 DCHECK(request.buf.get()); | 273 DCHECK(request.buf.get()); |
| 231 DCHECK_GE(request.buf_len, 0); | 274 DCHECK_GE(request.buf_len, 0); |
| 232 DCHECK_GE(request.offset, 0); | 275 DCHECK_GE(request.offset, 0); |
| 233 if (error) { | 276 if (error) { |
| 234 return HandleDeviceError(request.error_callback, | 277 return HandleDeviceError(request.error_callback, |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 content::BrowserThread::PostTask( | 336 content::BrowserThread::PostTask( |
| 294 content::BrowserThread::IO, FROM_HERE, | 337 content::BrowserThread::IO, FROM_HERE, |
| 295 base::Bind(error_callback, base::File::FILE_ERROR_FAILED)); | 338 base::Bind(error_callback, base::File::FILE_ERROR_FAILED)); |
| 296 return; | 339 return; |
| 297 } | 340 } |
| 298 | 341 |
| 299 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, | 342 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, |
| 300 base::Bind(success_callback)); | 343 base::Bind(success_callback)); |
| 301 } | 344 } |
| 302 | 345 |
| 346 void MTPDeviceTaskHelper::OnDeleteObject( |
| 347 const DeleteObjectSuccessCallback& success_callback, |
| 348 const ErrorCallback& error_callback, |
| 349 const bool error) const { |
| 350 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 351 if (error) { |
| 352 content::BrowserThread::PostTask( |
| 353 content::BrowserThread::IO, FROM_HERE, |
| 354 base::Bind(error_callback, base::File::FILE_ERROR_FAILED)); |
| 355 return; |
| 356 } |
| 357 |
| 358 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, |
| 359 base::Bind(success_callback)); |
| 360 } |
| 361 |
| 303 void MTPDeviceTaskHelper::HandleDeviceError( | 362 void MTPDeviceTaskHelper::HandleDeviceError( |
| 304 const ErrorCallback& error_callback, | 363 const ErrorCallback& error_callback, |
| 305 base::File::Error error) const { | 364 base::File::Error error) const { |
| 306 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 365 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 307 content::BrowserThread::PostTask(content::BrowserThread::IO, | 366 content::BrowserThread::PostTask(content::BrowserThread::IO, |
| 308 FROM_HERE, | 367 FROM_HERE, |
| 309 base::Bind(error_callback, error)); | 368 base::Bind(error_callback, error)); |
| 310 } | 369 } |
| OLD | NEW |