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

Side by Side Diff: components/ntp_snippets/remote/json_request.cc

Issue 2771813002: RemoteSuggestionsFetcher: Remove ChromeReader integration (Closed)
Patch Set: Created 3 years, 9 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 #include "components/ntp_snippets/remote/json_request.h" 5 #include "components/ntp_snippets/remote/json_request.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 211
212 void JsonRequest::OnJsonError(const std::string& error) { 212 void JsonRequest::OnJsonError(const std::string& error) {
213 std::string json_string; 213 std::string json_string;
214 url_fetcher_->GetResponseAsString(&json_string); 214 url_fetcher_->GetResponseAsString(&json_string);
215 LOG(WARNING) << "Received invalid JSON (" << error << "): " << json_string; 215 LOG(WARNING) << "Received invalid JSON (" << error << "): " << json_string;
216 std::move(request_completed_callback_) 216 std::move(request_completed_callback_)
217 .Run(/*result=*/nullptr, FetchResult::JSON_PARSE_ERROR, 217 .Run(/*result=*/nullptr, FetchResult::JSON_PARSE_ERROR,
218 /*error_details=*/base::StringPrintf(" (error %s)", error.c_str())); 218 /*error_details=*/base::StringPrintf(" (error %s)", error.c_str()));
219 } 219 }
220 220
221 JsonRequest::Builder::Builder() 221 JsonRequest::Builder::Builder() : language_model_(nullptr) {}
222 : fetch_api_(CHROME_READER_API),
223 language_model_(nullptr) {}
224 JsonRequest::Builder::Builder(JsonRequest::Builder&&) = default; 222 JsonRequest::Builder::Builder(JsonRequest::Builder&&) = default;
225 JsonRequest::Builder::~Builder() = default; 223 JsonRequest::Builder::~Builder() = default;
226 224
227 std::unique_ptr<JsonRequest> JsonRequest::Builder::Build() const { 225 std::unique_ptr<JsonRequest> JsonRequest::Builder::Build() const {
228 DCHECK(!url_.is_empty()); 226 DCHECK(!url_.is_empty());
229 DCHECK(url_request_context_getter_); 227 DCHECK(url_request_context_getter_);
230 DCHECK(clock_); 228 DCHECK(clock_);
231 auto request = base::MakeUnique<JsonRequest>(params_.exclusive_category, 229 auto request = base::MakeUnique<JsonRequest>(params_.exclusive_category,
232 clock_, parse_json_callback_); 230 clock_, parse_json_callback_);
233 std::string body = BuildBody(); 231 std::string body = BuildBody();
234 std::string headers = BuildHeaders(); 232 std::string headers = BuildHeaders();
235 request->url_fetcher_ = BuildURLFetcher(request.get(), headers, body); 233 request->url_fetcher_ = BuildURLFetcher(request.get(), headers, body);
236 234
237 // Log the request for debugging network issues. 235 // Log the request for debugging network issues.
238 VLOG(1) << "Sending a NTP snippets request to " << url_ << ":\n" 236 VLOG(1) << "Sending a NTP snippets request to " << url_ << ":\n"
239 << headers << "\n" 237 << headers << "\n"
240 << body; 238 << body;
241 239
242 return request; 240 return request;
243 } 241 }
244 242
245 JsonRequest::Builder& JsonRequest::Builder::SetAuthentication( 243 JsonRequest::Builder& JsonRequest::Builder::SetAuthentication(
246 const std::string& account_id, 244 const std::string& account_id,
247 const std::string& auth_header) { 245 const std::string& auth_header) {
248 obfuscated_gaia_id_ = account_id; 246 obfuscated_gaia_id_ = account_id;
249 auth_header_ = auth_header; 247 auth_header_ = auth_header;
250 return *this; 248 return *this;
251 } 249 }
252 250
253 JsonRequest::Builder& JsonRequest::Builder::SetFetchAPI(FetchAPI fetch_api) {
254 fetch_api_ = fetch_api;
255 return *this;
256 }
257
258 JsonRequest::Builder& JsonRequest::Builder::SetLanguageModel( 251 JsonRequest::Builder& JsonRequest::Builder::SetLanguageModel(
259 const translate::LanguageModel* language_model) { 252 const translate::LanguageModel* language_model) {
260 language_model_ = language_model; 253 language_model_ = language_model;
261 return *this; 254 return *this;
262 } 255 }
263 256
264 JsonRequest::Builder& JsonRequest::Builder::SetParams( 257 JsonRequest::Builder& JsonRequest::Builder::SetParams(
265 const RequestParams& params) { 258 const RequestParams& params) {
266 params_ = params; 259 params_ = params;
267 return *this; 260 return *this;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 variations::AppendVariationHeaders(url_, 303 variations::AppendVariationHeaders(url_,
311 false, // incognito 304 false, // incognito
312 false, // uma_enabled 305 false, // uma_enabled
313 is_signed_in, &headers); 306 is_signed_in, &headers);
314 return headers.ToString(); 307 return headers.ToString();
315 } 308 }
316 309
317 std::string JsonRequest::Builder::BuildBody() const { 310 std::string JsonRequest::Builder::BuildBody() const {
318 auto request = base::MakeUnique<base::DictionaryValue>(); 311 auto request = base::MakeUnique<base::DictionaryValue>();
319 std::string user_locale = PosixLocaleFromBCP47Language(params_.language_code); 312 std::string user_locale = PosixLocaleFromBCP47Language(params_.language_code);
320 switch (fetch_api_) { 313 if (!user_locale.empty()) {
321 case CHROME_READER_API: { 314 request->SetString("uiLanguage", user_locale);
322 auto content_restricts = base::MakeUnique<base::ListValue>(); 315 }
323 for (const auto* metadata : {"TITLE", "SNIPPET", "THUMBNAIL"}) {
324 auto entry = base::MakeUnique<base::DictionaryValue>();
325 entry->SetString("type", "METADATA");
326 entry->SetString("value", metadata);
327 content_restricts->Append(std::move(entry));
328 }
329 316
330 auto local_scoring_params = base::MakeUnique<base::DictionaryValue>(); 317 request->SetString("priority", params_.interactive_request
331 local_scoring_params->Set("content_restricts", 318 ? "USER_ACTION"
332 std::move(content_restricts)); 319 : "BACKGROUND_PREFETCH");
333 320
334 auto global_scoring_params = base::MakeUnique<base::DictionaryValue>(); 321 auto excluded = base::MakeUnique<base::ListValue>();
335 global_scoring_params->SetInteger("num_to_return", 322 for (const auto& id : params_.excluded_ids) {
336 params_.count_to_fetch); 323 excluded->AppendString(id);
337 global_scoring_params->SetInteger("sort_type", 1); 324 if (excluded->GetSize() >= kMaxExcludedIds) {
338
339 auto advanced = base::MakeUnique<base::DictionaryValue>();
340 advanced->Set("local_scoring_params", std::move(local_scoring_params));
341 advanced->Set("global_scoring_params", std::move(global_scoring_params));
342
343 request->SetString("response_detail_level", "STANDARD");
344 request->Set("advanced_options", std::move(advanced));
345 if (!obfuscated_gaia_id_.empty()) {
346 request->SetString("obfuscated_gaia_id", obfuscated_gaia_id_);
347 }
348 if (!user_locale.empty()) {
349 request->SetString("user_locale", user_locale);
350 }
351 break;
352 }
353
354 case CHROME_CONTENT_SUGGESTIONS_API: {
355 if (!user_locale.empty()) {
356 request->SetString("uiLanguage", user_locale);
357 }
358
359 request->SetString("priority", params_.interactive_request
360 ? "USER_ACTION"
361 : "BACKGROUND_PREFETCH");
362
363 auto excluded = base::MakeUnique<base::ListValue>();
364 for (const auto& id : params_.excluded_ids) {
365 excluded->AppendString(id);
366 if (excluded->GetSize() >= kMaxExcludedIds) {
367 break;
368 }
369 }
370 request->Set("excludedSuggestionIds", std::move(excluded));
371
372 if (!user_class_.empty()) {
373 request->SetString("userActivenessClass", user_class_);
374 }
375
376 translate::LanguageModel::LanguageInfo ui_language;
377 translate::LanguageModel::LanguageInfo other_top_language;
378 PrepareLanguages(&ui_language, &other_top_language);
379
380 if (ui_language.frequency == 0 && other_top_language.frequency == 0) {
381 break;
382 }
383
384 auto language_list = base::MakeUnique<base::ListValue>();
385 if (ui_language.frequency > 0) {
386 AppendLanguageInfoToList(language_list.get(), ui_language);
387 }
388 if (other_top_language.frequency > 0) {
389 AppendLanguageInfoToList(language_list.get(), other_top_language);
390 }
391 request->Set("topLanguages", std::move(language_list));
392
393 // TODO(sfiera): Support count_to_fetch.
394 break; 325 break;
395 } 326 }
396 } 327 }
328 request->Set("excludedSuggestionIds", std::move(excluded));
329
330 if (!user_class_.empty()) {
331 request->SetString("userActivenessClass", user_class_);
332 }
333
334 translate::LanguageModel::LanguageInfo ui_language;
335 translate::LanguageModel::LanguageInfo other_top_language;
336 PrepareLanguages(&ui_language, &other_top_language);
337 if (ui_language.frequency != 0 || other_top_language.frequency != 0) {
338 auto language_list = base::MakeUnique<base::ListValue>();
339 if (ui_language.frequency > 0) {
340 AppendLanguageInfoToList(language_list.get(), ui_language);
341 }
342 if (other_top_language.frequency > 0) {
343 AppendLanguageInfoToList(language_list.get(), other_top_language);
344 }
345 request->Set("topLanguages", std::move(language_list));
346 }
347
348 // TODO(sfiera): Support count_to_fetch.
397 349
398 std::string request_json; 350 std::string request_json;
399 bool success = base::JSONWriter::WriteWithOptions( 351 bool success = base::JSONWriter::WriteWithOptions(
400 *request, base::JSONWriter::OPTIONS_PRETTY_PRINT, &request_json); 352 *request, base::JSONWriter::OPTIONS_PRETTY_PRINT, &request_json);
401 DCHECK(success); 353 DCHECK(success);
402 return request_json; 354 return request_json;
403 } 355 }
404 356
405 std::unique_ptr<net::URLFetcher> JsonRequest::Builder::BuildURLFetcher( 357 std::unique_ptr<net::URLFetcher> JsonRequest::Builder::BuildURLFetcher(
406 net::URLFetcherDelegate* delegate, 358 net::URLFetcherDelegate* delegate,
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 "NewTabPage.Languages.UILanguageRatioInTwoTopLanguages", 438 "NewTabPage.Languages.UILanguageRatioInTwoTopLanguages",
487 ratio_ui_in_both_languages * 100); 439 ratio_ui_in_both_languages * 100);
488 break; 440 break;
489 } 441 }
490 } 442 }
491 } 443 }
492 444
493 } // namespace internal 445 } // namespace internal
494 446
495 } // namespace ntp_snippets 447 } // namespace ntp_snippets
OLDNEW
« no previous file with comments | « components/ntp_snippets/remote/json_request.h ('k') | components/ntp_snippets/remote/json_request_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698