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

Side by Side Diff: chrome/browser/drive/fake_drive_service.cc

Issue 1115573002: [chrome/browser/drive] Avoid use of MessageLoopProxy by TTRH (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed Review Comments : MessageLoop postTask replacements Created 5 years, 7 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/drive/fake_drive_service.h" 5 #include "chrome/browser/drive/fake_drive_service.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/json/json_string_value_serializer.h" 10 #include "base/json/json_string_value_serializer.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/md5.h" 12 #include "base/md5.h"
13 #include "base/message_loop/message_loop.h"
14 #include "base/strings/string_number_conversions.h" 13 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/string_split.h" 14 #include "base/strings/string_split.h"
16 #include "base/strings/string_tokenizer.h" 15 #include "base/strings/string_tokenizer.h"
17 #include "base/strings/string_util.h" 16 #include "base/strings/string_util.h"
18 #include "base/strings/stringprintf.h" 17 #include "base/strings/stringprintf.h"
19 #include "base/strings/utf_string_conversions.h" 18 #include "base/strings/utf_string_conversions.h"
19 #include "base/thread_task_runner_handle.h"
20 #include "base/values.h" 20 #include "base/values.h"
21 #include "chrome/browser/drive/drive_api_util.h" 21 #include "chrome/browser/drive/drive_api_util.h"
22 #include "google_apis/drive/drive_api_parser.h" 22 #include "google_apis/drive/drive_api_parser.h"
23 #include "google_apis/drive/test_util.h" 23 #include "google_apis/drive/test_util.h"
24 #include "net/base/escape.h" 24 #include "net/base/escape.h"
25 #include "net/base/url_util.h" 25 #include "net/base/url_util.h"
26 26
27 using google_apis::AboutResource; 27 using google_apis::AboutResource;
28 using google_apis::AboutResourceCallback; 28 using google_apis::AboutResourceCallback;
29 using google_apis::AppList; 29 using google_apis::AppList;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 return false; 98 return false;
99 } 99 }
100 return true; 100 return true;
101 } 101 }
102 102
103 void ScheduleUploadRangeCallback(const UploadRangeCallback& callback, 103 void ScheduleUploadRangeCallback(const UploadRangeCallback& callback,
104 int64 start_position, 104 int64 start_position,
105 int64 end_position, 105 int64 end_position,
106 DriveApiErrorCode error, 106 DriveApiErrorCode error,
107 scoped_ptr<FileResource> entry) { 107 scoped_ptr<FileResource> entry) {
108 base::MessageLoop::current()->PostTask( 108 base::ThreadTaskRunnerHandle::Get()->PostTask(
109 FROM_HERE, 109 FROM_HERE,
110 base::Bind(callback, 110 base::Bind(callback,
111 UploadRangeResponse(error, 111 UploadRangeResponse(error,
112 start_position, 112 start_position,
113 end_position), 113 end_position),
114 base::Passed(&entry))); 114 base::Passed(&entry)));
115 } 115 }
116 116
117 void FileListCallbackAdapter(const FileListCallback& callback, 117 void FileListCallbackAdapter(const FileListCallback& callback,
118 DriveApiErrorCode error, 118 DriveApiErrorCode error,
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 next_link, base::Bind(&FileListCallbackAdapter, callback)); 527 next_link, base::Bind(&FileListCallbackAdapter, callback));
528 } 528 }
529 529
530 CancelCallback FakeDriveService::GetFileResource( 530 CancelCallback FakeDriveService::GetFileResource(
531 const std::string& resource_id, 531 const std::string& resource_id,
532 const FileResourceCallback& callback) { 532 const FileResourceCallback& callback) {
533 DCHECK(thread_checker_.CalledOnValidThread()); 533 DCHECK(thread_checker_.CalledOnValidThread());
534 DCHECK(!callback.is_null()); 534 DCHECK(!callback.is_null());
535 535
536 if (offline_) { 536 if (offline_) {
537 base::MessageLoop::current()->PostTask( 537 base::ThreadTaskRunnerHandle::Get()->PostTask(
538 FROM_HERE, 538 FROM_HERE,
539 base::Bind(callback, 539 base::Bind(callback,
540 DRIVE_NO_CONNECTION, 540 DRIVE_NO_CONNECTION,
541 base::Passed(scoped_ptr<FileResource>()))); 541 base::Passed(scoped_ptr<FileResource>())));
542 return CancelCallback(); 542 return CancelCallback();
543 } 543 }
544 544
545 EntryInfo* entry = FindEntryByResourceId(resource_id); 545 EntryInfo* entry = FindEntryByResourceId(resource_id);
546 if (entry && entry->change_resource.file()) { 546 if (entry && entry->change_resource.file()) {
547 base::MessageLoop::current()->PostTask( 547 base::ThreadTaskRunnerHandle::Get()->PostTask(
548 FROM_HERE, 548 FROM_HERE,
549 base::Bind(callback, HTTP_SUCCESS, base::Passed(make_scoped_ptr( 549 base::Bind(callback, HTTP_SUCCESS, base::Passed(make_scoped_ptr(
550 new FileResource(*entry->change_resource.file()))))); 550 new FileResource(*entry->change_resource.file())))));
551 return CancelCallback(); 551 return CancelCallback();
552 } 552 }
553 553
554 base::MessageLoop::current()->PostTask( 554 base::ThreadTaskRunnerHandle::Get()->PostTask(
555 FROM_HERE, 555 FROM_HERE,
556 base::Bind(callback, HTTP_NOT_FOUND, 556 base::Bind(callback, HTTP_NOT_FOUND,
557 base::Passed(scoped_ptr<FileResource>()))); 557 base::Passed(scoped_ptr<FileResource>())));
558 return CancelCallback(); 558 return CancelCallback();
559 } 559 }
560 560
561 CancelCallback FakeDriveService::GetShareUrl( 561 CancelCallback FakeDriveService::GetShareUrl(
562 const std::string& resource_id, 562 const std::string& resource_id,
563 const GURL& /* embed_origin */, 563 const GURL& /* embed_origin */,
564 const GetShareUrlCallback& callback) { 564 const GetShareUrlCallback& callback) {
565 DCHECK(thread_checker_.CalledOnValidThread()); 565 DCHECK(thread_checker_.CalledOnValidThread());
566 DCHECK(!callback.is_null()); 566 DCHECK(!callback.is_null());
567 567
568 if (offline_) { 568 if (offline_) {
569 base::MessageLoop::current()->PostTask( 569 base::ThreadTaskRunnerHandle::Get()->PostTask(
570 FROM_HERE, 570 FROM_HERE,
571 base::Bind(callback, 571 base::Bind(callback,
572 DRIVE_NO_CONNECTION, 572 DRIVE_NO_CONNECTION,
573 GURL())); 573 GURL()));
574 return CancelCallback(); 574 return CancelCallback();
575 } 575 }
576 576
577 EntryInfo* entry = FindEntryByResourceId(resource_id); 577 EntryInfo* entry = FindEntryByResourceId(resource_id);
578 if (entry) { 578 if (entry) {
579 base::MessageLoop::current()->PostTask( 579 base::ThreadTaskRunnerHandle::Get()->PostTask(
580 FROM_HERE, 580 FROM_HERE,
581 base::Bind(callback, HTTP_SUCCESS, entry->share_url)); 581 base::Bind(callback, HTTP_SUCCESS, entry->share_url));
582 return CancelCallback(); 582 return CancelCallback();
583 } 583 }
584 584
585 base::MessageLoop::current()->PostTask( 585 base::ThreadTaskRunnerHandle::Get()->PostTask(
586 FROM_HERE, 586 FROM_HERE,
587 base::Bind(callback, HTTP_NOT_FOUND, GURL())); 587 base::Bind(callback, HTTP_NOT_FOUND, GURL()));
588 return CancelCallback(); 588 return CancelCallback();
589 } 589 }
590 590
591 CancelCallback FakeDriveService::GetAboutResource( 591 CancelCallback FakeDriveService::GetAboutResource(
592 const AboutResourceCallback& callback) { 592 const AboutResourceCallback& callback) {
593 DCHECK(thread_checker_.CalledOnValidThread()); 593 DCHECK(thread_checker_.CalledOnValidThread());
594 DCHECK(!callback.is_null()); 594 DCHECK(!callback.is_null());
595 595
596 if (offline_) { 596 if (offline_) {
597 scoped_ptr<AboutResource> null; 597 scoped_ptr<AboutResource> null;
598 base::MessageLoop::current()->PostTask( 598 base::ThreadTaskRunnerHandle::Get()->PostTask(
599 FROM_HERE, 599 FROM_HERE,
600 base::Bind(callback, 600 base::Bind(callback,
601 DRIVE_NO_CONNECTION, base::Passed(&null))); 601 DRIVE_NO_CONNECTION, base::Passed(&null)));
602 return CancelCallback(); 602 return CancelCallback();
603 } 603 }
604 604
605 ++about_resource_load_count_; 605 ++about_resource_load_count_;
606 scoped_ptr<AboutResource> about_resource(new AboutResource(*about_resource_)); 606 scoped_ptr<AboutResource> about_resource(new AboutResource(*about_resource_));
607 base::MessageLoop::current()->PostTask( 607 base::ThreadTaskRunnerHandle::Get()->PostTask(
608 FROM_HERE, 608 FROM_HERE,
609 base::Bind(callback, 609 base::Bind(callback,
610 HTTP_SUCCESS, base::Passed(&about_resource))); 610 HTTP_SUCCESS, base::Passed(&about_resource)));
611 return CancelCallback(); 611 return CancelCallback();
612 } 612 }
613 613
614 CancelCallback FakeDriveService::GetAppList(const AppListCallback& callback) { 614 CancelCallback FakeDriveService::GetAppList(const AppListCallback& callback) {
615 DCHECK(thread_checker_.CalledOnValidThread()); 615 DCHECK(thread_checker_.CalledOnValidThread());
616 DCHECK(!callback.is_null()); 616 DCHECK(!callback.is_null());
617 DCHECK(app_info_value_); 617 DCHECK(app_info_value_);
618 618
619 if (offline_) { 619 if (offline_) {
620 scoped_ptr<AppList> null; 620 scoped_ptr<AppList> null;
621 base::MessageLoop::current()->PostTask( 621 base::ThreadTaskRunnerHandle::Get()->PostTask(
622 FROM_HERE, 622 FROM_HERE,
623 base::Bind(callback, 623 base::Bind(callback,
624 DRIVE_NO_CONNECTION, 624 DRIVE_NO_CONNECTION,
625 base::Passed(&null))); 625 base::Passed(&null)));
626 return CancelCallback(); 626 return CancelCallback();
627 } 627 }
628 628
629 ++app_list_load_count_; 629 ++app_list_load_count_;
630 scoped_ptr<AppList> app_list(AppList::CreateFrom(*app_info_value_)); 630 scoped_ptr<AppList> app_list(AppList::CreateFrom(*app_info_value_));
631 base::MessageLoop::current()->PostTask( 631 base::ThreadTaskRunnerHandle::Get()->PostTask(
632 FROM_HERE, 632 FROM_HERE,
633 base::Bind(callback, HTTP_SUCCESS, base::Passed(&app_list))); 633 base::Bind(callback, HTTP_SUCCESS, base::Passed(&app_list)));
634 return CancelCallback(); 634 return CancelCallback();
635 } 635 }
636 636
637 CancelCallback FakeDriveService::DeleteResource( 637 CancelCallback FakeDriveService::DeleteResource(
638 const std::string& resource_id, 638 const std::string& resource_id,
639 const std::string& etag, 639 const std::string& etag,
640 const EntryActionCallback& callback) { 640 const EntryActionCallback& callback) {
641 DCHECK(thread_checker_.CalledOnValidThread()); 641 DCHECK(thread_checker_.CalledOnValidThread());
642 DCHECK(!callback.is_null()); 642 DCHECK(!callback.is_null());
643 643
644 if (offline_) { 644 if (offline_) {
645 base::MessageLoop::current()->PostTask( 645 base::ThreadTaskRunnerHandle::Get()->PostTask(
646 FROM_HERE, base::Bind(callback, DRIVE_NO_CONNECTION)); 646 FROM_HERE, base::Bind(callback, DRIVE_NO_CONNECTION));
647 return CancelCallback(); 647 return CancelCallback();
648 } 648 }
649 649
650 EntryInfo* entry = FindEntryByResourceId(resource_id); 650 EntryInfo* entry = FindEntryByResourceId(resource_id);
651 if (!entry) { 651 if (!entry) {
652 base::MessageLoop::current()->PostTask( 652 base::ThreadTaskRunnerHandle::Get()->PostTask(
653 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); 653 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND));
654 return CancelCallback(); 654 return CancelCallback();
655 } 655 }
656 656
657 ChangeResource* change = &entry->change_resource; 657 ChangeResource* change = &entry->change_resource;
658 const FileResource* file = change->file(); 658 const FileResource* file = change->file();
659 if (change->is_deleted()) { 659 if (change->is_deleted()) {
660 base::MessageLoop::current()->PostTask( 660 base::ThreadTaskRunnerHandle::Get()->PostTask(
661 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); 661 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND));
662 return CancelCallback(); 662 return CancelCallback();
663 } 663 }
664 664
665 if (!etag.empty() && etag != file->etag()) { 665 if (!etag.empty() && etag != file->etag()) {
666 base::MessageLoop::current()->PostTask( 666 base::ThreadTaskRunnerHandle::Get()->PostTask(
667 FROM_HERE, base::Bind(callback, HTTP_PRECONDITION)); 667 FROM_HERE, base::Bind(callback, HTTP_PRECONDITION));
668 return CancelCallback(); 668 return CancelCallback();
669 } 669 }
670 670
671 if (entry->user_permission != google_apis::drive::PERMISSION_ROLE_OWNER) { 671 if (entry->user_permission != google_apis::drive::PERMISSION_ROLE_OWNER) {
672 base::MessageLoop::current()->PostTask( 672 base::ThreadTaskRunnerHandle::Get()->PostTask(
673 FROM_HERE, base::Bind(callback, HTTP_FORBIDDEN)); 673 FROM_HERE, base::Bind(callback, HTTP_FORBIDDEN));
674 return CancelCallback(); 674 return CancelCallback();
675 } 675 }
676 676
677 change->set_deleted(true); 677 change->set_deleted(true);
678 AddNewChangestamp(change); 678 AddNewChangestamp(change);
679 change->set_file(scoped_ptr<FileResource>()); 679 change->set_file(scoped_ptr<FileResource>());
680 base::MessageLoop::current()->PostTask( 680 base::ThreadTaskRunnerHandle::Get()->PostTask(
681 FROM_HERE, base::Bind(callback, HTTP_NO_CONTENT)); 681 FROM_HERE, base::Bind(callback, HTTP_NO_CONTENT));
682 base::MessageLoop::current()->PostTask( 682 base::ThreadTaskRunnerHandle::Get()->PostTask(
683 FROM_HERE, 683 FROM_HERE,
684 base::Bind(&FakeDriveService::NotifyObservers, 684 base::Bind(&FakeDriveService::NotifyObservers,
685 weak_ptr_factory_.GetWeakPtr())); 685 weak_ptr_factory_.GetWeakPtr()));
686 return CancelCallback(); 686 return CancelCallback();
687 } 687 }
688 688
689 CancelCallback FakeDriveService::TrashResource( 689 CancelCallback FakeDriveService::TrashResource(
690 const std::string& resource_id, 690 const std::string& resource_id,
691 const EntryActionCallback& callback) { 691 const EntryActionCallback& callback) {
692 DCHECK(thread_checker_.CalledOnValidThread()); 692 DCHECK(thread_checker_.CalledOnValidThread());
693 DCHECK(!callback.is_null()); 693 DCHECK(!callback.is_null());
694 694
695 if (offline_) { 695 if (offline_) {
696 base::MessageLoop::current()->PostTask( 696 base::ThreadTaskRunnerHandle::Get()->PostTask(
697 FROM_HERE, base::Bind(callback, DRIVE_NO_CONNECTION)); 697 FROM_HERE, base::Bind(callback, DRIVE_NO_CONNECTION));
698 return CancelCallback(); 698 return CancelCallback();
699 } 699 }
700 700
701 EntryInfo* entry = FindEntryByResourceId(resource_id); 701 EntryInfo* entry = FindEntryByResourceId(resource_id);
702 if (!entry) { 702 if (!entry) {
703 base::MessageLoop::current()->PostTask( 703 base::ThreadTaskRunnerHandle::Get()->PostTask(
704 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); 704 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND));
705 return CancelCallback(); 705 return CancelCallback();
706 } 706 }
707 707
708 ChangeResource* change = &entry->change_resource; 708 ChangeResource* change = &entry->change_resource;
709 FileResource* file = change->mutable_file(); 709 FileResource* file = change->mutable_file();
710 if (change->is_deleted() || file->labels().is_trashed()) { 710 if (change->is_deleted() || file->labels().is_trashed()) {
711 base::MessageLoop::current()->PostTask( 711 base::ThreadTaskRunnerHandle::Get()->PostTask(
712 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); 712 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND));
713 return CancelCallback(); 713 return CancelCallback();
714 } 714 }
715 715
716 if (entry->user_permission != google_apis::drive::PERMISSION_ROLE_OWNER) { 716 if (entry->user_permission != google_apis::drive::PERMISSION_ROLE_OWNER) {
717 base::MessageLoop::current()->PostTask( 717 base::ThreadTaskRunnerHandle::Get()->PostTask(
718 FROM_HERE, base::Bind(callback, HTTP_FORBIDDEN)); 718 FROM_HERE, base::Bind(callback, HTTP_FORBIDDEN));
719 return CancelCallback(); 719 return CancelCallback();
720 } 720 }
721 721
722 file->mutable_labels()->set_trashed(true); 722 file->mutable_labels()->set_trashed(true);
723 AddNewChangestamp(change); 723 AddNewChangestamp(change);
724 base::MessageLoop::current()->PostTask( 724 base::ThreadTaskRunnerHandle::Get()->PostTask(
725 FROM_HERE, base::Bind(callback, HTTP_SUCCESS)); 725 FROM_HERE, base::Bind(callback, HTTP_SUCCESS));
726 base::MessageLoop::current()->PostTask( 726 base::ThreadTaskRunnerHandle::Get()->PostTask(
727 FROM_HERE, 727 FROM_HERE,
728 base::Bind(&FakeDriveService::NotifyObservers, 728 base::Bind(&FakeDriveService::NotifyObservers,
729 weak_ptr_factory_.GetWeakPtr())); 729 weak_ptr_factory_.GetWeakPtr()));
730 return CancelCallback(); 730 return CancelCallback();
731 } 731 }
732 732
733 CancelCallback FakeDriveService::DownloadFile( 733 CancelCallback FakeDriveService::DownloadFile(
734 const base::FilePath& local_cache_path, 734 const base::FilePath& local_cache_path,
735 const std::string& resource_id, 735 const std::string& resource_id,
736 const DownloadActionCallback& download_action_callback, 736 const DownloadActionCallback& download_action_callback,
737 const GetContentCallback& get_content_callback, 737 const GetContentCallback& get_content_callback,
738 const ProgressCallback& progress_callback) { 738 const ProgressCallback& progress_callback) {
739 DCHECK(thread_checker_.CalledOnValidThread()); 739 DCHECK(thread_checker_.CalledOnValidThread());
740 DCHECK(!download_action_callback.is_null()); 740 DCHECK(!download_action_callback.is_null());
741 741
742 if (offline_) { 742 if (offline_) {
743 base::MessageLoop::current()->PostTask( 743 base::ThreadTaskRunnerHandle::Get()->PostTask(
744 FROM_HERE, 744 FROM_HERE,
745 base::Bind(download_action_callback, 745 base::Bind(download_action_callback,
746 DRIVE_NO_CONNECTION, 746 DRIVE_NO_CONNECTION,
747 base::FilePath())); 747 base::FilePath()));
748 return CancelCallback(); 748 return CancelCallback();
749 } 749 }
750 750
751 EntryInfo* entry = FindEntryByResourceId(resource_id); 751 EntryInfo* entry = FindEntryByResourceId(resource_id);
752 if (!entry || entry->change_resource.file()->IsHostedDocument()) { 752 if (!entry || entry->change_resource.file()->IsHostedDocument()) {
753 base::MessageLoopProxy::current()->PostTask( 753 base::ThreadTaskRunnerHandle::Get()->PostTask(
754 FROM_HERE, 754 FROM_HERE,
755 base::Bind(download_action_callback, HTTP_NOT_FOUND, base::FilePath())); 755 base::Bind(download_action_callback, HTTP_NOT_FOUND, base::FilePath()));
756 return CancelCallback(); 756 return CancelCallback();
757 } 757 }
758 758
759 const FileResource* file = entry->change_resource.file(); 759 const FileResource* file = entry->change_resource.file();
760 const std::string& content_data = entry->content_data; 760 const std::string& content_data = entry->content_data;
761 int64 file_size = file->file_size(); 761 int64 file_size = file->file_size();
762 DCHECK_EQ(static_cast<size_t>(file_size), content_data.size()); 762 DCHECK_EQ(static_cast<size_t>(file_size), content_data.size());
763 763
764 if (!get_content_callback.is_null()) { 764 if (!get_content_callback.is_null()) {
765 const int64 kBlockSize = 5; 765 const int64 kBlockSize = 5;
766 for (int64 i = 0; i < file_size; i += kBlockSize) { 766 for (int64 i = 0; i < file_size; i += kBlockSize) {
767 const int64 size = std::min(kBlockSize, file_size - i); 767 const int64 size = std::min(kBlockSize, file_size - i);
768 scoped_ptr<std::string> content_for_callback( 768 scoped_ptr<std::string> content_for_callback(
769 new std::string(content_data.substr(i, size))); 769 new std::string(content_data.substr(i, size)));
770 base::MessageLoopProxy::current()->PostTask( 770 base::ThreadTaskRunnerHandle::Get()->PostTask(
771 FROM_HERE, 771 FROM_HERE,
772 base::Bind(get_content_callback, HTTP_SUCCESS, 772 base::Bind(get_content_callback, HTTP_SUCCESS,
773 base::Passed(&content_for_callback))); 773 base::Passed(&content_for_callback)));
774 } 774 }
775 } 775 }
776 776
777 if (!test_util::WriteStringToFile(local_cache_path, content_data)) { 777 if (!test_util::WriteStringToFile(local_cache_path, content_data)) {
778 // Failed to write the content. 778 // Failed to write the content.
779 base::MessageLoopProxy::current()->PostTask( 779 base::ThreadTaskRunnerHandle::Get()->PostTask(
780 FROM_HERE, 780 FROM_HERE,
781 base::Bind(download_action_callback, 781 base::Bind(download_action_callback,
782 DRIVE_FILE_ERROR, base::FilePath())); 782 DRIVE_FILE_ERROR, base::FilePath()));
783 return CancelCallback(); 783 return CancelCallback();
784 } 784 }
785 785
786 if (!progress_callback.is_null()) { 786 if (!progress_callback.is_null()) {
787 // See also the comment in ResumeUpload(). For testing that clients 787 // See also the comment in ResumeUpload(). For testing that clients
788 // can handle the case progress_callback is called multiple times, 788 // can handle the case progress_callback is called multiple times,
789 // here we invoke the callback twice. 789 // here we invoke the callback twice.
790 base::MessageLoopProxy::current()->PostTask( 790 base::ThreadTaskRunnerHandle::Get()->PostTask(
791 FROM_HERE, 791 FROM_HERE,
792 base::Bind(progress_callback, file_size / 2, file_size)); 792 base::Bind(progress_callback, file_size / 2, file_size));
793 base::MessageLoopProxy::current()->PostTask( 793 base::ThreadTaskRunnerHandle::Get()->PostTask(
794 FROM_HERE, 794 FROM_HERE,
795 base::Bind(progress_callback, file_size, file_size)); 795 base::Bind(progress_callback, file_size, file_size));
796 } 796 }
797 base::MessageLoopProxy::current()->PostTask( 797 base::ThreadTaskRunnerHandle::Get()->PostTask(
798 FROM_HERE, 798 FROM_HERE,
799 base::Bind(download_action_callback, 799 base::Bind(download_action_callback,
800 HTTP_SUCCESS, 800 HTTP_SUCCESS,
801 local_cache_path)); 801 local_cache_path));
802 return CancelCallback(); 802 return CancelCallback();
803 } 803 }
804 804
805 CancelCallback FakeDriveService::CopyResource( 805 CancelCallback FakeDriveService::CopyResource(
806 const std::string& resource_id, 806 const std::string& resource_id,
807 const std::string& in_parent_resource_id, 807 const std::string& in_parent_resource_id,
808 const std::string& new_title, 808 const std::string& new_title,
809 const base::Time& last_modified, 809 const base::Time& last_modified,
810 const FileResourceCallback& callback) { 810 const FileResourceCallback& callback) {
811 DCHECK(thread_checker_.CalledOnValidThread()); 811 DCHECK(thread_checker_.CalledOnValidThread());
812 DCHECK(!callback.is_null()); 812 DCHECK(!callback.is_null());
813 813
814 if (offline_) { 814 if (offline_) {
815 base::MessageLoop::current()->PostTask( 815 base::ThreadTaskRunnerHandle::Get()->PostTask(
816 FROM_HERE, 816 FROM_HERE,
817 base::Bind(callback, 817 base::Bind(callback,
818 DRIVE_NO_CONNECTION, 818 DRIVE_NO_CONNECTION,
819 base::Passed(scoped_ptr<FileResource>()))); 819 base::Passed(scoped_ptr<FileResource>())));
820 return CancelCallback(); 820 return CancelCallback();
821 } 821 }
822 822
823 const std::string& parent_resource_id = in_parent_resource_id.empty() ? 823 const std::string& parent_resource_id = in_parent_resource_id.empty() ?
824 GetRootResourceId() : in_parent_resource_id; 824 GetRootResourceId() : in_parent_resource_id;
825 825
826 EntryInfo* entry = FindEntryByResourceId(resource_id); 826 EntryInfo* entry = FindEntryByResourceId(resource_id);
827 if (!entry) { 827 if (!entry) {
828 base::MessageLoop::current()->PostTask( 828 base::ThreadTaskRunnerHandle::Get()->PostTask(
829 FROM_HERE, 829 FROM_HERE,
830 base::Bind(callback, HTTP_NOT_FOUND, 830 base::Bind(callback, HTTP_NOT_FOUND,
831 base::Passed(scoped_ptr<FileResource>()))); 831 base::Passed(scoped_ptr<FileResource>())));
832 return CancelCallback(); 832 return CancelCallback();
833 } 833 }
834 834
835 // Make a copy and set the new resource ID and the new title. 835 // Make a copy and set the new resource ID and the new title.
836 scoped_ptr<EntryInfo> copied_entry(new EntryInfo); 836 scoped_ptr<EntryInfo> copied_entry(new EntryInfo);
837 copied_entry->content_data = entry->content_data; 837 copied_entry->content_data = entry->content_data;
838 copied_entry->share_url = entry->share_url; 838 copied_entry->share_url = entry->share_url;
(...skipping 16 matching lines...) Expand all
855 855
856 if (!last_modified.is_null()) 856 if (!last_modified.is_null())
857 new_file->set_modified_date(last_modified); 857 new_file->set_modified_date(last_modified);
858 858
859 AddNewChangestamp(new_change); 859 AddNewChangestamp(new_change);
860 UpdateETag(new_file); 860 UpdateETag(new_file);
861 861
862 // Add the new entry to the map. 862 // Add the new entry to the map.
863 entries_[new_resource_id] = copied_entry.release(); 863 entries_[new_resource_id] = copied_entry.release();
864 864
865 base::MessageLoop::current()->PostTask( 865 base::ThreadTaskRunnerHandle::Get()->PostTask(
866 FROM_HERE, 866 FROM_HERE,
867 base::Bind(callback, 867 base::Bind(callback,
868 HTTP_SUCCESS, 868 HTTP_SUCCESS,
869 base::Passed(make_scoped_ptr(new FileResource(*new_file))))); 869 base::Passed(make_scoped_ptr(new FileResource(*new_file)))));
870 base::MessageLoop::current()->PostTask( 870 base::ThreadTaskRunnerHandle::Get()->PostTask(
871 FROM_HERE, 871 FROM_HERE,
872 base::Bind(&FakeDriveService::NotifyObservers, 872 base::Bind(&FakeDriveService::NotifyObservers,
873 weak_ptr_factory_.GetWeakPtr())); 873 weak_ptr_factory_.GetWeakPtr()));
874 return CancelCallback(); 874 return CancelCallback();
875 } 875 }
876 876
877 CancelCallback FakeDriveService::UpdateResource( 877 CancelCallback FakeDriveService::UpdateResource(
878 const std::string& resource_id, 878 const std::string& resource_id,
879 const std::string& parent_resource_id, 879 const std::string& parent_resource_id,
880 const std::string& new_title, 880 const std::string& new_title,
881 const base::Time& last_modified, 881 const base::Time& last_modified,
882 const base::Time& last_viewed_by_me, 882 const base::Time& last_viewed_by_me,
883 const google_apis::drive::Properties& properties, 883 const google_apis::drive::Properties& properties,
884 const google_apis::FileResourceCallback& callback) { 884 const google_apis::FileResourceCallback& callback) {
885 DCHECK(thread_checker_.CalledOnValidThread()); 885 DCHECK(thread_checker_.CalledOnValidThread());
886 DCHECK(!callback.is_null()); 886 DCHECK(!callback.is_null());
887 887
888 if (offline_) { 888 if (offline_) {
889 base::MessageLoop::current()->PostTask( 889 base::ThreadTaskRunnerHandle::Get()->PostTask(
890 FROM_HERE, base::Bind(callback, DRIVE_NO_CONNECTION, 890 FROM_HERE, base::Bind(callback, DRIVE_NO_CONNECTION,
891 base::Passed(scoped_ptr<FileResource>()))); 891 base::Passed(scoped_ptr<FileResource>())));
892 return CancelCallback(); 892 return CancelCallback();
893 } 893 }
894 894
895 EntryInfo* entry = FindEntryByResourceId(resource_id); 895 EntryInfo* entry = FindEntryByResourceId(resource_id);
896 if (!entry) { 896 if (!entry) {
897 base::MessageLoop::current()->PostTask( 897 base::ThreadTaskRunnerHandle::Get()->PostTask(
898 FROM_HERE, 898 FROM_HERE,
899 base::Bind(callback, HTTP_NOT_FOUND, 899 base::Bind(callback, HTTP_NOT_FOUND,
900 base::Passed(scoped_ptr<FileResource>()))); 900 base::Passed(scoped_ptr<FileResource>())));
901 return CancelCallback(); 901 return CancelCallback();
902 } 902 }
903 903
904 if (!UserHasWriteAccess(entry->user_permission)) { 904 if (!UserHasWriteAccess(entry->user_permission)) {
905 base::MessageLoop::current()->PostTask( 905 base::ThreadTaskRunnerHandle::Get()->PostTask(
906 FROM_HERE, 906 FROM_HERE,
907 base::Bind(callback, HTTP_FORBIDDEN, 907 base::Bind(callback, HTTP_FORBIDDEN,
908 base::Passed(scoped_ptr<FileResource>()))); 908 base::Passed(scoped_ptr<FileResource>())));
909 return CancelCallback(); 909 return CancelCallback();
910 } 910 }
911 911
912 ChangeResource* change = &entry->change_resource; 912 ChangeResource* change = &entry->change_resource;
913 FileResource* file = change->mutable_file(); 913 FileResource* file = change->mutable_file();
914 914
915 if (!new_title.empty()) 915 if (!new_title.empty())
(...skipping 12 matching lines...) Expand all
928 928
929 if (!last_modified.is_null()) 929 if (!last_modified.is_null())
930 file->set_modified_date(last_modified); 930 file->set_modified_date(last_modified);
931 931
932 if (!last_viewed_by_me.is_null()) 932 if (!last_viewed_by_me.is_null())
933 file->set_last_viewed_by_me_date(last_viewed_by_me); 933 file->set_last_viewed_by_me_date(last_viewed_by_me);
934 934
935 AddNewChangestamp(change); 935 AddNewChangestamp(change);
936 UpdateETag(file); 936 UpdateETag(file);
937 937
938 base::MessageLoop::current()->PostTask( 938 base::ThreadTaskRunnerHandle::Get()->PostTask(
939 FROM_HERE, 939 FROM_HERE,
940 base::Bind(callback, HTTP_SUCCESS, 940 base::Bind(callback, HTTP_SUCCESS,
941 base::Passed(make_scoped_ptr(new FileResource(*file))))); 941 base::Passed(make_scoped_ptr(new FileResource(*file)))));
942 base::MessageLoop::current()->PostTask( 942 base::ThreadTaskRunnerHandle::Get()->PostTask(
943 FROM_HERE, 943 FROM_HERE,
944 base::Bind(&FakeDriveService::NotifyObservers, 944 base::Bind(&FakeDriveService::NotifyObservers,
945 weak_ptr_factory_.GetWeakPtr())); 945 weak_ptr_factory_.GetWeakPtr()));
946 return CancelCallback(); 946 return CancelCallback();
947 } 947 }
948 948
949 CancelCallback FakeDriveService::AddResourceToDirectory( 949 CancelCallback FakeDriveService::AddResourceToDirectory(
950 const std::string& parent_resource_id, 950 const std::string& parent_resource_id,
951 const std::string& resource_id, 951 const std::string& resource_id,
952 const EntryActionCallback& callback) { 952 const EntryActionCallback& callback) {
953 DCHECK(thread_checker_.CalledOnValidThread()); 953 DCHECK(thread_checker_.CalledOnValidThread());
954 DCHECK(!callback.is_null()); 954 DCHECK(!callback.is_null());
955 955
956 if (offline_) { 956 if (offline_) {
957 base::MessageLoop::current()->PostTask( 957 base::ThreadTaskRunnerHandle::Get()->PostTask(
958 FROM_HERE, base::Bind(callback, DRIVE_NO_CONNECTION)); 958 FROM_HERE, base::Bind(callback, DRIVE_NO_CONNECTION));
959 return CancelCallback(); 959 return CancelCallback();
960 } 960 }
961 961
962 EntryInfo* entry = FindEntryByResourceId(resource_id); 962 EntryInfo* entry = FindEntryByResourceId(resource_id);
963 if (!entry) { 963 if (!entry) {
964 base::MessageLoop::current()->PostTask( 964 base::ThreadTaskRunnerHandle::Get()->PostTask(
965 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); 965 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND));
966 return CancelCallback(); 966 return CancelCallback();
967 } 967 }
968 968
969 ChangeResource* change = &entry->change_resource; 969 ChangeResource* change = &entry->change_resource;
970 // On the real Drive server, resources do not necessary shape a tree 970 // On the real Drive server, resources do not necessary shape a tree
971 // structure. That is, each resource can have multiple parent. 971 // structure. That is, each resource can have multiple parent.
972 // We mimic the behavior here; AddResourceToDirectoy just adds 972 // We mimic the behavior here; AddResourceToDirectoy just adds
973 // one more parent, not overwriting old ones. 973 // one more parent, not overwriting old ones.
974 ParentReference parent; 974 ParentReference parent;
975 parent.set_file_id(parent_resource_id); 975 parent.set_file_id(parent_resource_id);
976 parent.set_parent_link(GetFakeLinkUrl(parent_resource_id)); 976 parent.set_parent_link(GetFakeLinkUrl(parent_resource_id));
977 change->mutable_file()->mutable_parents()->push_back(parent); 977 change->mutable_file()->mutable_parents()->push_back(parent);
978 978
979 AddNewChangestamp(change); 979 AddNewChangestamp(change);
980 base::MessageLoop::current()->PostTask( 980 base::ThreadTaskRunnerHandle::Get()->PostTask(
981 FROM_HERE, base::Bind(callback, HTTP_SUCCESS)); 981 FROM_HERE, base::Bind(callback, HTTP_SUCCESS));
982 base::MessageLoop::current()->PostTask( 982 base::ThreadTaskRunnerHandle::Get()->PostTask(
983 FROM_HERE, 983 FROM_HERE,
984 base::Bind(&FakeDriveService::NotifyObservers, 984 base::Bind(&FakeDriveService::NotifyObservers,
985 weak_ptr_factory_.GetWeakPtr())); 985 weak_ptr_factory_.GetWeakPtr()));
986 return CancelCallback(); 986 return CancelCallback();
987 } 987 }
988 988
989 CancelCallback FakeDriveService::RemoveResourceFromDirectory( 989 CancelCallback FakeDriveService::RemoveResourceFromDirectory(
990 const std::string& parent_resource_id, 990 const std::string& parent_resource_id,
991 const std::string& resource_id, 991 const std::string& resource_id,
992 const EntryActionCallback& callback) { 992 const EntryActionCallback& callback) {
993 DCHECK(thread_checker_.CalledOnValidThread()); 993 DCHECK(thread_checker_.CalledOnValidThread());
994 DCHECK(!callback.is_null()); 994 DCHECK(!callback.is_null());
995 995
996 if (offline_) { 996 if (offline_) {
997 base::MessageLoop::current()->PostTask( 997 base::ThreadTaskRunnerHandle::Get()->PostTask(
998 FROM_HERE, base::Bind(callback, DRIVE_NO_CONNECTION)); 998 FROM_HERE, base::Bind(callback, DRIVE_NO_CONNECTION));
999 return CancelCallback(); 999 return CancelCallback();
1000 } 1000 }
1001 1001
1002 EntryInfo* entry = FindEntryByResourceId(resource_id); 1002 EntryInfo* entry = FindEntryByResourceId(resource_id);
1003 if (!entry) { 1003 if (!entry) {
1004 base::MessageLoop::current()->PostTask( 1004 base::ThreadTaskRunnerHandle::Get()->PostTask(
1005 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); 1005 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND));
1006 return CancelCallback(); 1006 return CancelCallback();
1007 } 1007 }
1008 1008
1009 ChangeResource* change = &entry->change_resource; 1009 ChangeResource* change = &entry->change_resource;
1010 FileResource* file = change->mutable_file(); 1010 FileResource* file = change->mutable_file();
1011 std::vector<ParentReference>* parents = file->mutable_parents(); 1011 std::vector<ParentReference>* parents = file->mutable_parents();
1012 for (size_t i = 0; i < parents->size(); ++i) { 1012 for (size_t i = 0; i < parents->size(); ++i) {
1013 if ((*parents)[i].file_id() == parent_resource_id) { 1013 if ((*parents)[i].file_id() == parent_resource_id) {
1014 parents->erase(parents->begin() + i); 1014 parents->erase(parents->begin() + i);
1015 AddNewChangestamp(change); 1015 AddNewChangestamp(change);
1016 base::MessageLoop::current()->PostTask( 1016 base::ThreadTaskRunnerHandle::Get()->PostTask(
1017 FROM_HERE, base::Bind(callback, HTTP_NO_CONTENT)); 1017 FROM_HERE, base::Bind(callback, HTTP_NO_CONTENT));
1018 base::MessageLoop::current()->PostTask( 1018 base::ThreadTaskRunnerHandle::Get()->PostTask(
1019 FROM_HERE, 1019 FROM_HERE,
1020 base::Bind(&FakeDriveService::NotifyObservers, 1020 base::Bind(&FakeDriveService::NotifyObservers,
1021 weak_ptr_factory_.GetWeakPtr())); 1021 weak_ptr_factory_.GetWeakPtr()));
1022 return CancelCallback(); 1022 return CancelCallback();
1023 } 1023 }
1024 } 1024 }
1025 1025
1026 base::MessageLoop::current()->PostTask( 1026 base::ThreadTaskRunnerHandle::Get()->PostTask(
1027 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); 1027 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND));
1028 return CancelCallback(); 1028 return CancelCallback();
1029 } 1029 }
1030 1030
1031 CancelCallback FakeDriveService::AddNewDirectory( 1031 CancelCallback FakeDriveService::AddNewDirectory(
1032 const std::string& parent_resource_id, 1032 const std::string& parent_resource_id,
1033 const std::string& directory_title, 1033 const std::string& directory_title,
1034 const AddNewDirectoryOptions& options, 1034 const AddNewDirectoryOptions& options,
1035 const FileResourceCallback& callback) { 1035 const FileResourceCallback& callback) {
1036 return AddNewDirectoryWithResourceId( 1036 return AddNewDirectoryWithResourceId(
1037 "", 1037 "",
1038 parent_resource_id.empty() ? GetRootResourceId() : parent_resource_id, 1038 parent_resource_id.empty() ? GetRootResourceId() : parent_resource_id,
1039 directory_title, 1039 directory_title,
1040 options, 1040 options,
1041 callback); 1041 callback);
1042 } 1042 }
1043 1043
1044 CancelCallback FakeDriveService::InitiateUploadNewFile( 1044 CancelCallback FakeDriveService::InitiateUploadNewFile(
1045 const std::string& content_type, 1045 const std::string& content_type,
1046 int64 content_length, 1046 int64 content_length,
1047 const std::string& parent_resource_id, 1047 const std::string& parent_resource_id,
1048 const std::string& title, 1048 const std::string& title,
1049 const UploadNewFileOptions& options, 1049 const UploadNewFileOptions& options,
1050 const InitiateUploadCallback& callback) { 1050 const InitiateUploadCallback& callback) {
1051 DCHECK(thread_checker_.CalledOnValidThread()); 1051 DCHECK(thread_checker_.CalledOnValidThread());
1052 DCHECK(!callback.is_null()); 1052 DCHECK(!callback.is_null());
1053 1053
1054 if (offline_) { 1054 if (offline_) {
1055 base::MessageLoop::current()->PostTask( 1055 base::ThreadTaskRunnerHandle::Get()->PostTask(
1056 FROM_HERE, 1056 FROM_HERE,
1057 base::Bind(callback, DRIVE_NO_CONNECTION, GURL())); 1057 base::Bind(callback, DRIVE_NO_CONNECTION, GURL()));
1058 return CancelCallback(); 1058 return CancelCallback();
1059 } 1059 }
1060 1060
1061 if (parent_resource_id != GetRootResourceId() && 1061 if (parent_resource_id != GetRootResourceId() &&
1062 !entries_.count(parent_resource_id)) { 1062 !entries_.count(parent_resource_id)) {
1063 base::MessageLoop::current()->PostTask( 1063 base::ThreadTaskRunnerHandle::Get()->PostTask(
1064 FROM_HERE, 1064 FROM_HERE,
1065 base::Bind(callback, HTTP_NOT_FOUND, GURL())); 1065 base::Bind(callback, HTTP_NOT_FOUND, GURL()));
1066 return CancelCallback(); 1066 return CancelCallback();
1067 } 1067 }
1068 1068
1069 GURL session_url = GetNewUploadSessionUrl(); 1069 GURL session_url = GetNewUploadSessionUrl();
1070 upload_sessions_[session_url] = 1070 upload_sessions_[session_url] =
1071 UploadSession(content_type, content_length, 1071 UploadSession(content_type, content_length,
1072 parent_resource_id, 1072 parent_resource_id,
1073 "", // resource_id 1073 "", // resource_id
1074 "", // etag 1074 "", // etag
1075 title); 1075 title);
1076 1076
1077 base::MessageLoop::current()->PostTask( 1077 base::ThreadTaskRunnerHandle::Get()->PostTask(
1078 FROM_HERE, 1078 FROM_HERE,
1079 base::Bind(callback, HTTP_SUCCESS, session_url)); 1079 base::Bind(callback, HTTP_SUCCESS, session_url));
1080 return CancelCallback(); 1080 return CancelCallback();
1081 } 1081 }
1082 1082
1083 CancelCallback FakeDriveService::InitiateUploadExistingFile( 1083 CancelCallback FakeDriveService::InitiateUploadExistingFile(
1084 const std::string& content_type, 1084 const std::string& content_type,
1085 int64 content_length, 1085 int64 content_length,
1086 const std::string& resource_id, 1086 const std::string& resource_id,
1087 const UploadExistingFileOptions& options, 1087 const UploadExistingFileOptions& options,
1088 const InitiateUploadCallback& callback) { 1088 const InitiateUploadCallback& callback) {
1089 DCHECK(thread_checker_.CalledOnValidThread()); 1089 DCHECK(thread_checker_.CalledOnValidThread());
1090 DCHECK(!callback.is_null()); 1090 DCHECK(!callback.is_null());
1091 1091
1092 if (offline_) { 1092 if (offline_) {
1093 base::MessageLoop::current()->PostTask( 1093 base::ThreadTaskRunnerHandle::Get()->PostTask(
1094 FROM_HERE, 1094 FROM_HERE,
1095 base::Bind(callback, DRIVE_NO_CONNECTION, GURL())); 1095 base::Bind(callback, DRIVE_NO_CONNECTION, GURL()));
1096 return CancelCallback(); 1096 return CancelCallback();
1097 } 1097 }
1098 1098
1099 EntryInfo* entry = FindEntryByResourceId(resource_id); 1099 EntryInfo* entry = FindEntryByResourceId(resource_id);
1100 if (!entry) { 1100 if (!entry) {
1101 base::MessageLoop::current()->PostTask( 1101 base::ThreadTaskRunnerHandle::Get()->PostTask(
1102 FROM_HERE, 1102 FROM_HERE,
1103 base::Bind(callback, HTTP_NOT_FOUND, GURL())); 1103 base::Bind(callback, HTTP_NOT_FOUND, GURL()));
1104 return CancelCallback(); 1104 return CancelCallback();
1105 } 1105 }
1106 1106
1107 if (!UserHasWriteAccess(entry->user_permission)) { 1107 if (!UserHasWriteAccess(entry->user_permission)) {
1108 base::MessageLoop::current()->PostTask( 1108 base::ThreadTaskRunnerHandle::Get()->PostTask(
1109 FROM_HERE, 1109 FROM_HERE,
1110 base::Bind(callback, HTTP_FORBIDDEN, GURL())); 1110 base::Bind(callback, HTTP_FORBIDDEN, GURL()));
1111 return CancelCallback(); 1111 return CancelCallback();
1112 } 1112 }
1113 1113
1114 FileResource* file = entry->change_resource.mutable_file(); 1114 FileResource* file = entry->change_resource.mutable_file();
1115 if (!options.etag.empty() && options.etag != file->etag()) { 1115 if (!options.etag.empty() && options.etag != file->etag()) {
1116 base::MessageLoop::current()->PostTask( 1116 base::ThreadTaskRunnerHandle::Get()->PostTask(
1117 FROM_HERE, 1117 FROM_HERE,
1118 base::Bind(callback, HTTP_PRECONDITION, GURL())); 1118 base::Bind(callback, HTTP_PRECONDITION, GURL()));
1119 return CancelCallback(); 1119 return CancelCallback();
1120 } 1120 }
1121 // TODO(hashimoto): Update |file|'s metadata with |options|. 1121 // TODO(hashimoto): Update |file|'s metadata with |options|.
1122 1122
1123 GURL session_url = GetNewUploadSessionUrl(); 1123 GURL session_url = GetNewUploadSessionUrl();
1124 upload_sessions_[session_url] = 1124 upload_sessions_[session_url] =
1125 UploadSession(content_type, content_length, 1125 UploadSession(content_type, content_length,
1126 "", // parent_resource_id 1126 "", // parent_resource_id
1127 resource_id, 1127 resource_id,
1128 file->etag(), 1128 file->etag(),
1129 "" /* title */); 1129 "" /* title */);
1130 1130
1131 base::MessageLoop::current()->PostTask( 1131 base::ThreadTaskRunnerHandle::Get()->PostTask(
1132 FROM_HERE, 1132 FROM_HERE,
1133 base::Bind(callback, HTTP_SUCCESS, session_url)); 1133 base::Bind(callback, HTTP_SUCCESS, session_url));
1134 return CancelCallback(); 1134 return CancelCallback();
1135 } 1135 }
1136 1136
1137 CancelCallback FakeDriveService::GetUploadStatus( 1137 CancelCallback FakeDriveService::GetUploadStatus(
1138 const GURL& upload_url, 1138 const GURL& upload_url,
1139 int64 content_length, 1139 int64 content_length,
1140 const UploadRangeCallback& callback) { 1140 const UploadRangeCallback& callback) {
1141 DCHECK(thread_checker_.CalledOnValidThread()); 1141 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 } 1179 }
1180 1180
1181 if (!progress_callback.is_null()) { 1181 if (!progress_callback.is_null()) {
1182 // In the real GDataWapi/Drive DriveService, progress is reported in 1182 // In the real GDataWapi/Drive DriveService, progress is reported in
1183 // nondeterministic timing. In this fake implementation, we choose to call 1183 // nondeterministic timing. In this fake implementation, we choose to call
1184 // it twice per one ResumeUpload. This is for making sure that client code 1184 // it twice per one ResumeUpload. This is for making sure that client code
1185 // works fine even if the callback is invoked more than once; it is the 1185 // works fine even if the callback is invoked more than once; it is the
1186 // crucial difference of the progress callback from others. 1186 // crucial difference of the progress callback from others.
1187 // Note that progress is notified in the relative offset in each chunk. 1187 // Note that progress is notified in the relative offset in each chunk.
1188 const int64 chunk_size = end_position - start_position; 1188 const int64 chunk_size = end_position - start_position;
1189 base::MessageLoop::current()->PostTask( 1189 base::ThreadTaskRunnerHandle::Get()->PostTask(
1190 FROM_HERE, base::Bind(progress_callback, chunk_size / 2, chunk_size)); 1190 FROM_HERE, base::Bind(progress_callback, chunk_size / 2, chunk_size));
1191 base::MessageLoop::current()->PostTask( 1191 base::ThreadTaskRunnerHandle::Get()->PostTask(
1192 FROM_HERE, base::Bind(progress_callback, chunk_size, chunk_size)); 1192 FROM_HERE, base::Bind(progress_callback, chunk_size, chunk_size));
1193 } 1193 }
1194 1194
1195 if (content_length != end_position) { 1195 if (content_length != end_position) {
1196 session->uploaded_size = end_position; 1196 session->uploaded_size = end_position;
1197 completion_callback.Run(HTTP_RESUME_INCOMPLETE, scoped_ptr<FileResource>()); 1197 completion_callback.Run(HTTP_RESUME_INCOMPLETE, scoped_ptr<FileResource>());
1198 return CancelCallback(); 1198 return CancelCallback();
1199 } 1199 }
1200 1200
1201 std::string content_data; 1201 std::string content_data;
(...skipping 15 matching lines...) Expand all
1217 session->parent_resource_id, 1217 session->parent_resource_id,
1218 session->title, 1218 session->title,
1219 false); // shared_with_me 1219 false); // shared_with_me
1220 if (!new_entry) { 1220 if (!new_entry) {
1221 completion_callback.Run(HTTP_NOT_FOUND, scoped_ptr<FileResource>()); 1221 completion_callback.Run(HTTP_NOT_FOUND, scoped_ptr<FileResource>());
1222 return CancelCallback(); 1222 return CancelCallback();
1223 } 1223 }
1224 1224
1225 completion_callback.Run(HTTP_CREATED, make_scoped_ptr( 1225 completion_callback.Run(HTTP_CREATED, make_scoped_ptr(
1226 new FileResource(*new_entry->change_resource.file()))); 1226 new FileResource(*new_entry->change_resource.file())));
1227 base::MessageLoop::current()->PostTask( 1227 base::ThreadTaskRunnerHandle::Get()->PostTask(
1228 FROM_HERE, 1228 FROM_HERE,
1229 base::Bind(&FakeDriveService::NotifyObservers, 1229 base::Bind(&FakeDriveService::NotifyObservers,
1230 weak_ptr_factory_.GetWeakPtr())); 1230 weak_ptr_factory_.GetWeakPtr()));
1231 return CancelCallback(); 1231 return CancelCallback();
1232 } 1232 }
1233 1233
1234 EntryInfo* entry = FindEntryByResourceId(session->resource_id); 1234 EntryInfo* entry = FindEntryByResourceId(session->resource_id);
1235 if (!entry) { 1235 if (!entry) {
1236 completion_callback.Run(HTTP_NOT_FOUND, scoped_ptr<FileResource>()); 1236 completion_callback.Run(HTTP_NOT_FOUND, scoped_ptr<FileResource>());
1237 return CancelCallback(); 1237 return CancelCallback();
1238 } 1238 }
1239 1239
1240 ChangeResource* change = &entry->change_resource; 1240 ChangeResource* change = &entry->change_resource;
1241 FileResource* file = change->mutable_file(); 1241 FileResource* file = change->mutable_file();
1242 if (file->etag().empty() || session->etag != file->etag()) { 1242 if (file->etag().empty() || session->etag != file->etag()) {
1243 completion_callback.Run(HTTP_PRECONDITION, scoped_ptr<FileResource>()); 1243 completion_callback.Run(HTTP_PRECONDITION, scoped_ptr<FileResource>());
1244 return CancelCallback(); 1244 return CancelCallback();
1245 } 1245 }
1246 1246
1247 file->set_md5_checksum(base::MD5String(content_data)); 1247 file->set_md5_checksum(base::MD5String(content_data));
1248 entry->content_data = content_data; 1248 entry->content_data = content_data;
1249 file->set_file_size(end_position); 1249 file->set_file_size(end_position);
1250 AddNewChangestamp(change); 1250 AddNewChangestamp(change);
1251 UpdateETag(file); 1251 UpdateETag(file);
1252 1252
1253 completion_callback.Run(HTTP_SUCCESS, make_scoped_ptr( 1253 completion_callback.Run(HTTP_SUCCESS, make_scoped_ptr(
1254 new FileResource(*file))); 1254 new FileResource(*file)));
1255 base::MessageLoop::current()->PostTask( 1255 base::ThreadTaskRunnerHandle::Get()->PostTask(
1256 FROM_HERE, 1256 FROM_HERE,
1257 base::Bind(&FakeDriveService::NotifyObservers, 1257 base::Bind(&FakeDriveService::NotifyObservers,
1258 weak_ptr_factory_.GetWeakPtr())); 1258 weak_ptr_factory_.GetWeakPtr()));
1259 return CancelCallback(); 1259 return CancelCallback();
1260 } 1260 }
1261 1261
1262 CancelCallback FakeDriveService::MultipartUploadNewFile( 1262 CancelCallback FakeDriveService::MultipartUploadNewFile(
1263 const std::string& content_type, 1263 const std::string& content_type,
1264 int64 content_length, 1264 int64 content_length,
1265 const std::string& parent_resource_id, 1265 const std::string& parent_resource_id,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 return CancelCallback(); 1328 return CancelCallback();
1329 } 1329 }
1330 1330
1331 CancelCallback FakeDriveService::UninstallApp( 1331 CancelCallback FakeDriveService::UninstallApp(
1332 const std::string& app_id, 1332 const std::string& app_id,
1333 const google_apis::EntryActionCallback& callback) { 1333 const google_apis::EntryActionCallback& callback) {
1334 DCHECK(thread_checker_.CalledOnValidThread()); 1334 DCHECK(thread_checker_.CalledOnValidThread());
1335 DCHECK(!callback.is_null()); 1335 DCHECK(!callback.is_null());
1336 1336
1337 if (offline_) { 1337 if (offline_) {
1338 base::MessageLoop::current()->PostTask( 1338 base::ThreadTaskRunnerHandle::Get()->PostTask(
1339 FROM_HERE, 1339 FROM_HERE,
1340 base::Bind(callback, google_apis::DRIVE_NO_CONNECTION)); 1340 base::Bind(callback, google_apis::DRIVE_NO_CONNECTION));
1341 return CancelCallback(); 1341 return CancelCallback();
1342 } 1342 }
1343 1343
1344 // Find app_id from app_info_value_ and delete. 1344 // Find app_id from app_info_value_ and delete.
1345 base::ListValue* items = NULL; 1345 base::ListValue* items = NULL;
1346 if (!app_info_value_->GetList("items", &items)) { 1346 if (!app_info_value_->GetList("items", &items)) {
1347 base::MessageLoop::current()->PostTask( 1347 base::ThreadTaskRunnerHandle::Get()->PostTask(
1348 FROM_HERE, 1348 FROM_HERE,
1349 base::Bind(callback, google_apis::HTTP_NOT_FOUND)); 1349 base::Bind(callback, google_apis::HTTP_NOT_FOUND));
1350 return CancelCallback(); 1350 return CancelCallback();
1351 } 1351 }
1352 1352
1353 for (size_t i = 0; i < items->GetSize(); ++i) { 1353 for (size_t i = 0; i < items->GetSize(); ++i) {
1354 base::DictionaryValue* item = NULL; 1354 base::DictionaryValue* item = NULL;
1355 std::string id; 1355 std::string id;
1356 if (items->GetDictionary(i, &item) && item->GetString("id", &id) && 1356 if (items->GetDictionary(i, &item) && item->GetString("id", &id) &&
1357 id == app_id) { 1357 id == app_id) {
1358 base::MessageLoop::current()->PostTask( 1358 base::ThreadTaskRunnerHandle::Get()->PostTask(
1359 FROM_HERE, 1359 FROM_HERE,
1360 base::Bind(callback, 1360 base::Bind(callback,
1361 items->Remove(i, NULL) ? google_apis::HTTP_NO_CONTENT 1361 items->Remove(i, NULL) ? google_apis::HTTP_NO_CONTENT
1362 : google_apis::HTTP_NOT_FOUND)); 1362 : google_apis::HTTP_NOT_FOUND));
1363 return CancelCallback(); 1363 return CancelCallback();
1364 } 1364 }
1365 } 1365 }
1366 1366
1367 base::MessageLoop::current()->PostTask( 1367 base::ThreadTaskRunnerHandle::Get()->PostTask(
1368 FROM_HERE, 1368 FROM_HERE,
1369 base::Bind(callback, google_apis::HTTP_NOT_FOUND)); 1369 base::Bind(callback, google_apis::HTTP_NOT_FOUND));
1370 return CancelCallback(); 1370 return CancelCallback();
1371 } 1371 }
1372 1372
1373 void FakeDriveService::AddNewFile(const std::string& content_type, 1373 void FakeDriveService::AddNewFile(const std::string& content_type,
1374 const std::string& content_data, 1374 const std::string& content_data,
1375 const std::string& parent_resource_id, 1375 const std::string& parent_resource_id,
1376 const std::string& title, 1376 const std::string& title,
1377 bool shared_with_me, 1377 bool shared_with_me,
1378 const FileResourceCallback& callback) { 1378 const FileResourceCallback& callback) {
1379 AddNewFileWithResourceId("", content_type, content_data, parent_resource_id, 1379 AddNewFileWithResourceId("", content_type, content_data, parent_resource_id,
1380 title, shared_with_me, callback); 1380 title, shared_with_me, callback);
1381 } 1381 }
1382 1382
1383 void FakeDriveService::AddNewFileWithResourceId( 1383 void FakeDriveService::AddNewFileWithResourceId(
1384 const std::string& resource_id, 1384 const std::string& resource_id,
1385 const std::string& content_type, 1385 const std::string& content_type,
1386 const std::string& content_data, 1386 const std::string& content_data,
1387 const std::string& parent_resource_id, 1387 const std::string& parent_resource_id,
1388 const std::string& title, 1388 const std::string& title,
1389 bool shared_with_me, 1389 bool shared_with_me,
1390 const FileResourceCallback& callback) { 1390 const FileResourceCallback& callback) {
1391 DCHECK(thread_checker_.CalledOnValidThread()); 1391 DCHECK(thread_checker_.CalledOnValidThread());
1392 DCHECK(!callback.is_null()); 1392 DCHECK(!callback.is_null());
1393 1393
1394 if (offline_) { 1394 if (offline_) {
1395 base::MessageLoop::current()->PostTask( 1395 base::ThreadTaskRunnerHandle::Get()->PostTask(
1396 FROM_HERE, 1396 FROM_HERE,
1397 base::Bind(callback, 1397 base::Bind(callback,
1398 DRIVE_NO_CONNECTION, 1398 DRIVE_NO_CONNECTION,
1399 base::Passed(scoped_ptr<FileResource>()))); 1399 base::Passed(scoped_ptr<FileResource>())));
1400 return; 1400 return;
1401 } 1401 }
1402 1402
1403 const EntryInfo* new_entry = AddNewEntry(resource_id, 1403 const EntryInfo* new_entry = AddNewEntry(resource_id,
1404 content_type, 1404 content_type,
1405 content_data, 1405 content_data,
1406 parent_resource_id, 1406 parent_resource_id,
1407 title, 1407 title,
1408 shared_with_me); 1408 shared_with_me);
1409 if (!new_entry) { 1409 if (!new_entry) {
1410 base::MessageLoop::current()->PostTask( 1410 base::ThreadTaskRunnerHandle::Get()->PostTask(
1411 FROM_HERE, 1411 FROM_HERE,
1412 base::Bind(callback, HTTP_NOT_FOUND, 1412 base::Bind(callback, HTTP_NOT_FOUND,
1413 base::Passed(scoped_ptr<FileResource>()))); 1413 base::Passed(scoped_ptr<FileResource>())));
1414 return; 1414 return;
1415 } 1415 }
1416 1416
1417 base::MessageLoop::current()->PostTask( 1417 base::ThreadTaskRunnerHandle::Get()->PostTask(
1418 FROM_HERE, 1418 FROM_HERE,
1419 base::Bind(callback, HTTP_CREATED, 1419 base::Bind(callback, HTTP_CREATED,
1420 base::Passed(make_scoped_ptr( 1420 base::Passed(make_scoped_ptr(
1421 new FileResource(*new_entry->change_resource.file()))))); 1421 new FileResource(*new_entry->change_resource.file())))));
1422 base::MessageLoop::current()->PostTask( 1422 base::ThreadTaskRunnerHandle::Get()->PostTask(
1423 FROM_HERE, 1423 FROM_HERE,
1424 base::Bind(&FakeDriveService::NotifyObservers, 1424 base::Bind(&FakeDriveService::NotifyObservers,
1425 weak_ptr_factory_.GetWeakPtr())); 1425 weak_ptr_factory_.GetWeakPtr()));
1426 } 1426 }
1427 1427
1428 CancelCallback FakeDriveService::AddNewDirectoryWithResourceId( 1428 CancelCallback FakeDriveService::AddNewDirectoryWithResourceId(
1429 const std::string& resource_id, 1429 const std::string& resource_id,
1430 const std::string& parent_resource_id, 1430 const std::string& parent_resource_id,
1431 const std::string& directory_title, 1431 const std::string& directory_title,
1432 const AddNewDirectoryOptions& options, 1432 const AddNewDirectoryOptions& options,
1433 const FileResourceCallback& callback) { 1433 const FileResourceCallback& callback) {
1434 DCHECK(thread_checker_.CalledOnValidThread()); 1434 DCHECK(thread_checker_.CalledOnValidThread());
1435 DCHECK(!callback.is_null()); 1435 DCHECK(!callback.is_null());
1436 1436
1437 if (offline_) { 1437 if (offline_) {
1438 base::MessageLoop::current()->PostTask( 1438 base::ThreadTaskRunnerHandle::Get()->PostTask(
1439 FROM_HERE, 1439 FROM_HERE,
1440 base::Bind(callback, 1440 base::Bind(callback,
1441 DRIVE_NO_CONNECTION, 1441 DRIVE_NO_CONNECTION,
1442 base::Passed(scoped_ptr<FileResource>()))); 1442 base::Passed(scoped_ptr<FileResource>())));
1443 return CancelCallback(); 1443 return CancelCallback();
1444 } 1444 }
1445 1445
1446 const EntryInfo* new_entry = AddNewEntry(resource_id, 1446 const EntryInfo* new_entry = AddNewEntry(resource_id,
1447 util::kDriveFolderMimeType, 1447 util::kDriveFolderMimeType,
1448 "", // content_data 1448 "", // content_data
1449 parent_resource_id, 1449 parent_resource_id,
1450 directory_title, 1450 directory_title,
1451 false); // shared_with_me 1451 false); // shared_with_me
1452 if (!new_entry) { 1452 if (!new_entry) {
1453 base::MessageLoop::current()->PostTask( 1453 base::ThreadTaskRunnerHandle::Get()->PostTask(
1454 FROM_HERE, 1454 FROM_HERE,
1455 base::Bind(callback, HTTP_NOT_FOUND, 1455 base::Bind(callback, HTTP_NOT_FOUND,
1456 base::Passed(scoped_ptr<FileResource>()))); 1456 base::Passed(scoped_ptr<FileResource>())));
1457 return CancelCallback(); 1457 return CancelCallback();
1458 } 1458 }
1459 1459
1460 base::MessageLoop::current()->PostTask( 1460 base::ThreadTaskRunnerHandle::Get()->PostTask(
1461 FROM_HERE, 1461 FROM_HERE,
1462 base::Bind(callback, HTTP_CREATED, 1462 base::Bind(callback, HTTP_CREATED,
1463 base::Passed(make_scoped_ptr( 1463 base::Passed(make_scoped_ptr(
1464 new FileResource(*new_entry->change_resource.file()))))); 1464 new FileResource(*new_entry->change_resource.file())))));
1465 base::MessageLoop::current()->PostTask( 1465 base::ThreadTaskRunnerHandle::Get()->PostTask(
1466 FROM_HERE, 1466 FROM_HERE,
1467 base::Bind(&FakeDriveService::NotifyObservers, 1467 base::Bind(&FakeDriveService::NotifyObservers,
1468 weak_ptr_factory_.GetWeakPtr())); 1468 weak_ptr_factory_.GetWeakPtr()));
1469 return CancelCallback(); 1469 return CancelCallback();
1470 } 1470 }
1471 1471
1472 void FakeDriveService::SetLastModifiedTime( 1472 void FakeDriveService::SetLastModifiedTime(
1473 const std::string& resource_id, 1473 const std::string& resource_id,
1474 const base::Time& last_modified_time, 1474 const base::Time& last_modified_time,
1475 const FileResourceCallback& callback) { 1475 const FileResourceCallback& callback) {
1476 DCHECK(thread_checker_.CalledOnValidThread()); 1476 DCHECK(thread_checker_.CalledOnValidThread());
1477 DCHECK(!callback.is_null()); 1477 DCHECK(!callback.is_null());
1478 1478
1479 if (offline_) { 1479 if (offline_) {
1480 base::MessageLoop::current()->PostTask( 1480 base::ThreadTaskRunnerHandle::Get()->PostTask(
1481 FROM_HERE, 1481 FROM_HERE,
1482 base::Bind(callback, 1482 base::Bind(callback,
1483 DRIVE_NO_CONNECTION, 1483 DRIVE_NO_CONNECTION,
1484 base::Passed(scoped_ptr<FileResource>()))); 1484 base::Passed(scoped_ptr<FileResource>())));
1485 return; 1485 return;
1486 } 1486 }
1487 1487
1488 EntryInfo* entry = FindEntryByResourceId(resource_id); 1488 EntryInfo* entry = FindEntryByResourceId(resource_id);
1489 if (!entry) { 1489 if (!entry) {
1490 base::MessageLoop::current()->PostTask( 1490 base::ThreadTaskRunnerHandle::Get()->PostTask(
1491 FROM_HERE, 1491 FROM_HERE,
1492 base::Bind(callback, HTTP_NOT_FOUND, 1492 base::Bind(callback, HTTP_NOT_FOUND,
1493 base::Passed(scoped_ptr<FileResource>()))); 1493 base::Passed(scoped_ptr<FileResource>())));
1494 return; 1494 return;
1495 } 1495 }
1496 1496
1497 ChangeResource* change = &entry->change_resource; 1497 ChangeResource* change = &entry->change_resource;
1498 FileResource* file = change->mutable_file(); 1498 FileResource* file = change->mutable_file();
1499 file->set_modified_date(last_modified_time); 1499 file->set_modified_date(last_modified_time);
1500 1500
1501 base::MessageLoop::current()->PostTask( 1501 base::ThreadTaskRunnerHandle::Get()->PostTask(
1502 FROM_HERE, 1502 FROM_HERE,
1503 base::Bind(callback, HTTP_SUCCESS, 1503 base::Bind(callback, HTTP_SUCCESS,
1504 base::Passed(make_scoped_ptr(new FileResource(*file))))); 1504 base::Passed(make_scoped_ptr(new FileResource(*file)))));
1505 } 1505 }
1506 1506
1507 google_apis::DriveApiErrorCode FakeDriveService::SetUserPermission( 1507 google_apis::DriveApiErrorCode FakeDriveService::SetUserPermission(
1508 const std::string& resource_id, 1508 const std::string& resource_id,
1509 google_apis::drive::PermissionRole user_permission) { 1509 google_apis::drive::PermissionRole user_permission) {
1510 DCHECK(thread_checker_.CalledOnValidThread()); 1510 DCHECK(thread_checker_.CalledOnValidThread());
1511 1511
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1632 1632
1633 void FakeDriveService::GetChangeListInternal( 1633 void FakeDriveService::GetChangeListInternal(
1634 int64 start_changestamp, 1634 int64 start_changestamp,
1635 const std::string& search_query, 1635 const std::string& search_query,
1636 const std::string& directory_resource_id, 1636 const std::string& directory_resource_id,
1637 int start_offset, 1637 int start_offset,
1638 int max_results, 1638 int max_results,
1639 int* load_counter, 1639 int* load_counter,
1640 const ChangeListCallback& callback) { 1640 const ChangeListCallback& callback) {
1641 if (offline_) { 1641 if (offline_) {
1642 base::MessageLoop::current()->PostTask( 1642 base::ThreadTaskRunnerHandle::Get()->PostTask(
1643 FROM_HERE, 1643 FROM_HERE,
1644 base::Bind(callback, 1644 base::Bind(callback,
1645 DRIVE_NO_CONNECTION, 1645 DRIVE_NO_CONNECTION,
1646 base::Passed(scoped_ptr<ChangeList>()))); 1646 base::Passed(scoped_ptr<ChangeList>())));
1647 return; 1647 return;
1648 } 1648 }
1649 1649
1650 // Filter out entries per parameters like |directory_resource_id| and 1650 // Filter out entries per parameters like |directory_resource_id| and
1651 // |search_query|. 1651 // |search_query|.
1652 ScopedVector<ChangeResource> entries; 1652 ScopedVector<ChangeResource> entries;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1743 next_url = net::AppendOrReplaceQueryParameter( 1743 next_url = net::AppendOrReplaceQueryParameter(
1744 next_url, "parent", directory_resource_id); 1744 next_url, "parent", directory_resource_id);
1745 } 1745 }
1746 1746
1747 change_list->set_next_link(next_url); 1747 change_list->set_next_link(next_url);
1748 } 1748 }
1749 *change_list->mutable_items() = entries.Pass(); 1749 *change_list->mutable_items() = entries.Pass();
1750 1750
1751 if (load_counter) 1751 if (load_counter)
1752 *load_counter += 1; 1752 *load_counter += 1;
1753 base::MessageLoop::current()->PostTask( 1753 base::ThreadTaskRunnerHandle::Get()->PostTask(
1754 FROM_HERE, 1754 FROM_HERE,
1755 base::Bind(callback, HTTP_SUCCESS, base::Passed(&change_list))); 1755 base::Bind(callback, HTTP_SUCCESS, base::Passed(&change_list)));
1756 } 1756 }
1757 1757
1758 GURL FakeDriveService::GetNewUploadSessionUrl() { 1758 GURL FakeDriveService::GetNewUploadSessionUrl() {
1759 return GURL("https://upload_session_url/" + 1759 return GURL("https://upload_session_url/" +
1760 base::Int64ToString(next_upload_sequence_number_++)); 1760 base::Int64ToString(next_upload_sequence_number_++));
1761 } 1761 }
1762 1762
1763 google_apis::CancelCallback FakeDriveService::AddPermission( 1763 google_apis::CancelCallback FakeDriveService::AddPermission(
(...skipping 14 matching lines...) Expand all
1778 1778
1779 NOTREACHED(); 1779 NOTREACHED();
1780 return scoped_ptr<BatchRequestConfiguratorInterface>(); 1780 return scoped_ptr<BatchRequestConfiguratorInterface>();
1781 } 1781 }
1782 1782
1783 void FakeDriveService::NotifyObservers() { 1783 void FakeDriveService::NotifyObservers() {
1784 FOR_EACH_OBSERVER(ChangeObserver, change_observers_, OnNewChangeAvailable()); 1784 FOR_EACH_OBSERVER(ChangeObserver, change_observers_, OnNewChangeAvailable());
1785 } 1785 }
1786 1786
1787 } // namespace drive 1787 } // namespace drive
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698