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

Side by Side Diff: components/network_time/network_time_tracker_unittest.cc

Issue 2176373003: Add NetworkTimeTracker UMA histograms (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: mab comments Created 4 years, 4 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/network_time/network_time_tracker.h" 5 #include "components/network_time/network_time_tracker.h"
6 6
7 #include <map> 7 #include <map>
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
11 11
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/feature_list.h" 13 #include "base/feature_list.h"
14 #include "base/metrics/field_trial.h" 14 #include "base/metrics/field_trial.h"
15 #include "base/strings/string_number_conversions.h" 15 #include "base/strings/string_number_conversions.h"
16 #include "base/strings/stringprintf.h" 16 #include "base/strings/stringprintf.h"
17 #include "base/test/histogram_tester.h"
17 #include "base/test/mock_entropy_provider.h" 18 #include "base/test/mock_entropy_provider.h"
18 #include "base/test/simple_test_clock.h" 19 #include "base/test/simple_test_clock.h"
19 #include "base/test/simple_test_tick_clock.h" 20 #include "base/test/simple_test_tick_clock.h"
20 #include "components/client_update_protocol/ecdsa.h" 21 #include "components/client_update_protocol/ecdsa.h"
21 #include "components/network_time/network_time_pref_names.h" 22 #include "components/network_time/network_time_pref_names.h"
22 #include "components/prefs/testing_pref_service.h" 23 #include "components/prefs/testing_pref_service.h"
23 #include "components/variations/variations_associated_data.h" 24 #include "components/variations/variations_associated_data.h"
24 #include "net/http/http_response_headers.h" 25 #include "net/http/http_response_headers.h"
25 #include "net/test/embedded_test_server/embedded_test_server.h" 26 #include "net/test/embedded_test_server/embedded_test_server.h"
26 #include "net/test/embedded_test_server/http_response.h" 27 #include "net/test/embedded_test_server/http_response.h"
27 #include "net/url_request/url_fetcher.h" 28 #include "net/url_request/url_fetcher.h"
28 #include "net/url_request/url_request_test_util.h" 29 #include "net/url_request/url_request_test_util.h"
29 #include "testing/gtest/include/gtest/gtest.h" 30 #include "testing/gtest/include/gtest/gtest.h"
30 31
31 namespace network_time { 32 namespace network_time {
32 33
34 namespace {
35 const char kFetchAttemptHistogram[] =
36 "NetworkTimeTracker.UpdateTimeFetchAttempted";
37 const char kFetchFailedHistogram[] = "NetworkTimeTracker.UpdateTimeFetchFailed";
38 const char kFetchValidHistogram[] = "NetworkTimeTracker.UpdateTimeFetchValid";
39 } // namespace
40
33 class NetworkTimeTrackerTest : public testing::Test { 41 class NetworkTimeTrackerTest : public testing::Test {
34 public: 42 public:
35 ~NetworkTimeTrackerTest() override {} 43 ~NetworkTimeTrackerTest() override {}
36 44
37 NetworkTimeTrackerTest() 45 NetworkTimeTrackerTest()
38 : io_thread_("IO thread"), 46 : io_thread_("IO thread"),
39 clock_(new base::SimpleTestClock), 47 clock_(new base::SimpleTestClock),
40 tick_clock_(new base::SimpleTestTickClock), 48 tick_clock_(new base::SimpleTestTickClock),
41 test_server_(new net::EmbeddedTestServer) { 49 test_server_(new net::EmbeddedTestServer) {
42 base::Thread::Options thread_options; 50 base::Thread::Options thread_options;
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 tick_clock_->NowTicks()); 435 tick_clock_->NowTicks());
428 436
429 base::Time out_network_time; 437 base::Time out_network_time;
430 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 438 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr));
431 clock_->Advance(base::TimeDelta::FromDays(1)); 439 clock_->Advance(base::TimeDelta::FromDays(1));
432 Reset(); 440 Reset();
433 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 441 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
434 } 442 }
435 443
436 TEST_F(NetworkTimeTrackerTest, UpdateFromNetwork) { 444 TEST_F(NetworkTimeTrackerTest, UpdateFromNetwork) {
445 base::HistogramTester histograms;
446 histograms.ExpectTotalCount(kFetchAttemptHistogram, 0);
447 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
448 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
449
437 base::Time out_network_time; 450 base::Time out_network_time;
438 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 451 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
439 // First query should happen soon. 452 // First query should happen soon.
440 EXPECT_EQ(base::TimeDelta::FromMinutes(0), 453 EXPECT_EQ(base::TimeDelta::FromMinutes(0),
441 tracker_->GetTimerDelayForTesting()); 454 tracker_->GetTimerDelayForTesting());
442 455
443 test_server_->RegisterRequestHandler( 456 test_server_->RegisterRequestHandler(
444 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler)); 457 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler));
445 EXPECT_TRUE(test_server_->Start()); 458 EXPECT_TRUE(test_server_->Start());
446 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 459 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
447 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 460 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
448 tracker_->WaitForFetchForTesting(123123123); 461 tracker_->WaitForFetchForTesting(123123123);
449 462
450 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 463 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr));
451 EXPECT_EQ(base::Time::UnixEpoch() + 464 EXPECT_EQ(base::Time::UnixEpoch() +
452 base::TimeDelta::FromMilliseconds(1461621971825), 465 base::TimeDelta::FromMilliseconds(1461621971825),
453 out_network_time); 466 out_network_time);
454 // Should see no backoff in the success case. 467 // Should see no backoff in the success case.
455 EXPECT_EQ(base::TimeDelta::FromMinutes(60), 468 EXPECT_EQ(base::TimeDelta::FromMinutes(60),
456 tracker_->GetTimerDelayForTesting()); 469 tracker_->GetTimerDelayForTesting());
470
471 histograms.ExpectTotalCount(kFetchAttemptHistogram, 1);
472 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
473 histograms.ExpectTotalCount(kFetchValidHistogram, 1);
474 histograms.ExpectBucketCount(kFetchValidHistogram, true, 1);
457 } 475 }
458 476
459 TEST_F(NetworkTimeTrackerTest, NoNetworkQueryWhileSynced) { 477 TEST_F(NetworkTimeTrackerTest, NoNetworkQueryWhileSynced) {
460 test_server_->RegisterRequestHandler( 478 test_server_->RegisterRequestHandler(
461 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler)); 479 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler));
462 EXPECT_TRUE(test_server_->Start()); 480 EXPECT_TRUE(test_server_->Start());
463 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 481 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
464 482
465 SetNetworkQueriesWithVariationsService(true, 0.0); 483 SetNetworkQueriesWithVariationsService(true, 0.0);
466 base::Time in_network_time = clock_->Now(); 484 base::Time in_network_time = clock_->Now();
(...skipping 20 matching lines...) Expand all
487 EXPECT_EQ(base::TimeDelta::FromMinutes(6), 505 EXPECT_EQ(base::TimeDelta::FromMinutes(6),
488 tracker_->GetTimerDelayForTesting()); 506 tracker_->GetTimerDelayForTesting());
489 507
490 // Enable time queries and check that a query is sent. 508 // Enable time queries and check that a query is sent.
491 SetNetworkQueriesWithVariationsService(true, 0.0); 509 SetNetworkQueriesWithVariationsService(true, 0.0);
492 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 510 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
493 tracker_->WaitForFetchForTesting(123123123); 511 tracker_->WaitForFetchForTesting(123123123);
494 } 512 }
495 513
496 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkBadSignature) { 514 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkBadSignature) {
515 base::HistogramTester histograms;
516 histograms.ExpectTotalCount(kFetchAttemptHistogram, 0);
517 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
518 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
519
497 test_server_->RegisterRequestHandler( 520 test_server_->RegisterRequestHandler(
498 base::Bind(&NetworkTimeTrackerTest::BadSignatureResponseHandler)); 521 base::Bind(&NetworkTimeTrackerTest::BadSignatureResponseHandler));
499 EXPECT_TRUE(test_server_->Start()); 522 EXPECT_TRUE(test_server_->Start());
500 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 523 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
501 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 524 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
502 tracker_->WaitForFetchForTesting(123123123); 525 tracker_->WaitForFetchForTesting(123123123);
503 526
504 base::Time out_network_time; 527 base::Time out_network_time;
505 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 528 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
506 EXPECT_EQ(base::TimeDelta::FromMinutes(120), 529 EXPECT_EQ(base::TimeDelta::FromMinutes(120),
507 tracker_->GetTimerDelayForTesting()); 530 tracker_->GetTimerDelayForTesting());
531
532 histograms.ExpectTotalCount(kFetchAttemptHistogram, 1);
533 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
534 histograms.ExpectTotalCount(kFetchValidHistogram, 1);
535 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1);
508 } 536 }
509 537
510 static const uint8_t kDevKeyPubBytes[] = { 538 static const uint8_t kDevKeyPubBytes[] = {
511 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 539 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
512 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 540 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
513 0x42, 0x00, 0x04, 0xe0, 0x6b, 0x0d, 0x76, 0x75, 0xa3, 0x99, 0x7d, 0x7c, 541 0x42, 0x00, 0x04, 0xe0, 0x6b, 0x0d, 0x76, 0x75, 0xa3, 0x99, 0x7d, 0x7c,
514 0x1b, 0xd6, 0x3c, 0x73, 0xbb, 0x4b, 0xfe, 0x0a, 0xe7, 0x2f, 0x61, 0x3d, 542 0x1b, 0xd6, 0x3c, 0x73, 0xbb, 0x4b, 0xfe, 0x0a, 0xe7, 0x2f, 0x61, 0x3d,
515 0x77, 0x0a, 0xaa, 0x14, 0xd8, 0x5a, 0xbf, 0x14, 0x60, 0xec, 0xf6, 0x32, 543 0x77, 0x0a, 0xaa, 0x14, 0xd8, 0x5a, 0xbf, 0x14, 0x60, 0xec, 0xf6, 0x32,
516 0x77, 0xb5, 0xa7, 0xe6, 0x35, 0xa5, 0x61, 0xaf, 0xdc, 0xdf, 0x91, 0xce, 544 0x77, 0xb5, 0xa7, 0xe6, 0x35, 0xa5, 0x61, 0xaf, 0xdc, 0xdf, 0x91, 0xce,
517 0x45, 0x34, 0x5f, 0x36, 0x85, 0x2f, 0xb9, 0x53, 0x00, 0x5d, 0x86, 0xe7, 545 0x45, 0x34, 0x5f, 0x36, 0x85, 0x2f, 0xb9, 0x53, 0x00, 0x5d, 0x86, 0xe7,
518 0x04, 0x16, 0xe2, 0x3d, 0x21, 0x76, 0x2b}; 546 0x04, 0x16, 0xe2, 0x3d, 0x21, 0x76, 0x2b};
519 547
520 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkBadData) { 548 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkBadData) {
549 base::HistogramTester histograms;
550 histograms.ExpectTotalCount(kFetchAttemptHistogram, 0);
551 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
552 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
553
521 test_server_->RegisterRequestHandler( 554 test_server_->RegisterRequestHandler(
522 base::Bind(&NetworkTimeTrackerTest::BadDataResponseHandler)); 555 base::Bind(&NetworkTimeTrackerTest::BadDataResponseHandler));
523 EXPECT_TRUE(test_server_->Start()); 556 EXPECT_TRUE(test_server_->Start());
524 base::StringPiece key = {reinterpret_cast<const char*>(kDevKeyPubBytes), 557 base::StringPiece key = {reinterpret_cast<const char*>(kDevKeyPubBytes),
525 sizeof(kDevKeyPubBytes)}; 558 sizeof(kDevKeyPubBytes)};
526 tracker_->SetPublicKeyForTesting(key); 559 tracker_->SetPublicKeyForTesting(key);
527 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 560 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
528 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 561 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
529 tracker_->WaitForFetchForTesting(123123123); 562 tracker_->WaitForFetchForTesting(123123123);
530 base::Time out_network_time; 563 base::Time out_network_time;
531 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 564 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
532 EXPECT_EQ(base::TimeDelta::FromMinutes(120), 565 EXPECT_EQ(base::TimeDelta::FromMinutes(120),
533 tracker_->GetTimerDelayForTesting()); 566 tracker_->GetTimerDelayForTesting());
567
568 histograms.ExpectTotalCount(kFetchAttemptHistogram, 1);
569 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
570 histograms.ExpectTotalCount(kFetchValidHistogram, 1);
571 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1);
534 } 572 }
535 573
536 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkServerError) { 574 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkServerError) {
575 base::HistogramTester histograms;
576 histograms.ExpectTotalCount(kFetchAttemptHistogram, 0);
577 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
578 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
579
537 test_server_->RegisterRequestHandler( 580 test_server_->RegisterRequestHandler(
538 base::Bind(&NetworkTimeTrackerTest::ServerErrorResponseHandler)); 581 base::Bind(&NetworkTimeTrackerTest::ServerErrorResponseHandler));
539 EXPECT_TRUE(test_server_->Start()); 582 EXPECT_TRUE(test_server_->Start());
540 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 583 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
541 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 584 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
542 tracker_->WaitForFetchForTesting(123123123); 585 tracker_->WaitForFetchForTesting(123123123);
543 586
544 base::Time out_network_time; 587 base::Time out_network_time;
545 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 588 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
546 // Should see backoff in the error case. 589 // Should see backoff in the error case.
547 EXPECT_EQ(base::TimeDelta::FromMinutes(120), 590 EXPECT_EQ(base::TimeDelta::FromMinutes(120),
548 tracker_->GetTimerDelayForTesting()); 591 tracker_->GetTimerDelayForTesting());
592
593 histograms.ExpectTotalCount(kFetchAttemptHistogram, 1);
594 histograms.ExpectTotalCount(kFetchFailedHistogram, 1);
595 histograms.ExpectBucketCount(kFetchFailedHistogram, net::OK, 1);
596 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
549 } 597 }
550 598
551 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworNetworkError) { 599 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkNetworkError) {
600 base::HistogramTester histograms;
601 histograms.ExpectTotalCount(kFetchAttemptHistogram, 0);
602 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
603 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
604
552 test_server_->RegisterRequestHandler( 605 test_server_->RegisterRequestHandler(
553 base::Bind(&NetworkTimeTrackerTest::NetworkErrorResponseHandler)); 606 base::Bind(&NetworkTimeTrackerTest::NetworkErrorResponseHandler));
554 EXPECT_TRUE(test_server_->Start()); 607 EXPECT_TRUE(test_server_->Start());
555 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 608 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
556 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 609 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
557 tracker_->WaitForFetchForTesting(123123123); 610 tracker_->WaitForFetchForTesting(123123123);
558 611
559 base::Time out_network_time; 612 base::Time out_network_time;
560 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 613 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
561 // Should see backoff in the error case. 614 // Should see backoff in the error case.
562 EXPECT_EQ(base::TimeDelta::FromMinutes(120), 615 EXPECT_EQ(base::TimeDelta::FromMinutes(120),
563 tracker_->GetTimerDelayForTesting()); 616 tracker_->GetTimerDelayForTesting());
617
618 histograms.ExpectTotalCount(kFetchAttemptHistogram, 1);
619 histograms.ExpectTotalCount(kFetchFailedHistogram, 1);
620 histograms.ExpectBucketCount(kFetchFailedHistogram, -net::ERR_EMPTY_RESPONSE,
621 1);
622 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
564 } 623 }
565 624
566 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkLargeResponse) { 625 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkLargeResponse) {
626 base::HistogramTester histograms;
627 histograms.ExpectTotalCount(kFetchAttemptHistogram, 0);
628 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
629 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
630
567 test_server_->RegisterRequestHandler( 631 test_server_->RegisterRequestHandler(
568 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler)); 632 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler));
569 EXPECT_TRUE(test_server_->Start()); 633 EXPECT_TRUE(test_server_->Start());
570 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 634 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
571 635
572 base::Time out_network_time; 636 base::Time out_network_time;
573 637
574 tracker_->SetMaxResponseSizeForTesting(3); 638 tracker_->SetMaxResponseSizeForTesting(3);
575 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 639 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
576 tracker_->WaitForFetchForTesting(123123123); 640 tracker_->WaitForFetchForTesting(123123123);
577 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 641 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
578 642
643 histograms.ExpectTotalCount(kFetchAttemptHistogram, 1);
644 histograms.ExpectTotalCount(kFetchFailedHistogram, 1);
645 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
646
579 tracker_->SetMaxResponseSizeForTesting(1024); 647 tracker_->SetMaxResponseSizeForTesting(1024);
580 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 648 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
581 tracker_->WaitForFetchForTesting(123123123); 649 tracker_->WaitForFetchForTesting(123123123);
582 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 650 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr));
651
652 histograms.ExpectTotalCount(kFetchAttemptHistogram, 2);
653 histograms.ExpectTotalCount(kFetchFailedHistogram, 1);
654 histograms.ExpectTotalCount(kFetchValidHistogram, 1);
655 histograms.ExpectBucketCount(kFetchValidHistogram, true, 1);
583 } 656 }
584 657
585 } // namespace network_time 658 } // namespace network_time
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698