diff options
author | jochen <jochen@chromium.org> | 2014-09-16 11:31:23 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-16 18:34:35 +0000 |
commit | 0e3b3a6c53b408ea11cdab0a46d12ea905782821 (patch) | |
tree | c4e90326961716fefcc174db5aa72490c6cbf5d6 /net/url_request/url_request.cc | |
parent | a337df3d8b29586e938948b0d53b2772baa0a4ad (diff) | |
download | chromium_src-0e3b3a6c53b408ea11cdab0a46d12ea905782821.zip chromium_src-0e3b3a6c53b408ea11cdab0a46d12ea905782821.tar.gz chromium_src-0e3b3a6c53b408ea11cdab0a46d12ea905782821.tar.bz2 |
Move handling of invalid referrer to the network delegate
We now always abort invalid loads. According to UMA, they don't happen
anymore, so this should only affect future bugs.
Also, move the UMA reporting to the right thread.
BUG=none
R=mmenke@chromium.org,mef@chromium.org,nasko@chromium.org
Review URL: https://codereview.chromium.org/572273002
Cr-Commit-Position: refs/heads/master@{#295107}
Diffstat (limited to 'net/url_request/url_request.cc')
-rw-r--r-- | net/url_request/url_request.cc | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc index 15b9ab7..3764488 100644 --- a/net/url_request/url_request.cc +++ b/net/url_request/url_request.cc @@ -13,7 +13,6 @@ #include "base/memory/singleton.h" #include "base/message_loop/message_loop.h" #include "base/metrics/stats_counters.h" -#include "base/metrics/user_metrics.h" #include "base/stl_util.h" #include "base/strings/utf_string_conversions.h" #include "base/synchronization/lock.h" @@ -691,12 +690,21 @@ void URLRequest::StartJob(URLRequestJob* job) { if (referrer_policy_ == CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE && GURL(referrer_).SchemeIsSecure() && !url().SchemeIsSecure()) { -#if !defined(OFFICIAL_BUILD) - LOG(FATAL) << "Trying to send secure referrer for insecure load"; -#endif - referrer_.clear(); - base::RecordAction( - base::UserMetricsAction("Net.URLRequest_StartJob_InvalidReferrer")); + if (!network_delegate_ || + !network_delegate_->CancelURLRequestWithPolicyViolatingReferrerHeader( + *this, url(), GURL(referrer_))) { + referrer_.clear(); + } else { + // We need to clear the referrer anyway to avoid an infinite recursion + // when starting the error job. + referrer_.clear(); + std::string source("delegate"); + net_log_.AddEvent(NetLog::TYPE_CANCELLED, + NetLog::StringCallback("source", &source)); + RestartWithJob(new URLRequestErrorJob( + this, network_delegate_, ERR_BLOCKED_BY_CLIENT)); + return; + } } // Don't allow errors to be sent from within Start(). |