diff options
author | zhongyi <zhongyi@chromium.org> | 2016-03-14 11:10:57 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-14 18:12:33 +0000 |
commit | 93fa5a95beaa9837dd0da8c9ab1f18026398f954 (patch) | |
tree | 1cb9c5072c9a1d41744e73312ac238b7614a9d1e | |
parent | d48b001a15427bbe162ab38ef2b40a78d9b85a03 (diff) | |
download | chromium_src-93fa5a95beaa9837dd0da8c9ab1f18026398f954.zip chromium_src-93fa5a95beaa9837dd0da8c9ab1f18026398f954.tar.gz chromium_src-93fa5a95beaa9837dd0da8c9ab1f18026398f954.tar.bz2 |
[Domain Reliability: Monitor] Report beacon if the go away is detected, regardless of request status.
BUG=593163
Review URL: https://codereview.chromium.org/1785143003
Cr-Commit-Position: refs/heads/master@{#381008}
-rw-r--r-- | components/domain_reliability/beacon.cc | 3 | ||||
-rw-r--r-- | components/domain_reliability/context.cc | 4 | ||||
-rw-r--r-- | components/domain_reliability/context_unittest.cc | 15 | ||||
-rw-r--r-- | components/domain_reliability/monitor.cc | 2 | ||||
-rw-r--r-- | components/domain_reliability/monitor_unittest.cc | 12 |
5 files changed, 30 insertions, 6 deletions
diff --git a/components/domain_reliability/beacon.cc b/components/domain_reliability/beacon.cc index 7d3c1bb..3e17666 100644 --- a/components/domain_reliability/beacon.cc +++ b/components/domain_reliability/beacon.cc @@ -43,6 +43,9 @@ scoped_ptr<Value> DomainReliabilityBeacon::ToValue( beacon_value->SetString("protocol", protocol); if (details.quic_broken) beacon_value->SetBoolean("quic_broken", details.quic_broken); + if (details.quic_port_migration_detected) + beacon_value->SetBoolean("quic_port_migration_detected", + details.quic_port_migration_detected); if (http_response_code >= 0) beacon_value->SetInteger("http_response_code", http_response_code); beacon_value->SetInteger("request_elapsed_ms", elapsed.InMilliseconds()); diff --git a/components/domain_reliability/context.cc b/components/domain_reliability/context.cc index 3dc324d..4d7c83e 100644 --- a/components/domain_reliability/context.cc +++ b/components/domain_reliability/context.cc @@ -70,7 +70,9 @@ DomainReliabilityContext::~DomainReliabilityContext() { void DomainReliabilityContext::OnBeacon( scoped_ptr<DomainReliabilityBeacon> beacon) { bool success = (beacon->status == "ok"); - double sample_rate = config().GetSampleRate(success); + double sample_rate = beacon->details.quic_port_migration_detected + ? 1.0 + : config().GetSampleRate(success); bool should_report = base::RandDouble() < sample_rate; UMA_HISTOGRAM_BOOLEAN("DomainReliability.BeaconReported", should_report); if (!should_report) { diff --git a/components/domain_reliability/context_unittest.cc b/components/domain_reliability/context_unittest.cc index 3c83b35..a54a176 100644 --- a/components/domain_reliability/context_unittest.cc +++ b/components/domain_reliability/context_unittest.cc @@ -33,7 +33,8 @@ typedef std::vector<const DomainReliabilityBeacon*> BeaconVector; scoped_ptr<DomainReliabilityBeacon> MakeCustomizedBeacon( MockableTime* time, std::string status, - std::string quic_error) { + std::string quic_error, + bool quic_port_migration_detected) { scoped_ptr<DomainReliabilityBeacon> beacon(new DomainReliabilityBeacon()); beacon->url = GURL("https://localhost/"); beacon->status = status; @@ -43,6 +44,7 @@ scoped_ptr<DomainReliabilityBeacon> MakeCustomizedBeacon( beacon->was_proxied = false; beacon->protocol = "HTTP"; beacon->details.quic_broken = true; + beacon->details.quic_port_migration_detected = quic_port_migration_detected; beacon->http_response_code = -1; beacon->elapsed = base::TimeDelta::FromMilliseconds(250); beacon->start_time = time->NowTicks() - beacon->elapsed; @@ -52,7 +54,7 @@ scoped_ptr<DomainReliabilityBeacon> MakeCustomizedBeacon( } scoped_ptr<DomainReliabilityBeacon> MakeBeacon(MockableTime* time) { - return MakeCustomizedBeacon(time, "tcp.connection_reset", ""); + return MakeCustomizedBeacon(time, "tcp.connection_reset", "", false); } template <typename ValueType, @@ -255,7 +257,8 @@ TEST_F(DomainReliabilityContextTest, TEST_F(DomainReliabilityContextTest, ReportUpload) { InitContext(MakeTestConfig()); - context_->OnBeacon(MakeBeacon(&time_)); + context_->OnBeacon( + MakeCustomizedBeacon(&time_, "tcp.connection_reset", "", true)); BeaconVector beacons; context_->GetQueuedBeaconsForTesting(&beacons); @@ -274,6 +277,7 @@ TEST_F(DomainReliabilityContextTest, ReportUpload) { EXPECT_TRUE(HasBooleanValue(*entry, "network_changed", false)); EXPECT_TRUE(HasStringValue(*entry, "protocol", "HTTP")); EXPECT_TRUE(HasBooleanValue(*entry, "quic_broken", true)); + EXPECT_TRUE(HasBooleanValue(*entry, "quic_port_migration_detected", true)); // N.B.: Assumes max_delay is 5 minutes. EXPECT_TRUE(HasIntegerValue(*entry, "request_age_ms", 300250)); EXPECT_TRUE(HasIntegerValue(*entry, "request_elapsed_ms", 250)); @@ -322,7 +326,7 @@ TEST_F(DomainReliabilityContextTest, ReportUploadWithQuicProtocolErrorAndQuicError) { InitContext(MakeTestConfig()); context_->OnBeacon(MakeCustomizedBeacon(&time_, "quic.protocol", - "quic.invalid.stream_data")); + "quic.invalid.stream_data", true)); BeaconVector beacons; context_->GetQueuedBeaconsForTesting(&beacons); @@ -338,6 +342,7 @@ TEST_F(DomainReliabilityContextTest, ASSERT_TRUE(GetEntryFromReport(value.get(), 0, &entry)); EXPECT_TRUE(HasBooleanValue(*entry, "quic_broken", true)); + EXPECT_TRUE(HasBooleanValue(*entry, "quic_port_migration_detected", true)); EXPECT_TRUE(HasStringValue(*entry, "status", "quic.protocol")); EXPECT_TRUE(HasStringValue(*entry, "quic_error", "quic.invalid.stream_data")); @@ -384,7 +389,7 @@ TEST_F(DomainReliabilityContextTest, ReportUploadWithNonQuicProtocolErrorAndQuicError) { InitContext(MakeTestConfig()); context_->OnBeacon(MakeCustomizedBeacon(&time_, "tcp.connection_reset", - "quic.invalid.stream_data")); + "quic.invalid.stream_data", false)); BeaconVector beacons; context_->GetQueuedBeaconsForTesting(&beacons); diff --git a/components/domain_reliability/monitor.cc b/components/domain_reliability/monitor.cc index a8d87d4..2fdafad 100644 --- a/components/domain_reliability/monitor.cc +++ b/components/domain_reliability/monitor.cc @@ -294,6 +294,8 @@ bool DomainReliabilityMonitor::RequestInfo::ShouldReportRequest( return true; if (URLRequestStatusToNetError(request.status) != net::OK) return true; + if (request.details.quic_port_migration_detected) + return true; return false; } diff --git a/components/domain_reliability/monitor_unittest.cc b/components/domain_reliability/monitor_unittest.cc index 90ad186..ac9c7f2 100644 --- a/components/domain_reliability/monitor_unittest.cc +++ b/components/domain_reliability/monitor_unittest.cc @@ -133,6 +133,18 @@ TEST_F(DomainReliabilityMonitorTest, NetworkFailure) { EXPECT_EQ(1u, CountQueuedBeacons(context)); } +TEST_F(DomainReliabilityMonitorTest, GoAwayWithPortMigrationDetected) { + DomainReliabilityContext* context = CreateAndAddContext(); + + RequestInfo request = MakeRequestInfo(); + request.url = GURL("http://example/"); + request.details.quic_port_migration_detected = true; + request.response_info.headers = nullptr; + OnRequestLegComplete(request); + + EXPECT_EQ(1u, CountQueuedBeacons(context)); +} + TEST_F(DomainReliabilityMonitorTest, ServerFailure) { DomainReliabilityContext* context = CreateAndAddContext(); |