Chromium Code Reviews| 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/chromeos/gdata/gdata_wapi_feed_loader.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_wapi_feed_loader.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
| (...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 457 const std::string& directory_resource_id, | 457 const std::string& directory_resource_id, |
| 458 const FindEntryCallback& entry_found_callback, | 458 const FindEntryCallback& entry_found_callback, |
| 459 const LoadDocumentFeedCallback& feed_load_callback) { | 459 const LoadDocumentFeedCallback& feed_load_callback) { |
| 460 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 460 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 461 | 461 |
| 462 // |feed_list| will contain the list of all collected feed updates that | 462 // |feed_list| will contain the list of all collected feed updates that |
| 463 // we will receive through calls of DocumentsService::GetDocuments(). | 463 // we will receive through calls of DocumentsService::GetDocuments(). |
| 464 scoped_ptr<std::vector<DocumentFeed*> > feed_list( | 464 scoped_ptr<std::vector<DocumentFeed*> > feed_list( |
| 465 new std::vector<DocumentFeed*>); | 465 new std::vector<DocumentFeed*>); |
| 466 const base::TimeTicks start_time = base::TimeTicks::Now(); | 466 const base::TimeTicks start_time = base::TimeTicks::Now(); |
| 467 | |
| 468 if (gdata::util::IsDriveV2ApiEnabled()) { | |
| 469 documents_service_->GetChangelist( | |
| 470 feed_to_load, | |
| 471 start_changestamp, | |
| 472 base::Bind(&GDataWapiFeedLoader::OnGetChangelist, | |
| 473 weak_ptr_factory_.GetWeakPtr(), | |
| 474 initial_origin, | |
| 475 feed_load_callback, | |
| 476 base::Owned(new GetDocumentsParams( | |
| 477 start_changestamp, | |
| 478 root_feed_changestamp, | |
| 479 feed_list.release(), | |
| 480 should_fetch_multiple_feeds, | |
| 481 search_file_path, | |
| 482 search_query, | |
| 483 directory_resource_id, | |
| 484 entry_found_callback, | |
| 485 NULL)), | |
| 486 start_time)); | |
| 487 return; | |
| 488 } | |
| 489 | |
| 467 documents_service_->GetDocuments( | 490 documents_service_->GetDocuments( |
| 468 feed_to_load, | 491 feed_to_load, |
| 469 start_changestamp, | 492 start_changestamp, |
| 470 search_query, | 493 search_query, |
| 471 directory_resource_id, | 494 directory_resource_id, |
| 472 base::Bind(&GDataWapiFeedLoader::OnGetDocuments, | 495 base::Bind(&GDataWapiFeedLoader::OnGetDocuments, |
| 473 weak_ptr_factory_.GetWeakPtr(), | 496 weak_ptr_factory_.GetWeakPtr(), |
| 474 initial_origin, | 497 initial_origin, |
| 475 feed_load_callback, | 498 feed_load_callback, |
| 476 base::Owned(new GetDocumentsParams(start_changestamp, | 499 base::Owned(new GetDocumentsParams(start_changestamp, |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 633 FOR_EACH_OBSERVER(Observer, observers_, | 656 FOR_EACH_OBSERVER(Observer, observers_, |
| 634 OnDocumentFeedFetched(num_accumulated_entries)); | 657 OnDocumentFeedFetched(num_accumulated_entries)); |
| 635 | 658 |
| 636 UMA_HISTOGRAM_TIMES("Gdata.EntireFeedLoadTime", | 659 UMA_HISTOGRAM_TIMES("Gdata.EntireFeedLoadTime", |
| 637 base::TimeTicks::Now() - start_time); | 660 base::TimeTicks::Now() - start_time); |
| 638 | 661 |
| 639 if (!callback.is_null()) | 662 if (!callback.is_null()) |
| 640 callback.Run(params, error); | 663 callback.Run(params, error); |
| 641 } | 664 } |
| 642 | 665 |
| 666 void GDataWapiFeedLoader::OnGetChangelist( | |
| 667 ContentOrigin initial_origin, | |
| 668 const LoadDocumentFeedCallback& callback, | |
| 669 GetDocumentsParams* params, | |
| 670 base::TimeTicks start_time, | |
| 671 GDataErrorCode status, | |
| 672 scoped_ptr<base::Value> data) { | |
| 673 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
| 674 | |
| 675 if (params->feed_list->empty()) { | |
| 676 UMA_HISTOGRAM_TIMES("Drive.InitialFeedLoadTime", | |
| 677 base::TimeTicks::Now() - start_time); | |
| 678 } | |
| 679 | |
| 680 GDataFileError error = util::GDataToGDataFileError(status); | |
| 681 if (error == GDATA_FILE_OK && | |
| 682 (!data.get() || data->GetType() != Value::TYPE_DICTIONARY)) { | |
| 683 error = GDATA_FILE_ERROR_FAILED; | |
| 684 } | |
| 685 | |
| 686 if (error != GDATA_FILE_OK) { | |
| 687 directory_service_->set_origin(initial_origin); | |
| 688 | |
| 689 if (!callback.is_null()) | |
| 690 callback.Run(params, error); | |
| 691 | |
| 692 return; | |
| 693 } | |
| 694 | |
| 695 GURL next_feed_url; | |
| 696 scoped_ptr<ChangeList> current_feed(ChangeList::CreateFrom(*data)); | |
| 697 if (!current_feed.get()) { | |
| 698 if (!callback.is_null()) { | |
| 699 callback.Run(params, GDATA_FILE_ERROR_FAILED); | |
| 700 } | |
| 701 return; | |
| 702 } | |
| 703 const bool has_next_feed = !current_feed->next_page_token().empty(); | |
| 704 | |
| 705 #ifndef NDEBUG | |
| 706 // Save initial root feed for analysis. | |
| 707 std::string file_name = | |
| 708 base::StringPrintf("DEBUG_changelist_%" PRId64 ".json", | |
| 709 params->start_changestamp); | |
| 710 util::PostBlockingPoolSequencedTask( | |
| 711 FROM_HERE, | |
| 712 blocking_task_runner_, | |
| 713 base::Bind(&SaveFeedOnBlockingPoolForDebugging, | |
| 714 cache_->GetCacheDirectoryPath( | |
| 715 GDataCache::CACHE_TYPE_META).Append(file_name), | |
| 716 base::Passed(&data))); | |
| 717 #endif | |
| 718 | |
| 719 // Add the current feed to the list of collected feeds for this directory. | |
| 720 scoped_ptr<DocumentFeed> feed = | |
| 721 DocumentFeed::CreateFromChangeList(*current_feed); | |
| 722 params->feed_list->push_back(feed.release()); | |
| 723 | |
| 724 // Compute and notify the number of entries fetched so far. | |
| 725 int num_accumulated_entries = 0; | |
| 726 for (size_t i = 0; i < params->feed_list->size(); ++i) | |
| 727 num_accumulated_entries += params->feed_list->at(i)->entries().size(); | |
| 728 | |
| 729 // Notify the observers that a document feed is fetched. | |
| 730 FOR_EACH_OBSERVER(Observer, observers_, | |
| 731 OnDocumentFeedFetched(num_accumulated_entries)); | |
| 732 | |
| 733 // Check if we need to collect more data to complete the directory list. | |
| 734 if (params->should_fetch_multiple_feeds && has_next_feed) { | |
| 735 // Kick of the remaining part of the feeds. | |
| 736 documents_service_->GetChangelist( | |
| 737 current_feed->next_link(), | |
| 738 params->start_changestamp, | |
| 739 base::Bind(&GDataWapiFeedLoader::OnGetChangelist, | |
| 740 weak_ptr_factory_.GetWeakPtr(), | |
| 741 initial_origin, | |
| 742 callback, | |
| 743 base::Owned( | |
| 744 new GetDocumentsParams( | |
| 745 params->start_changestamp, | |
| 746 params->root_feed_changestamp, | |
| 747 params->feed_list.release(), | |
| 748 params->should_fetch_multiple_feeds, | |
| 749 params->search_file_path, | |
| 750 params->search_query, | |
| 751 params->directory_resource_id, | |
| 752 params->callback, | |
| 753 NULL)), | |
| 754 start_time)); | |
| 755 return; | |
| 756 } | |
| 757 | |
| 758 UMA_HISTOGRAM_TIMES("Drive.EntireFeedLoadTime", | |
| 759 base::TimeTicks::Now() - start_time); | |
| 760 | |
| 761 if (!callback.is_null()) | |
| 762 callback.Run(params, error); | |
| 763 } | |
|
satorux1
2012/08/13 17:05:43
In OnGetDocuments, OnNotifyDocumentFeedFetched() i
kochi
2012/08/14 02:09:19
Done.
| |
| 764 | |
| 643 void GDataWapiFeedLoader::OnNotifyDocumentFeedFetched( | 765 void GDataWapiFeedLoader::OnNotifyDocumentFeedFetched( |
| 644 base::WeakPtr<GetDocumentsUiState> ui_state) { | 766 base::WeakPtr<GetDocumentsUiState> ui_state) { |
| 645 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 767 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 646 | 768 |
| 647 if (!ui_state) { | 769 if (!ui_state) { |
| 648 // The ui state instance is already released, which means the fetching | 770 // The ui state instance is already released, which means the fetching |
| 649 // is done and we don't need to update any more. | 771 // is done and we don't need to update any more. |
| 650 return; | 772 return; |
| 651 } | 773 } |
| 652 | 774 |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 821 dir_iter != changed_dirs.end(); ++dir_iter) { | 943 dir_iter != changed_dirs.end(); ++dir_iter) { |
| 822 FOR_EACH_OBSERVER(Observer, observers_, | 944 FOR_EACH_OBSERVER(Observer, observers_, |
| 823 OnDirectoryChanged(*dir_iter)); | 945 OnDirectoryChanged(*dir_iter)); |
| 824 } | 946 } |
| 825 } | 947 } |
| 826 | 948 |
| 827 return error; | 949 return error; |
| 828 } | 950 } |
| 829 | 951 |
| 830 } // namespace gdata | 952 } // namespace gdata |
| OLD | NEW |