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

Unified Diff: components/domain_reliability/monitor.cc

Issue 267633002: Domain Reliability: Don't send proxy address, other fixes (Closed) Base URL: http://git.chromium.org/chromium/src.git@domrel_security
Patch Set: Include https://codereview.chromium.org/271593002/ Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/domain_reliability/monitor.h ('k') | components/domain_reliability/monitor_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/domain_reliability/monitor.cc
diff --git a/components/domain_reliability/monitor.cc b/components/domain_reliability/monitor.cc
index 29b276d50630a62b9e2bcce20c1583e2ddc044f0..d09aa217f610c8cd936b604df8dd8bb221988161 100644
--- a/components/domain_reliability/monitor.cc
+++ b/components/domain_reliability/monitor.cc
@@ -12,6 +12,7 @@
#include "components/domain_reliability/baked_in_configs.h"
#include "content/public/browser/browser_thread.h"
#include "net/base/load_flags.h"
+#include "net/http/http_response_headers.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_getter.h"
@@ -122,7 +123,7 @@ void DomainReliabilityMonitor::OnCompleted(net::URLRequest* request,
if (!started)
return;
RequestInfo request_info(*request);
- if (request_info.DefinitelyReachedNetwork()) {
+ if (request_info.AccessedNetwork()) {
OnRequestLegComplete(request_info);
// A request was just using the network, so now is a good time to run any
// pending and eligible uploads.
@@ -141,21 +142,17 @@ DomainReliabilityMonitor::RequestInfo::RequestInfo(
const net::URLRequest& request)
: url(request.url()),
status(request.status()),
- response_code(-1),
- socket_address(request.GetSocketAddress()),
- was_cached(request.was_cached()),
+ response_info(request.response_info()),
load_flags(request.load_flags()),
is_upload(DomainReliabilityUploader::URLRequestIsUpload(request)) {
request.GetLoadTimingInfo(&load_timing_info);
- // Can't get response code of a canceled request -- there's no transaction.
- if (status.status() != net::URLRequestStatus::CANCELED)
- response_code = request.GetResponseCode();
}
DomainReliabilityMonitor::RequestInfo::~RequestInfo() {}
-bool DomainReliabilityMonitor::RequestInfo::DefinitelyReachedNetwork() const {
- return status.status() != net::URLRequestStatus::CANCELED && !was_cached;
+bool DomainReliabilityMonitor::RequestInfo::AccessedNetwork() const {
+ return status.status() != net::URLRequestStatus::CANCELED &&
+ response_info.network_accessed;
}
DomainReliabilityContext* DomainReliabilityMonitor::AddContext(
@@ -184,41 +181,42 @@ DomainReliabilityContext* DomainReliabilityMonitor::AddContext(
void DomainReliabilityMonitor::OnRequestLegComplete(
const RequestInfo& request) {
- if (!request.DefinitelyReachedNetwork())
- return;
-
- // Don't monitor requests that are not sending cookies, since sending a beacon
- // for such requests may allow the server to correlate that request with the
- // user (by correlating a particular config).
- if (request.load_flags & net::LOAD_DO_NOT_SEND_COOKIES)
- return;
-
- // Don't monitor requests that were, themselves, Domain Reliability uploads,
- // to avoid infinite chains of uploads.
- if (request.is_upload)
- return;
-
- ContextMap::iterator it = contexts_.find(request.url.host());
- if (it == contexts_.end())
- return;
- DomainReliabilityContext* context = it->second;
-
+ int response_code;
+ if (request.response_info.headers)
+ response_code = request.response_info.headers->response_code();
+ else
+ response_code = -1;
+ ContextMap::iterator context_it;
std::string beacon_status;
- bool got_status = GetDomainReliabilityBeaconStatus(
- request.status.error(),
- request.response_code,
- &beacon_status);
- if (!got_status)
+
+ // Ignore requests where:
+ // 1. There is no context for the request host.
+ // 2. The request did not access the network.
+ // 3. The request is not supposed to send cookies (to avoid associating the
+ // request with any potentially unique data in the config).
+ // 4. The request was itself a Domain Reliability upload (to avoid loops).
+ // 5. There is no defined beacon status for the error or HTTP response code
+ // (to avoid leaking network-local errors).
+ if ((context_it = contexts_.find(request.url.host())) == contexts_.end() ||
+ !request.AccessedNetwork() ||
+ (request.load_flags & net::LOAD_DO_NOT_SEND_COOKIES) ||
+ request.is_upload ||
+ !GetDomainReliabilityBeaconStatus(
+ request.status.error(), response_code, &beacon_status)) {
return;
+ }
DomainReliabilityBeacon beacon;
beacon.status = beacon_status;
beacon.chrome_error = request.status.error();
- beacon.server_ip = request.socket_address.host();
- beacon.http_response_code = request.response_code;
+ if (!request.response_info.was_fetched_via_proxy)
+ beacon.server_ip = request.response_info.socket_address.host();
+ else
+ beacon.server_ip.clear();
+ beacon.http_response_code = response_code;
beacon.start_time = request.load_timing_info.request_start;
beacon.elapsed = time_->NowTicks() - beacon.start_time;
- context->OnBeacon(request.url, beacon);
+ context_it->second->OnBeacon(request.url, beacon);
}
} // namespace domain_reliability
« no previous file with comments | « components/domain_reliability/monitor.h ('k') | components/domain_reliability/monitor_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698