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

Side by Side Diff: chrome/browser/chromeos/drive/file_system/copy_operation.cc

Issue 1036723003: favor DCHECK_CURRENTLY_ON for better logs in chrome/browser/chromeos/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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
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/chromeos/drive/file_system/copy_operation.h" 5 #include "chrome/browser/chromeos/drive/file_system/copy_operation.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/task_runner_util.h" 9 #include "base/task_runner_util.h"
10 #include "chrome/browser/chromeos/drive/drive.pb.h" 10 #include "chrome/browser/chromeos/drive/drive.pb.h"
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 internal::FileCache* cache) 281 internal::FileCache* cache)
282 : blocking_task_runner_(blocking_task_runner), 282 : blocking_task_runner_(blocking_task_runner),
283 delegate_(delegate), 283 delegate_(delegate),
284 scheduler_(scheduler), 284 scheduler_(scheduler),
285 metadata_(metadata), 285 metadata_(metadata),
286 cache_(cache), 286 cache_(cache),
287 create_file_operation_(new CreateFileOperation(blocking_task_runner, 287 create_file_operation_(new CreateFileOperation(blocking_task_runner,
288 delegate, 288 delegate,
289 metadata)), 289 metadata)),
290 weak_ptr_factory_(this) { 290 weak_ptr_factory_(this) {
291 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 291 DCHECK_CURRENTLY_ON(BrowserThread::UI);
292 } 292 }
293 293
294 CopyOperation::~CopyOperation() { 294 CopyOperation::~CopyOperation() {
295 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 295 DCHECK_CURRENTLY_ON(BrowserThread::UI);
296 } 296 }
297 297
298 void CopyOperation::Copy(const base::FilePath& src_file_path, 298 void CopyOperation::Copy(const base::FilePath& src_file_path,
299 const base::FilePath& dest_file_path, 299 const base::FilePath& dest_file_path,
300 bool preserve_last_modified, 300 bool preserve_last_modified,
301 const FileOperationCallback& callback) { 301 const FileOperationCallback& callback) {
302 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 302 DCHECK_CURRENTLY_ON(BrowserThread::UI);
303 DCHECK(!callback.is_null()); 303 DCHECK(!callback.is_null());
304 304
305 CopyParams* params = new CopyParams; 305 CopyParams* params = new CopyParams;
306 params->src_file_path = src_file_path; 306 params->src_file_path = src_file_path;
307 params->dest_file_path = dest_file_path; 307 params->dest_file_path = dest_file_path;
308 params->preserve_last_modified = preserve_last_modified; 308 params->preserve_last_modified = preserve_last_modified;
309 params->callback = callback; 309 params->callback = callback;
310 310
311 std::vector<std::string>* updated_local_ids = new std::vector<std::string>; 311 std::vector<std::string>* updated_local_ids = new std::vector<std::string>;
312 bool* directory_changed = new bool(false); 312 bool* directory_changed = new bool(false);
313 bool* should_copy_on_server = new bool(false); 313 bool* should_copy_on_server = new bool(false);
314 base::PostTaskAndReplyWithResult( 314 base::PostTaskAndReplyWithResult(
315 blocking_task_runner_.get(), 315 blocking_task_runner_.get(),
316 FROM_HERE, 316 FROM_HERE,
317 base::Bind(&TryToCopyLocally, metadata_, cache_, params, 317 base::Bind(&TryToCopyLocally, metadata_, cache_, params,
318 updated_local_ids, directory_changed, should_copy_on_server), 318 updated_local_ids, directory_changed, should_copy_on_server),
319 base::Bind(&CopyOperation::CopyAfterTryToCopyLocally, 319 base::Bind(&CopyOperation::CopyAfterTryToCopyLocally,
320 weak_ptr_factory_.GetWeakPtr(), base::Owned(params), 320 weak_ptr_factory_.GetWeakPtr(), base::Owned(params),
321 base::Owned(updated_local_ids), base::Owned(directory_changed), 321 base::Owned(updated_local_ids), base::Owned(directory_changed),
322 base::Owned(should_copy_on_server))); 322 base::Owned(should_copy_on_server)));
323 } 323 }
324 324
325 void CopyOperation::CopyAfterTryToCopyLocally( 325 void CopyOperation::CopyAfterTryToCopyLocally(
326 const CopyParams* params, 326 const CopyParams* params,
327 const std::vector<std::string>* updated_local_ids, 327 const std::vector<std::string>* updated_local_ids,
328 const bool* directory_changed, 328 const bool* directory_changed,
329 const bool* should_copy_on_server, 329 const bool* should_copy_on_server,
330 FileError error) { 330 FileError error) {
331 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 331 DCHECK_CURRENTLY_ON(BrowserThread::UI);
332 DCHECK(!params->callback.is_null()); 332 DCHECK(!params->callback.is_null());
333 333
334 for (const auto& id : *updated_local_ids) { 334 for (const auto& id : *updated_local_ids) {
335 // Syncing for copy should be done in background, so pass the BACKGROUND 335 // Syncing for copy should be done in background, so pass the BACKGROUND
336 // context. See: crbug.com/420278. 336 // context. See: crbug.com/420278.
337 delegate_->OnEntryUpdatedByOperation(ClientContext(BACKGROUND), id); 337 delegate_->OnEntryUpdatedByOperation(ClientContext(BACKGROUND), id);
338 } 338 }
339 339
340 if (*directory_changed) { 340 if (*directory_changed) {
341 FileChange changed_file; 341 FileChange changed_file;
(...skipping 17 matching lines...) Expand all
359 weak_ptr_factory_.GetWeakPtr(), *params)); 359 weak_ptr_factory_.GetWeakPtr(), *params));
360 if (!waiting) 360 if (!waiting)
361 params->callback.Run(FILE_ERROR_NOT_FOUND); 361 params->callback.Run(FILE_ERROR_NOT_FOUND);
362 } else { 362 } else {
363 CopyAfterGetParentResourceId(*params, &params->parent_entry, FILE_ERROR_OK); 363 CopyAfterGetParentResourceId(*params, &params->parent_entry, FILE_ERROR_OK);
364 } 364 }
365 } 365 }
366 366
367 void CopyOperation::CopyAfterParentSync(const CopyParams& params, 367 void CopyOperation::CopyAfterParentSync(const CopyParams& params,
368 FileError error) { 368 FileError error) {
369 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 369 DCHECK_CURRENTLY_ON(BrowserThread::UI);
370 DCHECK(!params.callback.is_null()); 370 DCHECK(!params.callback.is_null());
371 371
372 if (error != FILE_ERROR_OK) { 372 if (error != FILE_ERROR_OK) {
373 params.callback.Run(error); 373 params.callback.Run(error);
374 return; 374 return;
375 } 375 }
376 376
377 ResourceEntry* parent = new ResourceEntry; 377 ResourceEntry* parent = new ResourceEntry;
378 base::PostTaskAndReplyWithResult( 378 base::PostTaskAndReplyWithResult(
379 blocking_task_runner_.get(), 379 blocking_task_runner_.get(),
380 FROM_HERE, 380 FROM_HERE,
381 base::Bind(&internal::ResourceMetadata::GetResourceEntryById, 381 base::Bind(&internal::ResourceMetadata::GetResourceEntryById,
382 base::Unretained(metadata_), 382 base::Unretained(metadata_),
383 params.parent_entry.local_id(), 383 params.parent_entry.local_id(),
384 parent), 384 parent),
385 base::Bind(&CopyOperation::CopyAfterGetParentResourceId, 385 base::Bind(&CopyOperation::CopyAfterGetParentResourceId,
386 weak_ptr_factory_.GetWeakPtr(), 386 weak_ptr_factory_.GetWeakPtr(),
387 params, 387 params,
388 base::Owned(parent))); 388 base::Owned(parent)));
389 } 389 }
390 390
391 void CopyOperation::CopyAfterGetParentResourceId(const CopyParams& params, 391 void CopyOperation::CopyAfterGetParentResourceId(const CopyParams& params,
392 const ResourceEntry* parent, 392 const ResourceEntry* parent,
393 FileError error) { 393 FileError error) {
394 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 394 DCHECK_CURRENTLY_ON(BrowserThread::UI);
395 DCHECK(!params.callback.is_null()); 395 DCHECK(!params.callback.is_null());
396 396
397 if (error != FILE_ERROR_OK) { 397 if (error != FILE_ERROR_OK) {
398 params.callback.Run(error); 398 params.callback.Run(error);
399 return; 399 return;
400 } 400 }
401 401
402 base::FilePath new_title = params.dest_file_path.BaseName(); 402 base::FilePath new_title = params.dest_file_path.BaseName();
403 if (params.src_entry.file_specific_info().is_hosted_document()) { 403 if (params.src_entry.file_specific_info().is_hosted_document()) {
404 // Drop the document extension, which should not be in the title. 404 // Drop the document extension, which should not be in the title.
405 // TODO(yoshiki): Remove this code with crbug.com/223304. 405 // TODO(yoshiki): Remove this code with crbug.com/223304.
406 new_title = new_title.RemoveExtension(); 406 new_title = new_title.RemoveExtension();
407 } 407 }
408 408
409 base::Time last_modified = 409 base::Time last_modified =
410 params.preserve_last_modified ? 410 params.preserve_last_modified ?
411 base::Time::FromInternalValue( 411 base::Time::FromInternalValue(
412 params.src_entry.file_info().last_modified()) : base::Time(); 412 params.src_entry.file_info().last_modified()) : base::Time();
413 413
414 CopyResourceOnServer( 414 CopyResourceOnServer(
415 params.src_entry.resource_id(), parent->resource_id(), 415 params.src_entry.resource_id(), parent->resource_id(),
416 new_title.AsUTF8Unsafe(), last_modified, params.callback); 416 new_title.AsUTF8Unsafe(), last_modified, params.callback);
417 } 417 }
418 418
419 void CopyOperation::TransferFileFromLocalToRemote( 419 void CopyOperation::TransferFileFromLocalToRemote(
420 const base::FilePath& local_src_path, 420 const base::FilePath& local_src_path,
421 const base::FilePath& remote_dest_path, 421 const base::FilePath& remote_dest_path,
422 const FileOperationCallback& callback) { 422 const FileOperationCallback& callback) {
423 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 423 DCHECK_CURRENTLY_ON(BrowserThread::UI);
424 DCHECK(!callback.is_null()); 424 DCHECK(!callback.is_null());
425 425
426 std::string* gdoc_resource_id = new std::string; 426 std::string* gdoc_resource_id = new std::string;
427 ResourceEntry* parent_entry = new ResourceEntry; 427 ResourceEntry* parent_entry = new ResourceEntry;
428 base::PostTaskAndReplyWithResult( 428 base::PostTaskAndReplyWithResult(
429 blocking_task_runner_.get(), 429 blocking_task_runner_.get(),
430 FROM_HERE, 430 FROM_HERE,
431 base::Bind( 431 base::Bind(
432 &PrepareTransferFileFromLocalToRemote, 432 &PrepareTransferFileFromLocalToRemote,
433 metadata_, local_src_path, remote_dest_path, 433 metadata_, local_src_path, remote_dest_path,
434 gdoc_resource_id, parent_entry), 434 gdoc_resource_id, parent_entry),
435 base::Bind( 435 base::Bind(
436 &CopyOperation::TransferFileFromLocalToRemoteAfterPrepare, 436 &CopyOperation::TransferFileFromLocalToRemoteAfterPrepare,
437 weak_ptr_factory_.GetWeakPtr(), 437 weak_ptr_factory_.GetWeakPtr(),
438 local_src_path, remote_dest_path, callback, 438 local_src_path, remote_dest_path, callback,
439 base::Owned(gdoc_resource_id), base::Owned(parent_entry))); 439 base::Owned(gdoc_resource_id), base::Owned(parent_entry)));
440 } 440 }
441 441
442 void CopyOperation::TransferFileFromLocalToRemoteAfterPrepare( 442 void CopyOperation::TransferFileFromLocalToRemoteAfterPrepare(
443 const base::FilePath& local_src_path, 443 const base::FilePath& local_src_path,
444 const base::FilePath& remote_dest_path, 444 const base::FilePath& remote_dest_path,
445 const FileOperationCallback& callback, 445 const FileOperationCallback& callback,
446 std::string* gdoc_resource_id, 446 std::string* gdoc_resource_id,
447 ResourceEntry* parent_entry, 447 ResourceEntry* parent_entry,
448 FileError error) { 448 FileError error) {
449 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 449 DCHECK_CURRENTLY_ON(BrowserThread::UI);
450 DCHECK(!callback.is_null()); 450 DCHECK(!callback.is_null());
451 451
452 if (error != FILE_ERROR_OK) { 452 if (error != FILE_ERROR_OK) {
453 callback.Run(error); 453 callback.Run(error);
454 return; 454 return;
455 } 455 }
456 456
457 // For regular files, schedule the transfer. 457 // For regular files, schedule the transfer.
458 if (gdoc_resource_id->empty()) { 458 if (gdoc_resource_id->empty()) {
459 ScheduleTransferRegularFile(local_src_path, remote_dest_path, callback); 459 ScheduleTransferRegularFile(local_src_path, remote_dest_path, callback);
(...skipping 16 matching lines...) Expand all
476 blocking_task_runner_.get(), 476 blocking_task_runner_.get(),
477 FROM_HERE, 477 FROM_HERE,
478 base::Bind(&LocalWorkForTransferJsonGdocFile, metadata_, params), 478 base::Bind(&LocalWorkForTransferJsonGdocFile, metadata_, params),
479 base::Bind(&CopyOperation::TransferJsonGdocFileAfterLocalWork, 479 base::Bind(&CopyOperation::TransferJsonGdocFileAfterLocalWork,
480 weak_ptr_factory_.GetWeakPtr(), base::Owned(params))); 480 weak_ptr_factory_.GetWeakPtr(), base::Owned(params)));
481 } 481 }
482 482
483 void CopyOperation::TransferJsonGdocFileAfterLocalWork( 483 void CopyOperation::TransferJsonGdocFileAfterLocalWork(
484 TransferJsonGdocParams* params, 484 TransferJsonGdocParams* params,
485 FileError error) { 485 FileError error) {
486 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 486 DCHECK_CURRENTLY_ON(BrowserThread::UI);
487 487
488 if (error != FILE_ERROR_OK) { 488 if (error != FILE_ERROR_OK) {
489 params->callback.Run(error); 489 params->callback.Run(error);
490 return; 490 return;
491 } 491 }
492 492
493 switch (params->location_type) { 493 switch (params->location_type) {
494 // When |resource_id| is found in the local metadata and it has a specific 494 // When |resource_id| is found in the local metadata and it has a specific
495 // parent folder, we assume the user's intention is to copy the document and 495 // parent folder, we assume the user's intention is to copy the document and
496 // thus perform the server-side copy operation. 496 // thus perform the server-side copy operation.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 break; 534 break;
535 } 535 }
536 } 536 }
537 537
538 void CopyOperation::CopyResourceOnServer( 538 void CopyOperation::CopyResourceOnServer(
539 const std::string& resource_id, 539 const std::string& resource_id,
540 const std::string& parent_resource_id, 540 const std::string& parent_resource_id,
541 const std::string& new_title, 541 const std::string& new_title,
542 const base::Time& last_modified, 542 const base::Time& last_modified,
543 const FileOperationCallback& callback) { 543 const FileOperationCallback& callback) {
544 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 544 DCHECK_CURRENTLY_ON(BrowserThread::UI);
545 DCHECK(!callback.is_null()); 545 DCHECK(!callback.is_null());
546 546
547 scheduler_->CopyResource( 547 scheduler_->CopyResource(
548 resource_id, parent_resource_id, new_title, last_modified, 548 resource_id, parent_resource_id, new_title, last_modified,
549 base::Bind(&CopyOperation::UpdateAfterServerSideOperation, 549 base::Bind(&CopyOperation::UpdateAfterServerSideOperation,
550 weak_ptr_factory_.GetWeakPtr(), 550 weak_ptr_factory_.GetWeakPtr(),
551 callback)); 551 callback));
552 } 552 }
553 553
554 void CopyOperation::UpdateAfterServerSideOperation( 554 void CopyOperation::UpdateAfterServerSideOperation(
555 const FileOperationCallback& callback, 555 const FileOperationCallback& callback,
556 google_apis::DriveApiErrorCode status, 556 google_apis::DriveApiErrorCode status,
557 scoped_ptr<google_apis::FileResource> entry) { 557 scoped_ptr<google_apis::FileResource> entry) {
558 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 558 DCHECK_CURRENTLY_ON(BrowserThread::UI);
559 DCHECK(!callback.is_null()); 559 DCHECK(!callback.is_null());
560 560
561 FileError error = GDataToFileError(status); 561 FileError error = GDataToFileError(status);
562 if (error != FILE_ERROR_OK) { 562 if (error != FILE_ERROR_OK) {
563 callback.Run(error); 563 callback.Run(error);
564 return; 564 return;
565 } 565 }
566 566
567 ResourceEntry* resource_entry = new ResourceEntry; 567 ResourceEntry* resource_entry = new ResourceEntry;
568 568
(...skipping 13 matching lines...) Expand all
582 callback, 582 callback,
583 base::Owned(file_path), 583 base::Owned(file_path),
584 base::Owned(resource_entry))); 584 base::Owned(resource_entry)));
585 } 585 }
586 586
587 void CopyOperation::UpdateAfterLocalStateUpdate( 587 void CopyOperation::UpdateAfterLocalStateUpdate(
588 const FileOperationCallback& callback, 588 const FileOperationCallback& callback,
589 base::FilePath* file_path, 589 base::FilePath* file_path,
590 const ResourceEntry* entry, 590 const ResourceEntry* entry,
591 FileError error) { 591 FileError error) {
592 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 592 DCHECK_CURRENTLY_ON(BrowserThread::UI);
593 DCHECK(!callback.is_null()); 593 DCHECK(!callback.is_null());
594 594
595 if (error == FILE_ERROR_OK) { 595 if (error == FILE_ERROR_OK) {
596 FileChange changed_file; 596 FileChange changed_file;
597 changed_file.Update(*file_path, *entry, FileChange::ADD_OR_UPDATE); 597 changed_file.Update(*file_path, *entry, FileChange::ADD_OR_UPDATE);
598 delegate_->OnFileChangedByOperation(changed_file); 598 delegate_->OnFileChangedByOperation(changed_file);
599 } 599 }
600 callback.Run(error); 600 callback.Run(error);
601 } 601 }
602 602
603 void CopyOperation::ScheduleTransferRegularFile( 603 void CopyOperation::ScheduleTransferRegularFile(
604 const base::FilePath& local_src_path, 604 const base::FilePath& local_src_path,
605 const base::FilePath& remote_dest_path, 605 const base::FilePath& remote_dest_path,
606 const FileOperationCallback& callback) { 606 const FileOperationCallback& callback) {
607 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 607 DCHECK_CURRENTLY_ON(BrowserThread::UI);
608 DCHECK(!callback.is_null()); 608 DCHECK(!callback.is_null());
609 609
610 create_file_operation_->CreateFile( 610 create_file_operation_->CreateFile(
611 remote_dest_path, 611 remote_dest_path,
612 false, // Not exclusive (OK even if a file already exists). 612 false, // Not exclusive (OK even if a file already exists).
613 std::string(), // no specific mime type; CreateFile should guess it. 613 std::string(), // no specific mime type; CreateFile should guess it.
614 base::Bind(&CopyOperation::ScheduleTransferRegularFileAfterCreate, 614 base::Bind(&CopyOperation::ScheduleTransferRegularFileAfterCreate,
615 weak_ptr_factory_.GetWeakPtr(), 615 weak_ptr_factory_.GetWeakPtr(),
616 local_src_path, remote_dest_path, callback)); 616 local_src_path, remote_dest_path, callback));
617 } 617 }
618 618
619 void CopyOperation::ScheduleTransferRegularFileAfterCreate( 619 void CopyOperation::ScheduleTransferRegularFileAfterCreate(
620 const base::FilePath& local_src_path, 620 const base::FilePath& local_src_path,
621 const base::FilePath& remote_dest_path, 621 const base::FilePath& remote_dest_path,
622 const FileOperationCallback& callback, 622 const FileOperationCallback& callback,
623 FileError error) { 623 FileError error) {
624 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 624 DCHECK_CURRENTLY_ON(BrowserThread::UI);
625 DCHECK(!callback.is_null()); 625 DCHECK(!callback.is_null());
626 626
627 if (error != FILE_ERROR_OK) { 627 if (error != FILE_ERROR_OK) {
628 callback.Run(error); 628 callback.Run(error);
629 return; 629 return;
630 } 630 }
631 631
632 std::string* local_id = new std::string; 632 std::string* local_id = new std::string;
633 ResourceEntry* entry = new ResourceEntry; 633 ResourceEntry* entry = new ResourceEntry;
634 base::PostTaskAndReplyWithResult( 634 base::PostTaskAndReplyWithResult(
(...skipping 14 matching lines...) Expand all
649 base::Owned(entry), 649 base::Owned(entry),
650 base::Owned(local_id))); 650 base::Owned(local_id)));
651 } 651 }
652 652
653 void CopyOperation::ScheduleTransferRegularFileAfterUpdateLocalState( 653 void CopyOperation::ScheduleTransferRegularFileAfterUpdateLocalState(
654 const FileOperationCallback& callback, 654 const FileOperationCallback& callback,
655 const base::FilePath& remote_dest_path, 655 const base::FilePath& remote_dest_path,
656 const ResourceEntry* entry, 656 const ResourceEntry* entry,
657 std::string* local_id, 657 std::string* local_id,
658 FileError error) { 658 FileError error) {
659 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 659 DCHECK_CURRENTLY_ON(BrowserThread::UI);
660 DCHECK(!callback.is_null()); 660 DCHECK(!callback.is_null());
661 661
662 if (error == FILE_ERROR_OK) { 662 if (error == FILE_ERROR_OK) {
663 FileChange changed_file; 663 FileChange changed_file;
664 changed_file.Update(remote_dest_path, *entry, FileChange::ADD_OR_UPDATE); 664 changed_file.Update(remote_dest_path, *entry, FileChange::ADD_OR_UPDATE);
665 delegate_->OnFileChangedByOperation(changed_file); 665 delegate_->OnFileChangedByOperation(changed_file);
666 // Syncing for copy should be done in background, so pass the BACKGROUND 666 // Syncing for copy should be done in background, so pass the BACKGROUND
667 // context. See: crbug.com/420278. 667 // context. See: crbug.com/420278.
668 delegate_->OnEntryUpdatedByOperation(ClientContext(BACKGROUND), *local_id); 668 delegate_->OnEntryUpdatedByOperation(ClientContext(BACKGROUND), *local_id);
669 } 669 }
670 callback.Run(error); 670 callback.Run(error);
671 } 671 }
672 672
673 } // namespace file_system 673 } // namespace file_system
674 } // namespace drive 674 } // namespace drive
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/file_system.cc ('k') | chrome/browser/chromeos/drive/file_system/create_directory_operation.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698