Chromium Code Reviews| 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_device_delegate_impl_linux.h" | 5 #include "chrome/browser/media_galleries/linux/mtp_device_delegate_impl_linux.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 252 success_callback, | 252 success_callback, |
| 253 error_callback), | 253 error_callback), |
| 254 base::Bind(&MTPDeviceDelegateImplLinux::HandleDeviceFileError, | 254 base::Bind(&MTPDeviceDelegateImplLinux::HandleDeviceFileError, |
| 255 weak_ptr_factory_.GetWeakPtr(), | 255 weak_ptr_factory_.GetWeakPtr(), |
| 256 error_callback)); | 256 error_callback)); |
| 257 EnsureInitAndRunTask(PendingTaskInfo(FROM_HERE, call_closure)); | 257 EnsureInitAndRunTask(PendingTaskInfo(FROM_HERE, call_closure)); |
| 258 } | 258 } |
| 259 | 259 |
| 260 void MTPDeviceDelegateImplLinux::CreateSnapshotFile( | 260 void MTPDeviceDelegateImplLinux::CreateSnapshotFile( |
| 261 const base::FilePath& device_file_path, | 261 const base::FilePath& device_file_path, |
| 262 const base::FilePath& snapshot_file_path, | 262 const base::FilePath& local_path, |
|
Lei Zhang
2014/07/15 20:02:38
Make this match the parameter name in the .h file.
tommycli
2014/07/15 21:11:41
Acknowledged.
| |
| 263 const CreateSnapshotFileSuccessCallback& success_callback, | 263 const CreateSnapshotFileSuccessCallback& success_callback, |
| 264 const ErrorCallback& error_callback) { | 264 const ErrorCallback& error_callback) { |
| 265 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 265 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 266 DCHECK(!device_file_path.empty()); | 266 DCHECK(!device_file_path.empty()); |
| 267 DCHECK(!snapshot_file_path.empty()); | 267 DCHECK(!local_path.empty()); |
| 268 std::string device_file_relative_path = | 268 std::string device_file_relative_path = |
| 269 GetDeviceRelativePath(device_path_, device_file_path); | 269 GetDeviceRelativePath(device_path_, device_file_path); |
| 270 scoped_ptr<SnapshotRequestInfo> request_info( | 270 scoped_ptr<SnapshotRequestInfo> request_info( |
| 271 new SnapshotRequestInfo(device_file_relative_path, | 271 new SnapshotRequestInfo(device_file_relative_path, |
| 272 snapshot_file_path, | 272 local_path, |
| 273 success_callback, | 273 success_callback, |
| 274 error_callback)); | 274 error_callback)); |
| 275 base::Closure call_closure = | 275 base::Closure call_closure = |
| 276 base::Bind( | 276 base::Bind( |
| 277 &GetFileInfoOnUIThread, | 277 &GetFileInfoOnUIThread, |
| 278 storage_name_, | 278 storage_name_, |
| 279 device_file_relative_path, | 279 device_file_relative_path, |
| 280 base::Bind( | 280 base::Bind( |
| 281 &MTPDeviceDelegateImplLinux::OnDidGetFileInfoToCreateSnapshotFile, | 281 &MTPDeviceDelegateImplLinux::OnDidGetFileInfoToCreateSnapshotFile, |
| 282 weak_ptr_factory_.GetWeakPtr(), | 282 weak_ptr_factory_.GetWeakPtr(), |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 346 base::Bind(&MTPDeviceDelegateImplLinux::OnInitCompleted, | 346 base::Bind(&MTPDeviceDelegateImplLinux::OnInitCompleted, |
| 347 weak_ptr_factory_.GetWeakPtr()))); | 347 weak_ptr_factory_.GetWeakPtr()))); |
| 348 } | 348 } |
| 349 } | 349 } |
| 350 | 350 |
| 351 void MTPDeviceDelegateImplLinux::WriteDataIntoSnapshotFile( | 351 void MTPDeviceDelegateImplLinux::WriteDataIntoSnapshotFile( |
| 352 const base::File::Info& file_info) { | 352 const base::File::Info& file_info) { |
| 353 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 353 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 354 DCHECK(current_snapshot_request_info_.get()); | 354 DCHECK(current_snapshot_request_info_.get()); |
| 355 DCHECK_GT(file_info.size, 0); | 355 DCHECK_GT(file_info.size, 0); |
| 356 task_in_progress_ = true; | 356 DCHECK(task_in_progress_); |
|
Lei Zhang
2014/07/15 20:02:38
There's only 1 caller and it already DCHECKs this,
tommycli
2014/07/15 21:11:41
Acknowledged.
| |
| 357 SnapshotRequestInfo request_info( | 357 SnapshotRequestInfo request_info( |
| 358 current_snapshot_request_info_->device_file_path, | 358 current_snapshot_request_info_->device_file_path, |
| 359 current_snapshot_request_info_->snapshot_file_path, | 359 current_snapshot_request_info_->snapshot_file_path, |
| 360 base::Bind( | 360 base::Bind( |
| 361 &MTPDeviceDelegateImplLinux::OnDidWriteDataIntoSnapshotFile, | 361 &MTPDeviceDelegateImplLinux::OnDidWriteDataIntoSnapshotFile, |
| 362 weak_ptr_factory_.GetWeakPtr()), | 362 weak_ptr_factory_.GetWeakPtr()), |
| 363 base::Bind( | 363 base::Bind( |
| 364 &MTPDeviceDelegateImplLinux::OnWriteDataIntoSnapshotFileError, | 364 &MTPDeviceDelegateImplLinux::OnWriteDataIntoSnapshotFileError, |
| 365 weak_ptr_factory_.GetWeakPtr())); | 365 weak_ptr_factory_.GetWeakPtr())); |
| 366 | 366 |
| 367 base::Closure task_closure = base::Bind(&WriteDataIntoSnapshotFileOnUIThread, | 367 base::Closure task_closure = base::Bind(&WriteDataIntoSnapshotFileOnUIThread, |
| 368 storage_name_, | 368 storage_name_, |
| 369 request_info, | 369 request_info, |
| 370 file_info); | 370 file_info); |
| 371 content::BrowserThread::PostTask(content::BrowserThread::UI, | 371 content::BrowserThread::PostTask(content::BrowserThread::UI, |
| 372 FROM_HERE, | 372 FROM_HERE, |
| 373 task_closure); | 373 task_closure); |
| 374 } | 374 } |
| 375 | 375 |
| 376 void MTPDeviceDelegateImplLinux::PendingRequestDone() { | |
| 377 DCHECK(task_in_progress_); | |
| 378 task_in_progress_ = false; | |
| 379 ProcessNextPendingRequest(); | |
| 380 } | |
| 381 | |
| 376 void MTPDeviceDelegateImplLinux::ProcessNextPendingRequest() { | 382 void MTPDeviceDelegateImplLinux::ProcessNextPendingRequest() { |
| 377 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 383 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 378 DCHECK(!task_in_progress_); | 384 DCHECK(!task_in_progress_); |
| 379 if (pending_tasks_.empty()) | 385 if (pending_tasks_.empty()) |
| 380 return; | 386 return; |
| 381 | 387 |
| 382 task_in_progress_ = true; | 388 task_in_progress_ = true; |
| 383 const PendingTaskInfo& task_info = pending_tasks_.front(); | 389 const PendingTaskInfo& task_info = pending_tasks_.front(); |
| 384 content::BrowserThread::PostTask(content::BrowserThread::UI, | 390 content::BrowserThread::PostTask(content::BrowserThread::UI, |
| 385 task_info.location, | 391 task_info.location, |
| 386 task_info.task); | 392 task_info.task); |
| 387 pending_tasks_.pop(); | 393 pending_tasks_.pop(); |
| 388 } | 394 } |
| 389 | 395 |
| 390 void MTPDeviceDelegateImplLinux::OnInitCompleted(bool succeeded) { | 396 void MTPDeviceDelegateImplLinux::OnInitCompleted(bool succeeded) { |
| 391 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 397 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 392 init_state_ = succeeded ? INITIALIZED : UNINITIALIZED; | 398 init_state_ = succeeded ? INITIALIZED : UNINITIALIZED; |
| 393 task_in_progress_ = false; | 399 PendingRequestDone(); |
| 394 ProcessNextPendingRequest(); | |
| 395 } | 400 } |
| 396 | 401 |
| 397 void MTPDeviceDelegateImplLinux::OnDidGetFileInfo( | 402 void MTPDeviceDelegateImplLinux::OnDidGetFileInfo( |
| 398 const GetFileInfoSuccessCallback& success_callback, | 403 const GetFileInfoSuccessCallback& success_callback, |
| 399 const base::File::Info& file_info) { | 404 const base::File::Info& file_info) { |
| 400 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 405 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 401 success_callback.Run(file_info); | 406 success_callback.Run(file_info); |
| 402 task_in_progress_ = false; | 407 PendingRequestDone(); |
| 403 ProcessNextPendingRequest(); | |
| 404 } | 408 } |
| 405 | 409 |
| 406 void MTPDeviceDelegateImplLinux::OnDidGetFileInfoToReadDirectory( | 410 void MTPDeviceDelegateImplLinux::OnDidGetFileInfoToReadDirectory( |
| 407 const std::string& root, | 411 const std::string& root, |
| 408 const ReadDirectorySuccessCallback& success_callback, | 412 const ReadDirectorySuccessCallback& success_callback, |
| 409 const ErrorCallback& error_callback, | 413 const ErrorCallback& error_callback, |
| 410 const base::File::Info& file_info) { | 414 const base::File::Info& file_info) { |
| 411 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 415 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 412 DCHECK(task_in_progress_); | 416 DCHECK(task_in_progress_); |
| 413 if (!file_info.is_directory) { | 417 if (!file_info.is_directory) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 458 snapshot_file_info, current_snapshot_request_info_->snapshot_file_path); | 462 snapshot_file_info, current_snapshot_request_info_->snapshot_file_path); |
| 459 } | 463 } |
| 460 WriteDataIntoSnapshotFile(snapshot_file_info); | 464 WriteDataIntoSnapshotFile(snapshot_file_info); |
| 461 } | 465 } |
| 462 | 466 |
| 463 void MTPDeviceDelegateImplLinux::OnDidReadDirectory( | 467 void MTPDeviceDelegateImplLinux::OnDidReadDirectory( |
| 464 const ReadDirectorySuccessCallback& success_callback, | 468 const ReadDirectorySuccessCallback& success_callback, |
| 465 const fileapi::AsyncFileUtil::EntryList& file_list) { | 469 const fileapi::AsyncFileUtil::EntryList& file_list) { |
| 466 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 470 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 467 success_callback.Run(file_list, false /*no more entries*/); | 471 success_callback.Run(file_list, false /*no more entries*/); |
| 468 task_in_progress_ = false; | 472 PendingRequestDone(); |
| 469 ProcessNextPendingRequest(); | |
| 470 } | 473 } |
| 471 | 474 |
| 472 void MTPDeviceDelegateImplLinux::OnDidWriteDataIntoSnapshotFile( | 475 void MTPDeviceDelegateImplLinux::OnDidWriteDataIntoSnapshotFile( |
| 473 const base::File::Info& file_info, | 476 const base::File::Info& file_info, |
| 474 const base::FilePath& snapshot_file_path) { | 477 const base::FilePath& snapshot_file_path) { |
| 475 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 478 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 476 DCHECK(current_snapshot_request_info_.get()); | 479 DCHECK(current_snapshot_request_info_.get()); |
| 477 DCHECK(task_in_progress_); | |
| 478 current_snapshot_request_info_->success_callback.Run( | 480 current_snapshot_request_info_->success_callback.Run( |
| 479 file_info, snapshot_file_path); | 481 file_info, snapshot_file_path); |
| 480 task_in_progress_ = false; | |
| 481 current_snapshot_request_info_.reset(); | 482 current_snapshot_request_info_.reset(); |
| 482 ProcessNextPendingRequest(); | 483 PendingRequestDone(); |
| 483 } | 484 } |
| 484 | 485 |
| 485 void MTPDeviceDelegateImplLinux::OnWriteDataIntoSnapshotFileError( | 486 void MTPDeviceDelegateImplLinux::OnWriteDataIntoSnapshotFileError( |
| 486 base::File::Error error) { | 487 base::File::Error error) { |
| 487 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 488 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 488 DCHECK(current_snapshot_request_info_.get()); | 489 DCHECK(current_snapshot_request_info_.get()); |
| 489 DCHECK(task_in_progress_); | |
| 490 current_snapshot_request_info_->error_callback.Run(error); | 490 current_snapshot_request_info_->error_callback.Run(error); |
| 491 task_in_progress_ = false; | |
| 492 current_snapshot_request_info_.reset(); | 491 current_snapshot_request_info_.reset(); |
| 493 ProcessNextPendingRequest(); | 492 PendingRequestDone(); |
| 494 } | 493 } |
| 495 | 494 |
| 496 void MTPDeviceDelegateImplLinux::OnDidReadBytes( | 495 void MTPDeviceDelegateImplLinux::OnDidReadBytes( |
| 497 const ReadBytesSuccessCallback& success_callback, | 496 const ReadBytesSuccessCallback& success_callback, |
| 498 const base::File::Info& file_info, int bytes_read) { | 497 const base::File::Info& file_info, int bytes_read) { |
| 499 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 498 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 500 DCHECK(task_in_progress_); | |
| 501 success_callback.Run(file_info, bytes_read); | 499 success_callback.Run(file_info, bytes_read); |
| 502 task_in_progress_ = false; | 500 PendingRequestDone(); |
| 503 ProcessNextPendingRequest(); | |
| 504 } | 501 } |
| 505 | 502 |
| 506 void MTPDeviceDelegateImplLinux::HandleDeviceFileError( | 503 void MTPDeviceDelegateImplLinux::HandleDeviceFileError( |
| 507 const ErrorCallback& error_callback, | 504 const ErrorCallback& error_callback, |
| 508 base::File::Error error) { | 505 base::File::Error error) { |
| 509 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 506 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 510 DCHECK(task_in_progress_); | |
| 511 error_callback.Run(error); | 507 error_callback.Run(error); |
| 512 task_in_progress_ = false; | 508 PendingRequestDone(); |
| 513 ProcessNextPendingRequest(); | |
| 514 } | 509 } |
| 515 | 510 |
| 516 void CreateMTPDeviceAsyncDelegate( | 511 void CreateMTPDeviceAsyncDelegate( |
| 517 const std::string& device_location, | 512 const std::string& device_location, |
| 518 const CreateMTPDeviceAsyncDelegateCallback& callback) { | 513 const CreateMTPDeviceAsyncDelegateCallback& callback) { |
| 519 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 514 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 520 callback.Run(new MTPDeviceDelegateImplLinux(device_location)); | 515 callback.Run(new MTPDeviceDelegateImplLinux(device_location)); |
| 521 } | 516 } |
| OLD | NEW |