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

Side by Side Diff: components/suggestions/suggestions_service_impl.cc

Issue 2866013002: SuggestionsService: don't automatically fetch on startup (Closed)
Patch Set: review Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/suggestions/suggestions_service_impl.h" 5 #include "components/suggestions/suggestions_service_impl.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/feature_list.h" 10 #include "base/feature_list.h"
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 const GURL& url, 173 const GURL& url,
174 const GURL& thumbnail_url, 174 const GURL& thumbnail_url,
175 const BitmapCallback& callback) { 175 const BitmapCallback& callback) {
176 thumbnail_manager_->AddImageURL(url, thumbnail_url); 176 thumbnail_manager_->AddImageURL(url, thumbnail_url);
177 GetPageThumbnail(url, callback); 177 GetPageThumbnail(url, callback);
178 } 178 }
179 179
180 bool SuggestionsServiceImpl::BlacklistURL(const GURL& candidate_url) { 180 bool SuggestionsServiceImpl::BlacklistURL(const GURL& candidate_url) {
181 DCHECK(thread_checker_.CalledOnValidThread()); 181 DCHECK(thread_checker_.CalledOnValidThread());
182 182
183 // TODO(treib): Do we need to check |sync_state_| here?
184
183 if (!blacklist_store_->BlacklistUrl(candidate_url)) 185 if (!blacklist_store_->BlacklistUrl(candidate_url))
184 return false; 186 return false;
185 187
186 callback_list_.Notify( 188 callback_list_.Notify(
187 GetSuggestionsDataFromCache().value_or(SuggestionsProfile())); 189 GetSuggestionsDataFromCache().value_or(SuggestionsProfile()));
188 190
189 // Blacklist uploads are scheduled on any request completion, so only schedule 191 // Blacklist uploads are scheduled on any request completion, so only schedule
190 // an upload if there is no ongoing request. 192 // an upload if there is no ongoing request.
191 if (!pending_request_.get()) 193 if (!pending_request_.get())
192 ScheduleBlacklistUpload(); 194 ScheduleBlacklistUpload();
193 195
194 return true; 196 return true;
195 } 197 }
196 198
197 bool SuggestionsServiceImpl::UndoBlacklistURL(const GURL& url) { 199 bool SuggestionsServiceImpl::UndoBlacklistURL(const GURL& url) {
198 DCHECK(thread_checker_.CalledOnValidThread()); 200 DCHECK(thread_checker_.CalledOnValidThread());
201
202 // TODO(treib): Do we need to check |sync_state_| here?
203
199 TimeDelta time_delta; 204 TimeDelta time_delta;
200 if (blacklist_store_->GetTimeUntilURLReadyForUpload(url, &time_delta) && 205 if (blacklist_store_->GetTimeUntilURLReadyForUpload(url, &time_delta) &&
201 time_delta > TimeDelta::FromSeconds(0) && 206 time_delta > TimeDelta::FromSeconds(0) &&
202 blacklist_store_->RemoveUrl(url)) { 207 blacklist_store_->RemoveUrl(url)) {
203 // The URL was not yet candidate for upload to the server and could be 208 // The URL was not yet candidate for upload to the server and could be
204 // removed from the blacklist. 209 // removed from the blacklist.
205 callback_list_.Notify( 210 callback_list_.Notify(
206 GetSuggestionsDataFromCache().value_or(SuggestionsProfile())); 211 GetSuggestionsDataFromCache().value_or(SuggestionsProfile()));
207 return true; 212 return true;
208 } 213 }
209 return false; 214 return false;
210 } 215 }
211 216
212 void SuggestionsServiceImpl::ClearBlacklist() { 217 void SuggestionsServiceImpl::ClearBlacklist() {
213 DCHECK(thread_checker_.CalledOnValidThread()); 218 DCHECK(thread_checker_.CalledOnValidThread());
219
220 // TODO(treib): Do we need to check |sync_state_| here?
221
214 blacklist_store_->ClearBlacklist(); 222 blacklist_store_->ClearBlacklist();
215 callback_list_.Notify( 223 callback_list_.Notify(
216 GetSuggestionsDataFromCache().value_or(SuggestionsProfile())); 224 GetSuggestionsDataFromCache().value_or(SuggestionsProfile()));
217 IssueRequestIfNoneOngoing(BuildSuggestionsBlacklistClearURL()); 225 IssueRequestIfNoneOngoing(BuildSuggestionsBlacklistClearURL());
218 } 226 }
219 227
220 // static 228 // static
221 bool SuggestionsServiceImpl::GetBlacklistedUrl(const net::URLFetcher& request, 229 bool SuggestionsServiceImpl::GetBlacklistedUrl(const net::URLFetcher& request,
222 GURL* url) { 230 GURL* url) {
223 bool is_blacklist_request = base::StartsWith( 231 bool is_blacklist_request = base::StartsWith(
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 } 288 }
281 if (!sync_service_->IsSyncActive() || !sync_service_->ConfigurationDone()) { 289 if (!sync_service_->IsSyncActive() || !sync_service_->ConfigurationDone()) {
282 return NOT_INITIALIZED_ENABLED; 290 return NOT_INITIALIZED_ENABLED;
283 } 291 }
284 return sync_service_->GetActiveDataTypes().Has( 292 return sync_service_->GetActiveDataTypes().Has(
285 syncer::HISTORY_DELETE_DIRECTIVES) 293 syncer::HISTORY_DELETE_DIRECTIVES)
286 ? INITIALIZED_ENABLED_HISTORY 294 ? INITIALIZED_ENABLED_HISTORY
287 : SYNC_OR_HISTORY_SYNC_DISABLED; 295 : SYNC_OR_HISTORY_SYNC_DISABLED;
288 } 296 }
289 297
290 bool SuggestionsServiceImpl::RefreshSyncState() { 298 SuggestionsServiceImpl::RefreshAction
299 SuggestionsServiceImpl::RefreshSyncState() {
291 SyncState new_sync_state = ComputeSyncState(); 300 SyncState new_sync_state = ComputeSyncState();
292 if (sync_state_ == new_sync_state) { 301 if (sync_state_ == new_sync_state) {
293 return false; 302 return NO_ACTION;
294 } 303 }
304
305 SyncState old_sync_state = sync_state_;
295 sync_state_ = new_sync_state; 306 sync_state_ = new_sync_state;
296 return true; 307
308 switch (new_sync_state) {
309 case NOT_INITIALIZED_ENABLED:
310 break;
311 case INITIALIZED_ENABLED_HISTORY:
312 // If the user just signed in, we fetch suggestions, so that hopefully the
313 // next NTP will already get them.
314 if (old_sync_state == SYNC_OR_HISTORY_SYNC_DISABLED) {
315 return FETCH_SUGGESTIONS;
316 }
317 break;
318 case SYNC_OR_HISTORY_SYNC_DISABLED:
319 // If the user signed out (or disabled history sync), we have to clear
320 // everything.
321 return CLEAR_SUGGESTIONS;
322 }
323 // Otherwise, there's nothing to do.
324 return NO_ACTION;
297 } 325 }
298 326
299 void SuggestionsServiceImpl::OnStateChanged(syncer::SyncService* sync) { 327 void SuggestionsServiceImpl::OnStateChanged(syncer::SyncService* sync) {
300 DCHECK(sync_service_ == sync); 328 DCHECK(sync_service_ == sync);
301 329
302 if (!RefreshSyncState()) { 330 switch (RefreshSyncState()) {
303 return; 331 case NO_ACTION:
304 } 332 break;
305 333 case CLEAR_SUGGESTIONS:
306 switch (sync_state_) {
307 case SYNC_OR_HISTORY_SYNC_DISABLED:
308 // Cancel any ongoing request, to stop interacting with the server. 334 // Cancel any ongoing request, to stop interacting with the server.
309 pending_request_.reset(nullptr); 335 pending_request_.reset(nullptr);
310 suggestions_store_->ClearSuggestions(); 336 suggestions_store_->ClearSuggestions();
311 callback_list_.Notify(SuggestionsProfile()); 337 callback_list_.Notify(SuggestionsProfile());
312 break; 338 break;
313 case NOT_INITIALIZED_ENABLED: 339 case FETCH_SUGGESTIONS:
314 // Keep the cache (if any), but don't refresh. 340 IssueRequestIfNoneOngoing(BuildSuggestionsURL());
315 break;
316 case INITIALIZED_ENABLED_HISTORY:
317 // If we have any observers, issue a network request to refresh the
318 // suggestions in the cache.
319 if (!callback_list_.empty())
320 IssueRequestIfNoneOngoing(BuildSuggestionsURL());
321 break; 341 break;
322 } 342 }
323 } 343 }
324 344
325 void SuggestionsServiceImpl::SetDefaultExpiryTimestamp( 345 void SuggestionsServiceImpl::SetDefaultExpiryTimestamp(
326 SuggestionsProfile* suggestions, 346 SuggestionsProfile* suggestions,
327 int64_t default_timestamp_usec) { 347 int64_t default_timestamp_usec) {
328 for (int i = 0; i < suggestions->suggestions_size(); ++i) { 348 for (int i = 0; i < suggestions->suggestions_size(); ++i) {
329 ChromeSuggestion* suggestion = suggestions->mutable_suggestions(i); 349 ChromeSuggestion* suggestion = suggestions->mutable_suggestions(i);
330 // Do not set expiry if the server has already provided a more specific 350 // Do not set expiry if the server has already provided a more specific
331 // expiry time for this suggestion. 351 // expiry time for this suggestion.
332 if (!suggestion->has_expiry_ts()) { 352 if (!suggestion->has_expiry_ts()) {
333 suggestion->set_expiry_ts(default_timestamp_usec); 353 suggestion->set_expiry_ts(default_timestamp_usec);
334 } 354 }
335 } 355 }
336 } 356 }
337 357
338 void SuggestionsServiceImpl::IssueRequestIfNoneOngoing(const GURL& url) { 358 void SuggestionsServiceImpl::IssueRequestIfNoneOngoing(const GURL& url) {
339 // If there is an ongoing request, let it complete. 359 // If there is an ongoing request, let it complete.
360 // This will silently swallow blacklist and clearblacklist requests if a
361 // request happens to be ongoing.
362 // TODO(treib): Queue such requests and send them after the current one
363 // completes.
340 if (pending_request_.get()) { 364 if (pending_request_.get()) {
341 return; 365 return;
342 } 366 }
343 // If there is an ongoing token request, also wait for that. 367 // If there is an ongoing token request, also wait for that.
344 if (token_fetcher_) { 368 if (token_fetcher_) {
345 return; 369 return;
346 } 370 }
347 371
348 OAuth2TokenService::ScopeSet scopes{GaiaConstants::kChromeSyncOAuth2Scope}; 372 OAuth2TokenService::ScopeSet scopes{GaiaConstants::kChromeSyncOAuth2Scope};
349 token_fetcher_ = base::MakeUnique<AccessTokenFetcher>( 373 token_fetcher_ = base::MakeUnique<AccessTokenFetcher>(
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 scheduling_delay_ = TimeDelta::FromSeconds(kDefaultSchedulingDelaySec); 585 scheduling_delay_ = TimeDelta::FromSeconds(kDefaultSchedulingDelaySec);
562 } else { 586 } else {
563 TimeDelta candidate_delay = 587 TimeDelta candidate_delay =
564 scheduling_delay_ * kSchedulingBackoffMultiplier; 588 scheduling_delay_ * kSchedulingBackoffMultiplier;
565 if (candidate_delay < TimeDelta::FromSeconds(kSchedulingMaxDelaySec)) 589 if (candidate_delay < TimeDelta::FromSeconds(kSchedulingMaxDelaySec))
566 scheduling_delay_ = candidate_delay; 590 scheduling_delay_ = candidate_delay;
567 } 591 }
568 } 592 }
569 593
570 } // namespace suggestions 594 } // namespace suggestions
OLDNEW
« no previous file with comments | « components/suggestions/suggestions_service_impl.h ('k') | components/suggestions/suggestions_service_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698