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

Side by Side Diff: components/ntp_snippets/remote/ntp_snippets_fetcher.h

Issue 2395123002: Connecting UserClassifier to NtpSnippetsFetcher (Closed)
Patch Set: Unit-test fix Created 4 years, 2 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 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
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
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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 } 147 }
145 148
146 void SetPersonalizationForTesting(Personalization personalization) { 149 void SetPersonalizationForTesting(Personalization personalization) {
147 personalization_ = personalization; 150 personalization_ = personalization;
148 } 151 }
149 152
150 private: 153 private:
151 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest, BuildRequestAuthenticated); 154 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest, BuildRequestAuthenticated);
152 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest, BuildRequestUnauthenticated); 155 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest, BuildRequestUnauthenticated);
153 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest, BuildRequestExcludedIds); 156 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest, BuildRequestExcludedIds);
157 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest, BuildRequestNoUserClass);
154 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest, 158 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest,
155 BuildRequestWithTwoLanguages); 159 BuildRequestWithTwoLanguages);
156 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest, 160 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest,
157 BuildRequestWithUILanguageOnly); 161 BuildRequestWithUILanguageOnly);
158 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest, 162 FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest,
159 BuildRequestWithOtherLanguageOnly); 163 BuildRequestWithOtherLanguageOnly);
160 164
161 enum FetchAPI { 165 enum FetchAPI {
162 CHROME_READER_API, 166 CHROME_READER_API,
163 CHROME_CONTENT_SUGGESTIONS_API, 167 CHROME_CONTENT_SUGGESTIONS_API,
164 }; 168 };
165 169
166 struct RequestParams { 170 struct RequestParams {
167 FetchAPI fetch_api; 171 FetchAPI fetch_api;
168 std::string obfuscated_gaia_id; 172 std::string obfuscated_gaia_id;
169 bool only_return_personalized_results; 173 bool only_return_personalized_results;
170 std::string user_locale; 174 std::string user_locale;
171 std::set<std::string> host_restricts; 175 std::set<std::string> host_restricts;
172 std::set<std::string> excluded_ids; 176 std::set<std::string> excluded_ids;
173 int count_to_fetch; 177 int count_to_fetch;
174 bool interactive_request; 178 bool interactive_request;
179 std::string user_class;
175 translate::LanguageModel::LanguageInfo ui_language; 180 translate::LanguageModel::LanguageInfo ui_language;
176 translate::LanguageModel::LanguageInfo other_top_language; 181 translate::LanguageModel::LanguageInfo other_top_language;
177 182
178 RequestParams(); 183 RequestParams();
179 ~RequestParams(); 184 ~RequestParams();
180 185
181 std::string BuildRequest(); 186 std::string BuildRequest();
182 }; 187 };
183 188
184 void FetchSnippetsImpl(const GURL& url, 189 void FetchSnippetsImpl(const GURL& url,
(...skipping 19 matching lines...) Expand all
204 void OnURLFetchComplete(const net::URLFetcher* source) override; 209 void OnURLFetchComplete(const net::URLFetcher* source) override;
205 210
206 bool JsonToSnippets(const base::Value& parsed, 211 bool JsonToSnippets(const base::Value& parsed,
207 FetchedCategoriesVector* categories); 212 FetchedCategoriesVector* categories);
208 void OnJsonParsed(std::unique_ptr<base::Value> parsed); 213 void OnJsonParsed(std::unique_ptr<base::Value> parsed);
209 void OnJsonError(const std::string& error); 214 void OnJsonError(const std::string& error);
210 void FetchFinished(OptionalFetchedCategories fetched_categories, 215 void FetchFinished(OptionalFetchedCategories fetched_categories,
211 FetchResult result, 216 FetchResult result,
212 const std::string& extra_message); 217 const std::string& extra_message);
213 218
219 bool DemandQuotaForRequest(bool interactive_request);
220
214 // Authorization for signed-in users. 221 // Authorization for signed-in users.
215 SigninManagerBase* signin_manager_; 222 SigninManagerBase* signin_manager_;
216 OAuth2TokenService* token_service_; 223 OAuth2TokenService* token_service_;
217 std::unique_ptr<OAuth2TokenService::Request> oauth_request_; 224 std::unique_ptr<OAuth2TokenService::Request> oauth_request_;
218 bool waiting_for_refresh_token_; 225 bool waiting_for_refresh_token_;
219 226
220 // Holds the URL request context. 227 // Holds the URL request context.
221 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 228 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
222 229
223 // Weak references, not owned. 230 // Weak references, not owned.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 264
258 // The variant of the fetching to use, loaded from variation parameters. 265 // The variant of the fetching to use, loaded from variation parameters.
259 Personalization personalization_; 266 Personalization personalization_;
260 267
261 // Is the request user initiated? 268 // Is the request user initiated?
262 bool interactive_request_; 269 bool interactive_request_;
263 270
264 // Allow for an injectable tick clock for testing. 271 // Allow for an injectable tick clock for testing.
265 std::unique_ptr<base::TickClock> tick_clock_; 272 std::unique_ptr<base::TickClock> tick_clock_;
266 273
267 // Request throttler for limiting requests. 274 // Classifier that tells us how active the user is. Not owned.
268 RequestThrottler request_throttler_; 275 const UserClassifier* user_classifier_;
276
277 // Request throttlers for limiting requests for different classes of users.
278 RequestThrottler request_throttler_rare_ntp_user_;
279 RequestThrottler request_throttler_active_ntp_user_;
280 RequestThrottler request_throttler_active_suggestions_consumer_;
269 281
270 // When a token request gets canceled, we want to retry once. 282 // When a token request gets canceled, we want to retry once.
271 bool oauth_token_retried_; 283 bool oauth_token_retried_;
272 284
273 base::WeakPtrFactory<NTPSnippetsFetcher> weak_ptr_factory_; 285 base::WeakPtrFactory<NTPSnippetsFetcher> weak_ptr_factory_;
274 286
275 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsFetcher); 287 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsFetcher);
276 }; 288 };
277 } // namespace ntp_snippets 289 } // namespace ntp_snippets
278 290
279 #endif // COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_FETCHER_H_ 291 #endif // COMPONENTS_NTP_SNIPPETS_REMOTE_NTP_SNIPPETS_FETCHER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698