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 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
436 int64 start_changestamp, | 436 int64 start_changestamp, |
437 int64 root_feed_changestamp, | 437 int64 root_feed_changestamp, |
438 bool should_fetch_multiple_feeds, | 438 bool should_fetch_multiple_feeds, |
439 const FilePath& search_file_path, | 439 const FilePath& search_file_path, |
440 const std::string& search_query, | 440 const std::string& search_query, |
441 const GURL& feed_to_load, | 441 const GURL& feed_to_load, |
442 const std::string& directory_resource_id, | 442 const std::string& directory_resource_id, |
443 const FindEntryCallback& entry_found_callback, | 443 const FindEntryCallback& entry_found_callback, |
444 const LoadDocumentFeedCallback& feed_load_callback) { | 444 const LoadDocumentFeedCallback& feed_load_callback) { |
445 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 445 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
446 DVLOG(1) << "LoadFeedFromServer"; | |
satorux1
2012/08/10 18:14:34
remove this?
kochi
2012/08/13 09:08:39
Done.
| |
446 | 447 |
447 // |feed_list| will contain the list of all collected feed updates that | 448 // |feed_list| will contain the list of all collected feed updates that |
448 // we will receive through calls of DocumentsService::GetDocuments(). | 449 // we will receive through calls of DocumentsService::GetDocuments(). |
449 scoped_ptr<std::vector<DocumentFeed*> > feed_list( | 450 scoped_ptr<std::vector<DocumentFeed*> > feed_list( |
450 new std::vector<DocumentFeed*>); | 451 new std::vector<DocumentFeed*>); |
451 const base::TimeTicks start_time = base::TimeTicks::Now(); | 452 const base::TimeTicks start_time = base::TimeTicks::Now(); |
453 | |
454 if (gdata::util::IsDriveV2ApiEnabled()) { | |
455 documents_service_->GetChangelist( | |
456 feed_to_load, | |
457 start_changestamp, | |
458 base::Bind(&GDataWapiFeedLoader::OnGetChangelist, | |
459 weak_ptr_factory_.GetWeakPtr(), | |
460 initial_origin, | |
461 feed_load_callback, | |
462 base::Owned(new GetDocumentsParams( | |
463 start_changestamp, | |
464 root_feed_changestamp, | |
465 feed_list.release(), | |
466 should_fetch_multiple_feeds, | |
467 search_file_path, | |
468 search_query, | |
469 directory_resource_id, | |
470 entry_found_callback, | |
471 NULL)), | |
472 start_time)); | |
473 return; | |
474 } | |
475 | |
452 documents_service_->GetDocuments( | 476 documents_service_->GetDocuments( |
453 feed_to_load, | 477 feed_to_load, |
454 start_changestamp, | 478 start_changestamp, |
455 search_query, | 479 search_query, |
456 directory_resource_id, | 480 directory_resource_id, |
457 base::Bind(&GDataWapiFeedLoader::OnGetDocuments, | 481 base::Bind(&GDataWapiFeedLoader::OnGetDocuments, |
458 weak_ptr_factory_.GetWeakPtr(), | 482 weak_ptr_factory_.GetWeakPtr(), |
459 initial_origin, | 483 initial_origin, |
460 feed_load_callback, | 484 feed_load_callback, |
461 base::Owned(new GetDocumentsParams(start_changestamp, | 485 base::Owned(new GetDocumentsParams(start_changestamp, |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
618 FOR_EACH_OBSERVER(Observer, observers_, | 642 FOR_EACH_OBSERVER(Observer, observers_, |
619 OnDocumentFeedFetched(num_accumulated_entries)); | 643 OnDocumentFeedFetched(num_accumulated_entries)); |
620 | 644 |
621 UMA_HISTOGRAM_TIMES("Gdata.EntireFeedLoadTime", | 645 UMA_HISTOGRAM_TIMES("Gdata.EntireFeedLoadTime", |
622 base::TimeTicks::Now() - start_time); | 646 base::TimeTicks::Now() - start_time); |
623 | 647 |
624 if (!callback.is_null()) | 648 if (!callback.is_null()) |
625 callback.Run(params, error); | 649 callback.Run(params, error); |
626 } | 650 } |
627 | 651 |
652 void GDataWapiFeedLoader::OnGetChangelist( | |
653 ContentOrigin initial_origin, | |
654 const LoadDocumentFeedCallback& callback, | |
655 GetDocumentsParams* params, | |
656 base::TimeTicks start_time, | |
657 GDataErrorCode status, | |
658 scoped_ptr<base::Value> data) { | |
659 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
660 | |
661 if (params->feed_list->empty()) { | |
662 UMA_HISTOGRAM_TIMES("Drive.InitialFeedLoadTime", | |
663 base::TimeTicks::Now() - start_time); | |
664 } | |
665 | |
666 GDataFileError error = util::GDataToGDataFileError(status); | |
667 if (error == GDATA_FILE_OK && | |
668 (!data.get() || data->GetType() != Value::TYPE_DICTIONARY)) { | |
669 error = GDATA_FILE_ERROR_FAILED; | |
670 } | |
671 | |
672 if (error != GDATA_FILE_OK) { | |
673 directory_service_->set_origin(initial_origin); | |
674 | |
675 if (!callback.is_null()) | |
676 callback.Run(params, error); | |
677 | |
678 return; | |
679 } | |
680 | |
681 GURL next_feed_url; | |
682 scoped_ptr<ChangeList> current_feed(ChangeList::CreateFrom(*data)); | |
683 if (!current_feed.get()) { | |
684 if (!callback.is_null()) { | |
685 callback.Run(params, GDATA_FILE_ERROR_FAILED); | |
686 } | |
687 return; | |
688 } | |
689 const bool has_next_feed = !current_feed->next_page_token().empty(); | |
690 | |
691 #ifndef NDEBUG | |
692 // Save initial root feed for analysis. | |
693 std::string file_name = | |
694 base::StringPrintf("DEBUG_changelist_%ld.json", | |
695 params->start_changestamp); | |
696 util::PostBlockingPoolSequencedTask( | |
697 FROM_HERE, | |
698 blocking_task_runner_, | |
699 base::Bind(&SaveFeedOnBlockingPoolForDebugging, | |
700 cache_->GetCacheDirectoryPath( | |
701 GDataCache::CACHE_TYPE_META).Append(file_name), | |
702 base::Passed(&data))); | |
703 #endif | |
704 | |
705 // Add the current feed to the list of collected feeds for this directory. | |
706 scoped_ptr<DocumentFeed> feed = | |
707 DocumentFeed::CreateFromChangeList(*current_feed); | |
708 //feed->largest_changestamp_ = params->root_feed_changestamp; | |
709 params->feed_list->push_back(feed.release()); | |
710 | |
711 // Compute and notify the number of entries fetched so far. | |
712 int num_accumulated_entries = 0; | |
713 for (size_t i = 0; i < params->feed_list->size(); ++i) | |
714 num_accumulated_entries += params->feed_list->at(i)->entries().size(); | |
715 | |
716 // Notify the observers that a document feed is fetched. | |
717 FOR_EACH_OBSERVER(Observer, observers_, | |
718 OnDocumentFeedFetched(num_accumulated_entries)); | |
719 | |
720 // Check if we need to collect more data to complete the directory list. | |
721 if (params->should_fetch_multiple_feeds && has_next_feed) { | |
722 // Kick of the remaining part of the feeds. | |
723 documents_service_->GetChangelist( | |
724 current_feed->next_link(), | |
725 params->start_changestamp, | |
726 base::Bind(&GDataWapiFeedLoader::OnGetChangelist, | |
727 weak_ptr_factory_.GetWeakPtr(), | |
728 initial_origin, | |
729 callback, | |
730 base::Owned( | |
731 new GetDocumentsParams( | |
732 params->start_changestamp, | |
733 params->root_feed_changestamp, | |
734 params->feed_list.release(), | |
735 params->should_fetch_multiple_feeds, | |
736 params->search_file_path, | |
737 params->search_query, | |
738 params->directory_resource_id, | |
739 params->callback, | |
740 NULL)), | |
741 start_time)); | |
742 return; | |
743 } | |
744 | |
745 UMA_HISTOGRAM_TIMES("Drive.EntireFeedLoadTime", | |
746 base::TimeTicks::Now() - start_time); | |
747 | |
748 if (!callback.is_null()) | |
749 callback.Run(params, error); | |
750 } | |
751 | |
628 void GDataWapiFeedLoader::OnNotifyDocumentFeedFetched( | 752 void GDataWapiFeedLoader::OnNotifyDocumentFeedFetched( |
629 base::WeakPtr<GetDocumentsUiState> ui_state) { | 753 base::WeakPtr<GetDocumentsUiState> ui_state) { |
630 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 754 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
631 | 755 |
632 if (!ui_state) { | 756 if (!ui_state) { |
633 // The ui state instance is already released, which means the fetching | 757 // The ui state instance is already released, which means the fetching |
634 // is done and we don't need to update any more. | 758 // is done and we don't need to update any more. |
635 return; | 759 return; |
636 } | 760 } |
637 | 761 |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
806 dir_iter != changed_dirs.end(); ++dir_iter) { | 930 dir_iter != changed_dirs.end(); ++dir_iter) { |
807 FOR_EACH_OBSERVER(Observer, observers_, | 931 FOR_EACH_OBSERVER(Observer, observers_, |
808 OnDirectoryChanged(*dir_iter)); | 932 OnDirectoryChanged(*dir_iter)); |
809 } | 933 } |
810 } | 934 } |
811 | 935 |
812 return error; | 936 return error; |
813 } | 937 } |
814 | 938 |
815 } // namespace gdata | 939 } // namespace gdata |
OLD | NEW |