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/google_apis/fake_drive_service.h" | 5 #include "chrome/browser/google_apis/fake_drive_service.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 } | 363 } |
364 | 364 |
365 void FakeDriveService::GetResourceEntry( | 365 void FakeDriveService::GetResourceEntry( |
366 const std::string& resource_id, | 366 const std::string& resource_id, |
367 const GetResourceEntryCallback& callback) { | 367 const GetResourceEntryCallback& callback) { |
368 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 368 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
369 DCHECK(!callback.is_null()); | 369 DCHECK(!callback.is_null()); |
370 | 370 |
371 if (offline_) { | 371 if (offline_) { |
372 scoped_ptr<ResourceEntry> null; | 372 scoped_ptr<ResourceEntry> null; |
373 MessageLoop::current()->PostTask( | 373 base::MessageLoop::current()->PostTask( |
374 FROM_HERE, | 374 FROM_HERE, |
375 base::Bind(callback, | 375 base::Bind(callback, |
376 GDATA_NO_CONNECTION, | 376 GDATA_NO_CONNECTION, |
377 base::Passed(&null))); | 377 base::Passed(&null))); |
378 return; | 378 return; |
379 } | 379 } |
380 | 380 |
381 base::DictionaryValue* entry = FindEntryByResourceId(resource_id); | 381 base::DictionaryValue* entry = FindEntryByResourceId(resource_id); |
382 if (entry) { | 382 if (entry) { |
383 scoped_ptr<ResourceEntry> resource_entry = | 383 scoped_ptr<ResourceEntry> resource_entry = |
384 ResourceEntry::CreateFrom(*entry); | 384 ResourceEntry::CreateFrom(*entry); |
385 MessageLoop::current()->PostTask( | 385 base::MessageLoop::current()->PostTask( |
386 FROM_HERE, | 386 FROM_HERE, |
387 base::Bind(callback, HTTP_SUCCESS, base::Passed(&resource_entry))); | 387 base::Bind(callback, HTTP_SUCCESS, base::Passed(&resource_entry))); |
388 return; | 388 return; |
389 } | 389 } |
390 | 390 |
391 scoped_ptr<ResourceEntry> null; | 391 scoped_ptr<ResourceEntry> null; |
392 MessageLoop::current()->PostTask( | 392 base::MessageLoop::current()->PostTask( |
393 FROM_HERE, | 393 FROM_HERE, |
394 base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null))); | 394 base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null))); |
395 } | 395 } |
396 | 396 |
397 void FakeDriveService::GetAboutResource( | 397 void FakeDriveService::GetAboutResource( |
398 const GetAboutResourceCallback& callback) { | 398 const GetAboutResourceCallback& callback) { |
399 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 399 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
400 DCHECK(!callback.is_null()); | 400 DCHECK(!callback.is_null()); |
401 | 401 |
402 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 402 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
403 DCHECK(!callback.is_null()); | 403 DCHECK(!callback.is_null()); |
404 | 404 |
405 if (offline_) { | 405 if (offline_) { |
406 scoped_ptr<AboutResource> null; | 406 scoped_ptr<AboutResource> null; |
407 MessageLoop::current()->PostTask( | 407 base::MessageLoop::current()->PostTask( |
408 FROM_HERE, | 408 FROM_HERE, |
409 base::Bind(callback, | 409 base::Bind(callback, |
410 GDATA_NO_CONNECTION, base::Passed(&null))); | 410 GDATA_NO_CONNECTION, base::Passed(&null))); |
411 return; | 411 return; |
412 } | 412 } |
413 | 413 |
414 ++about_resource_load_count_; | 414 ++about_resource_load_count_; |
415 scoped_ptr<AboutResource> about_resource( | 415 scoped_ptr<AboutResource> about_resource( |
416 AboutResource::CreateFromAccountMetadata( | 416 AboutResource::CreateFromAccountMetadata( |
417 *AccountMetadata::CreateFrom(*account_metadata_value_), | 417 *AccountMetadata::CreateFrom(*account_metadata_value_), |
418 GetRootResourceId())); | 418 GetRootResourceId())); |
419 // Overwrite the change id. | 419 // Overwrite the change id. |
420 about_resource->set_largest_change_id(largest_changestamp_); | 420 about_resource->set_largest_change_id(largest_changestamp_); |
421 MessageLoop::current()->PostTask( | 421 base::MessageLoop::current()->PostTask( |
422 FROM_HERE, | 422 FROM_HERE, |
423 base::Bind(callback, | 423 base::Bind(callback, |
424 HTTP_SUCCESS, base::Passed(&about_resource))); | 424 HTTP_SUCCESS, base::Passed(&about_resource))); |
425 } | 425 } |
426 | 426 |
427 void FakeDriveService::GetAppList(const GetAppListCallback& callback) { | 427 void FakeDriveService::GetAppList(const GetAppListCallback& callback) { |
428 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 428 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
429 DCHECK(!callback.is_null()); | 429 DCHECK(!callback.is_null()); |
430 DCHECK(app_info_value_); | 430 DCHECK(app_info_value_); |
431 | 431 |
432 if (offline_) { | 432 if (offline_) { |
433 scoped_ptr<AppList> null; | 433 scoped_ptr<AppList> null; |
434 MessageLoop::current()->PostTask( | 434 base::MessageLoop::current()->PostTask( |
435 FROM_HERE, | 435 FROM_HERE, |
436 base::Bind(callback, | 436 base::Bind(callback, |
437 GDATA_NO_CONNECTION, | 437 GDATA_NO_CONNECTION, |
438 base::Passed(&null))); | 438 base::Passed(&null))); |
439 return; | 439 return; |
440 } | 440 } |
441 | 441 |
442 scoped_ptr<AppList> app_list(AppList::CreateFrom(*app_info_value_)); | 442 scoped_ptr<AppList> app_list(AppList::CreateFrom(*app_info_value_)); |
443 MessageLoop::current()->PostTask( | 443 base::MessageLoop::current()->PostTask( |
444 FROM_HERE, | 444 FROM_HERE, |
445 base::Bind(callback, HTTP_SUCCESS, base::Passed(&app_list))); | 445 base::Bind(callback, HTTP_SUCCESS, base::Passed(&app_list))); |
446 } | 446 } |
447 | 447 |
448 void FakeDriveService::DeleteResource( | 448 void FakeDriveService::DeleteResource( |
449 const std::string& resource_id, | 449 const std::string& resource_id, |
450 const std::string& etag, | 450 const std::string& etag, |
451 const EntryActionCallback& callback) { | 451 const EntryActionCallback& callback) { |
452 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 452 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
453 DCHECK(!callback.is_null()); | 453 DCHECK(!callback.is_null()); |
454 | 454 |
455 if (offline_) { | 455 if (offline_) { |
456 MessageLoop::current()->PostTask( | 456 base::MessageLoop::current()->PostTask( |
457 FROM_HERE, base::Bind(callback, GDATA_NO_CONNECTION)); | 457 FROM_HERE, base::Bind(callback, GDATA_NO_CONNECTION)); |
458 return; | 458 return; |
459 } | 459 } |
460 | 460 |
461 base::DictionaryValue* resource_list_dict = NULL; | 461 base::DictionaryValue* resource_list_dict = NULL; |
462 base::ListValue* entries = NULL; | 462 base::ListValue* entries = NULL; |
463 // Go through entries and remove the one that matches |resource_id|. | 463 // Go through entries and remove the one that matches |resource_id|. |
464 if (resource_list_value_->GetAsDictionary(&resource_list_dict) && | 464 if (resource_list_value_->GetAsDictionary(&resource_list_dict) && |
465 resource_list_dict->GetList("entry", &entries)) { | 465 resource_list_dict->GetList("entry", &entries)) { |
466 for (size_t i = 0; i < entries->GetSize(); ++i) { | 466 for (size_t i = 0; i < entries->GetSize(); ++i) { |
467 base::DictionaryValue* entry = NULL; | 467 base::DictionaryValue* entry = NULL; |
468 std::string current_resource_id; | 468 std::string current_resource_id; |
469 if (entries->GetDictionary(i, &entry) && | 469 if (entries->GetDictionary(i, &entry) && |
470 entry->GetString("gd$resourceId.$t", ¤t_resource_id) && | 470 entry->GetString("gd$resourceId.$t", ¤t_resource_id) && |
471 resource_id == current_resource_id) { | 471 resource_id == current_resource_id) { |
472 entries->Remove(i, NULL); | 472 entries->Remove(i, NULL); |
473 MessageLoop::current()->PostTask( | 473 base::MessageLoop::current()->PostTask( |
474 FROM_HERE, base::Bind(callback, HTTP_SUCCESS)); | 474 FROM_HERE, base::Bind(callback, HTTP_SUCCESS)); |
475 return; | 475 return; |
476 } | 476 } |
477 } | 477 } |
478 } | 478 } |
479 | 479 |
480 // TODO(satorux): Add support for returning "deleted" entries in | 480 // TODO(satorux): Add support for returning "deleted" entries in |
481 // changelists from GetResourceList(). | 481 // changelists from GetResourceList(). |
482 MessageLoop::current()->PostTask( | 482 base::MessageLoop::current()->PostTask( |
483 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); | 483 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); |
484 } | 484 } |
485 | 485 |
486 void FakeDriveService::DownloadFile( | 486 void FakeDriveService::DownloadFile( |
487 const base::FilePath& virtual_path, | 487 const base::FilePath& virtual_path, |
488 const base::FilePath& local_cache_path, | 488 const base::FilePath& local_cache_path, |
489 const GURL& download_url, | 489 const GURL& download_url, |
490 const DownloadActionCallback& download_action_callback, | 490 const DownloadActionCallback& download_action_callback, |
491 const GetContentCallback& get_content_callback, | 491 const GetContentCallback& get_content_callback, |
492 const ProgressCallback& progress_callback) { | 492 const ProgressCallback& progress_callback) { |
493 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 493 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
494 DCHECK(!download_action_callback.is_null()); | 494 DCHECK(!download_action_callback.is_null()); |
495 | 495 |
496 if (offline_) { | 496 if (offline_) { |
497 MessageLoop::current()->PostTask( | 497 base::MessageLoop::current()->PostTask( |
498 FROM_HERE, | 498 FROM_HERE, |
499 base::Bind(download_action_callback, | 499 base::Bind(download_action_callback, |
500 GDATA_NO_CONNECTION, | 500 GDATA_NO_CONNECTION, |
501 base::FilePath())); | 501 base::FilePath())); |
502 return; | 502 return; |
503 } | 503 } |
504 | 504 |
505 // The field content.src is the URL to download the file. | 505 // The field content.src is the URL to download the file. |
506 base::DictionaryValue* entry = FindEntryByContentUrl(download_url); | 506 base::DictionaryValue* entry = FindEntryByContentUrl(download_url); |
507 if (!entry) { | 507 if (!entry) { |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 void FakeDriveService::CopyResource( | 568 void FakeDriveService::CopyResource( |
569 const std::string& resource_id, | 569 const std::string& resource_id, |
570 const std::string& in_parent_resource_id, | 570 const std::string& in_parent_resource_id, |
571 const std::string& new_name, | 571 const std::string& new_name, |
572 const GetResourceEntryCallback& callback) { | 572 const GetResourceEntryCallback& callback) { |
573 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 573 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
574 DCHECK(!callback.is_null()); | 574 DCHECK(!callback.is_null()); |
575 | 575 |
576 if (offline_) { | 576 if (offline_) { |
577 scoped_ptr<ResourceEntry> null; | 577 scoped_ptr<ResourceEntry> null; |
578 MessageLoop::current()->PostTask( | 578 base::MessageLoop::current()->PostTask( |
579 FROM_HERE, | 579 FROM_HERE, |
580 base::Bind(callback, | 580 base::Bind(callback, |
581 GDATA_NO_CONNECTION, | 581 GDATA_NO_CONNECTION, |
582 base::Passed(&null))); | 582 base::Passed(&null))); |
583 return; | 583 return; |
584 } | 584 } |
585 | 585 |
586 const std::string& parent_resource_id = in_parent_resource_id.empty() ? | 586 const std::string& parent_resource_id = in_parent_resource_id.empty() ? |
587 GetRootResourceId() : in_parent_resource_id; | 587 GetRootResourceId() : in_parent_resource_id; |
588 | 588 |
(...skipping 29 matching lines...) Expand all Loading... |
618 links->Append(link); | 618 links->Append(link); |
619 | 619 |
620 AddNewChangestamp(copied_entry.get()); | 620 AddNewChangestamp(copied_entry.get()); |
621 | 621 |
622 // Parse the new entry. | 622 // Parse the new entry. |
623 scoped_ptr<ResourceEntry> resource_entry = | 623 scoped_ptr<ResourceEntry> resource_entry = |
624 ResourceEntry::CreateFrom(*copied_entry); | 624 ResourceEntry::CreateFrom(*copied_entry); |
625 // Add it to the resource list. | 625 // Add it to the resource list. |
626 entries->Append(copied_entry.release()); | 626 entries->Append(copied_entry.release()); |
627 | 627 |
628 MessageLoop::current()->PostTask( | 628 base::MessageLoop::current()->PostTask( |
629 FROM_HERE, | 629 FROM_HERE, |
630 base::Bind(callback, | 630 base::Bind(callback, |
631 HTTP_SUCCESS, | 631 HTTP_SUCCESS, |
632 base::Passed(&resource_entry))); | 632 base::Passed(&resource_entry))); |
633 return; | 633 return; |
634 } | 634 } |
635 } | 635 } |
636 } | 636 } |
637 | 637 |
638 scoped_ptr<ResourceEntry> null; | 638 scoped_ptr<ResourceEntry> null; |
639 MessageLoop::current()->PostTask( | 639 base::MessageLoop::current()->PostTask( |
640 FROM_HERE, | 640 FROM_HERE, |
641 base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null))); | 641 base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null))); |
642 } | 642 } |
643 | 643 |
644 void FakeDriveService::CopyHostedDocument( | 644 void FakeDriveService::CopyHostedDocument( |
645 const std::string& resource_id, | 645 const std::string& resource_id, |
646 const std::string& new_name, | 646 const std::string& new_name, |
647 const GetResourceEntryCallback& callback) { | 647 const GetResourceEntryCallback& callback) { |
648 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 648 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
649 DCHECK(!callback.is_null()); | 649 DCHECK(!callback.is_null()); |
650 | 650 |
651 CopyResource(resource_id, std::string(), new_name, callback); | 651 CopyResource(resource_id, std::string(), new_name, callback); |
652 } | 652 } |
653 | 653 |
654 void FakeDriveService::RenameResource( | 654 void FakeDriveService::RenameResource( |
655 const std::string& resource_id, | 655 const std::string& resource_id, |
656 const std::string& new_name, | 656 const std::string& new_name, |
657 const EntryActionCallback& callback) { | 657 const EntryActionCallback& callback) { |
658 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 658 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
659 DCHECK(!callback.is_null()); | 659 DCHECK(!callback.is_null()); |
660 | 660 |
661 if (offline_) { | 661 if (offline_) { |
662 MessageLoop::current()->PostTask( | 662 base::MessageLoop::current()->PostTask( |
663 FROM_HERE, base::Bind(callback, GDATA_NO_CONNECTION)); | 663 FROM_HERE, base::Bind(callback, GDATA_NO_CONNECTION)); |
664 return; | 664 return; |
665 } | 665 } |
666 | 666 |
667 base::DictionaryValue* entry = FindEntryByResourceId(resource_id); | 667 base::DictionaryValue* entry = FindEntryByResourceId(resource_id); |
668 if (entry) { | 668 if (entry) { |
669 entry->SetString("title.$t", new_name); | 669 entry->SetString("title.$t", new_name); |
670 AddNewChangestamp(entry); | 670 AddNewChangestamp(entry); |
671 MessageLoop::current()->PostTask( | 671 base::MessageLoop::current()->PostTask( |
672 FROM_HERE, base::Bind(callback, HTTP_SUCCESS)); | 672 FROM_HERE, base::Bind(callback, HTTP_SUCCESS)); |
673 return; | 673 return; |
674 } | 674 } |
675 | 675 |
676 MessageLoop::current()->PostTask( | 676 base::MessageLoop::current()->PostTask( |
677 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); | 677 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); |
678 } | 678 } |
679 | 679 |
680 void FakeDriveService::TouchResource( | 680 void FakeDriveService::TouchResource( |
681 const std::string& resource_id, | 681 const std::string& resource_id, |
682 const base::Time& modified_date, | 682 const base::Time& modified_date, |
683 const base::Time& last_viewed_by_me_date, | 683 const base::Time& last_viewed_by_me_date, |
684 const GetResourceEntryCallback& callback) { | 684 const GetResourceEntryCallback& callback) { |
685 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 685 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
686 DCHECK(!modified_date.is_null()); | 686 DCHECK(!modified_date.is_null()); |
687 DCHECK(!last_viewed_by_me_date.is_null()); | 687 DCHECK(!last_viewed_by_me_date.is_null()); |
688 DCHECK(!callback.is_null()); | 688 DCHECK(!callback.is_null()); |
689 | 689 |
690 if (offline_) { | 690 if (offline_) { |
691 MessageLoop::current()->PostTask( | 691 base::MessageLoop::current()->PostTask( |
692 FROM_HERE, | 692 FROM_HERE, |
693 base::Bind(callback, GDATA_NO_CONNECTION, | 693 base::Bind(callback, GDATA_NO_CONNECTION, |
694 base::Passed(scoped_ptr<ResourceEntry>()))); | 694 base::Passed(scoped_ptr<ResourceEntry>()))); |
695 return; | 695 return; |
696 } | 696 } |
697 | 697 |
698 base::DictionaryValue* entry = FindEntryByResourceId(resource_id); | 698 base::DictionaryValue* entry = FindEntryByResourceId(resource_id); |
699 if (!entry) { | 699 if (!entry) { |
700 MessageLoop::current()->PostTask( | 700 base::MessageLoop::current()->PostTask( |
701 FROM_HERE, | 701 FROM_HERE, |
702 base::Bind(callback, HTTP_NOT_FOUND, | 702 base::Bind(callback, HTTP_NOT_FOUND, |
703 base::Passed(scoped_ptr<ResourceEntry>()))); | 703 base::Passed(scoped_ptr<ResourceEntry>()))); |
704 return; | 704 return; |
705 } | 705 } |
706 | 706 |
707 entry->SetString("updated.$t", | 707 entry->SetString("updated.$t", |
708 util::FormatTimeAsString(modified_date)); | 708 util::FormatTimeAsString(modified_date)); |
709 entry->SetString("gd$lastViewed.$t", | 709 entry->SetString("gd$lastViewed.$t", |
710 util::FormatTimeAsString(last_viewed_by_me_date)); | 710 util::FormatTimeAsString(last_viewed_by_me_date)); |
711 AddNewChangestamp(entry); | 711 AddNewChangestamp(entry); |
712 | 712 |
713 scoped_ptr<ResourceEntry> parsed_entry(ResourceEntry::CreateFrom(*entry)); | 713 scoped_ptr<ResourceEntry> parsed_entry(ResourceEntry::CreateFrom(*entry)); |
714 MessageLoop::current()->PostTask( | 714 base::MessageLoop::current()->PostTask( |
715 FROM_HERE, | 715 FROM_HERE, |
716 base::Bind(callback, HTTP_SUCCESS, base::Passed(&parsed_entry))); | 716 base::Bind(callback, HTTP_SUCCESS, base::Passed(&parsed_entry))); |
717 } | 717 } |
718 | 718 |
719 void FakeDriveService::AddResourceToDirectory( | 719 void FakeDriveService::AddResourceToDirectory( |
720 const std::string& parent_resource_id, | 720 const std::string& parent_resource_id, |
721 const std::string& resource_id, | 721 const std::string& resource_id, |
722 const EntryActionCallback& callback) { | 722 const EntryActionCallback& callback) { |
723 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 723 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
724 DCHECK(!callback.is_null()); | 724 DCHECK(!callback.is_null()); |
725 | 725 |
726 if (offline_) { | 726 if (offline_) { |
727 MessageLoop::current()->PostTask( | 727 base::MessageLoop::current()->PostTask( |
728 FROM_HERE, base::Bind(callback, GDATA_NO_CONNECTION)); | 728 FROM_HERE, base::Bind(callback, GDATA_NO_CONNECTION)); |
729 return; | 729 return; |
730 } | 730 } |
731 | 731 |
732 base::DictionaryValue* entry = FindEntryByResourceId(resource_id); | 732 base::DictionaryValue* entry = FindEntryByResourceId(resource_id); |
733 if (entry) { | 733 if (entry) { |
734 base::ListValue* links = NULL; | 734 base::ListValue* links = NULL; |
735 if (!entry->GetList("link", &links)) { | 735 if (!entry->GetList("link", &links)) { |
736 links = new base::ListValue; | 736 links = new base::ListValue; |
737 entry->Set("link", links); | 737 entry->Set("link", links); |
738 } | 738 } |
739 | 739 |
740 // On the real Drive server, resources do not necessary shape a tree | 740 // On the real Drive server, resources do not necessary shape a tree |
741 // structure. That is, each resource can have multiple parent. | 741 // structure. That is, each resource can have multiple parent. |
742 // We mimic the behavior here; AddResourceToDirectoy just adds | 742 // We mimic the behavior here; AddResourceToDirectoy just adds |
743 // one more parent link, not overwriting old links. | 743 // one more parent link, not overwriting old links. |
744 base::DictionaryValue* link = new base::DictionaryValue; | 744 base::DictionaryValue* link = new base::DictionaryValue; |
745 link->SetString("rel", "http://schemas.google.com/docs/2007#parent"); | 745 link->SetString("rel", "http://schemas.google.com/docs/2007#parent"); |
746 link->SetString( | 746 link->SetString( |
747 "href", GetFakeLinkUrl(parent_resource_id).spec()); | 747 "href", GetFakeLinkUrl(parent_resource_id).spec()); |
748 links->Append(link); | 748 links->Append(link); |
749 | 749 |
750 AddNewChangestamp(entry); | 750 AddNewChangestamp(entry); |
751 MessageLoop::current()->PostTask( | 751 base::MessageLoop::current()->PostTask( |
752 FROM_HERE, base::Bind(callback, HTTP_SUCCESS)); | 752 FROM_HERE, base::Bind(callback, HTTP_SUCCESS)); |
753 return; | 753 return; |
754 } | 754 } |
755 | 755 |
756 MessageLoop::current()->PostTask( | 756 base::MessageLoop::current()->PostTask( |
757 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); | 757 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); |
758 } | 758 } |
759 | 759 |
760 void FakeDriveService::RemoveResourceFromDirectory( | 760 void FakeDriveService::RemoveResourceFromDirectory( |
761 const std::string& parent_resource_id, | 761 const std::string& parent_resource_id, |
762 const std::string& resource_id, | 762 const std::string& resource_id, |
763 const EntryActionCallback& callback) { | 763 const EntryActionCallback& callback) { |
764 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 764 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
765 DCHECK(!callback.is_null()); | 765 DCHECK(!callback.is_null()); |
766 | 766 |
767 if (offline_) { | 767 if (offline_) { |
768 MessageLoop::current()->PostTask( | 768 base::MessageLoop::current()->PostTask( |
769 FROM_HERE, base::Bind(callback, GDATA_NO_CONNECTION)); | 769 FROM_HERE, base::Bind(callback, GDATA_NO_CONNECTION)); |
770 return; | 770 return; |
771 } | 771 } |
772 | 772 |
773 base::DictionaryValue* entry = FindEntryByResourceId(resource_id); | 773 base::DictionaryValue* entry = FindEntryByResourceId(resource_id); |
774 if (entry) { | 774 if (entry) { |
775 base::ListValue* links = NULL; | 775 base::ListValue* links = NULL; |
776 if (entry->GetList("link", &links)) { | 776 if (entry->GetList("link", &links)) { |
777 GURL parent_content_url = GetFakeLinkUrl(parent_resource_id); | 777 GURL parent_content_url = GetFakeLinkUrl(parent_resource_id); |
778 for (size_t i = 0; i < links->GetSize(); ++i) { | 778 for (size_t i = 0; i < links->GetSize(); ++i) { |
779 base::DictionaryValue* link = NULL; | 779 base::DictionaryValue* link = NULL; |
780 std::string rel; | 780 std::string rel; |
781 std::string href; | 781 std::string href; |
782 if (links->GetDictionary(i, &link) && | 782 if (links->GetDictionary(i, &link) && |
783 link->GetString("rel", &rel) && | 783 link->GetString("rel", &rel) && |
784 link->GetString("href", &href) && | 784 link->GetString("href", &href) && |
785 rel == "http://schemas.google.com/docs/2007#parent" && | 785 rel == "http://schemas.google.com/docs/2007#parent" && |
786 GURL(href) == parent_content_url) { | 786 GURL(href) == parent_content_url) { |
787 links->Remove(i, NULL); | 787 links->Remove(i, NULL); |
788 AddNewChangestamp(entry); | 788 AddNewChangestamp(entry); |
789 MessageLoop::current()->PostTask( | 789 base::MessageLoop::current()->PostTask( |
790 FROM_HERE, base::Bind(callback, HTTP_SUCCESS)); | 790 FROM_HERE, base::Bind(callback, HTTP_SUCCESS)); |
791 return; | 791 return; |
792 } | 792 } |
793 } | 793 } |
794 } | 794 } |
795 } | 795 } |
796 | 796 |
797 MessageLoop::current()->PostTask( | 797 base::MessageLoop::current()->PostTask( |
798 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); | 798 FROM_HERE, base::Bind(callback, HTTP_NOT_FOUND)); |
799 } | 799 } |
800 | 800 |
801 void FakeDriveService::AddNewDirectory( | 801 void FakeDriveService::AddNewDirectory( |
802 const std::string& parent_resource_id, | 802 const std::string& parent_resource_id, |
803 const std::string& directory_name, | 803 const std::string& directory_name, |
804 const GetResourceEntryCallback& callback) { | 804 const GetResourceEntryCallback& callback) { |
805 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 805 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
806 DCHECK(!callback.is_null()); | 806 DCHECK(!callback.is_null()); |
807 | 807 |
808 if (offline_) { | 808 if (offline_) { |
809 scoped_ptr<ResourceEntry> null; | 809 scoped_ptr<ResourceEntry> null; |
810 MessageLoop::current()->PostTask( | 810 base::MessageLoop::current()->PostTask( |
811 FROM_HERE, | 811 FROM_HERE, |
812 base::Bind(callback, | 812 base::Bind(callback, |
813 GDATA_NO_CONNECTION, | 813 GDATA_NO_CONNECTION, |
814 base::Passed(&null))); | 814 base::Passed(&null))); |
815 return; | 815 return; |
816 } | 816 } |
817 | 817 |
818 const char kContentType[] = "application/atom+xml;type=feed"; | 818 const char kContentType[] = "application/atom+xml;type=feed"; |
819 const base::DictionaryValue* new_entry = AddNewEntry(kContentType, | 819 const base::DictionaryValue* new_entry = AddNewEntry(kContentType, |
820 "", // content_data | 820 "", // content_data |
821 parent_resource_id, | 821 parent_resource_id, |
822 directory_name, | 822 directory_name, |
823 false, // shared_with_me | 823 false, // shared_with_me |
824 "folder"); | 824 "folder"); |
825 if (!new_entry) { | 825 if (!new_entry) { |
826 scoped_ptr<ResourceEntry> null; | 826 scoped_ptr<ResourceEntry> null; |
827 MessageLoop::current()->PostTask( | 827 base::MessageLoop::current()->PostTask( |
828 FROM_HERE, | 828 FROM_HERE, |
829 base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null))); | 829 base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null))); |
830 return; | 830 return; |
831 } | 831 } |
832 | 832 |
833 scoped_ptr<ResourceEntry> parsed_entry(ResourceEntry::CreateFrom(*new_entry)); | 833 scoped_ptr<ResourceEntry> parsed_entry(ResourceEntry::CreateFrom(*new_entry)); |
834 MessageLoop::current()->PostTask( | 834 base::MessageLoop::current()->PostTask( |
835 FROM_HERE, | 835 FROM_HERE, |
836 base::Bind(callback, HTTP_CREATED, base::Passed(&parsed_entry))); | 836 base::Bind(callback, HTTP_CREATED, base::Passed(&parsed_entry))); |
837 } | 837 } |
838 | 838 |
839 void FakeDriveService::InitiateUploadNewFile( | 839 void FakeDriveService::InitiateUploadNewFile( |
840 const base::FilePath& drive_file_path, | 840 const base::FilePath& drive_file_path, |
841 const std::string& content_type, | 841 const std::string& content_type, |
842 int64 content_length, | 842 int64 content_length, |
843 const std::string& parent_resource_id, | 843 const std::string& parent_resource_id, |
844 const std::string& title, | 844 const std::string& title, |
845 const InitiateUploadCallback& callback) { | 845 const InitiateUploadCallback& callback) { |
846 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 846 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
847 DCHECK(!callback.is_null()); | 847 DCHECK(!callback.is_null()); |
848 | 848 |
849 if (offline_) { | 849 if (offline_) { |
850 MessageLoop::current()->PostTask( | 850 base::MessageLoop::current()->PostTask( |
851 FROM_HERE, | 851 FROM_HERE, |
852 base::Bind(callback, GDATA_NO_CONNECTION, GURL())); | 852 base::Bind(callback, GDATA_NO_CONNECTION, GURL())); |
853 return; | 853 return; |
854 } | 854 } |
855 | 855 |
856 // Content length should be zero, as we'll create an empty file first. The | 856 // Content length should be zero, as we'll create an empty file first. The |
857 // content will be added in ResumeUpload(). | 857 // content will be added in ResumeUpload(). |
858 const base::DictionaryValue* new_entry = AddNewEntry(content_type, | 858 const base::DictionaryValue* new_entry = AddNewEntry(content_type, |
859 "", // content_data | 859 "", // content_data |
860 parent_resource_id, | 860 parent_resource_id, |
861 title, | 861 title, |
862 false, // shared_with_me | 862 false, // shared_with_me |
863 "file"); | 863 "file"); |
864 if (!new_entry) { | 864 if (!new_entry) { |
865 MessageLoop::current()->PostTask( | 865 base::MessageLoop::current()->PostTask( |
866 FROM_HERE, | 866 FROM_HERE, |
867 base::Bind(callback, HTTP_NOT_FOUND, GURL())); | 867 base::Bind(callback, HTTP_NOT_FOUND, GURL())); |
868 return; | 868 return; |
869 } | 869 } |
870 const GURL upload_url = GetUploadUrl(*new_entry); | 870 const GURL upload_url = GetUploadUrl(*new_entry); |
871 DCHECK(upload_url.is_valid()); | 871 DCHECK(upload_url.is_valid()); |
872 | 872 |
873 MessageLoop::current()->PostTask( | 873 base::MessageLoop::current()->PostTask( |
874 FROM_HERE, | 874 FROM_HERE, |
875 base::Bind(callback, HTTP_SUCCESS, | 875 base::Bind(callback, HTTP_SUCCESS, |
876 net::AppendQueryParameter(upload_url, "mode", "newfile"))); | 876 net::AppendQueryParameter(upload_url, "mode", "newfile"))); |
877 | 877 |
878 } | 878 } |
879 | 879 |
880 void FakeDriveService::InitiateUploadExistingFile( | 880 void FakeDriveService::InitiateUploadExistingFile( |
881 const base::FilePath& drive_file_path, | 881 const base::FilePath& drive_file_path, |
882 const std::string& content_type, | 882 const std::string& content_type, |
883 int64 content_length, | 883 int64 content_length, |
884 const std::string& resource_id, | 884 const std::string& resource_id, |
885 const std::string& etag, | 885 const std::string& etag, |
886 const InitiateUploadCallback& callback) { | 886 const InitiateUploadCallback& callback) { |
887 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 887 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
888 DCHECK(!callback.is_null()); | 888 DCHECK(!callback.is_null()); |
889 | 889 |
890 if (offline_) { | 890 if (offline_) { |
891 MessageLoop::current()->PostTask( | 891 base::MessageLoop::current()->PostTask( |
892 FROM_HERE, | 892 FROM_HERE, |
893 base::Bind(callback, GDATA_NO_CONNECTION, GURL())); | 893 base::Bind(callback, GDATA_NO_CONNECTION, GURL())); |
894 return; | 894 return; |
895 } | 895 } |
896 | 896 |
897 DictionaryValue* entry = FindEntryByResourceId(resource_id); | 897 DictionaryValue* entry = FindEntryByResourceId(resource_id); |
898 if (!entry) { | 898 if (!entry) { |
899 MessageLoop::current()->PostTask( | 899 base::MessageLoop::current()->PostTask( |
900 FROM_HERE, | 900 FROM_HERE, |
901 base::Bind(callback, HTTP_NOT_FOUND, GURL())); | 901 base::Bind(callback, HTTP_NOT_FOUND, GURL())); |
902 return; | 902 return; |
903 } | 903 } |
904 | 904 |
905 std::string entry_etag; | 905 std::string entry_etag; |
906 entry->GetString("gd$etag", &entry_etag); | 906 entry->GetString("gd$etag", &entry_etag); |
907 if (!etag.empty() && etag != entry_etag) { | 907 if (!etag.empty() && etag != entry_etag) { |
908 MessageLoop::current()->PostTask( | 908 base::MessageLoop::current()->PostTask( |
909 FROM_HERE, | 909 FROM_HERE, |
910 base::Bind(callback, HTTP_PRECONDITION, GURL())); | 910 base::Bind(callback, HTTP_PRECONDITION, GURL())); |
911 return; | 911 return; |
912 } | 912 } |
913 entry->SetString("docs$size.$t", "0"); | 913 entry->SetString("docs$size.$t", "0"); |
914 | 914 |
915 const GURL upload_url = GetUploadUrl(*entry); | 915 const GURL upload_url = GetUploadUrl(*entry); |
916 DCHECK(upload_url.is_valid()); | 916 DCHECK(upload_url.is_valid()); |
917 | 917 |
918 MessageLoop::current()->PostTask( | 918 base::MessageLoop::current()->PostTask( |
919 FROM_HERE, | 919 FROM_HERE, |
920 base::Bind(callback, HTTP_SUCCESS, | 920 base::Bind(callback, HTTP_SUCCESS, |
921 net::AppendQueryParameter(upload_url, "mode", "existing"))); | 921 net::AppendQueryParameter(upload_url, "mode", "existing"))); |
922 } | 922 } |
923 | 923 |
924 void FakeDriveService::GetUploadStatus( | 924 void FakeDriveService::GetUploadStatus( |
925 const base::FilePath& drive_file_path, | 925 const base::FilePath& drive_file_path, |
926 const GURL& upload_url, | 926 const GURL& upload_url, |
927 int64 content_length, | 927 int64 content_length, |
928 const UploadRangeCallback& callback) { | 928 const UploadRangeCallback& callback) { |
(...skipping 10 matching lines...) Expand all Loading... |
939 const std::string& content_type, | 939 const std::string& content_type, |
940 const base::FilePath& local_file_path, | 940 const base::FilePath& local_file_path, |
941 const UploadRangeCallback& callback, | 941 const UploadRangeCallback& callback, |
942 const ProgressCallback& progress_callback) { | 942 const ProgressCallback& progress_callback) { |
943 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 943 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
944 DCHECK(!callback.is_null()); | 944 DCHECK(!callback.is_null()); |
945 | 945 |
946 scoped_ptr<ResourceEntry> result_entry; | 946 scoped_ptr<ResourceEntry> result_entry; |
947 | 947 |
948 if (offline_) { | 948 if (offline_) { |
949 MessageLoop::current()->PostTask( | 949 base::MessageLoop::current()->PostTask( |
950 FROM_HERE, | 950 FROM_HERE, |
951 base::Bind(callback, | 951 base::Bind(callback, |
952 UploadRangeResponse(GDATA_NO_CONNECTION, | 952 UploadRangeResponse(GDATA_NO_CONNECTION, |
953 start_position, | 953 start_position, |
954 end_position), | 954 end_position), |
955 base::Passed(&result_entry))); | 955 base::Passed(&result_entry))); |
956 return; | 956 return; |
957 } | 957 } |
958 | 958 |
959 DictionaryValue* entry = NULL; | 959 DictionaryValue* entry = NULL; |
960 entry = FindEntryByUploadUrl(RemoveQueryParameter(upload_url)); | 960 entry = FindEntryByUploadUrl(RemoveQueryParameter(upload_url)); |
961 if (!entry) { | 961 if (!entry) { |
962 MessageLoop::current()->PostTask( | 962 base::MessageLoop::current()->PostTask( |
963 FROM_HERE, | 963 FROM_HERE, |
964 base::Bind(callback, | 964 base::Bind(callback, |
965 UploadRangeResponse(HTTP_NOT_FOUND, | 965 UploadRangeResponse(HTTP_NOT_FOUND, |
966 start_position, | 966 start_position, |
967 end_position), | 967 end_position), |
968 base::Passed(&result_entry))); | 968 base::Passed(&result_entry))); |
969 return; | 969 return; |
970 } | 970 } |
971 | 971 |
972 // Chunks are required to be sent in such a ways that they fill from the start | 972 // Chunks are required to be sent in such a ways that they fill from the start |
973 // of the not-yet-uploaded part with no gaps nor overlaps. | 973 // of the not-yet-uploaded part with no gaps nor overlaps. |
974 std::string current_size_string; | 974 std::string current_size_string; |
975 int64 current_size; | 975 int64 current_size; |
976 if (!entry->GetString("docs$size.$t", ¤t_size_string) || | 976 if (!entry->GetString("docs$size.$t", ¤t_size_string) || |
977 !base::StringToInt64(current_size_string, ¤t_size) || | 977 !base::StringToInt64(current_size_string, ¤t_size) || |
978 current_size != start_position) { | 978 current_size != start_position) { |
979 MessageLoop::current()->PostTask( | 979 base::MessageLoop::current()->PostTask( |
980 FROM_HERE, | 980 FROM_HERE, |
981 base::Bind(callback, | 981 base::Bind(callback, |
982 UploadRangeResponse(HTTP_BAD_REQUEST, | 982 UploadRangeResponse(HTTP_BAD_REQUEST, |
983 start_position, | 983 start_position, |
984 end_position), | 984 end_position), |
985 base::Passed(&result_entry))); | 985 base::Passed(&result_entry))); |
986 return; | 986 return; |
987 } | 987 } |
988 | 988 |
989 entry->SetString("docs$size.$t", base::Int64ToString(end_position)); | 989 entry->SetString("docs$size.$t", base::Int64ToString(end_position)); |
990 | 990 |
991 if (!progress_callback.is_null()) { | 991 if (!progress_callback.is_null()) { |
992 // In the real GDataWapi/Drive DriveService, progress is reported in | 992 // In the real GDataWapi/Drive DriveService, progress is reported in |
993 // nondeterministic timing. In this fake implementation, we choose to call | 993 // nondeterministic timing. In this fake implementation, we choose to call |
994 // it twice per one ResumeUpload. This is for making sure that client code | 994 // it twice per one ResumeUpload. This is for making sure that client code |
995 // works fine even if the callback is invoked more than once; it is the | 995 // works fine even if the callback is invoked more than once; it is the |
996 // crucial difference of the progress callback from others. | 996 // crucial difference of the progress callback from others. |
997 // Note that progress is notified in the relative offset in each chunk. | 997 // Note that progress is notified in the relative offset in each chunk. |
998 const int64 chunk_size = end_position - start_position; | 998 const int64 chunk_size = end_position - start_position; |
999 MessageLoop::current()->PostTask( | 999 base::MessageLoop::current()->PostTask( |
1000 FROM_HERE, base::Bind(progress_callback, chunk_size / 2, chunk_size)); | 1000 FROM_HERE, base::Bind(progress_callback, chunk_size / 2, chunk_size)); |
1001 MessageLoop::current()->PostTask( | 1001 base::MessageLoop::current()->PostTask( |
1002 FROM_HERE, base::Bind(progress_callback, chunk_size, chunk_size)); | 1002 FROM_HERE, base::Bind(progress_callback, chunk_size, chunk_size)); |
1003 } | 1003 } |
1004 | 1004 |
1005 if (content_length != end_position) { | 1005 if (content_length != end_position) { |
1006 MessageLoop::current()->PostTask( | 1006 base::MessageLoop::current()->PostTask( |
1007 FROM_HERE, | 1007 FROM_HERE, |
1008 base::Bind(callback, | 1008 base::Bind(callback, |
1009 UploadRangeResponse(HTTP_RESUME_INCOMPLETE, | 1009 UploadRangeResponse(HTTP_RESUME_INCOMPLETE, |
1010 start_position, | 1010 start_position, |
1011 end_position), | 1011 end_position), |
1012 base::Passed(&result_entry))); | 1012 base::Passed(&result_entry))); |
1013 return; | 1013 return; |
1014 } | 1014 } |
1015 | 1015 |
1016 AddNewChangestamp(entry); | 1016 AddNewChangestamp(entry); |
1017 result_entry = ResourceEntry::CreateFrom(*entry).Pass(); | 1017 result_entry = ResourceEntry::CreateFrom(*entry).Pass(); |
1018 | 1018 |
1019 std::string upload_mode; | 1019 std::string upload_mode; |
1020 bool upload_mode_found = | 1020 bool upload_mode_found = |
1021 net::GetValueForKeyInQuery(upload_url, "mode", &upload_mode); | 1021 net::GetValueForKeyInQuery(upload_url, "mode", &upload_mode); |
1022 DCHECK(upload_mode_found && | 1022 DCHECK(upload_mode_found && |
1023 (upload_mode == "newfile" || upload_mode == "existing")); | 1023 (upload_mode == "newfile" || upload_mode == "existing")); |
1024 | 1024 |
1025 GDataErrorCode return_code = | 1025 GDataErrorCode return_code = |
1026 upload_mode == "newfile" ? HTTP_CREATED : HTTP_SUCCESS; | 1026 upload_mode == "newfile" ? HTTP_CREATED : HTTP_SUCCESS; |
1027 | 1027 |
1028 MessageLoop::current()->PostTask( | 1028 base::MessageLoop::current()->PostTask( |
1029 FROM_HERE, | 1029 FROM_HERE, |
1030 base::Bind(callback, | 1030 base::Bind(callback, |
1031 UploadRangeResponse(return_code, | 1031 UploadRangeResponse(return_code, |
1032 start_position, | 1032 start_position, |
1033 end_position), | 1033 end_position), |
1034 base::Passed(&result_entry))); | 1034 base::Passed(&result_entry))); |
1035 } | 1035 } |
1036 | 1036 |
1037 void FakeDriveService::AuthorizeApp(const std::string& resource_id, | 1037 void FakeDriveService::AuthorizeApp(const std::string& resource_id, |
1038 const std::string& app_id, | 1038 const std::string& app_id, |
1039 const AuthorizeAppCallback& callback) { | 1039 const AuthorizeAppCallback& callback) { |
1040 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1040 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1041 DCHECK(!callback.is_null()); | 1041 DCHECK(!callback.is_null()); |
1042 } | 1042 } |
1043 | 1043 |
1044 void FakeDriveService::AddNewFile(const std::string& content_type, | 1044 void FakeDriveService::AddNewFile(const std::string& content_type, |
1045 const std::string& content_data, | 1045 const std::string& content_data, |
1046 const std::string& parent_resource_id, | 1046 const std::string& parent_resource_id, |
1047 const std::string& title, | 1047 const std::string& title, |
1048 bool shared_with_me, | 1048 bool shared_with_me, |
1049 const GetResourceEntryCallback& callback) { | 1049 const GetResourceEntryCallback& callback) { |
1050 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1050 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1051 DCHECK(!callback.is_null()); | 1051 DCHECK(!callback.is_null()); |
1052 | 1052 |
1053 if (offline_) { | 1053 if (offline_) { |
1054 scoped_ptr<ResourceEntry> null; | 1054 scoped_ptr<ResourceEntry> null; |
1055 MessageLoop::current()->PostTask( | 1055 base::MessageLoop::current()->PostTask( |
1056 FROM_HERE, | 1056 FROM_HERE, |
1057 base::Bind(callback, | 1057 base::Bind(callback, |
1058 GDATA_NO_CONNECTION, | 1058 GDATA_NO_CONNECTION, |
1059 base::Passed(&null))); | 1059 base::Passed(&null))); |
1060 return; | 1060 return; |
1061 } | 1061 } |
1062 | 1062 |
1063 // Prepare "kind" for hosted documents. This only supports Google Document. | 1063 // Prepare "kind" for hosted documents. This only supports Google Document. |
1064 std::string entry_kind; | 1064 std::string entry_kind; |
1065 if (content_type == "application/vnd.google-apps.document") | 1065 if (content_type == "application/vnd.google-apps.document") |
1066 entry_kind = "document"; | 1066 entry_kind = "document"; |
1067 else | 1067 else |
1068 entry_kind = "file"; | 1068 entry_kind = "file"; |
1069 | 1069 |
1070 const base::DictionaryValue* new_entry = AddNewEntry(content_type, | 1070 const base::DictionaryValue* new_entry = AddNewEntry(content_type, |
1071 content_data, | 1071 content_data, |
1072 parent_resource_id, | 1072 parent_resource_id, |
1073 title, | 1073 title, |
1074 shared_with_me, | 1074 shared_with_me, |
1075 entry_kind); | 1075 entry_kind); |
1076 if (!new_entry) { | 1076 if (!new_entry) { |
1077 scoped_ptr<ResourceEntry> null; | 1077 scoped_ptr<ResourceEntry> null; |
1078 MessageLoop::current()->PostTask( | 1078 base::MessageLoop::current()->PostTask( |
1079 FROM_HERE, | 1079 FROM_HERE, |
1080 base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null))); | 1080 base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null))); |
1081 return; | 1081 return; |
1082 } | 1082 } |
1083 | 1083 |
1084 scoped_ptr<ResourceEntry> parsed_entry( | 1084 scoped_ptr<ResourceEntry> parsed_entry( |
1085 ResourceEntry::CreateFrom(*new_entry)); | 1085 ResourceEntry::CreateFrom(*new_entry)); |
1086 MessageLoop::current()->PostTask( | 1086 base::MessageLoop::current()->PostTask( |
1087 FROM_HERE, | 1087 FROM_HERE, |
1088 base::Bind(callback, HTTP_CREATED, base::Passed(&parsed_entry))); | 1088 base::Bind(callback, HTTP_CREATED, base::Passed(&parsed_entry))); |
1089 } | 1089 } |
1090 | 1090 |
1091 void FakeDriveService::SetLastModifiedTime( | 1091 void FakeDriveService::SetLastModifiedTime( |
1092 const std::string& resource_id, | 1092 const std::string& resource_id, |
1093 const base::Time& last_modified_time, | 1093 const base::Time& last_modified_time, |
1094 const GetResourceEntryCallback& callback) { | 1094 const GetResourceEntryCallback& callback) { |
1095 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1095 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1096 DCHECK(!callback.is_null()); | 1096 DCHECK(!callback.is_null()); |
1097 | 1097 |
1098 if (offline_) { | 1098 if (offline_) { |
1099 scoped_ptr<ResourceEntry> null; | 1099 scoped_ptr<ResourceEntry> null; |
1100 MessageLoop::current()->PostTask( | 1100 base::MessageLoop::current()->PostTask( |
1101 FROM_HERE, | 1101 FROM_HERE, |
1102 base::Bind(callback, | 1102 base::Bind(callback, |
1103 GDATA_NO_CONNECTION, | 1103 GDATA_NO_CONNECTION, |
1104 base::Passed(&null))); | 1104 base::Passed(&null))); |
1105 return; | 1105 return; |
1106 } | 1106 } |
1107 | 1107 |
1108 base::DictionaryValue* entry = FindEntryByResourceId(resource_id); | 1108 base::DictionaryValue* entry = FindEntryByResourceId(resource_id); |
1109 if (!entry) { | 1109 if (!entry) { |
1110 scoped_ptr<ResourceEntry> null; | 1110 scoped_ptr<ResourceEntry> null; |
1111 MessageLoop::current()->PostTask( | 1111 base::MessageLoop::current()->PostTask( |
1112 FROM_HERE, | 1112 FROM_HERE, |
1113 base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null))); | 1113 base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null))); |
1114 return; | 1114 return; |
1115 } | 1115 } |
1116 | 1116 |
1117 if (last_modified_time.is_null()) { | 1117 if (last_modified_time.is_null()) { |
1118 entry->Remove("updated.$t", NULL); | 1118 entry->Remove("updated.$t", NULL); |
1119 } else { | 1119 } else { |
1120 entry->SetString("updated.$t", | 1120 entry->SetString("updated.$t", |
1121 util::FormatTimeAsString(last_modified_time)); | 1121 util::FormatTimeAsString(last_modified_time)); |
1122 } | 1122 } |
1123 | 1123 |
1124 scoped_ptr<ResourceEntry> parsed_entry( | 1124 scoped_ptr<ResourceEntry> parsed_entry( |
1125 ResourceEntry::CreateFrom(*entry)); | 1125 ResourceEntry::CreateFrom(*entry)); |
1126 MessageLoop::current()->PostTask( | 1126 base::MessageLoop::current()->PostTask( |
1127 FROM_HERE, | 1127 FROM_HERE, |
1128 base::Bind(callback, HTTP_SUCCESS, base::Passed(&parsed_entry))); | 1128 base::Bind(callback, HTTP_SUCCESS, base::Passed(&parsed_entry))); |
1129 } | 1129 } |
1130 | 1130 |
1131 base::DictionaryValue* FakeDriveService::FindEntryByResourceId( | 1131 base::DictionaryValue* FakeDriveService::FindEntryByResourceId( |
1132 const std::string& resource_id) { | 1132 const std::string& resource_id) { |
1133 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1133 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1134 | 1134 |
1135 base::DictionaryValue* resource_list_dict = NULL; | 1135 base::DictionaryValue* resource_list_dict = NULL; |
1136 base::ListValue* entries = NULL; | 1136 base::ListValue* entries = NULL; |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1322 void FakeDriveService::GetResourceListInternal( | 1322 void FakeDriveService::GetResourceListInternal( |
1323 int64 start_changestamp, | 1323 int64 start_changestamp, |
1324 const std::string& search_query, | 1324 const std::string& search_query, |
1325 const std::string& directory_resource_id, | 1325 const std::string& directory_resource_id, |
1326 int start_offset, | 1326 int start_offset, |
1327 int max_results, | 1327 int max_results, |
1328 int* load_counter, | 1328 int* load_counter, |
1329 const GetResourceListCallback& callback) { | 1329 const GetResourceListCallback& callback) { |
1330 if (offline_) { | 1330 if (offline_) { |
1331 scoped_ptr<ResourceList> null; | 1331 scoped_ptr<ResourceList> null; |
1332 MessageLoop::current()->PostTask( | 1332 base::MessageLoop::current()->PostTask( |
1333 FROM_HERE, | 1333 FROM_HERE, |
1334 base::Bind(callback, | 1334 base::Bind(callback, |
1335 GDATA_NO_CONNECTION, | 1335 GDATA_NO_CONNECTION, |
1336 base::Passed(&null))); | 1336 base::Passed(&null))); |
1337 return; | 1337 return; |
1338 } | 1338 } |
1339 | 1339 |
1340 scoped_ptr<ResourceList> resource_list = | 1340 scoped_ptr<ResourceList> resource_list = |
1341 ResourceList::CreateFrom(*resource_list_value_); | 1341 ResourceList::CreateFrom(*resource_list_value_); |
1342 | 1342 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1422 } | 1422 } |
1423 | 1423 |
1424 Link* link = new Link; | 1424 Link* link = new Link; |
1425 link->set_type(Link::LINK_NEXT); | 1425 link->set_type(Link::LINK_NEXT); |
1426 link->set_href(next_url); | 1426 link->set_href(next_url); |
1427 resource_list->mutable_links()->push_back(link); | 1427 resource_list->mutable_links()->push_back(link); |
1428 } | 1428 } |
1429 | 1429 |
1430 if (load_counter) | 1430 if (load_counter) |
1431 *load_counter += 1; | 1431 *load_counter += 1; |
1432 MessageLoop::current()->PostTask( | 1432 base::MessageLoop::current()->PostTask( |
1433 FROM_HERE, | 1433 FROM_HERE, |
1434 base::Bind(callback, | 1434 base::Bind(callback, |
1435 HTTP_SUCCESS, | 1435 HTTP_SUCCESS, |
1436 base::Passed(&resource_list))); | 1436 base::Passed(&resource_list))); |
1437 } | 1437 } |
1438 | 1438 |
1439 } // namespace google_apis | 1439 } // namespace google_apis |
OLD | NEW |