Index: components/suggestions/suggestions_service.cc |
diff --git a/components/suggestions/suggestions_service.cc b/components/suggestions/suggestions_service.cc |
index db1e3fc9632156cf08337286ea1201c93acd7051..b12aae1a1cc4010f46d833ceba1282c6afc72962 100644 |
--- a/components/suggestions/suggestions_service.cc |
+++ b/components/suggestions/suggestions_service.cc |
@@ -156,8 +156,25 @@ bool SuggestionsService::IsControlGroup() { |
} |
void SuggestionsService::FetchSuggestionsData( |
+ SyncState sync_state, |
SuggestionsService::ResponseCallback callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
+ if (sync_state == NOT_INITIALIZED_ENABLED) { |
+ // Sync is not initialized yet, but enabled. Serve previously cached |
+ // suggestions if available. |
+ waiting_requestors_.push_back(callback); |
+ ServeFromCache(); |
+ return; |
+ } else if (sync_state == SYNC_OR_HISTORY_SYNC_DISABLED) { |
+ // Cancel any ongoing request (and the timeout closure). We must no longer |
+ // interact with the server. |
+ pending_request_.reset(NULL); |
+ pending_timeout_closure_.reset(NULL); |
+ suggestions_store_->ClearSuggestions(); |
+ callback.Run(SuggestionsProfile()); |
+ DispatchRequestsAndClear(SuggestionsProfile(), &waiting_requestors_); |
+ return; |
+ } |
FetchSuggestionsDataNoTimeout(callback); |
@@ -170,21 +187,6 @@ void SuggestionsService::FetchSuggestionsData( |
base::TimeDelta::FromMilliseconds(request_timeout_ms_)); |
} |
-void SuggestionsService::FetchSuggestionsDataNoTimeout( |
- SuggestionsService::ResponseCallback callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- if (pending_request_.get()) { |
- // Request already exists, so just add requestor to queue. |
- waiting_requestors_.push_back(callback); |
- return; |
- } |
- |
- // Form new request. |
- DCHECK(waiting_requestors_.empty()); |
- waiting_requestors_.push_back(callback); |
- IssueRequest(suggestions_url_); |
-} |
- |
void SuggestionsService::GetPageThumbnail( |
const GURL& url, |
base::Callback<void(const GURL&, const SkBitmap*)> callback) { |
@@ -235,6 +237,33 @@ void SuggestionsService::RegisterProfilePrefs( |
BlacklistStore::RegisterProfilePrefs(registry); |
} |
+void SuggestionsService::SetDefaultExpiryTimestamp( |
+ SuggestionsProfile* suggestions, int64 default_timestamp_usec) { |
+ for (int i = 0; i < suggestions->suggestions_size(); ++i) { |
+ ChromeSuggestion* suggestion = suggestions->mutable_suggestions(i); |
+ // Do not set expiry if the server has already provided a more specific |
+ // expiry time for this suggestion. |
+ if (!suggestion->has_expiry_ts()) { |
+ suggestion->set_expiry_ts(default_timestamp_usec); |
+ } |
+ } |
+} |
+ |
+void SuggestionsService::FetchSuggestionsDataNoTimeout( |
+ SuggestionsService::ResponseCallback callback) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ if (pending_request_.get()) { |
+ // Request already exists, so just add requestor to queue. |
+ waiting_requestors_.push_back(callback); |
+ return; |
+ } |
+ |
+ // Form new request. |
+ DCHECK(waiting_requestors_.empty()); |
+ waiting_requestors_.push_back(callback); |
+ IssueRequest(suggestions_url_); |
+} |
+ |
void SuggestionsService::IssueRequest(const GURL& url) { |
pending_request_.reset(CreateSuggestionsRequest(url)); |
pending_request_->Start(); |
@@ -330,18 +359,6 @@ void SuggestionsService::OnURLFetchComplete(const net::URLFetcher* source) { |
ScheduleBlacklistUpload(true); |
} |
-void SuggestionsService::SetDefaultExpiryTimestamp( |
- SuggestionsProfile* suggestions, int64 default_timestamp_usec) { |
- for (int i = 0; i < suggestions->suggestions_size(); ++i) { |
- ChromeSuggestion* suggestion = suggestions->mutable_suggestions(i); |
- // Do not set expiry if the server has already provided a more specific |
- // expiry time for this suggestion. |
- if (!suggestion->has_expiry_ts()) { |
- suggestion->set_expiry_ts(default_timestamp_usec); |
- } |
- } |
-} |
- |
void SuggestionsService::Shutdown() { |
// Cancel pending request and timeout closure, then serve existing requestors |
// from cache. |