summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzhongyi <zhongyi@chromium.org>2016-03-14 11:10:57 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-14 18:12:33 +0000
commit93fa5a95beaa9837dd0da8c9ab1f18026398f954 (patch)
tree1cb9c5072c9a1d41744e73312ac238b7614a9d1e
parentd48b001a15427bbe162ab38ef2b40a78d9b85a03 (diff)
downloadchromium_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.cc3
-rw-r--r--components/domain_reliability/context.cc4
-rw-r--r--components/domain_reliability/context_unittest.cc15
-rw-r--r--components/domain_reliability/monitor.cc2
-rw-r--r--components/domain_reliability/monitor_unittest.cc12
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();