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

Side by Side Diff: components/ntp_snippets/ntp_snippets_fetcher_unittest.cc

Issue 2274953002: Inform server of dismissed articles. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Rebase, fix. Created 4 years, 3 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/ntp_snippets_fetcher.h" 5 #include "components/ntp_snippets/ntp_snippets_fetcher.h"
6 6
7 #include <map> 7 #include <map>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 new net::TestURLRequestContextGetter(mock_task_runner_.get())), 172 new net::TestURLRequestContextGetter(mock_task_runner_.get())),
173 pref_service_.get(), &category_factory_, base::Bind(&ParseJsonDelayed), 173 pref_service_.get(), &category_factory_, base::Bind(&ParseJsonDelayed),
174 /*is_stable_channel=*/true); 174 /*is_stable_channel=*/true);
175 175
176 snippets_fetcher_->SetCallback( 176 snippets_fetcher_->SetCallback(
177 base::Bind(&MockSnippetsAvailableCallback::WrappedRun, 177 base::Bind(&MockSnippetsAvailableCallback::WrappedRun,
178 base::Unretained(&mock_callback_))); 178 base::Unretained(&mock_callback_)));
179 snippets_fetcher_->SetTickClockForTesting( 179 snippets_fetcher_->SetTickClockForTesting(
180 mock_task_runner_->GetMockTickClock()); 180 mock_task_runner_->GetMockTickClock());
181 test_hosts_.insert("www.somehost.com"); 181 test_hosts_.insert("www.somehost.com");
182 test_excluded_.insert("1234567890");
182 // Increase initial time such that ticks are non-zero. 183 // Increase initial time such that ticks are non-zero.
183 mock_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(1234)); 184 mock_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(1234));
184 } 185 }
185 186
186 NTPSnippetsFetcher& snippets_fetcher() { return *snippets_fetcher_; } 187 NTPSnippetsFetcher& snippets_fetcher() { return *snippets_fetcher_; }
187 MockSnippetsAvailableCallback& mock_callback() { return mock_callback_; } 188 MockSnippetsAvailableCallback& mock_callback() { return mock_callback_; }
188 void FastForwardUntilNoTasksRemain() { 189 void FastForwardUntilNoTasksRemain() {
189 mock_task_runner_->FastForwardUntilNoTasksRemain(); 190 mock_task_runner_->FastForwardUntilNoTasksRemain();
190 } 191 }
191 const std::string& test_lang() const { return test_lang_; } 192 const std::string& test_lang() const { return test_lang_; }
192 const GURL& test_url() { return test_url_; } 193 const GURL& test_url() { return test_url_; }
193 const std::set<std::string>& test_hosts() const { return test_hosts_; } 194 const std::set<std::string>& test_hosts() const { return test_hosts_; }
195 const std::set<std::string>& test_excluded() const { return test_excluded_; }
194 base::HistogramTester& histogram_tester() { return histogram_tester_; } 196 base::HistogramTester& histogram_tester() { return histogram_tester_; }
195 197
196 void InitFakeURLFetcherFactory() { 198 void InitFakeURLFetcherFactory() {
197 if (fake_url_fetcher_factory_) 199 if (fake_url_fetcher_factory_)
198 return; 200 return;
199 // Instantiation of factory automatically sets itself as URLFetcher's 201 // Instantiation of factory automatically sets itself as URLFetcher's
200 // factory. 202 // factory.
201 fake_url_fetcher_factory_.reset(new net::FakeURLFetcherFactory( 203 fake_url_fetcher_factory_.reset(new net::FakeURLFetcherFactory(
202 /*default_factory=*/&failing_url_fetcher_factory_)); 204 /*default_factory=*/&failing_url_fetcher_factory_));
203 } 205 }
(...skipping 17 matching lines...) Expand all
221 std::unique_ptr<AccountTrackerService> account_tracker_; 223 std::unique_ptr<AccountTrackerService> account_tracker_;
222 std::unique_ptr<SigninManagerBase> fake_signin_manager_; 224 std::unique_ptr<SigninManagerBase> fake_signin_manager_;
223 std::unique_ptr<OAuth2TokenService> fake_token_service_; 225 std::unique_ptr<OAuth2TokenService> fake_token_service_;
224 std::unique_ptr<NTPSnippetsFetcher> snippets_fetcher_; 226 std::unique_ptr<NTPSnippetsFetcher> snippets_fetcher_;
225 std::unique_ptr<TestingPrefServiceSimple> pref_service_; 227 std::unique_ptr<TestingPrefServiceSimple> pref_service_;
226 CategoryFactory category_factory_; 228 CategoryFactory category_factory_;
227 MockSnippetsAvailableCallback mock_callback_; 229 MockSnippetsAvailableCallback mock_callback_;
228 const std::string test_lang_; 230 const std::string test_lang_;
229 const GURL test_url_; 231 const GURL test_url_;
230 std::set<std::string> test_hosts_; 232 std::set<std::string> test_hosts_;
233 std::set<std::string> test_excluded_;
231 base::HistogramTester histogram_tester_; 234 base::HistogramTester histogram_tester_;
232 235
233 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsFetcherTest); 236 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsFetcherTest);
234 }; 237 };
235 238
236 class NTPSnippetsContentSuggestionsFetcherTest : public NTPSnippetsFetcherTest { 239 class NTPSnippetsContentSuggestionsFetcherTest : public NTPSnippetsFetcherTest {
237 public: 240 public:
238 NTPSnippetsContentSuggestionsFetcherTest() 241 NTPSnippetsContentSuggestionsFetcherTest()
239 : NTPSnippetsFetcherTest( 242 : NTPSnippetsFetcherTest(
240 GetFetcherUrl(kTestChromeContentSuggestionsUrlFormat), 243 GetFetcherUrl(kTestChromeContentSuggestionsUrlFormat),
241 {{"content_suggestions_backend", kContentSuggestionsServer}}) {} 244 {{"content_suggestions_backend", kContentSuggestionsServer}}) {}
242 }; 245 };
243 246
244 class NTPSnippetsFetcherHostRestrictedTest : public NTPSnippetsFetcherTest { 247 class NTPSnippetsFetcherHostRestrictedTest : public NTPSnippetsFetcherTest {
245 public: 248 public:
246 NTPSnippetsFetcherHostRestrictedTest() 249 NTPSnippetsFetcherHostRestrictedTest()
247 : NTPSnippetsFetcherTest( 250 : NTPSnippetsFetcherTest(
248 GetFetcherUrl(kTestChromeReaderUrlFormat), 251 GetFetcherUrl(kTestChromeReaderUrlFormat),
249 {{"fetching_host_restrict", "on"}}) {} 252 {{"fetching_host_restrict", "on"}}) {}
250 }; 253 };
251 254
252 TEST_F(NTPSnippetsFetcherTest, BuildRequestAuthenticated) { 255 TEST_F(NTPSnippetsFetcherTest, BuildRequestAuthenticated) {
253 NTPSnippetsFetcher::RequestParams params; 256 NTPSnippetsFetcher::RequestParams params;
254 params.obfuscated_gaia_id = "0BFUSGAIA"; 257 params.obfuscated_gaia_id = "0BFUSGAIA";
255 params.only_return_personalized_results = true; 258 params.only_return_personalized_results = true;
256 params.user_locale = "en"; 259 params.user_locale = "en";
257 params.host_restricts = {"chromium.org"}; 260 params.host_restricts = {"chromium.org"};
261 params.excluded_ids = {"1234567890"};
258 params.count_to_fetch = 25; 262 params.count_to_fetch = 25;
259 263
260 params.fetch_api = NTPSnippetsFetcher::CHROME_READER_API; 264 params.fetch_api = NTPSnippetsFetcher::CHROME_READER_API;
261 EXPECT_THAT(params.BuildRequest(), 265 EXPECT_THAT(params.BuildRequest(),
262 EqualsJSON("{" 266 EqualsJSON("{"
263 " \"response_detail_level\": \"STANDARD\"," 267 " \"response_detail_level\": \"STANDARD\","
264 " \"obfuscated_gaia_id\": \"0BFUSGAIA\"," 268 " \"obfuscated_gaia_id\": \"0BFUSGAIA\","
265 " \"user_locale\": \"en\"," 269 " \"user_locale\": \"en\","
266 " \"advanced_options\": {" 270 " \"advanced_options\": {"
267 " \"local_scoring_params\": {" 271 " \"local_scoring_params\": {"
(...skipping 27 matching lines...) Expand all
295 " }" 299 " }"
296 " }" 300 " }"
297 "}")); 301 "}"));
298 302
299 params.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API; 303 params.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API;
300 EXPECT_THAT(params.BuildRequest(), 304 EXPECT_THAT(params.BuildRequest(),
301 EqualsJSON("{" 305 EqualsJSON("{"
302 " \"uiLanguage\": \"en\"," 306 " \"uiLanguage\": \"en\","
303 " \"regularlyVisitedHostNames\": [" 307 " \"regularlyVisitedHostNames\": ["
304 " \"chromium.org\"" 308 " \"chromium.org\""
309 " ],"
310 " \"excludedSuggestionIds\": ["
311 " \"1234567890\""
305 " ]" 312 " ]"
306 "}")); 313 "}"));
307 } 314 }
308 315
309 TEST_F(NTPSnippetsFetcherTest, BuildRequestUnauthenticated) { 316 TEST_F(NTPSnippetsFetcherTest, BuildRequestUnauthenticated) {
310 NTPSnippetsFetcher::RequestParams params; 317 NTPSnippetsFetcher::RequestParams params;
311 params.only_return_personalized_results = false; 318 params.only_return_personalized_results = false;
312 params.host_restricts = {}; 319 params.host_restricts = {};
313 params.count_to_fetch = 10; 320 params.count_to_fetch = 10;
321 params.excluded_ids = {};
314 322
315 params.fetch_api = NTPSnippetsFetcher::CHROME_READER_API; 323 params.fetch_api = NTPSnippetsFetcher::CHROME_READER_API;
316 EXPECT_THAT(params.BuildRequest(), 324 EXPECT_THAT(params.BuildRequest(),
317 EqualsJSON("{" 325 EqualsJSON("{"
318 " \"response_detail_level\": \"STANDARD\"," 326 " \"response_detail_level\": \"STANDARD\","
319 " \"advanced_options\": {" 327 " \"advanced_options\": {"
320 " \"local_scoring_params\": {" 328 " \"local_scoring_params\": {"
321 " \"content_params\": {" 329 " \"content_params\": {"
322 " \"only_return_personalized_results\": false" 330 " \"only_return_personalized_results\": false"
323 " }," 331 " },"
(...skipping 16 matching lines...) Expand all
340 " \"global_scoring_params\": {" 348 " \"global_scoring_params\": {"
341 " \"num_to_return\": 10," 349 " \"num_to_return\": 10,"
342 " \"sort_type\": 1" 350 " \"sort_type\": 1"
343 " }" 351 " }"
344 " }" 352 " }"
345 "}")); 353 "}"));
346 354
347 params.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API; 355 params.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API;
348 EXPECT_THAT(params.BuildRequest(), 356 EXPECT_THAT(params.BuildRequest(),
349 EqualsJSON("{" 357 EqualsJSON("{"
350 " \"regularlyVisitedHostNames\": []" 358 " \"regularlyVisitedHostNames\": [],"
359 " \"excludedSuggestionIds\": []"
351 "}")); 360 "}"));
352 } 361 }
353 362
363 TEST_F(NTPSnippetsFetcherTest, BuildRequestExcludedIds) {
364 NTPSnippetsFetcher::RequestParams params;
365 params.only_return_personalized_results = false;
366 params.host_restricts = {};
367 params.count_to_fetch = 10;
368 for (int i = 0; i < 200; ++i) {
369 params.excluded_ids.insert(base::StringPrintf("%03d", i));
370 }
371
372 params.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API;
373 EXPECT_THAT(params.BuildRequest(),
374 EqualsJSON("{"
375 " \"regularlyVisitedHostNames\": [],"
376 " \"excludedSuggestionIds\": ["
377 " \"000\", \"001\", \"002\", \"003\", \"004\","
378 " \"005\", \"006\", \"007\", \"008\", \"009\","
379 " \"010\", \"011\", \"012\", \"013\", \"014\","
380 " \"015\", \"016\", \"017\", \"018\", \"019\","
381 " \"020\", \"021\", \"022\", \"023\", \"024\","
382 " \"025\", \"026\", \"027\", \"028\", \"029\","
383 " \"030\", \"031\", \"032\", \"033\", \"034\","
384 " \"035\", \"036\", \"037\", \"038\", \"039\","
385 " \"040\", \"041\", \"042\", \"043\", \"044\","
386 " \"045\", \"046\", \"047\", \"048\", \"049\","
387 " \"050\", \"051\", \"052\", \"053\", \"054\","
388 " \"055\", \"056\", \"057\", \"058\", \"059\","
389 " \"060\", \"061\", \"062\", \"063\", \"064\","
390 " \"065\", \"066\", \"067\", \"068\", \"069\","
391 " \"070\", \"071\", \"072\", \"073\", \"074\","
392 " \"075\", \"076\", \"077\", \"078\", \"079\","
393 " \"080\", \"081\", \"082\", \"083\", \"084\","
394 " \"085\", \"086\", \"087\", \"088\", \"089\","
395 " \"090\", \"091\", \"092\", \"093\", \"094\","
396 " \"095\", \"096\", \"097\", \"098\", \"099\""
397 // Truncated to 100 entries. Currently, they happen to
398 // be those lexically first.
399 " ]"
400 "}"));
401 }
402
354 TEST_F(NTPSnippetsFetcherTest, ShouldNotFetchOnCreation) { 403 TEST_F(NTPSnippetsFetcherTest, ShouldNotFetchOnCreation) {
355 // The lack of registered baked in responses would cause any fetch to fail. 404 // The lack of registered baked in responses would cause any fetch to fail.
356 FastForwardUntilNoTasksRemain(); 405 FastForwardUntilNoTasksRemain();
357 EXPECT_THAT(histogram_tester().GetAllSamples( 406 EXPECT_THAT(histogram_tester().GetAllSamples(
358 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 407 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
359 IsEmpty()); 408 IsEmpty());
360 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 409 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
361 IsEmpty()); 410 IsEmpty());
362 EXPECT_THAT(snippets_fetcher().last_status(), IsEmpty()); 411 EXPECT_THAT(snippets_fetcher().last_status(), IsEmpty());
363 } 412 }
364 413
365 TEST_F(NTPSnippetsFetcherTest, ShouldFetchSuccessfully) { 414 TEST_F(NTPSnippetsFetcherTest, ShouldFetchSuccessfully) {
366 const std::string kJsonStr = 415 const std::string kJsonStr =
367 "{\"recos\": [{" 416 "{\"recos\": [{"
368 " \"contentInfo\": {" 417 " \"contentInfo\": {"
369 " \"url\" : \"http://localhost/foobar\"," 418 " \"url\" : \"http://localhost/foobar\","
370 " \"sourceCorpusInfo\" : [{" 419 " \"sourceCorpusInfo\" : [{"
371 " \"ampUrl\" : \"http://localhost/amp\"," 420 " \"ampUrl\" : \"http://localhost/amp\","
372 " \"corpusId\" : \"http://localhost/foobar\"," 421 " \"corpusId\" : \"http://localhost/foobar\","
373 " \"publisherData\": { \"sourceName\" : \"Foo News\" }" 422 " \"publisherData\": { \"sourceName\" : \"Foo News\" }"
374 " }]" 423 " }]"
375 " }" 424 " }"
376 "}]}"; 425 "}]}";
377 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 426 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK,
378 net::URLRequestStatus::SUCCESS); 427 net::URLRequestStatus::SUCCESS);
379 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar"))); 428 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar")));
380 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 429 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
430 test_excluded(),
381 /*count=*/1, 431 /*count=*/1,
382 /*interactive_request=*/true); 432 /*interactive_request=*/true);
383 FastForwardUntilNoTasksRemain(); 433 FastForwardUntilNoTasksRemain();
384 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 434 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
385 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 435 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
386 EXPECT_THAT(histogram_tester().GetAllSamples( 436 EXPECT_THAT(histogram_tester().GetAllSamples(
387 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 437 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
388 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 438 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
389 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 439 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
390 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 440 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
(...skipping 15 matching lines...) Expand all
406 " \"attribution\" : \"Foo News\"," 456 " \"attribution\" : \"Foo News\","
407 " \"imageUrl\" : \"http://localhost/foobar.jpg\"," 457 " \"imageUrl\" : \"http://localhost/foobar.jpg\","
408 " \"ampUrl\" : \"http://localhost/amp\"," 458 " \"ampUrl\" : \"http://localhost/amp\","
409 " \"faviconUrl\" : \"http://localhost/favicon.ico\" " 459 " \"faviconUrl\" : \"http://localhost/favicon.ico\" "
410 " }]" 460 " }]"
411 "}]}"; 461 "}]}";
412 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 462 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK,
413 net::URLRequestStatus::SUCCESS); 463 net::URLRequestStatus::SUCCESS);
414 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar"))); 464 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar")));
415 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 465 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
466 test_excluded(),
416 /*count=*/1, 467 /*count=*/1,
417 /*interactive_request=*/true); 468 /*interactive_request=*/true);
418 FastForwardUntilNoTasksRemain(); 469 FastForwardUntilNoTasksRemain();
419 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 470 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
420 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 471 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
421 EXPECT_THAT(histogram_tester().GetAllSamples( 472 EXPECT_THAT(histogram_tester().GetAllSamples(
422 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 473 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
423 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 474 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
424 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 475 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
425 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 476 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
426 /*count=*/1))); 477 /*count=*/1)));
427 } 478 }
428 479
429 TEST_F(NTPSnippetsContentSuggestionsFetcherTest, EmptyCategoryIsOK) { 480 TEST_F(NTPSnippetsContentSuggestionsFetcherTest, EmptyCategoryIsOK) {
430 const std::string kJsonStr = 481 const std::string kJsonStr =
431 "{\"categories\" : [{" 482 "{\"categories\" : [{"
432 " \"id\": 1," 483 " \"id\": 1,"
433 " \"localizedTitle\": \"Articles for You\"" 484 " \"localizedTitle\": \"Articles for You\""
434 "}]}"; 485 "}]}";
435 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 486 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK,
436 net::URLRequestStatus::SUCCESS); 487 net::URLRequestStatus::SUCCESS);
437 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList())); 488 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList()));
438 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 489 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
490 test_excluded(),
439 /*count=*/1, 491 /*count=*/1,
440 /*interactive_request=*/true); 492 /*interactive_request=*/true);
441 FastForwardUntilNoTasksRemain(); 493 FastForwardUntilNoTasksRemain();
442 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 494 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
443 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 495 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
444 EXPECT_THAT(histogram_tester().GetAllSamples( 496 EXPECT_THAT(histogram_tester().GetAllSamples(
445 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 497 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
446 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 498 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
447 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 499 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
448 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 500 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 " \"ampUrl\" : \"http://localhost/amp\"," 533 " \"ampUrl\" : \"http://localhost/amp\","
482 " \"faviconUrl\" : \"http://localhost/favicon.ico\" " 534 " \"faviconUrl\" : \"http://localhost/favicon.ico\" "
483 " }]" 535 " }]"
484 "}]}"; 536 "}]}";
485 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 537 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK,
486 net::URLRequestStatus::SUCCESS); 538 net::URLRequestStatus::SUCCESS);
487 NTPSnippetsFetcher::OptionalSnippets snippets; 539 NTPSnippetsFetcher::OptionalSnippets snippets;
488 EXPECT_CALL(mock_callback(), Run(_)) 540 EXPECT_CALL(mock_callback(), Run(_))
489 .WillOnce(WithArg<0>(MovePointeeTo(&snippets))); 541 .WillOnce(WithArg<0>(MovePointeeTo(&snippets)));
490 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 542 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
543 test_excluded(),
491 /*count=*/1, 544 /*count=*/1,
492 /*force_request=*/true); 545 /*force_request=*/true);
493 FastForwardUntilNoTasksRemain(); 546 FastForwardUntilNoTasksRemain();
494 547
495 ASSERT_TRUE(snippets); 548 ASSERT_TRUE(snippets);
496 ASSERT_THAT(snippets->size(), Eq(2u)); 549 ASSERT_THAT(snippets->size(), Eq(2u));
497 for (const auto& category : *snippets) { 550 for (const auto& category : *snippets) {
498 const auto& articles = category.second; 551 const auto& articles = category.second;
499 switch (category.first.id()) { 552 switch (category.first.id()) {
500 case static_cast<int>(KnownCategories::ARTICLES): 553 case static_cast<int>(KnownCategories::ARTICLES):
(...skipping 20 matching lines...) Expand all
521 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 574 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
522 /*count=*/1))); 575 /*count=*/1)));
523 } 576 }
524 577
525 TEST_F(NTPSnippetsFetcherTest, ShouldFetchSuccessfullyEmptyList) { 578 TEST_F(NTPSnippetsFetcherTest, ShouldFetchSuccessfullyEmptyList) {
526 const std::string kJsonStr = "{\"recos\": []}"; 579 const std::string kJsonStr = "{\"recos\": []}";
527 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 580 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK,
528 net::URLRequestStatus::SUCCESS); 581 net::URLRequestStatus::SUCCESS);
529 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList())); 582 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList()));
530 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 583 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
584 test_excluded(),
531 /*count=*/1, 585 /*count=*/1,
532 /*interactive_request=*/true); 586 /*interactive_request=*/true);
533 FastForwardUntilNoTasksRemain(); 587 FastForwardUntilNoTasksRemain();
534 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 588 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
535 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 589 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
536 EXPECT_THAT( 590 EXPECT_THAT(
537 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 591 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
538 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1))); 592 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1)));
539 EXPECT_THAT(histogram_tester().GetAllSamples( 593 EXPECT_THAT(histogram_tester().GetAllSamples(
540 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 594 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
541 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 595 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
542 } 596 }
543 597
544 TEST_F(NTPSnippetsFetcherHostRestrictedTest, ShouldReportEmptyHostsError) { 598 TEST_F(NTPSnippetsFetcherHostRestrictedTest, ShouldReportEmptyHostsError) {
545 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 599 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
546 snippets_fetcher().FetchSnippetsFromHosts(/*hosts=*/std::set<std::string>(), 600 snippets_fetcher().FetchSnippetsFromHosts(/*hosts=*/std::set<std::string>(),
547 /*language_code=*/"en-US", 601 /*language_code=*/"en-US",
602 test_excluded(),
548 /*count=*/1, 603 /*count=*/1,
549 /*interactive_request=*/true); 604 /*interactive_request=*/true);
550 FastForwardUntilNoTasksRemain(); 605 FastForwardUntilNoTasksRemain();
551 EXPECT_THAT(snippets_fetcher().last_status(), 606 EXPECT_THAT(snippets_fetcher().last_status(),
552 Eq("Cannot fetch for empty hosts list.")); 607 Eq("Cannot fetch for empty hosts list."));
553 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty()); 608 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty());
554 EXPECT_THAT( 609 EXPECT_THAT(
555 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 610 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
556 ElementsAre(base::Bucket(/*min=*/1, /*count=*/1))); 611 ElementsAre(base::Bucket(/*min=*/1, /*count=*/1)));
557 // This particular error gets triggered prior to fetching, so no fetch time 612 // This particular error gets triggered prior to fetching, so no fetch time
558 // or response should get recorded. 613 // or response should get recorded.
559 EXPECT_THAT(histogram_tester().GetAllSamples( 614 EXPECT_THAT(histogram_tester().GetAllSamples(
560 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 615 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
561 IsEmpty()); 616 IsEmpty());
562 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 617 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
563 IsEmpty()); 618 IsEmpty());
564 } 619 }
565 620
566 TEST_F(NTPSnippetsFetcherHostRestrictedTest, ShouldRestrictToHosts) { 621 TEST_F(NTPSnippetsFetcherHostRestrictedTest, ShouldRestrictToHosts) {
567 net::TestURLFetcherFactory test_url_fetcher_factory; 622 net::TestURLFetcherFactory test_url_fetcher_factory;
568 snippets_fetcher().FetchSnippetsFromHosts( 623 snippets_fetcher().FetchSnippetsFromHosts(
569 {"www.somehost1.com", "www.somehost2.com"}, test_lang(), /*count=*/17, 624 {"www.somehost1.com", "www.somehost2.com"}, test_lang(), test_excluded(),
625 /*count=*/17,
570 /*interactive_request=*/true); 626 /*interactive_request=*/true);
571 net::TestURLFetcher* fetcher = test_url_fetcher_factory.GetFetcherByID(0); 627 net::TestURLFetcher* fetcher = test_url_fetcher_factory.GetFetcherByID(0);
572 ASSERT_THAT(fetcher, NotNull()); 628 ASSERT_THAT(fetcher, NotNull());
573 std::unique_ptr<base::Value> value = 629 std::unique_ptr<base::Value> value =
574 base::JSONReader::Read(fetcher->upload_data()); 630 base::JSONReader::Read(fetcher->upload_data());
575 ASSERT_TRUE(value) << " failed to parse JSON: " 631 ASSERT_TRUE(value) << " failed to parse JSON: "
576 << PrintToString(fetcher->upload_data()); 632 << PrintToString(fetcher->upload_data());
577 const base::DictionaryValue* dict = nullptr; 633 const base::DictionaryValue* dict = nullptr;
578 ASSERT_TRUE(value->GetAsDictionary(&dict)); 634 ASSERT_TRUE(value->GetAsDictionary(&dict));
579 const base::DictionaryValue* local_scoring_params = nullptr; 635 const base::DictionaryValue* local_scoring_params = nullptr;
(...skipping 11 matching lines...) Expand all
591 ASSERT_TRUE(content_selectors->GetDictionary(1, &content_selector)); 647 ASSERT_TRUE(content_selectors->GetDictionary(1, &content_selector));
592 EXPECT_TRUE(content_selector->GetString("value", &content_selector_value)); 648 EXPECT_TRUE(content_selector->GetString("value", &content_selector_value));
593 EXPECT_THAT(content_selector_value, Eq("www.somehost2.com")); 649 EXPECT_THAT(content_selector_value, Eq("www.somehost2.com"));
594 } 650 }
595 651
596 TEST_F(NTPSnippetsFetcherTest, ShouldReportUrlStatusError) { 652 TEST_F(NTPSnippetsFetcherTest, ShouldReportUrlStatusError) {
597 SetFakeResponse(/*data=*/std::string(), net::HTTP_NOT_FOUND, 653 SetFakeResponse(/*data=*/std::string(), net::HTTP_NOT_FOUND,
598 net::URLRequestStatus::FAILED); 654 net::URLRequestStatus::FAILED);
599 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 655 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
600 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 656 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
657 test_excluded(),
601 /*count=*/1, 658 /*count=*/1,
602 /*interactive_request=*/true); 659 /*interactive_request=*/true);
603 FastForwardUntilNoTasksRemain(); 660 FastForwardUntilNoTasksRemain();
604 EXPECT_THAT(snippets_fetcher().last_status(), 661 EXPECT_THAT(snippets_fetcher().last_status(),
605 Eq("URLRequestStatus error -2")); 662 Eq("URLRequestStatus error -2"));
606 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty()); 663 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty());
607 EXPECT_THAT( 664 EXPECT_THAT(
608 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 665 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
609 ElementsAre(base::Bucket(/*min=*/2, /*count=*/1))); 666 ElementsAre(base::Bucket(/*min=*/2, /*count=*/1)));
610 EXPECT_THAT(histogram_tester().GetAllSamples( 667 EXPECT_THAT(histogram_tester().GetAllSamples(
611 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 668 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
612 ElementsAre(base::Bucket(/*min=*/-2, /*count=*/1))); 669 ElementsAre(base::Bucket(/*min=*/-2, /*count=*/1)));
613 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 670 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
614 Not(IsEmpty())); 671 Not(IsEmpty()));
615 } 672 }
616 673
617 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpError) { 674 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpError) {
618 SetFakeResponse(/*data=*/std::string(), net::HTTP_NOT_FOUND, 675 SetFakeResponse(/*data=*/std::string(), net::HTTP_NOT_FOUND,
619 net::URLRequestStatus::SUCCESS); 676 net::URLRequestStatus::SUCCESS);
620 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 677 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
621 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 678 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
679 test_excluded(),
622 /*count=*/1, 680 /*count=*/1,
623 /*interactive_request=*/true); 681 /*interactive_request=*/true);
624 FastForwardUntilNoTasksRemain(); 682 FastForwardUntilNoTasksRemain();
625 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty()); 683 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty());
626 EXPECT_THAT( 684 EXPECT_THAT(
627 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 685 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
628 ElementsAre(base::Bucket(/*min=*/3, /*count=*/1))); 686 ElementsAre(base::Bucket(/*min=*/3, /*count=*/1)));
629 EXPECT_THAT(histogram_tester().GetAllSamples( 687 EXPECT_THAT(histogram_tester().GetAllSamples(
630 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 688 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
631 ElementsAre(base::Bucket(/*min=*/404, /*count=*/1))); 689 ElementsAre(base::Bucket(/*min=*/404, /*count=*/1)));
632 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 690 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
633 Not(IsEmpty())); 691 Not(IsEmpty()));
634 } 692 }
635 693
636 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonError) { 694 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonError) {
637 const std::string kInvalidJsonStr = "{ \"recos\": []"; 695 const std::string kInvalidJsonStr = "{ \"recos\": []";
638 SetFakeResponse(/*data=*/kInvalidJsonStr, net::HTTP_OK, 696 SetFakeResponse(/*data=*/kInvalidJsonStr, net::HTTP_OK,
639 net::URLRequestStatus::SUCCESS); 697 net::URLRequestStatus::SUCCESS);
640 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 698 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
641 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 699 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
700 test_excluded(),
642 /*count=*/1, 701 /*count=*/1,
643 /*interactive_request=*/true); 702 /*interactive_request=*/true);
644 FastForwardUntilNoTasksRemain(); 703 FastForwardUntilNoTasksRemain();
645 EXPECT_THAT(snippets_fetcher().last_status(), 704 EXPECT_THAT(snippets_fetcher().last_status(),
646 StartsWith("Received invalid JSON (error ")); 705 StartsWith("Received invalid JSON (error "));
647 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kInvalidJsonStr)); 706 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kInvalidJsonStr));
648 EXPECT_THAT( 707 EXPECT_THAT(
649 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 708 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
650 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1))); 709 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1)));
651 EXPECT_THAT(histogram_tester().GetAllSamples( 710 EXPECT_THAT(histogram_tester().GetAllSamples(
652 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 711 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
653 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 712 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
654 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 713 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
655 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 714 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
656 /*count=*/1))); 715 /*count=*/1)));
657 } 716 }
658 717
659 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonErrorForEmptyResponse) { 718 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonErrorForEmptyResponse) {
660 SetFakeResponse(/*data=*/std::string(), net::HTTP_OK, 719 SetFakeResponse(/*data=*/std::string(), net::HTTP_OK,
661 net::URLRequestStatus::SUCCESS); 720 net::URLRequestStatus::SUCCESS);
662 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 721 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
663 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 722 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
723 test_excluded(),
664 /*count=*/1, 724 /*count=*/1,
665 /*interactive_request=*/true); 725 /*interactive_request=*/true);
666 FastForwardUntilNoTasksRemain(); 726 FastForwardUntilNoTasksRemain();
667 EXPECT_THAT(snippets_fetcher().last_json(), std::string()); 727 EXPECT_THAT(snippets_fetcher().last_json(), std::string());
668 EXPECT_THAT( 728 EXPECT_THAT(
669 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 729 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
670 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1))); 730 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1)));
671 EXPECT_THAT(histogram_tester().GetAllSamples( 731 EXPECT_THAT(histogram_tester().GetAllSamples(
672 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 732 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
673 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 733 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
674 } 734 }
675 735
676 TEST_F(NTPSnippetsFetcherTest, ShouldReportInvalidListError) { 736 TEST_F(NTPSnippetsFetcherTest, ShouldReportInvalidListError) {
677 const std::string kJsonStr = 737 const std::string kJsonStr =
678 "{\"recos\": [{ \"contentInfo\": { \"foo\" : \"bar\" }}]}"; 738 "{\"recos\": [{ \"contentInfo\": { \"foo\" : \"bar\" }}]}";
679 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 739 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK,
680 net::URLRequestStatus::SUCCESS); 740 net::URLRequestStatus::SUCCESS);
681 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 741 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
682 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 742 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
743 test_excluded(),
683 /*count=*/1, 744 /*count=*/1,
684 /*interactive_request=*/true); 745 /*interactive_request=*/true);
685 FastForwardUntilNoTasksRemain(); 746 FastForwardUntilNoTasksRemain();
686 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 747 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
687 EXPECT_THAT( 748 EXPECT_THAT(
688 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 749 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
689 ElementsAre(base::Bucket(/*min=*/5, /*count=*/1))); 750 ElementsAre(base::Bucket(/*min=*/5, /*count=*/1)));
690 EXPECT_THAT(histogram_tester().GetAllSamples( 751 EXPECT_THAT(histogram_tester().GetAllSamples(
691 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 752 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
692 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 753 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
693 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 754 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
694 Not(IsEmpty())); 755 Not(IsEmpty()));
695 } 756 }
696 757
697 // This test actually verifies that the test setup itself is sane, to prevent 758 // This test actually verifies that the test setup itself is sane, to prevent
698 // hard-to-reproduce test failures. 759 // hard-to-reproduce test failures.
699 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpErrorForMissingBakedResponse) { 760 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpErrorForMissingBakedResponse) {
700 InitFakeURLFetcherFactory(); 761 InitFakeURLFetcherFactory();
701 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 762 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
702 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 763 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
764 test_excluded(),
703 /*count=*/1, 765 /*count=*/1,
704 /*interactive_request=*/true); 766 /*interactive_request=*/true);
705 FastForwardUntilNoTasksRemain(); 767 FastForwardUntilNoTasksRemain();
706 } 768 }
707 769
708 TEST_F(NTPSnippetsFetcherTest, ShouldCancelOngoingFetch) { 770 TEST_F(NTPSnippetsFetcherTest, ShouldCancelOngoingFetch) {
709 const std::string kJsonStr = "{ \"recos\": [] }"; 771 const std::string kJsonStr = "{ \"recos\": [] }";
710 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 772 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK,
711 net::URLRequestStatus::SUCCESS); 773 net::URLRequestStatus::SUCCESS);
712 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList())); 774 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList()));
713 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 775 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
776 test_excluded(),
714 /*count=*/1, 777 /*count=*/1,
715 /*interactive_request=*/true); 778 /*interactive_request=*/true);
716 // Second call to FetchSnippetsFromHosts() overrides/cancels the previous. 779 // Second call to FetchSnippetsFromHosts() overrides/cancels the previous.
717 // Callback is expected to be called once. 780 // Callback is expected to be called once.
718 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 781 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
782 test_excluded(),
719 /*count=*/1, 783 /*count=*/1,
720 /*interactive_request=*/true); 784 /*interactive_request=*/true);
721 FastForwardUntilNoTasksRemain(); 785 FastForwardUntilNoTasksRemain();
722 EXPECT_THAT( 786 EXPECT_THAT(
723 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 787 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
724 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1))); 788 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1)));
725 EXPECT_THAT(histogram_tester().GetAllSamples( 789 EXPECT_THAT(histogram_tester().GetAllSamples(
726 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 790 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
727 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 791 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
728 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 792 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
729 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 793 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
730 /*count=*/1))); 794 /*count=*/1)));
731 } 795 }
732 796
733 ::std::ostream& operator<<( 797 ::std::ostream& operator<<(
734 ::std::ostream& os, 798 ::std::ostream& os,
735 const NTPSnippetsFetcher::OptionalSnippets& snippets) { 799 const NTPSnippetsFetcher::OptionalSnippets& snippets) {
736 if (snippets) { 800 if (snippets) {
737 // Matchers above aren't any more precise than this, so this is sufficient 801 // Matchers above aren't any more precise than this, so this is sufficient
738 // for test-failure diagnostics. 802 // for test-failure diagnostics.
739 return os << "list with " << snippets->size() << " elements"; 803 return os << "list with " << snippets->size() << " elements";
740 } else { 804 } else {
741 return os << "null"; 805 return os << "null";
742 } 806 }
743 } 807 }
744 808
745 } // namespace ntp_snippets 809 } // namespace ntp_snippets
OLDNEW
« no previous file with comments | « components/ntp_snippets/ntp_snippets_fetcher.cc ('k') | components/ntp_snippets/ntp_snippets_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698