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

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

Issue 2454063002: [NTP Snippets] Clean up NTPSnippetsFetcher (Closed)
Patch Set: . Created 4 years, 1 month 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/ntp_snippets_fetcher.h" 5 #include "components/ntp_snippets/remote/ntp_snippets_fetcher.h"
6 6
7 #include <cstdlib> 7 #include <cstdlib>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 247
248 NTPSnippetsFetcher::FetchedCategory::FetchedCategory(Category c) 248 NTPSnippetsFetcher::FetchedCategory::FetchedCategory(Category c)
249 : category(c) {} 249 : category(c) {}
250 250
251 NTPSnippetsFetcher::FetchedCategory::FetchedCategory(FetchedCategory&&) = 251 NTPSnippetsFetcher::FetchedCategory::FetchedCategory(FetchedCategory&&) =
252 default; 252 default;
253 NTPSnippetsFetcher::FetchedCategory::~FetchedCategory() = default; 253 NTPSnippetsFetcher::FetchedCategory::~FetchedCategory() = default;
254 NTPSnippetsFetcher::FetchedCategory& NTPSnippetsFetcher::FetchedCategory:: 254 NTPSnippetsFetcher::FetchedCategory& NTPSnippetsFetcher::FetchedCategory::
255 operator=(FetchedCategory&&) = default; 255 operator=(FetchedCategory&&) = default;
256 256
257 NTPSnippetsFetcher::Params::Params() = default;
258 NTPSnippetsFetcher::Params::Params(const Params&) = default;
259 NTPSnippetsFetcher::Params::~Params() = default;
260
257 NTPSnippetsFetcher::NTPSnippetsFetcher( 261 NTPSnippetsFetcher::NTPSnippetsFetcher(
258 SigninManagerBase* signin_manager, 262 SigninManagerBase* signin_manager,
259 OAuth2TokenService* token_service, 263 OAuth2TokenService* token_service,
260 scoped_refptr<URLRequestContextGetter> url_request_context_getter, 264 scoped_refptr<URLRequestContextGetter> url_request_context_getter,
261 PrefService* pref_service, 265 PrefService* pref_service,
262 CategoryFactory* category_factory, 266 CategoryFactory* category_factory,
263 LanguageModel* language_model, 267 LanguageModel* language_model,
264 const ParseJSONCallback& parse_json_callback, 268 const ParseJSONCallback& parse_json_callback,
265 const std::string& api_key, 269 const std::string& api_key,
266 const UserClassifier* user_classifier) 270 const UserClassifier* user_classifier)
267 : OAuth2TokenService::Consumer("ntp_snippets"), 271 : OAuth2TokenService::Consumer("ntp_snippets"),
268 signin_manager_(signin_manager), 272 signin_manager_(signin_manager),
269 token_service_(token_service), 273 token_service_(token_service),
270 waiting_for_refresh_token_(false), 274 waiting_for_refresh_token_(false),
275 oauth_token_retried_(false),
271 url_request_context_getter_(std::move(url_request_context_getter)), 276 url_request_context_getter_(std::move(url_request_context_getter)),
272 category_factory_(category_factory), 277 category_factory_(category_factory),
273 language_model_(language_model), 278 language_model_(language_model),
274 parse_json_callback_(parse_json_callback), 279 parse_json_callback_(parse_json_callback),
275 count_to_fetch_(0),
276 fetch_url_(GetFetchEndpoint()), 280 fetch_url_(GetFetchEndpoint()),
277 fetch_api_(UsesChromeContentSuggestionsAPI(fetch_url_) 281 fetch_api_(UsesChromeContentSuggestionsAPI(fetch_url_)
278 ? CHROME_CONTENT_SUGGESTIONS_API 282 ? CHROME_CONTENT_SUGGESTIONS_API
279 : CHROME_READER_API), 283 : CHROME_READER_API),
280 api_key_(api_key), 284 api_key_(api_key),
281 interactive_request_(false),
282 tick_clock_(new base::DefaultTickClock()), 285 tick_clock_(new base::DefaultTickClock()),
283 user_classifier_(user_classifier), 286 user_classifier_(user_classifier),
284 request_throttler_rare_ntp_user_( 287 request_throttler_rare_ntp_user_(
285 pref_service, 288 pref_service,
286 RequestThrottler::RequestType:: 289 RequestThrottler::RequestType::
287 CONTENT_SUGGESTION_FETCHER_RARE_NTP_USER), 290 CONTENT_SUGGESTION_FETCHER_RARE_NTP_USER),
288 request_throttler_active_ntp_user_( 291 request_throttler_active_ntp_user_(
289 pref_service, 292 pref_service,
290 RequestThrottler::RequestType:: 293 RequestThrottler::RequestType::
291 CONTENT_SUGGESTION_FETCHER_ACTIVE_NTP_USER), 294 CONTENT_SUGGESTION_FETCHER_ACTIVE_NTP_USER),
292 request_throttler_active_suggestions_consumer_( 295 request_throttler_active_suggestions_consumer_(
293 pref_service, 296 pref_service,
294 RequestThrottler::RequestType:: 297 RequestThrottler::RequestType::
295 CONTENT_SUGGESTION_FETCHER_ACTIVE_SUGGESTIONS_CONSUMER), 298 CONTENT_SUGGESTION_FETCHER_ACTIVE_SUGGESTIONS_CONSUMER),
296 oauth_token_retried_(false),
297 weak_ptr_factory_(this) { 299 weak_ptr_factory_(this) {
298 // Parse the variation parameters and set the defaults if missing. 300 // Parse the variation parameters and set the defaults if missing.
299 std::string personalization = variations::GetVariationParamValue( 301 std::string personalization = variations::GetVariationParamValue(
300 ntp_snippets::kStudyName, kPersonalizationName); 302 ntp_snippets::kStudyName, kPersonalizationName);
301 if (personalization == kPersonalizationNonPersonalString) { 303 if (personalization == kPersonalizationNonPersonalString) {
302 personalization_ = Personalization::kNonPersonal; 304 personalization_ = Personalization::kNonPersonal;
303 } else if (personalization == kPersonalizationPersonalString) { 305 } else if (personalization == kPersonalizationPersonalString) {
304 personalization_ = Personalization::kPersonal; 306 personalization_ = Personalization::kPersonal;
305 } else { 307 } else {
306 personalization_ = Personalization::kBoth; 308 personalization_ = Personalization::kBoth;
307 LOG_IF(WARNING, !personalization.empty() && 309 LOG_IF(WARNING, !personalization.empty() &&
308 personalization != kPersonalizationBothString) 310 personalization != kPersonalizationBothString)
309 << "Unknown value for " << kPersonalizationName << ": " 311 << "Unknown value for " << kPersonalizationName << ": "
310 << personalization; 312 << personalization;
311 } 313 }
312 } 314 }
313 315
314 NTPSnippetsFetcher::~NTPSnippetsFetcher() { 316 NTPSnippetsFetcher::~NTPSnippetsFetcher() {
315 if (waiting_for_refresh_token_) 317 if (waiting_for_refresh_token_)
316 token_service_->RemoveObserver(this); 318 token_service_->RemoveObserver(this);
317 } 319 }
318 320
319 void NTPSnippetsFetcher::SetCallback( 321 void NTPSnippetsFetcher::SetCallback(
320 const SnippetsAvailableCallback& callback) { 322 const SnippetsAvailableCallback& callback) {
321 snippets_available_callback_ = callback; 323 snippets_available_callback_ = callback;
322 } 324 }
323 325
324 void NTPSnippetsFetcher::FetchSnippetsFromHosts( 326 void NTPSnippetsFetcher::FetchSnippets(const Params& params) {
325 const std::set<std::string>& hosts, 327 if (!DemandQuotaForRequest(params.interactive_request)) {
326 const std::string& language_code,
327 const std::set<std::string>& excluded_ids,
328 int count,
329 bool interactive_request) {
330 if (!DemandQuotaForRequest(interactive_request)) {
331 FetchFinished(OptionalFetchedCategories(), 328 FetchFinished(OptionalFetchedCategories(),
332 interactive_request 329 params.interactive_request
333 ? FetchResult::INTERACTIVE_QUOTA_ERROR 330 ? FetchResult::INTERACTIVE_QUOTA_ERROR
334 : FetchResult::NON_INTERACTIVE_QUOTA_ERROR, 331 : FetchResult::NON_INTERACTIVE_QUOTA_ERROR,
335 /*extra_message=*/std::string()); 332 /*extra_message=*/std::string());
336 return; 333 return;
337 } 334 }
338 335
339 hosts_ = hosts; 336 params_ = params;
340 fetch_start_time_ = tick_clock_->NowTicks(); 337 fetch_start_time_ = tick_clock_->NowTicks();
341 excluded_ids_ = excluded_ids;
342
343 locale_ = PosixLocaleFromBCP47Language(language_code);
344 count_to_fetch_ = count;
345 338
346 bool use_authentication = UsesAuthentication(); 339 bool use_authentication = UsesAuthentication();
347 interactive_request_ = interactive_request;
348
349 if (use_authentication && signin_manager_->IsAuthenticated()) { 340 if (use_authentication && signin_manager_->IsAuthenticated()) {
350 // Signed-in: get OAuth token --> fetch snippets. 341 // Signed-in: get OAuth token --> fetch snippets.
351 oauth_token_retried_ = false; 342 oauth_token_retried_ = false;
352 StartTokenRequest(); 343 StartTokenRequest();
353 } else if (use_authentication && signin_manager_->AuthInProgress()) { 344 } else if (use_authentication && signin_manager_->AuthInProgress()) {
354 // Currently signing in: wait for auth to finish (the refresh token) --> 345 // Currently signing in: wait for auth to finish (the refresh token) -->
355 // get OAuth token --> fetch snippets. 346 // get OAuth token --> fetch snippets.
356 if (!waiting_for_refresh_token_) { 347 if (!waiting_for_refresh_token_) {
357 // Wait until we get a refresh token. 348 // Wait until we get a refresh token.
358 waiting_for_refresh_token_ = true; 349 waiting_for_refresh_token_ = true;
359 token_service_->AddObserver(this); 350 token_service_->AddObserver(this);
360 } 351 }
361 } else { 352 } else {
362 // Not signed in: fetch snippets (without authentication). 353 // Not signed in: fetch snippets (without authentication).
363 FetchSnippetsNonAuthenticated(); 354 FetchSnippetsNonAuthenticated();
364 } 355 }
365 } 356 }
366 357
367 NTPSnippetsFetcher::RequestParams::RequestParams() 358 NTPSnippetsFetcher::RequestBuilder::RequestBuilder() = default;
368 : fetch_api(),
369 obfuscated_gaia_id(),
370 only_return_personalized_results(),
371 user_locale(),
372 host_restricts(),
373 count_to_fetch(),
374 interactive_request(),
375 user_class(),
376 ui_language{"", 0.0f},
377 other_top_language{"", 0.0f} {}
378 359
379 NTPSnippetsFetcher::RequestParams::~RequestParams() = default; 360 NTPSnippetsFetcher::RequestBuilder::RequestBuilder(RequestBuilder&&) = default;
380 361
381 std::string NTPSnippetsFetcher::RequestParams::BuildRequest() { 362 NTPSnippetsFetcher::RequestBuilder::~RequestBuilder() = default;
363
364 std::string NTPSnippetsFetcher::RequestBuilder::BuildRequest() {
382 auto request = base::MakeUnique<base::DictionaryValue>(); 365 auto request = base::MakeUnique<base::DictionaryValue>();
366 std::string user_locale = PosixLocaleFromBCP47Language(params.language_code);
383 switch (fetch_api) { 367 switch (fetch_api) {
384 case CHROME_READER_API: { 368 case CHROME_READER_API: {
385 auto content_params = base::MakeUnique<base::DictionaryValue>(); 369 auto content_params = base::MakeUnique<base::DictionaryValue>();
386 content_params->SetBoolean("only_return_personalized_results", 370 content_params->SetBoolean("only_return_personalized_results",
387 only_return_personalized_results); 371 only_return_personalized_results);
388 372
389 auto content_restricts = base::MakeUnique<base::ListValue>(); 373 auto content_restricts = base::MakeUnique<base::ListValue>();
390 for (const auto* metadata : {"TITLE", "SNIPPET", "THUMBNAIL"}) { 374 for (const auto* metadata : {"TITLE", "SNIPPET", "THUMBNAIL"}) {
391 auto entry = base::MakeUnique<base::DictionaryValue>(); 375 auto entry = base::MakeUnique<base::DictionaryValue>();
392 entry->SetString("type", "METADATA"); 376 entry->SetString("type", "METADATA");
393 entry->SetString("value", metadata); 377 entry->SetString("value", metadata);
394 content_restricts->Append(std::move(entry)); 378 content_restricts->Append(std::move(entry));
395 } 379 }
396 380
397 auto content_selectors = base::MakeUnique<base::ListValue>(); 381 auto content_selectors = base::MakeUnique<base::ListValue>();
398 for (const auto& host : host_restricts) { 382 for (const auto& host : params.hosts) {
399 auto entry = base::MakeUnique<base::DictionaryValue>(); 383 auto entry = base::MakeUnique<base::DictionaryValue>();
400 entry->SetString("type", "HOST_RESTRICT"); 384 entry->SetString("type", "HOST_RESTRICT");
401 entry->SetString("value", host); 385 entry->SetString("value", host);
402 content_selectors->Append(std::move(entry)); 386 content_selectors->Append(std::move(entry));
403 } 387 }
404 388
405 auto local_scoring_params = base::MakeUnique<base::DictionaryValue>(); 389 auto local_scoring_params = base::MakeUnique<base::DictionaryValue>();
406 local_scoring_params->Set("content_params", std::move(content_params)); 390 local_scoring_params->Set("content_params", std::move(content_params));
407 local_scoring_params->Set("content_restricts", 391 local_scoring_params->Set("content_restricts",
408 std::move(content_restricts)); 392 std::move(content_restricts));
409 local_scoring_params->Set("content_selectors", 393 local_scoring_params->Set("content_selectors",
410 std::move(content_selectors)); 394 std::move(content_selectors));
411 395
412 auto global_scoring_params = base::MakeUnique<base::DictionaryValue>(); 396 auto global_scoring_params = base::MakeUnique<base::DictionaryValue>();
413 global_scoring_params->SetInteger("num_to_return", count_to_fetch); 397 global_scoring_params->SetInteger("num_to_return", params.count_to_fetch);
414 global_scoring_params->SetInteger("sort_type", 1); 398 global_scoring_params->SetInteger("sort_type", 1);
415 399
416 auto advanced = base::MakeUnique<base::DictionaryValue>(); 400 auto advanced = base::MakeUnique<base::DictionaryValue>();
417 advanced->Set("local_scoring_params", std::move(local_scoring_params)); 401 advanced->Set("local_scoring_params", std::move(local_scoring_params));
418 advanced->Set("global_scoring_params", std::move(global_scoring_params)); 402 advanced->Set("global_scoring_params", std::move(global_scoring_params));
419 403
420 request->SetString("response_detail_level", "STANDARD"); 404 request->SetString("response_detail_level", "STANDARD");
421 request->Set("advanced_options", std::move(advanced)); 405 request->Set("advanced_options", std::move(advanced));
422 if (!obfuscated_gaia_id.empty()) { 406 if (!obfuscated_gaia_id.empty()) {
423 request->SetString("obfuscated_gaia_id", obfuscated_gaia_id); 407 request->SetString("obfuscated_gaia_id", obfuscated_gaia_id);
424 } 408 }
425 if (!user_locale.empty()) { 409 if (!user_locale.empty()) {
426 request->SetString("user_locale", user_locale); 410 request->SetString("user_locale", user_locale);
427 } 411 }
428 break; 412 break;
429 } 413 }
430 414
431 case CHROME_CONTENT_SUGGESTIONS_API: { 415 case CHROME_CONTENT_SUGGESTIONS_API: {
432 if (!user_locale.empty()) { 416 if (!user_locale.empty()) {
433 request->SetString("uiLanguage", user_locale); 417 request->SetString("uiLanguage", user_locale);
434 } 418 }
435 419
436 auto regular_hosts = base::MakeUnique<base::ListValue>(); 420 auto regular_hosts = base::MakeUnique<base::ListValue>();
437 for (const auto& host : host_restricts) { 421 for (const auto& host : params.hosts) {
438 regular_hosts->AppendString(host); 422 regular_hosts->AppendString(host);
439 } 423 }
440 request->Set("regularlyVisitedHostNames", std::move(regular_hosts)); 424 request->Set("regularlyVisitedHostNames", std::move(regular_hosts));
441 request->SetString("priority", interactive_request 425 request->SetString("priority", params.interactive_request
442 ? "USER_ACTION" 426 ? "USER_ACTION"
443 : "BACKGROUND_PREFETCH"); 427 : "BACKGROUND_PREFETCH");
444 428
445 auto excluded = base::MakeUnique<base::ListValue>(); 429 auto excluded = base::MakeUnique<base::ListValue>();
446 for (const auto& id : excluded_ids) { 430 for (const auto& id : params.excluded_ids) {
447 excluded->AppendString(id); 431 excluded->AppendString(id);
448 if (excluded->GetSize() >= kMaxExcludedIds) 432 if (excluded->GetSize() >= kMaxExcludedIds)
449 break; 433 break;
450 } 434 }
451 request->Set("excludedSuggestionIds", std::move(excluded)); 435 request->Set("excludedSuggestionIds", std::move(excluded));
452 436
453 if (!user_class.empty()) 437 if (!user_class.empty())
454 request->SetString("userActivenessClass", user_class); 438 request->SetString("userActivenessClass", user_class);
455 439
456 if (ui_language.frequency == 0 && other_top_language.frequency == 0) 440 if (ui_language.frequency == 0 && other_top_language.frequency == 0)
457 break; 441 break;
458 442
459 auto language_list = base::MakeUnique<base::ListValue>(); 443 auto language_list = base::MakeUnique<base::ListValue>();
460 if (ui_language.frequency > 0) 444 if (ui_language.frequency > 0)
461 AppendLanguageInfoToList(language_list.get(), ui_language); 445 AppendLanguageInfoToList(language_list.get(), ui_language);
462 if (other_top_language.frequency > 0) 446 if (other_top_language.frequency > 0)
463 AppendLanguageInfoToList(language_list.get(), other_top_language); 447 AppendLanguageInfoToList(language_list.get(), other_top_language);
464 request->Set("topLanguages", std::move(language_list)); 448 request->Set("topLanguages", std::move(language_list));
465 449
466 // TODO(sfiera): support authentication and personalization 450 // TODO(sfiera): Support only_return_personalized_results.
467 // TODO(sfiera): support count_to_fetch 451 // TODO(sfiera): Support count_to_fetch.
468 break; 452 break;
469 } 453 }
470 } 454 }
471 455
472 std::string request_json; 456 std::string request_json;
473 bool success = base::JSONWriter::WriteWithOptions( 457 bool success = base::JSONWriter::WriteWithOptions(
474 *request, base::JSONWriter::OPTIONS_PRETTY_PRINT, &request_json); 458 *request, base::JSONWriter::OPTIONS_PRETTY_PRINT, &request_json);
475 DCHECK(success); 459 DCHECK(success);
476 return request_json; 460 return request_json;
477 } 461 }
(...skipping 30 matching lines...) Expand all
508 // Try to make fetching the files bit more robust even with poor connection. 492 // Try to make fetching the files bit more robust even with poor connection.
509 url_fetcher_->SetMaxRetriesOn5xx(3); 493 url_fetcher_->SetMaxRetriesOn5xx(3);
510 url_fetcher_->Start(); 494 url_fetcher_->Start();
511 } 495 }
512 496
513 bool NTPSnippetsFetcher::UsesAuthentication() const { 497 bool NTPSnippetsFetcher::UsesAuthentication() const {
514 return (personalization_ == Personalization::kPersonal || 498 return (personalization_ == Personalization::kPersonal ||
515 personalization_ == Personalization::kBoth); 499 personalization_ == Personalization::kBoth);
516 } 500 }
517 501
518 void NTPSnippetsFetcher::SetUpCommonFetchingParameters( 502 NTPSnippetsFetcher::RequestBuilder NTPSnippetsFetcher::MakeRequestBuilder()
519 RequestParams* params) const { 503 const {
520 params->fetch_api = fetch_api_; 504 RequestBuilder result;
521 params->host_restricts = hosts_; 505 result.params = params_;
522 params->user_locale = locale_; 506 result.fetch_api = fetch_api_;
523 params->excluded_ids = excluded_ids_;
524 params->count_to_fetch = count_to_fetch_;
525 params->interactive_request = interactive_request_;
526 507
527 if (IsSendingUserClassEnabled()) 508 if (IsSendingUserClassEnabled())
528 params->user_class = GetUserClassString(user_classifier_->GetUserClass()); 509 result.user_class = GetUserClassString(user_classifier_->GetUserClass());
529 510
530 // TODO(jkrcal): Add language model factory for iOS and add fakes to tests so 511 // TODO(jkrcal): Add language model factory for iOS and add fakes to tests so
531 // that |language_model_| is never nullptr. Remove this check and add a DCHECK 512 // that |language_model_| is never nullptr. Remove this check and add a DCHECK
532 // into the constructor. 513 // into the constructor.
533 if (!language_model_ || !IsSendingTopLanguagesEnabled()) 514 if (!language_model_ || !IsSendingTopLanguagesEnabled())
534 return; 515 return result;
535 516
536 params->ui_language.language_code = ISO639FromPosixLocale(locale_); 517 // TODO(jkrcal): Is this back-and-forth converting necessary?
537 params->ui_language.frequency = 518 result.ui_language.language_code = ISO639FromPosixLocale(
538 language_model_->GetLanguageFrequency(params->ui_language.language_code); 519 PosixLocaleFromBCP47Language(result.params.language_code));
520 result.ui_language.frequency =
521 language_model_->GetLanguageFrequency(result.ui_language.language_code);
539 522
540 std::vector<LanguageModel::LanguageInfo> top_languages = 523 std::vector<LanguageModel::LanguageInfo> top_languages =
541 language_model_->GetTopLanguages(); 524 language_model_->GetTopLanguages();
542 for (const LanguageModel::LanguageInfo& info : top_languages) { 525 for (const LanguageModel::LanguageInfo& info : top_languages) {
543 if (info.language_code != params->ui_language.language_code) { 526 if (info.language_code != result.ui_language.language_code) {
544 params->other_top_language = info; 527 result.other_top_language = info;
545 528
546 // Report to UMA how important the UI language is. 529 // Report to UMA how important the UI language is.
547 DCHECK_GT(params->other_top_language.frequency, 0) 530 DCHECK_GT(result.other_top_language.frequency, 0)
548 << "GetTopLanguages() should not return languages with 0 frequency"; 531 << "GetTopLanguages() should not return languages with 0 frequency";
549 float ratio_ui_in_both_languages = params->ui_language.frequency / 532 float ratio_ui_in_both_languages =
550 (params->ui_language.frequency + 533 result.ui_language.frequency /
551 params->other_top_language.frequency); 534 (result.ui_language.frequency + result.other_top_language.frequency);
552 UMA_HISTOGRAM_PERCENTAGE( 535 UMA_HISTOGRAM_PERCENTAGE(
553 "NewTabPage.Languages.UILanguageRatioInTwoTopLanguages", 536 "NewTabPage.Languages.UILanguageRatioInTwoTopLanguages",
554 ratio_ui_in_both_languages * 100); 537 ratio_ui_in_both_languages * 100);
555 break; 538 break;
556 } 539 }
557 } 540 }
541
542 return result;
558 } 543 }
559 544
560 void NTPSnippetsFetcher::FetchSnippetsNonAuthenticated() { 545 void NTPSnippetsFetcher::FetchSnippetsNonAuthenticated() {
561 // When not providing OAuth token, we need to pass the Google API key. 546 // When not providing OAuth token, we need to pass the Google API key.
562 GURL url(base::StringPrintf(kSnippetsServerNonAuthorizedFormat, 547 GURL url(base::StringPrintf(kSnippetsServerNonAuthorizedFormat,
563 fetch_url_.spec().c_str(), api_key_.c_str())); 548 fetch_url_.spec().c_str(), api_key_.c_str()));
564 549 FetchSnippetsImpl(url, std::string(), MakeRequestBuilder().BuildRequest());
565 RequestParams params;
566 SetUpCommonFetchingParameters(&params);
567 FetchSnippetsImpl(url, std::string(), params.BuildRequest());
568 } 550 }
569 551
570 void NTPSnippetsFetcher::FetchSnippetsAuthenticated( 552 void NTPSnippetsFetcher::FetchSnippetsAuthenticated(
571 const std::string& account_id, 553 const std::string& account_id,
572 const std::string& oauth_access_token) { 554 const std::string& oauth_access_token) {
573 RequestParams params; 555 RequestBuilder builder = MakeRequestBuilder();
574 SetUpCommonFetchingParameters(&params); 556 builder.obfuscated_gaia_id = account_id;
575 params.obfuscated_gaia_id = account_id; 557 builder.only_return_personalized_results =
576 params.only_return_personalized_results =
577 personalization_ == Personalization::kPersonal; 558 personalization_ == Personalization::kPersonal;
578 // TODO(jkrcal, treib): Add unit-tests for authenticated fetches. 559 // TODO(jkrcal, treib): Add unit-tests for authenticated fetches.
579 FetchSnippetsImpl(fetch_url_, 560 FetchSnippetsImpl(fetch_url_,
580 base::StringPrintf(kAuthorizationRequestHeaderFormat, 561 base::StringPrintf(kAuthorizationRequestHeaderFormat,
581 oauth_access_token.c_str()), 562 oauth_access_token.c_str()),
582 params.BuildRequest()); 563 builder.BuildRequest());
583 } 564 }
584 565
585 void NTPSnippetsFetcher::StartTokenRequest() { 566 void NTPSnippetsFetcher::StartTokenRequest() {
586 OAuth2TokenService::ScopeSet scopes; 567 OAuth2TokenService::ScopeSet scopes;
587 scopes.insert(fetch_api_ == CHROME_CONTENT_SUGGESTIONS_API 568 scopes.insert(fetch_api_ == CHROME_CONTENT_SUGGESTIONS_API
588 ? kContentSuggestionsApiScope 569 ? kContentSuggestionsApiScope
589 : kChromeReaderApiScope); 570 : kChromeReaderApiScope);
590 oauth_request_ = token_service_->StartRequest( 571 oauth_request_ = token_service_->StartRequest(
591 signin_manager_->GetAuthenticatedAccountId(), scopes, this); 572 signin_manager_->GetAuthenticatedAccountId(), scopes, this);
592 } 573 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 token_service_->RemoveObserver(this); 618 token_service_->RemoveObserver(this);
638 waiting_for_refresh_token_ = false; 619 waiting_for_refresh_token_ = false;
639 oauth_token_retried_ = false; 620 oauth_token_retried_ = false;
640 StartTokenRequest(); 621 StartTokenRequest();
641 } 622 }
642 623
643 //////////////////////////////////////////////////////////////////////////////// 624 ////////////////////////////////////////////////////////////////////////////////
644 // URLFetcherDelegate overrides 625 // URLFetcherDelegate overrides
645 void NTPSnippetsFetcher::OnURLFetchComplete(const URLFetcher* source) { 626 void NTPSnippetsFetcher::OnURLFetchComplete(const URLFetcher* source) {
646 DCHECK_EQ(url_fetcher_.get(), source); 627 DCHECK_EQ(url_fetcher_.get(), source);
628 std::unique_ptr<URLFetcher> deleter = std::move(url_fetcher_);
647 629
648 const URLRequestStatus& status = source->GetStatus(); 630 const URLRequestStatus& status = source->GetStatus();
649 631
650 UMA_HISTOGRAM_SPARSE_SLOWLY( 632 UMA_HISTOGRAM_SPARSE_SLOWLY(
651 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode", 633 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode",
652 status.is_success() ? source->GetResponseCode() : status.error()); 634 status.is_success() ? source->GetResponseCode() : status.error());
653 635
654 if (!status.is_success()) { 636 if (!status.is_success()) {
655 FetchFinished(OptionalFetchedCategories(), 637 FetchFinished(OptionalFetchedCategories(),
656 FetchResult::URL_REQUEST_STATUS_ERROR, 638 FetchResult::URL_REQUEST_STATUS_ERROR,
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 interactive_request); 772 interactive_request);
791 case UserClassifier::UserClass::ACTIVE_SUGGESTIONS_CONSUMER: 773 case UserClassifier::UserClass::ACTIVE_SUGGESTIONS_CONSUMER:
792 return request_throttler_active_suggestions_consumer_ 774 return request_throttler_active_suggestions_consumer_
793 .DemandQuotaForRequest(interactive_request); 775 .DemandQuotaForRequest(interactive_request);
794 } 776 }
795 NOTREACHED(); 777 NOTREACHED();
796 return false; 778 return false;
797 } 779 }
798 780
799 } // namespace ntp_snippets 781 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698