| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |