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

Side by Side Diff: components/precache/core/precache_fetcher_unittest.cc

Issue 2037523002: Select precache resources based on field trial experiment group (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments, added more test Created 4 years, 6 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/precache/core/precache_fetcher.h" 5 #include "components/precache/core/precache_fetcher.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <cstring> 9 #include <cstring>
10 #include <memory> 10 #include <memory>
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 const char kManifestFetchFailureURL[] = 52 const char kManifestFetchFailureURL[] =
53 "http://manifest-url-prefix.com/manifest-fetch-failure.com"; 53 "http://manifest-url-prefix.com/manifest-fetch-failure.com";
54 const char kBadManifestURL[] = 54 const char kBadManifestURL[] =
55 "http://manifest-url-prefix.com/bad-manifest.com"; 55 "http://manifest-url-prefix.com/bad-manifest.com";
56 const char kGoodManifestURL[] = 56 const char kGoodManifestURL[] =
57 "http://manifest-url-prefix.com/good-manifest.com"; 57 "http://manifest-url-prefix.com/good-manifest.com";
58 const char kCustomGoodManifestURL[] = 58 const char kCustomGoodManifestURL[] =
59 "http://custom-manifest-url-prefix.com/good-manifest.com"; 59 "http://custom-manifest-url-prefix.com/good-manifest.com";
60 const char kResourceFetchFailureURL[] = "http://resource-fetch-failure.com"; 60 const char kResourceFetchFailureURL[] = "http://resource-fetch-failure.com";
61 const char kGoodResourceURL[] = "http://good-resource.com"; 61 const char kGoodResourceURL[] = "http://good-resource.com";
62 const char kGoodResourceURLA[] = "http://good-resource.com/a";
63 const char kGoodResourceURLB[] = "http://good-resource.com/b";
64 const char kGoodResourceURLC[] = "http://good-resource.com/c";
65 const char kGoodResourceURLD[] = "http://good-resource.com/d";
62 const char kForcedStartingURLManifestURL[] = 66 const char kForcedStartingURLManifestURL[] =
63 "http://manifest-url-prefix.com/forced-starting-url.com"; 67 "http://manifest-url-prefix.com/forced-starting-url.com";
68 const uint32_t kExperimentID = 123;
64 69
65 class TestURLFetcherCallback { 70 class TestURLFetcherCallback {
66 public: 71 public:
67 TestURLFetcherCallback() : total_response_bytes_(0) {} 72 TestURLFetcherCallback() : total_response_bytes_(0) {}
68 73
69 std::unique_ptr<net::FakeURLFetcher> CreateURLFetcher( 74 std::unique_ptr<net::FakeURLFetcher> CreateURLFetcher(
70 const GURL& url, 75 const GURL& url,
71 net::URLFetcherDelegate* delegate, 76 net::URLFetcherDelegate* delegate,
72 const std::string& response_data, 77 const std::string& response_data,
73 net::HttpStatusCode response_code, 78 net::HttpStatusCode response_code,
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 net::URLRequestStatus::FAILED); 389 net::URLRequestStatus::FAILED);
385 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 390 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
386 net::URLRequestStatus::SUCCESS); 391 net::URLRequestStatus::SUCCESS);
387 factory_.SetFakeResponse(GURL(kForcedStartingURLManifestURL), 392 factory_.SetFakeResponse(GURL(kForcedStartingURLManifestURL),
388 PrecacheManifest().SerializeAsString(), net::HTTP_OK, 393 PrecacheManifest().SerializeAsString(), net::HTTP_OK,
389 net::URLRequestStatus::SUCCESS); 394 net::URLRequestStatus::SUCCESS);
390 395
391 base::HistogramTester histogram; 396 base::HistogramTester histogram;
392 397
393 { 398 {
394 PrecacheFetcher precache_fetcher(request_context_.get(), 399 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
395 GURL(), std::string(), 400 std::string(), std::move(unfinished_work),
396 std::move(unfinished_work), 401 kExperimentID, &precache_delegate_);
397 &precache_delegate_);
398 precache_fetcher.Start(); 402 precache_fetcher.Start();
399 403
400 loop_.RunUntilIdle(); 404 loop_.RunUntilIdle();
401 405
402 // Destroy the PrecacheFetcher after it has finished, to record metrics. 406 // Destroy the PrecacheFetcher after it has finished, to record metrics.
403 } 407 }
404 408
405 std::multiset<GURL> expected_requested_urls; 409 std::multiset<GURL> expected_requested_urls;
406 expected_requested_urls.insert(GURL(kConfigURL)); 410 expected_requested_urls.insert(GURL(kConfigURL));
407 expected_requested_urls.insert(GURL(kManifestFetchFailureURL)); 411 expected_requested_urls.insert(GURL(kManifestFetchFailureURL));
408 expected_requested_urls.insert(GURL(kBadManifestURL)); 412 expected_requested_urls.insert(GURL(kBadManifestURL));
409 expected_requested_urls.insert(GURL(kGoodManifestURL)); 413 expected_requested_urls.insert(GURL(kGoodManifestURL));
410 expected_requested_urls.insert(GURL(kResourceFetchFailureURL)); 414 expected_requested_urls.insert(GURL(kResourceFetchFailureURL));
411 expected_requested_urls.insert(GURL(kGoodResourceURL)); 415 expected_requested_urls.insert(GURL(kGoodResourceURL));
412 expected_requested_urls.insert(GURL(kForcedStartingURLManifestURL)); 416 expected_requested_urls.insert(GURL(kForcedStartingURLManifestURL));
413 417
414 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 418 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
415 419
416 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 420 EXPECT_TRUE(precache_delegate_.was_on_done_called());
417 421
418 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); 422 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
419 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 423 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
420 url_callback_.total_response_bytes(), 1); 424 url_callback_.total_response_bytes(), 1);
421 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 425 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
422 } 426 }
423 427
428 TEST_F(PrecacheFetcherTest, PrecacheResourceSelection) {
429 SetDefaultFlags();
430
431 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
432 new PrecacheUnfinishedWork());
433 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
434 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
435
436 PrecacheConfigurationSettings config;
437
438 PrecacheManifest good_manifest;
439 PrecacheResourceSelection resource_selection;
440 good_manifest.add_resource()->set_url(kGoodResourceURL);
441 good_manifest.add_resource()->set_url(kGoodResourceURLA);
442 good_manifest.add_resource()->set_url(kGoodResourceURLB);
443 good_manifest.add_resource()->set_url(kGoodResourceURLC);
444 good_manifest.add_resource()->set_url(kGoodResourceURLD);
445
446 // Set bits for kGoodResourceURL, kGoodResourceURLB and kGoodResourceURLD.
447 resource_selection.set_bitset(0b10101);
448 (*good_manifest.mutable_experiments()
449 ->mutable_resources_by_experiment_group())[kExperimentID] =
450 resource_selection;
451
452 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
453 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
454 factory_.SetFakeResponse(GURL(kGoodManifestURL),
455 good_manifest.SerializeAsString(), net::HTTP_OK,
456 net::URLRequestStatus::SUCCESS);
457 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
458 net::URLRequestStatus::SUCCESS);
459 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK,
460 net::URLRequestStatus::SUCCESS);
461 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK,
462 net::URLRequestStatus::SUCCESS);
463
464 base::HistogramTester histogram;
465
466 {
467 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
468 std::string(), std::move(unfinished_work),
469 kExperimentID, &precache_delegate_);
470 precache_fetcher.Start();
471
472 loop_.RunUntilIdle();
473
474 // Destroy the PrecacheFetcher after it has finished, to record metrics.
475 }
476
477 std::multiset<GURL> expected_requested_urls;
478 expected_requested_urls.insert(GURL(kConfigURL));
479 expected_requested_urls.insert(GURL(kGoodManifestURL));
480 expected_requested_urls.insert(GURL(kGoodResourceURL));
481 expected_requested_urls.insert(GURL(kGoodResourceURLB));
482 expected_requested_urls.insert(GURL(kGoodResourceURLD));
483
484 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
485
486 EXPECT_TRUE(precache_delegate_.was_on_done_called());
487
488 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
489 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
490 url_callback_.total_response_bytes(), 1);
491 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
492 }
493
494 TEST_F(PrecacheFetcherTest, PrecacheResourceSelectionMissingBitset) {
495 SetDefaultFlags();
496
497 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
498 new PrecacheUnfinishedWork());
499 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
500 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
501
502 PrecacheConfigurationSettings config;
503
504 PrecacheManifest good_manifest;
505 PrecacheResourceSelection resource_selection;
506 good_manifest.add_resource()->set_url(kGoodResourceURL);
507 good_manifest.add_resource()->set_url(kGoodResourceURLA);
508 good_manifest.add_resource()->set_url(kGoodResourceURLB);
509 good_manifest.add_resource()->set_url(kGoodResourceURLC);
510 good_manifest.add_resource()->set_url(kGoodResourceURLD);
511
512 // Set bits for a different experiment group.
513 resource_selection.set_bitset(0b1);
514 (*good_manifest.mutable_experiments()
515 ->mutable_resources_by_experiment_group())[kExperimentID + 1] =
516 resource_selection;
517
518 // Resource selection bitset for the experiment group will be missing and all
519 // resources will be fetched.
520 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
521 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
522 factory_.SetFakeResponse(GURL(kGoodManifestURL),
523 good_manifest.SerializeAsString(), net::HTTP_OK,
524 net::URLRequestStatus::SUCCESS);
525 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
526 net::URLRequestStatus::SUCCESS);
527 factory_.SetFakeResponse(GURL(kGoodResourceURLA), "good URL A", net::HTTP_OK,
528 net::URLRequestStatus::SUCCESS);
529 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK,
530 net::URLRequestStatus::SUCCESS);
531 factory_.SetFakeResponse(GURL(kGoodResourceURLC), "good URL C", net::HTTP_OK,
532 net::URLRequestStatus::SUCCESS);
533 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK,
534 net::URLRequestStatus::SUCCESS);
535
536 base::HistogramTester histogram;
537
538 {
539 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
540 std::string(), std::move(unfinished_work),
541 kExperimentID, &precache_delegate_);
542 precache_fetcher.Start();
543
544 loop_.RunUntilIdle();
545
546 // Destroy the PrecacheFetcher after it has finished, to record metrics.
547 }
548
549 std::multiset<GURL> expected_requested_urls;
550 expected_requested_urls.insert(GURL(kConfigURL));
551 expected_requested_urls.insert(GURL(kGoodManifestURL));
552 expected_requested_urls.insert(GURL(kGoodResourceURL));
553 expected_requested_urls.insert(GURL(kGoodResourceURLA));
554 expected_requested_urls.insert(GURL(kGoodResourceURLB));
555 expected_requested_urls.insert(GURL(kGoodResourceURLC));
556 expected_requested_urls.insert(GURL(kGoodResourceURLD));
557
558 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
559
560 EXPECT_TRUE(precache_delegate_.was_on_done_called());
561
562 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
563 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
564 url_callback_.total_response_bytes(), 1);
565 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
566 }
567
424 TEST_F(PrecacheFetcherTest, PrecachePauseResume) { 568 TEST_F(PrecacheFetcherTest, PrecachePauseResume) {
425 SetDefaultFlags(); 569 SetDefaultFlags();
426 570
427 PrecacheConfigurationSettings config; 571 PrecacheConfigurationSettings config;
428 config.set_top_sites_count(3); 572 config.set_top_sites_count(3);
429 573
430 std::unique_ptr<PrecacheUnfinishedWork> initial_work( 574 std::unique_ptr<PrecacheUnfinishedWork> initial_work(
431 new PrecacheUnfinishedWork()); 575 new PrecacheUnfinishedWork());
432 initial_work->add_manifest()->set_url( 576 initial_work->add_manifest()->set_url(
433 "http://manifest-url-prefix.com/manifest1.com"); 577 "http://manifest-url-prefix.com/manifest1.com");
434 initial_work->add_manifest()->set_url( 578 initial_work->add_manifest()->set_url(
435 "http://manifest-url-prefix.com/manifest2.com"); 579 "http://manifest-url-prefix.com/manifest2.com");
436 initial_work->add_resource()->set_url(kGoodResourceURL); 580 initial_work->add_resource()->set_url(kGoodResourceURL);
437 initial_work->set_start_time( 581 initial_work->set_start_time(
438 (base::Time::Now() - base::TimeDelta::FromHours(1)).ToInternalValue()); 582 (base::Time::Now() - base::TimeDelta::FromHours(1)).ToInternalValue());
439 583
440 PrecacheFetcher first_fetcher(request_context_.get(), 584 PrecacheFetcher first_fetcher(request_context_.get(), GURL(), std::string(),
441 GURL(), std::string(), 585 std::move(initial_work), kExperimentID,
442 std::move(initial_work),
443 &precache_delegate_); 586 &precache_delegate_);
444 587
445 loop_.RunUntilIdle(); 588 loop_.RunUntilIdle();
446 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work = 589 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work =
447 first_fetcher.CancelPrecaching(); 590 first_fetcher.CancelPrecaching();
448 591
449 std::multiset<GURL> expected_requested_urls; 592 std::multiset<GURL> expected_requested_urls;
450 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 593 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
451 594
452 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 595 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
453 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 596 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
454 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK, 597 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK,
455 net::URLRequestStatus::SUCCESS); 598 net::URLRequestStatus::SUCCESS);
456 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"), 599 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"),
457 "bad protobuf", net::HTTP_OK, 600 "bad protobuf", net::HTTP_OK,
458 net::URLRequestStatus::SUCCESS); 601 net::URLRequestStatus::SUCCESS);
459 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"), 602 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"),
460 "bad protobuf", net::HTTP_OK, 603 "bad protobuf", net::HTTP_OK,
461 net::URLRequestStatus::SUCCESS); 604 net::URLRequestStatus::SUCCESS);
462 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 605 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
463 net::URLRequestStatus::SUCCESS); 606 net::URLRequestStatus::SUCCESS);
464 // Starting hosts should not be fetched. 607 // Starting hosts should not be fetched.
465 unfinished_work->add_top_host()->set_hostname("bad-manifest.com"); 608 unfinished_work->add_top_host()->set_hostname("bad-manifest.com");
466 PrecacheFetcher second_fetcher(request_context_.get(), 609 PrecacheFetcher second_fetcher(request_context_.get(), GURL(), std::string(),
467 GURL(), std::string(), 610 std::move(unfinished_work), kExperimentID,
468 std::move(unfinished_work),
469 &precache_delegate_); 611 &precache_delegate_);
470 second_fetcher.Start(); 612 second_fetcher.Start();
471 loop_.RunUntilIdle(); 613 loop_.RunUntilIdle();
472 expected_requested_urls.insert(GURL(kConfigURL)); 614 expected_requested_urls.insert(GURL(kConfigURL));
473 expected_requested_urls.insert( 615 expected_requested_urls.insert(
474 GURL("http://manifest-url-prefix.com/manifest1.com")); 616 GURL("http://manifest-url-prefix.com/manifest1.com"));
475 expected_requested_urls.insert( 617 expected_requested_urls.insert(
476 GURL("http://manifest-url-prefix.com/manifest2.com")); 618 GURL("http://manifest-url-prefix.com/manifest2.com"));
477 expected_requested_urls.insert(GURL(kGoodResourceURL)); 619 expected_requested_urls.insert(GURL(kGoodResourceURL));
478 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 620 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
479 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 621 EXPECT_TRUE(precache_delegate_.was_on_done_called());
480 } 622 }
481 623
482 TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) { 624 TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) {
483 SetDefaultFlags(); 625 SetDefaultFlags();
484 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 626 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
485 new PrecacheUnfinishedWork()); 627 new PrecacheUnfinishedWork());
486 unfinished_work->mutable_config_settings()->add_forced_site( 628 unfinished_work->mutable_config_settings()->add_forced_site(
487 "good-manifest.com"); 629 "good-manifest.com");
488 unfinished_work->set_start_time(base::Time::Now().ToInternalValue()); 630 unfinished_work->set_start_time(base::Time::Now().ToInternalValue());
489 PrecacheManifest good_manifest; 631 PrecacheManifest good_manifest;
490 good_manifest.add_resource()->set_url(kGoodResourceURL); 632 good_manifest.add_resource()->set_url(kGoodResourceURL);
491 633
492 factory_.SetFakeResponse(GURL(kGoodManifestURL), 634 factory_.SetFakeResponse(GURL(kGoodManifestURL),
493 good_manifest.SerializeAsString(), net::HTTP_OK, 635 good_manifest.SerializeAsString(), net::HTTP_OK,
494 net::URLRequestStatus::SUCCESS); 636 net::URLRequestStatus::SUCCESS);
495 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 637 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
496 net::URLRequestStatus::SUCCESS); 638 net::URLRequestStatus::SUCCESS);
497 { 639 {
498 PrecacheFetcher precache_fetcher(request_context_.get(), 640 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
499 GURL(), std::string(), 641 std::string(), std::move(unfinished_work),
500 std::move(unfinished_work), 642 kExperimentID, &precache_delegate_);
501 &precache_delegate_);
502 precache_fetcher.Start(); 643 precache_fetcher.Start();
503 644
504 loop_.RunUntilIdle(); 645 loop_.RunUntilIdle();
505 } 646 }
506 647
507 std::multiset<GURL> expected_requested_urls; 648 std::multiset<GURL> expected_requested_urls;
508 expected_requested_urls.insert(GURL(kGoodManifestURL)); 649 expected_requested_urls.insert(GURL(kGoodManifestURL));
509 expected_requested_urls.insert(GURL(kGoodResourceURL)); 650 expected_requested_urls.insert(GURL(kGoodResourceURL));
510 651
511 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 652 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
(...skipping 16 matching lines...) Expand all
528 669
529 factory_.SetFakeResponse(GURL(kCustomConfigURL), config.SerializeAsString(), 670 factory_.SetFakeResponse(GURL(kCustomConfigURL), config.SerializeAsString(),
530 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 671 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
531 factory_.SetFakeResponse(GURL(kCustomGoodManifestURL), 672 factory_.SetFakeResponse(GURL(kCustomGoodManifestURL),
532 good_manifest.SerializeAsString(), net::HTTP_OK, 673 good_manifest.SerializeAsString(), net::HTTP_OK,
533 net::URLRequestStatus::SUCCESS); 674 net::URLRequestStatus::SUCCESS);
534 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 675 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
535 net::URLRequestStatus::SUCCESS); 676 net::URLRequestStatus::SUCCESS);
536 677
537 PrecacheFetcher precache_fetcher( 678 PrecacheFetcher precache_fetcher(
538 request_context_.get(), GURL(kCustomConfigURL), 679 request_context_.get(), GURL(kCustomConfigURL), kCustomManifestURLPrefix,
539 kCustomManifestURLPrefix, std::move(unfinished_work), 680 std::move(unfinished_work), kExperimentID, &precache_delegate_);
540 &precache_delegate_);
541 precache_fetcher.Start(); 681 precache_fetcher.Start();
542 682
543 loop_.RunUntilIdle(); 683 loop_.RunUntilIdle();
544 684
545 std::multiset<GURL> expected_requested_urls; 685 std::multiset<GURL> expected_requested_urls;
546 expected_requested_urls.insert(GURL(kCustomConfigURL)); 686 expected_requested_urls.insert(GURL(kCustomConfigURL));
547 expected_requested_urls.insert(GURL(kCustomGoodManifestURL)); 687 expected_requested_urls.insert(GURL(kCustomGoodManifestURL));
548 expected_requested_urls.insert(GURL(kGoodResourceURL)); 688 expected_requested_urls.insert(GURL(kGoodResourceURL));
549 689
550 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 690 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
551 691
552 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 692 EXPECT_TRUE(precache_delegate_.was_on_done_called());
553 } 693 }
554 694
555 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) { 695 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
556 SetDefaultFlags(); 696 SetDefaultFlags();
557 697
558 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 698 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
559 new PrecacheUnfinishedWork()); 699 new PrecacheUnfinishedWork());
560 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); 700 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
561 701
562 factory_.SetFakeResponse(GURL(kConfigURL), "", 702 factory_.SetFakeResponse(GURL(kConfigURL), "",
563 net::HTTP_INTERNAL_SERVER_ERROR, 703 net::HTTP_INTERNAL_SERVER_ERROR,
564 net::URLRequestStatus::FAILED); 704 net::URLRequestStatus::FAILED);
565 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, 705 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
566 net::URLRequestStatus::SUCCESS); 706 net::URLRequestStatus::SUCCESS);
567 707
568 PrecacheFetcher precache_fetcher(request_context_.get(), 708 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
569 GURL(), std::string(), 709 std::string(), std::move(unfinished_work),
570 std::move(unfinished_work), 710 kExperimentID, &precache_delegate_);
571 &precache_delegate_);
572 precache_fetcher.Start(); 711 precache_fetcher.Start();
573 712
574 loop_.RunUntilIdle(); 713 loop_.RunUntilIdle();
575 714
576 std::multiset<GURL> expected_requested_urls; 715 std::multiset<GURL> expected_requested_urls;
577 expected_requested_urls.insert(GURL(kConfigURL)); 716 expected_requested_urls.insert(GURL(kConfigURL));
578 expected_requested_urls.insert(GURL(kGoodManifestURL)); 717 expected_requested_urls.insert(GURL(kGoodManifestURL));
579 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 718 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
580 719
581 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 720 EXPECT_TRUE(precache_delegate_.was_on_done_called());
582 } 721 }
583 722
584 TEST_F(PrecacheFetcherTest, BadConfig) { 723 TEST_F(PrecacheFetcherTest, BadConfig) {
585 SetDefaultFlags(); 724 SetDefaultFlags();
586 725
587 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 726 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
588 new PrecacheUnfinishedWork()); 727 new PrecacheUnfinishedWork());
589 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); 728 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
590 729
591 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK, 730 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK,
592 net::URLRequestStatus::SUCCESS); 731 net::URLRequestStatus::SUCCESS);
593 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, 732 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
594 net::URLRequestStatus::SUCCESS); 733 net::URLRequestStatus::SUCCESS);
595 734
596 PrecacheFetcher precache_fetcher(request_context_.get(), 735 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
597 GURL(), std::string(), 736 std::string(), std::move(unfinished_work),
598 std::move(unfinished_work), 737 kExperimentID, &precache_delegate_);
599 &precache_delegate_);
600 precache_fetcher.Start(); 738 precache_fetcher.Start();
601 739
602 loop_.RunUntilIdle(); 740 loop_.RunUntilIdle();
603 741
604 std::multiset<GURL> expected_requested_urls; 742 std::multiset<GURL> expected_requested_urls;
605 expected_requested_urls.insert(GURL(kConfigURL)); 743 expected_requested_urls.insert(GURL(kConfigURL));
606 expected_requested_urls.insert(GURL(kGoodManifestURL)); 744 expected_requested_urls.insert(GURL(kGoodManifestURL));
607 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 745 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
608 746
609 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 747 EXPECT_TRUE(precache_delegate_.was_on_done_called());
610 } 748 }
611 749
612 TEST_F(PrecacheFetcherTest, Cancel) { 750 TEST_F(PrecacheFetcherTest, Cancel) {
613 SetDefaultFlags(); 751 SetDefaultFlags();
614 752
615 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 753 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
616 new PrecacheUnfinishedWork()); 754 new PrecacheUnfinishedWork());
617 unfinished_work->add_top_host()->set_hostname("starting-url.com"); 755 unfinished_work->add_top_host()->set_hostname("starting-url.com");
618 756
619 PrecacheConfigurationSettings config; 757 PrecacheConfigurationSettings config;
620 config.set_top_sites_count(1); 758 config.set_top_sites_count(1);
621 759
622 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 760 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
623 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 761 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
624 762
625 base::HistogramTester histogram; 763 base::HistogramTester histogram;
626 764
627 { 765 {
628 PrecacheFetcher precache_fetcher(request_context_.get(), 766 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
629 GURL(), std::string(), 767 std::string(), std::move(unfinished_work),
630 std::move(unfinished_work), 768 kExperimentID, &precache_delegate_);
631 &precache_delegate_);
632 precache_fetcher.Start(); 769 precache_fetcher.Start();
633 770
634 // Destroy the PrecacheFetcher, to cancel precaching. No metrics 771 // Destroy the PrecacheFetcher, to cancel precaching. No metrics
635 // should be recorded because this should not cause OnDone to be 772 // should be recorded because this should not cause OnDone to be
636 // called on the precache delegate. 773 // called on the precache delegate.
637 } 774 }
638 775
639 loop_.RunUntilIdle(); 776 loop_.RunUntilIdle();
640 777
641 std::multiset<GURL> expected_requested_urls; 778 std::multiset<GURL> expected_requested_urls;
(...skipping 14 matching lines...) Expand all
656 new PrecacheUnfinishedWork()); 793 new PrecacheUnfinishedWork());
657 unfinished_work->add_top_host()->set_hostname("starting-url.com"); 794 unfinished_work->add_top_host()->set_hostname("starting-url.com");
658 795
659 PrecacheConfigurationSettings config; 796 PrecacheConfigurationSettings config;
660 config.set_top_sites_count(0); 797 config.set_top_sites_count(0);
661 798
662 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL), 799 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL),
663 config.SerializeAsString(), net::HTTP_OK, 800 config.SerializeAsString(), net::HTTP_OK,
664 net::URLRequestStatus::SUCCESS); 801 net::URLRequestStatus::SUCCESS);
665 802
666 PrecacheFetcher precache_fetcher(request_context_.get(), 803 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
667 GURL(), std::string(), 804 std::string(), std::move(unfinished_work),
668 std::move(unfinished_work), 805 kExperimentID, &precache_delegate_);
669 &precache_delegate_);
670 precache_fetcher.Start(); 806 precache_fetcher.Start();
671 807
672 loop_.RunUntilIdle(); 808 loop_.RunUntilIdle();
673 809
674 std::multiset<GURL> expected_requested_urls; 810 std::multiset<GURL> expected_requested_urls;
675 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL)); 811 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL));
676 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 812 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
677 813
678 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 814 EXPECT_TRUE(precache_delegate_.was_on_done_called());
679 } 815 }
(...skipping 15 matching lines...) Expand all
695 PrecacheConfigurationSettings config; 831 PrecacheConfigurationSettings config;
696 config.set_top_sites_count(1); 832 config.set_top_sites_count(1);
697 833
698 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX "starting-url.com"); 834 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX "starting-url.com");
699 835
700 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 836 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
701 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 837 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
702 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(), 838 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(),
703 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 839 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
704 840
705 PrecacheFetcher precache_fetcher(request_context_.get(), 841 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
706 GURL(), std::string(), 842 std::string(), std::move(unfinished_work),
707 std::move(unfinished_work), 843 kExperimentID, &precache_delegate_);
708 &precache_delegate_);
709 precache_fetcher.Start(); 844 precache_fetcher.Start();
710 845
711 loop_.RunUntilIdle(); 846 loop_.RunUntilIdle();
712 847
713 std::multiset<GURL> expected_requested_urls; 848 std::multiset<GURL> expected_requested_urls;
714 expected_requested_urls.insert(GURL(kConfigURL)); 849 expected_requested_urls.insert(GURL(kConfigURL));
715 expected_requested_urls.insert(manifest_url); 850 expected_requested_urls.insert(manifest_url);
716 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 851 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
717 852
718 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 853 EXPECT_TRUE(precache_delegate_.was_on_done_called());
(...skipping 23 matching lines...) Expand all
742 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 877 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
743 factory_.SetFakeResponse(GURL(kGoodManifestURL), 878 factory_.SetFakeResponse(GURL(kGoodManifestURL),
744 good_manifest.SerializeAsString(), net::HTTP_OK, 879 good_manifest.SerializeAsString(), net::HTTP_OK,
745 net::URLRequestStatus::SUCCESS); 880 net::URLRequestStatus::SUCCESS);
746 factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good", 881 factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good",
747 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 882 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
748 883
749 base::HistogramTester histogram; 884 base::HistogramTester histogram;
750 885
751 { 886 {
752 PrecacheFetcher precache_fetcher(request_context_.get(), 887 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
753 GURL(), std::string(), 888 std::string(), std::move(unfinished_work),
754 std::move(unfinished_work), 889 kExperimentID, &precache_delegate_);
755 &precache_delegate_);
756 precache_fetcher.Start(); 890 precache_fetcher.Start();
757 891
758 loop_.RunUntilIdle(); 892 loop_.RunUntilIdle();
759 893
760 // Destroy the PrecacheFetcher after it has finished, to record metrics. 894 // Destroy the PrecacheFetcher after it has finished, to record metrics.
761 } 895 }
762 896
763 std::multiset<GURL> expected_requested_urls; 897 std::multiset<GURL> expected_requested_urls;
764 expected_requested_urls.insert(GURL(kConfigURL)); 898 expected_requested_urls.insert(GURL(kConfigURL));
765 expected_requested_urls.insert(GURL(kGoodManifestURL)); 899 expected_requested_urls.insert(GURL(kGoodManifestURL));
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
821 } 955 }
822 956
823 factory_.SetFakeResponse(GURL(kGoodManifestURL), 957 factory_.SetFakeResponse(GURL(kGoodManifestURL),
824 good_manifest.SerializeAsString(), net::HTTP_OK, 958 good_manifest.SerializeAsString(), net::HTTP_OK,
825 net::URLRequestStatus::SUCCESS); 959 net::URLRequestStatus::SUCCESS);
826 960
827 base::HistogramTester histogram; 961 base::HistogramTester histogram;
828 962
829 { 963 {
830 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 964 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
831 std::string(), 965 std::string(), std::move(unfinished_work),
832 std::move(unfinished_work), 966 kExperimentID, &precache_delegate_);
833 &precache_delegate_);
834 precache_fetcher.Start(); 967 precache_fetcher.Start();
835 968
836 loop_.RunUntilIdle(); 969 loop_.RunUntilIdle();
837 } 970 }
838 971
839 // We don't know which will make it and which won't due to the parallelism in 972 // We don't know which will make it and which won't due to the parallelism in
840 // the pool of Fetchers. 973 // the pool of Fetchers.
841 EXPECT_GT(kNumResources, url_callback_.requested_urls().size()); 974 EXPECT_GT(kNumResources, url_callback_.requested_urls().size());
842 975
843 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 976 EXPECT_TRUE(precache_delegate_.was_on_done_called());
844 977
845 // good-manifest.com will not have been completed. 978 // good-manifest.com will not have been completed.
846 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), 979 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"),
847 ElementsAre(base::Bucket(0, 1))); 980 ElementsAre(base::Bucket(0, 1)));
848 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 981 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
849 } 982 }
850 983
851 } // namespace 984 } // namespace
852 985
853 } // namespace precache 986 } // namespace precache
OLDNEW
« no previous file with comments | « components/precache/core/precache_fetcher.cc ('k') | components/precache/core/proto/precache.proto » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698