Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(258)

Side by Side Diff: chrome/browser/media_galleries/linux/mtp_device_delegate_impl_linux.cc

Issue 145303002: Convert Media Galleries to use base::File (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "chrome/browser/media_galleries/linux/mtp_device_task_helper.h" 10 #include "chrome/browser/media_galleries/linux/mtp_device_task_helper.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 // 79 //
80 // |storage_name| specifies the name of the storage device. 80 // |storage_name| specifies the name of the storage device.
81 // |success_callback| is called when the ReadDirectory request succeeds. 81 // |success_callback| is called when the ReadDirectory request succeeds.
82 // |error_callback| is called when the ReadDirectory request fails. 82 // |error_callback| is called when the ReadDirectory request fails.
83 // |success_callback| and |error_callback| runs on the IO thread. 83 // |success_callback| and |error_callback| runs on the IO thread.
84 void ReadDirectoryOnUIThread( 84 void ReadDirectoryOnUIThread(
85 const std::string& storage_name, 85 const std::string& storage_name,
86 const std::string& root, 86 const std::string& root,
87 const base::Callback< 87 const base::Callback<
88 void(const fileapi::AsyncFileUtil::EntryList&)>& success_callback, 88 void(const fileapi::AsyncFileUtil::EntryList&)>& success_callback,
89 const base::Callback<void(base::PlatformFileError)>& error_callback) { 89 const base::Callback<void(base::File::Error)>& error_callback) {
90 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 90 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
91 MTPDeviceTaskHelper* task_helper = 91 MTPDeviceTaskHelper* task_helper =
92 GetDeviceTaskHelperForStorage(storage_name); 92 GetDeviceTaskHelperForStorage(storage_name);
93 if (!task_helper) 93 if (!task_helper)
94 return; 94 return;
95 task_helper->ReadDirectoryByPath(root, success_callback, error_callback); 95 task_helper->ReadDirectoryByPath(root, success_callback, error_callback);
96 } 96 }
97 97
98 // Gets the |file_path| details. 98 // Gets the |file_path| details.
99 // 99 //
100 // Called on the UI thread to dispatch the request to the 100 // Called on the UI thread to dispatch the request to the
101 // MediaTransferProtocolManager. 101 // MediaTransferProtocolManager.
102 // 102 //
103 // |storage_name| specifies the name of the storage device. 103 // |storage_name| specifies the name of the storage device.
104 // |success_callback| is called when the GetFileInfo request succeeds. 104 // |success_callback| is called when the GetFileInfo request succeeds.
105 // |error_callback| is called when the GetFileInfo request fails. 105 // |error_callback| is called when the GetFileInfo request fails.
106 // |success_callback| and |error_callback| runs on the IO thread. 106 // |success_callback| and |error_callback| runs on the IO thread.
107 void GetFileInfoOnUIThread( 107 void GetFileInfoOnUIThread(
108 const std::string& storage_name, 108 const std::string& storage_name,
109 const std::string& file_path, 109 const std::string& file_path,
110 const base::Callback<void(const base::PlatformFileInfo&)>& success_callback, 110 const base::Callback<void(const base::File::Info&)>& success_callback,
111 const base::Callback<void(base::PlatformFileError)>& error_callback) { 111 const base::Callback<void(base::File::Error)>& error_callback) {
112 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 112 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
113 MTPDeviceTaskHelper* task_helper = 113 MTPDeviceTaskHelper* task_helper =
114 GetDeviceTaskHelperForStorage(storage_name); 114 GetDeviceTaskHelperForStorage(storage_name);
115 if (!task_helper) 115 if (!task_helper)
116 return; 116 return;
117 task_helper->GetFileInfoByPath(file_path, success_callback, error_callback); 117 task_helper->GetFileInfoByPath(file_path, success_callback, error_callback);
118 } 118 }
119 119
120 // Copies the contents of |device_file_path| to |snapshot_file_path|. 120 // Copies the contents of |device_file_path| to |snapshot_file_path|.
121 // 121 //
122 // Called on the UI thread to dispatch the request to the 122 // Called on the UI thread to dispatch the request to the
123 // MediaTransferProtocolManager. 123 // MediaTransferProtocolManager.
124 // 124 //
125 // |storage_name| specifies the name of the storage device. 125 // |storage_name| specifies the name of the storage device.
126 // |device_file_path| specifies the media device file path. 126 // |device_file_path| specifies the media device file path.
127 // |snapshot_file_path| specifies the platform path of the snapshot file. 127 // |snapshot_file_path| specifies the platform path of the snapshot file.
128 // |file_size| specifies the number of bytes that will be written to the 128 // |file_size| specifies the number of bytes that will be written to the
129 // snapshot file. 129 // snapshot file.
130 // |success_callback| is called when the copy operation succeeds. 130 // |success_callback| is called when the copy operation succeeds.
131 // |error_callback| is called when the copy operation fails. 131 // |error_callback| is called when the copy operation fails.
132 // |success_callback| and |error_callback| runs on the IO thread. 132 // |success_callback| and |error_callback| runs on the IO thread.
133 void WriteDataIntoSnapshotFileOnUIThread( 133 void WriteDataIntoSnapshotFileOnUIThread(
134 const std::string& storage_name, 134 const std::string& storage_name,
135 const SnapshotRequestInfo& request_info, 135 const SnapshotRequestInfo& request_info,
136 const base::PlatformFileInfo& snapshot_file_info) { 136 const base::File::Info& snapshot_file_info) {
137 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 137 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
138 MTPDeviceTaskHelper* task_helper = 138 MTPDeviceTaskHelper* task_helper =
139 GetDeviceTaskHelperForStorage(storage_name); 139 GetDeviceTaskHelperForStorage(storage_name);
140 if (!task_helper) 140 if (!task_helper)
141 return; 141 return;
142 task_helper->WriteDataIntoSnapshotFile(request_info, snapshot_file_info); 142 task_helper->WriteDataIntoSnapshotFile(request_info, snapshot_file_info);
143 } 143 }
144 144
145 // Copies the contents of |device_file_path| to |snapshot_file_path|. 145 // Copies the contents of |device_file_path| to |snapshot_file_path|.
146 // 146 //
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 content::BrowserThread::UI, 334 content::BrowserThread::UI,
335 FROM_HERE, 335 FROM_HERE,
336 base::Bind(&OpenStorageOnUIThread, 336 base::Bind(&OpenStorageOnUIThread,
337 storage_name_, 337 storage_name_,
338 base::Bind(&MTPDeviceDelegateImplLinux::OnInitCompleted, 338 base::Bind(&MTPDeviceDelegateImplLinux::OnInitCompleted,
339 weak_ptr_factory_.GetWeakPtr()))); 339 weak_ptr_factory_.GetWeakPtr())));
340 } 340 }
341 } 341 }
342 342
343 void MTPDeviceDelegateImplLinux::WriteDataIntoSnapshotFile( 343 void MTPDeviceDelegateImplLinux::WriteDataIntoSnapshotFile(
344 const base::PlatformFileInfo& file_info) { 344 const base::File::Info& file_info) {
345 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 345 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
346 DCHECK(current_snapshot_request_info_.get()); 346 DCHECK(current_snapshot_request_info_.get());
347 DCHECK_GT(file_info.size, 0); 347 DCHECK_GT(file_info.size, 0);
348 task_in_progress_ = true; 348 task_in_progress_ = true;
349 SnapshotRequestInfo request_info( 349 SnapshotRequestInfo request_info(
350 current_snapshot_request_info_->device_file_path, 350 current_snapshot_request_info_->device_file_path,
351 current_snapshot_request_info_->snapshot_file_path, 351 current_snapshot_request_info_->snapshot_file_path,
352 base::Bind( 352 base::Bind(
353 &MTPDeviceDelegateImplLinux::OnDidWriteDataIntoSnapshotFile, 353 &MTPDeviceDelegateImplLinux::OnDidWriteDataIntoSnapshotFile,
354 weak_ptr_factory_.GetWeakPtr()), 354 weak_ptr_factory_.GetWeakPtr()),
(...skipping 26 matching lines...) Expand all
381 381
382 void MTPDeviceDelegateImplLinux::OnInitCompleted(bool succeeded) { 382 void MTPDeviceDelegateImplLinux::OnInitCompleted(bool succeeded) {
383 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 383 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
384 init_state_ = succeeded ? INITIALIZED : UNINITIALIZED; 384 init_state_ = succeeded ? INITIALIZED : UNINITIALIZED;
385 task_in_progress_ = false; 385 task_in_progress_ = false;
386 ProcessNextPendingRequest(); 386 ProcessNextPendingRequest();
387 } 387 }
388 388
389 void MTPDeviceDelegateImplLinux::OnDidGetFileInfo( 389 void MTPDeviceDelegateImplLinux::OnDidGetFileInfo(
390 const GetFileInfoSuccessCallback& success_callback, 390 const GetFileInfoSuccessCallback& success_callback,
391 const base::PlatformFileInfo& file_info) { 391 const base::File::Info& file_info) {
392 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 392 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
393 success_callback.Run(file_info); 393 success_callback.Run(file_info);
394 task_in_progress_ = false; 394 task_in_progress_ = false;
395 ProcessNextPendingRequest(); 395 ProcessNextPendingRequest();
396 } 396 }
397 397
398 void MTPDeviceDelegateImplLinux::OnDidGetFileInfoToReadDirectory( 398 void MTPDeviceDelegateImplLinux::OnDidGetFileInfoToReadDirectory(
399 const std::string& root, 399 const std::string& root,
400 const ReadDirectorySuccessCallback& success_callback, 400 const ReadDirectorySuccessCallback& success_callback,
401 const ErrorCallback& error_callback, 401 const ErrorCallback& error_callback,
402 const base::PlatformFileInfo& file_info) { 402 const base::File::Info& file_info) {
403 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 403 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
404 DCHECK(task_in_progress_); 404 DCHECK(task_in_progress_);
405 if (!file_info.is_directory) { 405 if (!file_info.is_directory) {
406 return HandleDeviceFileError(error_callback, 406 return HandleDeviceFileError(error_callback,
407 base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY); 407 base::File::FILE_ERROR_NOT_A_DIRECTORY);
408 } 408 }
409 409
410 base::Closure task_closure = 410 base::Closure task_closure =
411 base::Bind(&ReadDirectoryOnUIThread, 411 base::Bind(&ReadDirectoryOnUIThread,
412 storage_name_, 412 storage_name_,
413 root, 413 root,
414 base::Bind(&MTPDeviceDelegateImplLinux::OnDidReadDirectory, 414 base::Bind(&MTPDeviceDelegateImplLinux::OnDidReadDirectory,
415 weak_ptr_factory_.GetWeakPtr(), 415 weak_ptr_factory_.GetWeakPtr(),
416 success_callback), 416 success_callback),
417 base::Bind(&MTPDeviceDelegateImplLinux::HandleDeviceFileError, 417 base::Bind(&MTPDeviceDelegateImplLinux::HandleDeviceFileError,
418 weak_ptr_factory_.GetWeakPtr(), 418 weak_ptr_factory_.GetWeakPtr(),
419 error_callback)); 419 error_callback));
420 content::BrowserThread::PostTask(content::BrowserThread::UI, 420 content::BrowserThread::PostTask(content::BrowserThread::UI,
421 FROM_HERE, 421 FROM_HERE,
422 task_closure); 422 task_closure);
423 } 423 }
424 424
425 void MTPDeviceDelegateImplLinux::OnDidGetFileInfoToCreateSnapshotFile( 425 void MTPDeviceDelegateImplLinux::OnDidGetFileInfoToCreateSnapshotFile(
426 scoped_ptr<SnapshotRequestInfo> snapshot_request_info, 426 scoped_ptr<SnapshotRequestInfo> snapshot_request_info,
427 const base::PlatformFileInfo& file_info) { 427 const base::File::Info& file_info) {
428 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 428 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
429 DCHECK(!current_snapshot_request_info_.get()); 429 DCHECK(!current_snapshot_request_info_.get());
430 DCHECK(snapshot_request_info.get()); 430 DCHECK(snapshot_request_info.get());
431 DCHECK(task_in_progress_); 431 DCHECK(task_in_progress_);
432 base::PlatformFileError error = base::PLATFORM_FILE_OK; 432 base::File::Error error = base::File::FILE_OK;
433 if (file_info.is_directory) 433 if (file_info.is_directory)
434 error = base::PLATFORM_FILE_ERROR_NOT_A_FILE; 434 error = base::File::FILE_ERROR_NOT_A_FILE;
435 else if (file_info.size < 0 || file_info.size > kuint32max) 435 else if (file_info.size < 0 || file_info.size > kuint32max)
436 error = base::PLATFORM_FILE_ERROR_FAILED; 436 error = base::File::FILE_ERROR_FAILED;
437 437
438 if (error != base::PLATFORM_FILE_OK) 438 if (error != base::File::FILE_OK)
439 return HandleDeviceFileError(snapshot_request_info->error_callback, error); 439 return HandleDeviceFileError(snapshot_request_info->error_callback, error);
440 440
441 base::PlatformFileInfo snapshot_file_info(file_info); 441 base::File::Info snapshot_file_info(file_info);
442 // Modify the last modified time to null. This prevents the time stamp 442 // Modify the last modified time to null. This prevents the time stamp
443 // verfication in LocalFileStreamReader. 443 // verfication in LocalFileStreamReader.
444 snapshot_file_info.last_modified = base::Time(); 444 snapshot_file_info.last_modified = base::Time();
445 445
446 current_snapshot_request_info_.reset(snapshot_request_info.release()); 446 current_snapshot_request_info_.reset(snapshot_request_info.release());
447 if (file_info.size == 0) { 447 if (file_info.size == 0) {
448 // Empty snapshot file. 448 // Empty snapshot file.
449 return OnDidWriteDataIntoSnapshotFile( 449 return OnDidWriteDataIntoSnapshotFile(
450 snapshot_file_info, current_snapshot_request_info_->snapshot_file_path); 450 snapshot_file_info, current_snapshot_request_info_->snapshot_file_path);
451 } 451 }
452 WriteDataIntoSnapshotFile(snapshot_file_info); 452 WriteDataIntoSnapshotFile(snapshot_file_info);
453 } 453 }
454 454
455 void MTPDeviceDelegateImplLinux::OnDidGetFileInfoToReadBytes( 455 void MTPDeviceDelegateImplLinux::OnDidGetFileInfoToReadBytes(
456 const ReadBytesRequest& request, 456 const ReadBytesRequest& request,
457 const base::PlatformFileInfo& file_info) { 457 const base::File::Info& file_info) {
458 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 458 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
459 DCHECK(request.buf); 459 DCHECK(request.buf);
460 DCHECK(request.buf_len >= 0); 460 DCHECK(request.buf_len >= 0);
461 DCHECK(task_in_progress_); 461 DCHECK(task_in_progress_);
462 base::PlatformFileError error = base::PLATFORM_FILE_OK; 462 base::File::Error error = base::File::FILE_OK;
463 if (file_info.is_directory) 463 if (file_info.is_directory)
464 error = base::PLATFORM_FILE_ERROR_NOT_A_FILE; 464 error = base::File::FILE_ERROR_NOT_A_FILE;
465 else if (file_info.size < 0 || file_info.size > kuint32max) 465 else if (file_info.size < 0 || file_info.size > kuint32max)
466 error = base::PLATFORM_FILE_ERROR_FAILED; 466 error = base::File::FILE_ERROR_FAILED;
467 467
468 if (error != base::PLATFORM_FILE_OK) 468 if (error != base::File::FILE_OK)
469 return HandleDeviceFileError(request.error_callback, error); 469 return HandleDeviceFileError(request.error_callback, error);
470 470
471 ReadBytesRequest new_request( 471 ReadBytesRequest new_request(
472 request.device_file_relative_path, 472 request.device_file_relative_path,
473 request.buf, 473 request.buf,
474 request.offset, 474 request.offset,
475 request.buf_len, 475 request.buf_len,
476 base::Bind(&MTPDeviceDelegateImplLinux::OnDidReadBytes, 476 base::Bind(&MTPDeviceDelegateImplLinux::OnDidReadBytes,
477 weak_ptr_factory_.GetWeakPtr(), request.success_callback), 477 weak_ptr_factory_.GetWeakPtr(), request.success_callback),
478 base::Bind(&MTPDeviceDelegateImplLinux::HandleDeviceFileError, 478 base::Bind(&MTPDeviceDelegateImplLinux::HandleDeviceFileError,
479 weak_ptr_factory_.GetWeakPtr(), request.error_callback)); 479 weak_ptr_factory_.GetWeakPtr(), request.error_callback));
480 480
481 content::BrowserThread::PostTask( 481 content::BrowserThread::PostTask(
482 content::BrowserThread::UI, 482 content::BrowserThread::UI,
483 FROM_HERE, 483 FROM_HERE,
484 base::Bind(&ReadBytesOnUIThread, storage_name_, new_request)); 484 base::Bind(&ReadBytesOnUIThread, storage_name_, new_request));
485 } 485 }
486 486
487 void MTPDeviceDelegateImplLinux::OnDidReadDirectory( 487 void MTPDeviceDelegateImplLinux::OnDidReadDirectory(
488 const ReadDirectorySuccessCallback& success_callback, 488 const ReadDirectorySuccessCallback& success_callback,
489 const fileapi::AsyncFileUtil::EntryList& file_list) { 489 const fileapi::AsyncFileUtil::EntryList& file_list) {
490 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 490 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
491 success_callback.Run(file_list, false /*no more entries*/); 491 success_callback.Run(file_list, false /*no more entries*/);
492 task_in_progress_ = false; 492 task_in_progress_ = false;
493 ProcessNextPendingRequest(); 493 ProcessNextPendingRequest();
494 } 494 }
495 495
496 void MTPDeviceDelegateImplLinux::OnDidWriteDataIntoSnapshotFile( 496 void MTPDeviceDelegateImplLinux::OnDidWriteDataIntoSnapshotFile(
497 const base::PlatformFileInfo& file_info, 497 const base::File::Info& file_info,
498 const base::FilePath& snapshot_file_path) { 498 const base::FilePath& snapshot_file_path) {
499 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 499 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
500 DCHECK(current_snapshot_request_info_.get()); 500 DCHECK(current_snapshot_request_info_.get());
501 DCHECK(task_in_progress_); 501 DCHECK(task_in_progress_);
502 current_snapshot_request_info_->success_callback.Run( 502 current_snapshot_request_info_->success_callback.Run(
503 file_info, snapshot_file_path); 503 file_info, snapshot_file_path);
504 task_in_progress_ = false; 504 task_in_progress_ = false;
505 current_snapshot_request_info_.reset(); 505 current_snapshot_request_info_.reset();
506 ProcessNextPendingRequest(); 506 ProcessNextPendingRequest();
507 } 507 }
508 508
509 void MTPDeviceDelegateImplLinux::OnWriteDataIntoSnapshotFileError( 509 void MTPDeviceDelegateImplLinux::OnWriteDataIntoSnapshotFileError(
510 base::PlatformFileError error) { 510 base::File::Error error) {
511 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 511 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
512 DCHECK(current_snapshot_request_info_.get()); 512 DCHECK(current_snapshot_request_info_.get());
513 DCHECK(task_in_progress_); 513 DCHECK(task_in_progress_);
514 current_snapshot_request_info_->error_callback.Run(error); 514 current_snapshot_request_info_->error_callback.Run(error);
515 task_in_progress_ = false; 515 task_in_progress_ = false;
516 current_snapshot_request_info_.reset(); 516 current_snapshot_request_info_.reset();
517 ProcessNextPendingRequest(); 517 ProcessNextPendingRequest();
518 } 518 }
519 519
520 void MTPDeviceDelegateImplLinux::OnDidReadBytes( 520 void MTPDeviceDelegateImplLinux::OnDidReadBytes(
521 const ReadBytesSuccessCallback& success_callback, 521 const ReadBytesSuccessCallback& success_callback,
522 int bytes_read) { 522 int bytes_read) {
523 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 523 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
524 DCHECK(task_in_progress_); 524 DCHECK(task_in_progress_);
525 success_callback.Run(bytes_read); 525 success_callback.Run(bytes_read);
526 task_in_progress_ = false; 526 task_in_progress_ = false;
527 ProcessNextPendingRequest(); 527 ProcessNextPendingRequest();
528 } 528 }
529 529
530 void MTPDeviceDelegateImplLinux::HandleDeviceFileError( 530 void MTPDeviceDelegateImplLinux::HandleDeviceFileError(
531 const ErrorCallback& error_callback, 531 const ErrorCallback& error_callback,
532 base::PlatformFileError error) { 532 base::File::Error error) {
533 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 533 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
534 DCHECK(task_in_progress_); 534 DCHECK(task_in_progress_);
535 error_callback.Run(error); 535 error_callback.Run(error);
536 task_in_progress_ = false; 536 task_in_progress_ = false;
537 ProcessNextPendingRequest(); 537 ProcessNextPendingRequest();
538 } 538 }
539 539
540 void CreateMTPDeviceAsyncDelegate( 540 void CreateMTPDeviceAsyncDelegate(
541 const std::string& device_location, 541 const std::string& device_location,
542 const CreateMTPDeviceAsyncDelegateCallback& callback) { 542 const CreateMTPDeviceAsyncDelegateCallback& callback) {
543 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 543 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
544 callback.Run(new MTPDeviceDelegateImplLinux(device_location)); 544 callback.Run(new MTPDeviceDelegateImplLinux(device_location));
545 } 545 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698