OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #ifndef COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_FETCHER_H_ | 5 #ifndef COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_FETCHER_H_ |
6 #define COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_FETCHER_H_ | 6 #define COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_FETCHER_H_ |
7 | 7 |
8 #include <memory> | 8 #include <memory> |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
(...skipping 15 matching lines...) Expand all Loading... |
26 class PrefService; | 26 class PrefService; |
27 class SigninManagerBase; | 27 class SigninManagerBase; |
28 | 28 |
29 namespace base { | 29 namespace base { |
30 class ListValue; | 30 class ListValue; |
31 class Value; | 31 class Value; |
32 } // namespace base | 32 } // namespace base |
33 | 33 |
34 namespace ntp_snippets { | 34 namespace ntp_snippets { |
35 | 35 |
| 36 class UserClassifier; |
| 37 |
36 // Fetches snippet data for the NTP from the server. | 38 // Fetches snippet data for the NTP from the server. |
37 class NTPSnippetsFetcher : public OAuth2TokenService::Consumer, | 39 class NTPSnippetsFetcher : public OAuth2TokenService::Consumer, |
38 public OAuth2TokenService::Observer, | 40 public OAuth2TokenService::Observer, |
39 public net::URLFetcherDelegate { | 41 public net::URLFetcherDelegate { |
40 public: | 42 public: |
41 // Callbacks for JSON parsing, needed because the parsing is platform- | 43 // Callbacks for JSON parsing, needed because the parsing is platform- |
42 // dependent. | 44 // dependent. |
43 using SuccessCallback = base::Callback<void(std::unique_ptr<base::Value>)>; | 45 using SuccessCallback = base::Callback<void(std::unique_ptr<base::Value>)>; |
44 using ErrorCallback = base::Callback<void(const std::string&)>; | 46 using ErrorCallback = base::Callback<void(const std::string&)>; |
45 using ParseJSONCallback = base::Callback< | 47 using ParseJSONCallback = base::Callback< |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 }; | 90 }; |
89 | 91 |
90 NTPSnippetsFetcher( | 92 NTPSnippetsFetcher( |
91 SigninManagerBase* signin_manager, | 93 SigninManagerBase* signin_manager, |
92 OAuth2TokenService* token_service, | 94 OAuth2TokenService* token_service, |
93 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter, | 95 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter, |
94 PrefService* pref_service, | 96 PrefService* pref_service, |
95 CategoryFactory* category_factory, | 97 CategoryFactory* category_factory, |
96 translate::LanguageModel* language_model, | 98 translate::LanguageModel* language_model, |
97 const ParseJSONCallback& parse_json_callback, | 99 const ParseJSONCallback& parse_json_callback, |
98 const std::string& api_key); | 100 const std::string& api_key, |
| 101 const UserClassifier* user_classifier); |
99 ~NTPSnippetsFetcher() override; | 102 ~NTPSnippetsFetcher() override; |
100 | 103 |
101 // Set a callback that is called when a new set of snippets are downloaded, | 104 // Set a callback that is called when a new set of snippets are downloaded, |
102 // overriding any previously set callback. | 105 // overriding any previously set callback. |
103 void SetCallback(const SnippetsAvailableCallback& callback); | 106 void SetCallback(const SnippetsAvailableCallback& callback); |
104 | 107 |
105 // Fetches snippets from the server. |hosts| restricts the results to a set of | 108 // Fetches snippets from the server. |hosts| restricts the results to a set of |
106 // hosts, e.g. "www.google.com". If |hosts| is empty, no host restrictions are | 109 // hosts, e.g. "www.google.com". If |hosts| is empty, no host restrictions are |
107 // applied. | 110 // applied. |
108 // | 111 // |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 | 168 |
166 struct RequestParams { | 169 struct RequestParams { |
167 FetchAPI fetch_api; | 170 FetchAPI fetch_api; |
168 std::string obfuscated_gaia_id; | 171 std::string obfuscated_gaia_id; |
169 bool only_return_personalized_results; | 172 bool only_return_personalized_results; |
170 std::string user_locale; | 173 std::string user_locale; |
171 std::set<std::string> host_restricts; | 174 std::set<std::string> host_restricts; |
172 std::set<std::string> excluded_ids; | 175 std::set<std::string> excluded_ids; |
173 int count_to_fetch; | 176 int count_to_fetch; |
174 bool interactive_request; | 177 bool interactive_request; |
| 178 std::string user_class; |
175 translate::LanguageModel::LanguageInfo ui_language; | 179 translate::LanguageModel::LanguageInfo ui_language; |
176 translate::LanguageModel::LanguageInfo other_top_language; | 180 translate::LanguageModel::LanguageInfo other_top_language; |
177 | 181 |
178 RequestParams(); | 182 RequestParams(); |
179 ~RequestParams(); | 183 ~RequestParams(); |
180 | 184 |
181 std::string BuildRequest(); | 185 std::string BuildRequest(); |
182 }; | 186 }; |
183 | 187 |
184 void FetchSnippetsImpl(const GURL& url, | 188 void FetchSnippetsImpl(const GURL& url, |
(...skipping 19 matching lines...) Expand all Loading... |
204 void OnURLFetchComplete(const net::URLFetcher* source) override; | 208 void OnURLFetchComplete(const net::URLFetcher* source) override; |
205 | 209 |
206 bool JsonToSnippets(const base::Value& parsed, | 210 bool JsonToSnippets(const base::Value& parsed, |
207 FetchedCategoriesVector* categories); | 211 FetchedCategoriesVector* categories); |
208 void OnJsonParsed(std::unique_ptr<base::Value> parsed); | 212 void OnJsonParsed(std::unique_ptr<base::Value> parsed); |
209 void OnJsonError(const std::string& error); | 213 void OnJsonError(const std::string& error); |
210 void FetchFinished(OptionalFetchedCategories fetched_categories, | 214 void FetchFinished(OptionalFetchedCategories fetched_categories, |
211 FetchResult result, | 215 FetchResult result, |
212 const std::string& extra_message); | 216 const std::string& extra_message); |
213 | 217 |
| 218 bool DemandQuotaForRequest(bool interactive_request); |
| 219 |
214 // Authorization for signed-in users. | 220 // Authorization for signed-in users. |
215 SigninManagerBase* signin_manager_; | 221 SigninManagerBase* signin_manager_; |
216 OAuth2TokenService* token_service_; | 222 OAuth2TokenService* token_service_; |
217 std::unique_ptr<OAuth2TokenService::Request> oauth_request_; | 223 std::unique_ptr<OAuth2TokenService::Request> oauth_request_; |
218 bool waiting_for_refresh_token_; | 224 bool waiting_for_refresh_token_; |
219 | 225 |
220 // Holds the URL request context. | 226 // Holds the URL request context. |
221 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; | 227 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; |
222 | 228 |
223 // Weak references, not owned. | 229 // Weak references, not owned. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 | 263 |
258 // The variant of the fetching to use, loaded from variation parameters. | 264 // The variant of the fetching to use, loaded from variation parameters. |
259 Personalization personalization_; | 265 Personalization personalization_; |
260 | 266 |
261 // Is the request user initiated? | 267 // Is the request user initiated? |
262 bool interactive_request_; | 268 bool interactive_request_; |
263 | 269 |
264 // Allow for an injectable tick clock for testing. | 270 // Allow for an injectable tick clock for testing. |
265 std::unique_ptr<base::TickClock> tick_clock_; | 271 std::unique_ptr<base::TickClock> tick_clock_; |
266 | 272 |
267 // Request throttler for limiting requests. | 273 // Classifier that tells us how active the user is. Not owned. |
268 RequestThrottler request_throttler_; | 274 const UserClassifier* user_classifier_; |
| 275 |
| 276 // Request throttlers for limiting requests for different classes of users. |
| 277 RequestThrottler request_throttler_rare_ntp_user_; |
| 278 RequestThrottler request_throttler_active_ntp_user_; |
| 279 RequestThrottler request_throttler_active_suggestions_consumer_; |
269 | 280 |
270 // When a token request gets canceled, we want to retry once. | 281 // When a token request gets canceled, we want to retry once. |
271 bool oauth_token_retried_; | 282 bool oauth_token_retried_; |
272 | 283 |
273 base::WeakPtrFactory<NTPSnippetsFetcher> weak_ptr_factory_; | 284 base::WeakPtrFactory<NTPSnippetsFetcher> weak_ptr_factory_; |
274 | 285 |
275 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsFetcher); | 286 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsFetcher); |
276 }; | 287 }; |
277 } // namespace ntp_snippets | 288 } // namespace ntp_snippets |
278 | 289 |
279 #endif // COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_FETCHER_H_ | 290 #endif // COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_FETCHER_H_ |
OLD | NEW |