| OLD | NEW |
| 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.h" | 5 #include "components/suggestions/suggestions_service.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/feature_list.h" | 9 #include "base/feature_list.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| 11 #include "base/metrics/histogram_macros.h" | 11 #include "base/metrics/histogram_macros.h" |
| 12 #include "base/metrics/sparse_histogram.h" | 12 #include "base/metrics/sparse_histogram.h" |
| 13 #include "base/single_thread_task_runner.h" | 13 #include "base/single_thread_task_runner.h" |
| 14 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
| 15 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
| 16 #include "base/strings/stringprintf.h" | 16 #include "base/strings/stringprintf.h" |
| 17 #include "base/thread_task_runner_handle.h" | 17 #include "base/thread_task_runner_handle.h" |
| 18 #include "build/build_config.h" |
| 18 #include "components/data_use_measurement/core/data_use_user_data.h" | 19 #include "components/data_use_measurement/core/data_use_user_data.h" |
| 19 #include "components/pref_registry/pref_registry_syncable.h" | 20 #include "components/pref_registry/pref_registry_syncable.h" |
| 20 #include "components/signin/core/browser/signin_manager_base.h" | 21 #include "components/signin/core/browser/signin_manager_base.h" |
| 21 #include "components/suggestions/blacklist_store.h" | 22 #include "components/suggestions/blacklist_store.h" |
| 22 #include "components/suggestions/suggestions_store.h" | 23 #include "components/suggestions/suggestions_store.h" |
| 23 #include "components/variations/net/variations_http_headers.h" | 24 #include "components/variations/net/variations_http_headers.h" |
| 24 #include "google_apis/gaia/gaia_constants.h" | 25 #include "google_apis/gaia/gaia_constants.h" |
| 25 #include "google_apis/gaia/oauth2_token_service.h" | 26 #include "google_apis/gaia/oauth2_token_service.h" |
| 26 #include "net/base/escape.h" | 27 #include "net/base/escape.h" |
| 27 #include "net/base/load_flags.h" | 28 #include "net/base/load_flags.h" |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 // Format string for OAuth2 authentication headers. | 97 // Format string for OAuth2 authentication headers. |
| 97 const char kAuthorizationHeaderFormat[] = "Authorization: Bearer %s"; | 98 const char kAuthorizationHeaderFormat[] = "Authorization: Bearer %s"; |
| 98 | 99 |
| 99 const char kFaviconURL[] = | 100 const char kFaviconURL[] = |
| 100 "https://s2.googleusercontent.com/s2/favicons?domain_url=%s&alt=s&sz=32"; | 101 "https://s2.googleusercontent.com/s2/favicons?domain_url=%s&alt=s&sz=32"; |
| 101 | 102 |
| 102 const char kPingURL[] = | 103 const char kPingURL[] = |
| 103 "https://www.google.com/chromesuggestions/click?q=%lld&cd=%d"; | 104 "https://www.google.com/chromesuggestions/click?q=%lld&cd=%d"; |
| 104 | 105 |
| 105 // The default expiry timeout is 168 hours. | 106 // The default expiry timeout is 168 hours. |
| 106 const int64 kDefaultExpiryUsec = 168 * base::Time::kMicrosecondsPerHour; | 107 const int64_t kDefaultExpiryUsec = 168 * base::Time::kMicrosecondsPerHour; |
| 107 | 108 |
| 108 const base::Feature kOAuth2AuthenticationFeature { | 109 const base::Feature kOAuth2AuthenticationFeature { |
| 109 "SuggestionsServiceOAuth2", base::FEATURE_DISABLED_BY_DEFAULT | 110 "SuggestionsServiceOAuth2", base::FEATURE_DISABLED_BY_DEFAULT |
| 110 }; | 111 }; |
| 111 | 112 |
| 112 } // namespace | 113 } // namespace |
| 113 | 114 |
| 114 // Helper class for fetching OAuth2 access tokens. | 115 // Helper class for fetching OAuth2 access tokens. |
| 115 // To get a token, call |GetAccessToken|. Does not support multiple concurrent | 116 // To get a token, call |GetAccessToken|. Does not support multiple concurrent |
| 116 // token requests, i.e. check |HasPendingRequest| first. | 117 // token requests, i.e. check |HasPendingRequest| first. |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 net::EscapeQueryParamValue(candidate_url.spec(), true)); | 318 net::EscapeQueryParamValue(candidate_url.spec(), true)); |
| 318 } | 319 } |
| 319 | 320 |
| 320 // static | 321 // static |
| 321 GURL SuggestionsService::BuildSuggestionsBlacklistClearURL() { | 322 GURL SuggestionsService::BuildSuggestionsBlacklistClearURL() { |
| 322 return GURL(base::StringPrintf(kSuggestionsBlacklistClearURLFormat, | 323 return GURL(base::StringPrintf(kSuggestionsBlacklistClearURLFormat, |
| 323 kDeviceType)); | 324 kDeviceType)); |
| 324 } | 325 } |
| 325 | 326 |
| 326 void SuggestionsService::SetDefaultExpiryTimestamp( | 327 void SuggestionsService::SetDefaultExpiryTimestamp( |
| 327 SuggestionsProfile* suggestions, int64 default_timestamp_usec) { | 328 SuggestionsProfile* suggestions, |
| 329 int64_t default_timestamp_usec) { |
| 328 for (int i = 0; i < suggestions->suggestions_size(); ++i) { | 330 for (int i = 0; i < suggestions->suggestions_size(); ++i) { |
| 329 ChromeSuggestion* suggestion = suggestions->mutable_suggestions(i); | 331 ChromeSuggestion* suggestion = suggestions->mutable_suggestions(i); |
| 330 // Do not set expiry if the server has already provided a more specific | 332 // Do not set expiry if the server has already provided a more specific |
| 331 // expiry time for this suggestion. | 333 // expiry time for this suggestion. |
| 332 if (!suggestion->has_expiry_ts()) { | 334 if (!suggestion->has_expiry_ts()) { |
| 333 suggestion->set_expiry_ts(default_timestamp_usec); | 335 suggestion->set_expiry_ts(default_timestamp_usec); |
| 334 } | 336 } |
| 335 } | 337 } |
| 336 } | 338 } |
| 337 | 339 |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 DCHECK(success); | 439 DCHECK(success); |
| 438 | 440 |
| 439 // Parse the received suggestions and update the cache, or take proper action | 441 // Parse the received suggestions and update the cache, or take proper action |
| 440 // in the case of invalid response. | 442 // in the case of invalid response. |
| 441 SuggestionsProfile suggestions; | 443 SuggestionsProfile suggestions; |
| 442 if (suggestions_data.empty()) { | 444 if (suggestions_data.empty()) { |
| 443 LogResponseState(RESPONSE_EMPTY); | 445 LogResponseState(RESPONSE_EMPTY); |
| 444 suggestions_store_->ClearSuggestions(); | 446 suggestions_store_->ClearSuggestions(); |
| 445 } else if (suggestions.ParseFromString(suggestions_data)) { | 447 } else if (suggestions.ParseFromString(suggestions_data)) { |
| 446 LogResponseState(RESPONSE_VALID); | 448 LogResponseState(RESPONSE_VALID); |
| 447 int64 now_usec = (base::Time::NowFromSystemTime() - base::Time::UnixEpoch()) | 449 int64_t now_usec = |
| 448 .ToInternalValue(); | 450 (base::Time::NowFromSystemTime() - base::Time::UnixEpoch()) |
| 451 .ToInternalValue(); |
| 449 SetDefaultExpiryTimestamp(&suggestions, now_usec + kDefaultExpiryUsec); | 452 SetDefaultExpiryTimestamp(&suggestions, now_usec + kDefaultExpiryUsec); |
| 450 PopulateExtraData(&suggestions); | 453 PopulateExtraData(&suggestions); |
| 451 suggestions_store_->StoreSuggestions(suggestions); | 454 suggestions_store_->StoreSuggestions(suggestions); |
| 452 } else { | 455 } else { |
| 453 LogResponseState(RESPONSE_INVALID); | 456 LogResponseState(RESPONSE_INVALID); |
| 454 } | 457 } |
| 455 | 458 |
| 456 UpdateBlacklistDelay(true); | 459 UpdateBlacklistDelay(true); |
| 457 ScheduleBlacklistUpload(); | 460 ScheduleBlacklistUpload(); |
| 458 } | 461 } |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 scheduling_delay_ = TimeDelta::FromSeconds(kDefaultSchedulingDelaySec); | 534 scheduling_delay_ = TimeDelta::FromSeconds(kDefaultSchedulingDelaySec); |
| 532 } else { | 535 } else { |
| 533 TimeDelta candidate_delay = | 536 TimeDelta candidate_delay = |
| 534 scheduling_delay_ * kSchedulingBackoffMultiplier; | 537 scheduling_delay_ * kSchedulingBackoffMultiplier; |
| 535 if (candidate_delay < TimeDelta::FromSeconds(kSchedulingMaxDelaySec)) | 538 if (candidate_delay < TimeDelta::FromSeconds(kSchedulingMaxDelaySec)) |
| 536 scheduling_delay_ = candidate_delay; | 539 scheduling_delay_ = candidate_delay; |
| 537 } | 540 } |
| 538 } | 541 } |
| 539 | 542 |
| 540 } // namespace suggestions | 543 } // namespace suggestions |
| OLD | NEW |