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

Unified Diff: components/domain_reliability/monitor.cc

Issue 1180223006: Domain Reliability: Simplify configs and reports (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix memory leak in unittests Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: components/domain_reliability/monitor.cc
diff --git a/components/domain_reliability/monitor.cc b/components/domain_reliability/monitor.cc
index 0dfc01e7ab0e597472d4821eb7582fb98c8a54b8..3395d0594148f20972888181efb7f44da4d1abea 100644
--- a/components/domain_reliability/monitor.cc
+++ b/components/domain_reliability/monitor.cc
@@ -10,6 +10,8 @@
#include "base/single_thread_task_runner.h"
#include "base/task_runner.h"
#include "components/domain_reliability/baked_in_configs.h"
+#include "components/domain_reliability/google_configs.h"
+#include "net/base/ip_endpoint.h"
#include "net/base/load_flags.h"
#include "net/base/net_errors.h"
#include "net/base/net_util.h"
@@ -38,22 +40,30 @@ int URLRequestStatusToNetError(const net::URLRequestStatus& status) {
}
}
-// Updates the status, chrome_error, and server_ip fields of |beacon| from
-// the endpoint and result of |attempt|. If there is no matching status for
-// the result, returns false (which means the attempt should not result in a
-// beacon being reported).
-bool UpdateBeaconFromAttempt(DomainReliabilityBeacon* beacon,
- const net::ConnectionAttempt& attempt) {
+// Creates a new beacon based on |beacon_template| but fills in the status,
+// chrome_error, and server_ip fields based on the endpoint and result of
+// |attempt|.
+//
+// If there is no matching status for the result, returns false (which
+// means the attempt should not result in a beacon being reported).
+scoped_ptr<DomainReliabilityBeacon> CreateBeaconFromAttempt(
+ const DomainReliabilityBeacon& beacon_template,
+ const net::ConnectionAttempt& attempt) {
+ std::string status;
if (!GetDomainReliabilityBeaconStatus(
- attempt.result, beacon->http_response_code, &beacon->status)) {
- return false;
+ attempt.result, beacon_template.http_response_code, &status)) {
+ return scoped_ptr<DomainReliabilityBeacon>();
}
+
+ scoped_ptr<DomainReliabilityBeacon> beacon(
+ new DomainReliabilityBeacon(beacon_template));
+ beacon->status = status;
beacon->chrome_error = attempt.result;
if (!attempt.endpoint.address().empty())
beacon->server_ip = attempt.endpoint.ToString();
else
beacon->server_ip = "";
- return true;
+ return beacon.Pass();
}
} // namespace
@@ -147,10 +157,18 @@ void DomainReliabilityMonitor::AddBakedInConfigs() {
base::StringPiece json(kBakedInJsonConfigs[i]);
scoped_ptr<const DomainReliabilityConfig> config =
DomainReliabilityConfig::FromJSON(json);
- if (!config)
+ if (!config) {
+ DLOG(WARNING) << "Baked-in Domain Reliability config failed to parse: "
+ << json;
continue;
+ }
context_manager_.AddContextForConfig(config.Pass());
}
+
+ std::vector<DomainReliabilityConfig*> google_configs;
+ GetAllGoogleConfigs(&google_configs);
+ for (auto google_config : google_configs)
+ context_manager_.AddContextForConfig(make_scoped_ptr(google_config));
}
void DomainReliabilityMonitor::SetDiscardUploads(bool discard_uploads) {
@@ -293,15 +311,15 @@ void DomainReliabilityMonitor::OnRequestLegComplete(
net::ConnectionAttempt url_request_attempt(
request.remote_endpoint, URLRequestStatusToNetError(request.status));
- DomainReliabilityBeacon beacon;
- beacon.protocol = GetDomainReliabilityProtocol(
- request.response_info.connection_info,
- request.response_info.ssl_info.is_valid());
- beacon.http_response_code = response_code;
- beacon.start_time = request.load_timing_info.request_start;
- beacon.elapsed = time_->NowTicks() - beacon.start_time;
- beacon.was_proxied = request.response_info.was_fetched_via_proxy;
- beacon.domain = request.url.host();
+ DomainReliabilityBeacon beacon_template;
+ beacon_template.protocol =
+ GetDomainReliabilityProtocol(request.response_info.connection_info,
+ request.response_info.ssl_info.is_valid());
+ beacon_template.http_response_code = response_code;
+ beacon_template.start_time = request.load_timing_info.request_start;
+ beacon_template.elapsed = time_->NowTicks() - beacon_template.start_time;
+ beacon_template.was_proxied = request.response_info.was_fetched_via_proxy;
+ beacon_template.url = request.url;
// This is not foolproof -- it's possible that we'll see the same error twice
// (e.g. an SSL error during connection on one attempt, and then an error
@@ -312,16 +330,20 @@ void DomainReliabilityMonitor::OnRequestLegComplete(
for (const auto& attempt : request.connection_attempts) {
if (attempt.result == url_request_attempt.result)
url_request_attempt_is_duplicate = true;
- if (!UpdateBeaconFromAttempt(&beacon, attempt))
- continue;
- context_manager_.RouteBeacon(request.url, beacon);
+
+ scoped_ptr<DomainReliabilityBeacon> beacon =
+ CreateBeaconFromAttempt(beacon_template, attempt);
+ if (beacon)
+ context_manager_.RouteBeacon(beacon.Pass());
}
if (url_request_attempt_is_duplicate)
return;
- if (!UpdateBeaconFromAttempt(&beacon, url_request_attempt))
- return;
- context_manager_.RouteBeacon(request.url, beacon);
+
+ scoped_ptr<DomainReliabilityBeacon> beacon =
+ CreateBeaconFromAttempt(beacon_template, url_request_attempt);
+ if (beacon)
+ context_manager_.RouteBeacon(beacon.Pass());
}
base::WeakPtr<DomainReliabilityMonitor>
« no previous file with comments | « components/domain_reliability/google_configs_unittest.cc ('k') | components/domain_reliability/monitor_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698