summaryrefslogtreecommitdiffstats
path: root/net/url_request/url_request.cc
diff options
context:
space:
mode:
authorjochen <jochen@chromium.org>2014-09-16 11:31:23 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-16 18:34:35 +0000
commit0e3b3a6c53b408ea11cdab0a46d12ea905782821 (patch)
treec4e90326961716fefcc174db5aa72490c6cbf5d6 /net/url_request/url_request.cc
parenta337df3d8b29586e938948b0d53b2772baa0a4ad (diff)
downloadchromium_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.cc22
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().