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

Unified Diff: net/url_request/url_request.cc

Issue 398903002: Plumb redirect info out of net, through content, and into child processes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add a TODO Created 6 years, 5 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
Index: net/url_request/url_request.cc
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
index 5466be1b58943f2dd311a8faf190581b7e25b4d8..72397e99d83d1dae5702d4d0052b58960fbf280a 100644
--- a/net/url_request/url_request.cc
+++ b/net/url_request/url_request.cc
@@ -30,6 +30,7 @@
#include "net/http/http_response_headers.h"
#include "net/http/http_util.h"
#include "net/ssl/ssl_cert_request_info.h"
+#include "net/url_request/redirect_info.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_error_job.h"
#include "net/url_request/url_request_job.h"
@@ -169,7 +170,7 @@ URLRequestJob* URLRequest::Interceptor::MaybeInterceptResponse(
// URLRequest::Delegate
void URLRequest::Delegate::OnReceivedRedirect(URLRequest* request,
- const GURL& new_url,
+ const RedirectInfo& redirect_info,
bool* defer_redirect) {
}
@@ -259,6 +260,7 @@ void URLRequest::Init(const GURL& url,
url_chain_.push_back(url);
method_ = "GET";
referrer_policy_ = CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE;
+ first_party_url_policy_ = NEVER_CHANGE_FIRST_PARTY_URL;
load_flags_ = LOAD_NORMAL;
delegate_ = delegate;
is_pending_ = false;
@@ -563,9 +565,16 @@ bool URLRequest::IsHandledURL(const GURL& url) {
void URLRequest::set_first_party_for_cookies(
const GURL& first_party_for_cookies) {
+ DCHECK(!is_pending_);
first_party_for_cookies_ = first_party_for_cookies;
}
+void URLRequest::set_first_party_url_policy(
+ FirstPartyURLPolicy first_party_url_policy) {
+ DCHECK(!is_pending_);
+ first_party_url_policy_ = first_party_url_policy;
+}
+
void URLRequest::set_method(const std::string& method) {
DCHECK(!is_pending_);
method_ = method;
@@ -822,18 +831,19 @@ void URLRequest::StopCaching() {
job_->StopCaching();
}
-void URLRequest::NotifyReceivedRedirect(const GURL& location,
+void URLRequest::NotifyReceivedRedirect(const RedirectInfo& redirect_info,
bool* defer_redirect) {
is_redirecting_ = true;
+ // TODO(davidben): Pass the full RedirectInfo down to MaybeInterceptRedirect?
URLRequestJob* job =
URLRequestJobManager::GetInstance()->MaybeInterceptRedirect(
- this, network_delegate_, location);
+ this, network_delegate_, redirect_info.url);
if (job) {
RestartWithJob(job);
} else if (delegate_) {
OnCallToDelegate();
- delegate_->OnReceivedRedirect(this, location, defer_redirect);
+ delegate_->OnReceivedRedirect(this, redirect_info, defer_redirect);
// |this| may be have been destroyed here.
}
}
@@ -956,27 +966,29 @@ void URLRequest::OrphanJob() {
job_ = NULL;
}
-int URLRequest::Redirect(const GURL& location, int http_status_code) {
+int URLRequest::Redirect(const RedirectInfo& redirect_info) {
// Matches call in NotifyReceivedRedirect.
OnCallToDelegateComplete();
if (net_log_.IsLogging()) {
net_log_.AddEvent(
NetLog::TYPE_URL_REQUEST_REDIRECTED,
- NetLog::StringCallback("location", &location.possibly_invalid_spec()));
+ NetLog::StringCallback("location",
+ &redirect_info.url.possibly_invalid_spec()));
}
+ // TODO(davidben): Pass the full RedirectInfo to the NetworkDelegate.
if (network_delegate_)
- network_delegate_->NotifyBeforeRedirect(this, location);
+ network_delegate_->NotifyBeforeRedirect(this, redirect_info.url);
if (redirect_limit_ <= 0) {
DVLOG(1) << "disallowing redirect: exceeds limit";
return ERR_TOO_MANY_REDIRECTS;
}
- if (!location.is_valid())
+ if (!redirect_info.url.is_valid())
return ERR_INVALID_URL;
- if (!job_->IsSafeRedirect(location)) {
+ if (!job_->IsSafeRedirect(redirect_info.url)) {
DVLOG(1) << "disallowing redirect: unsafe protocol";
return ERR_UNSAFE_REDIRECT;
}
@@ -985,8 +997,8 @@ int URLRequest::Redirect(const GURL& location, int http_status_code) {
final_upload_progress_ = job_->GetUploadProgress();
PrepareToRestart();
- std::string new_method(ComputeMethodForRedirect(method_, http_status_code));
- if (new_method != method_) {
+ if (redirect_info.method != method_) {
+ // TODO(davidben): This logic still needs to be replicated at the consumers.
if (method_ == "POST") {
// If being switched from POST, must remove headers that were specific to
// the POST and don't have meaning in other methods. For example the
@@ -996,17 +1008,13 @@ int URLRequest::Redirect(const GURL& location, int http_status_code) {
StripPostSpecificHeaders(&extra_request_headers_);
}
upload_data_stream_.reset();
- method_.swap(new_method);
+ method_ = redirect_info.method;
}
- // Suppress the referrer if we're redirecting out of https.
- if (referrer_policy_ ==
- CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE &&
- GURL(referrer_).SchemeIsSecure() && !location.SchemeIsSecure()) {
- referrer_.clear();
- }
+ referrer_ = redirect_info.referrer;
+ first_party_for_cookies_ = redirect_info.first_party_for_cookies;
- url_chain_.push_back(location);
+ url_chain_.push_back(redirect_info.url);
--redirect_limit_;
Start();

Powered by Google App Engine
This is Rietveld 408576698