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

Unified Diff: components/ntp_snippets/ntp_snippets_service.cc

Issue 2190353002: 📰Fix SnippetsService's status reporting (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/ntp_snippets/ntp_snippets_service.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/ntp_snippets/ntp_snippets_service.cc
diff --git a/components/ntp_snippets/ntp_snippets_service.cc b/components/ntp_snippets/ntp_snippets_service.cc
index 825de07f89ae8d900c5a7f625c97336a98a5a242..2098e6ab758076c2f9a2016087d38429cc13924f 100644
--- a/components/ntp_snippets/ntp_snippets_service.cc
+++ b/components/ntp_snippets/ntp_snippets_service.cc
@@ -261,6 +261,10 @@ void NTPSnippetsService::FetchSnippetsFromHosts(
bool force_request) {
if (!ready())
return;
+
+ if (snippets_.empty())
+ UpdateCategoryStatus(CategoryStatus::AVAILABLE_LOADING);
+
snippets_fetcher_->FetchSnippetsFromHosts(hosts, application_language_code_,
kMaxSnippetCount, force_request);
}
@@ -421,6 +425,8 @@ void NTPSnippetsService::OnDatabaseError() {
EnterState(State::SHUT_DOWN, CategoryStatus::LOADING_ERROR);
}
+// TODO(dgn): name clash between content suggestions and suggestions hosts.
+// method name should be changed.
void NTPSnippetsService::OnSuggestionsChanged(
const SuggestionsProfile& suggestions) {
DCHECK(initialized());
@@ -444,6 +450,9 @@ void NTPSnippetsService::OnSuggestionsChanged(
StoreSnippetHostsToPrefs(hosts);
+ // We removed some suggestions, so we want to let the client know about that.
+ // The fetch might take a long time or not complete so we don't want to wait
+ // for its callback.
NotifyNewSuggestions();
FetchSnippetsFromHosts(hosts, /*force_request=*/false);
@@ -454,6 +463,9 @@ void NTPSnippetsService::OnFetchFinished(
if (!ready())
return;
+ DCHECK(category_status_ == CategoryStatus::AVAILABLE ||
+ category_status_ == CategoryStatus::AVAILABLE_LOADING);
+
if (snippets) {
// Sparse histogram used because the number of snippets is small (bound by
// kMaxSnippetCount).
@@ -481,6 +493,7 @@ void NTPSnippetsService::OnFetchFinished(
dismissed_snippets_.size());
}
+ UpdateCategoryStatus(CategoryStatus::AVAILABLE);
NotifyNewSuggestions();
}
@@ -661,6 +674,11 @@ void NTPSnippetsService::EnterStateEnabled(bool fetch_snippets) {
if (fetch_snippets)
FetchSnippets(/*force_request=*/false);
+ // FetchSnippets should set the status to |AVAILABLE_LOADING| if relevant,
+ // otherwise we transition to |AVAILABLE| here.
+ if (category_status_ != CategoryStatus::AVAILABLE_LOADING)
+ UpdateCategoryStatus(CategoryStatus::AVAILABLE);
+
// If host restrictions are enabled, register for host list updates.
// |suggestions_service_| can be null in tests.
if (snippets_fetcher_->UsesHostRestrictions() && suggestions_service_) {
@@ -708,6 +726,8 @@ void NTPSnippetsService::FinishInitialization() {
snippets_status_service_->Init(base::Bind(
&NTPSnippetsService::OnDisabledReasonChanged, base::Unretained(this)));
+ // Always notify here even if we got nothing from the database, because we
+ // don't know how long the fetch will take or if it will even complete.
NotifyNewSuggestions();
}
@@ -718,7 +738,8 @@ void NTPSnippetsService::OnDisabledReasonChanged(
switch (disabled_reason) {
case DisabledReason::NONE:
- EnterState(State::READY, CategoryStatus::AVAILABLE);
+ // Do not change the status. That will be done in EnterStateEnabled()
+ EnterState(State::READY, category_status_);
break;
case DisabledReason::EXPLICITLY_DISABLED:
@@ -732,10 +753,7 @@ void NTPSnippetsService::OnDisabledReasonChanged(
}
void NTPSnippetsService::EnterState(State state, CategoryStatus status) {
- if (status != category_status_) {
- category_status_ = status;
- NotifyCategoryStatusChanged();
- }
+ UpdateCategoryStatus(status);
if (state == state_)
return;
@@ -800,7 +818,11 @@ void NTPSnippetsService::NotifyNewSuggestions() {
observer_->OnNewSuggestions(provided_category_, std::move(result));
}
-void NTPSnippetsService::NotifyCategoryStatusChanged() {
+void NTPSnippetsService::UpdateCategoryStatus(CategoryStatus status) {
+ if (status == category_status_)
+ return;
+
+ category_status_ = status;
if (observer_) {
observer_->OnCategoryStatusChanged(provided_category_, category_status_);
}
« no previous file with comments | « components/ntp_snippets/ntp_snippets_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698