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

Side by Side Diff: net/url_request/url_request_http_job.cc

Issue 122453002: Allows deferral of a URLRequest just before talking to the network, at (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated content-length in test to actual length Created 6 years, 11 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 unified diff | Download patch
« no previous file with comments | « net/url_request/url_request_http_job.h ('k') | net/url_request/url_request_job.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/url_request/url_request_http_job.h" 5 #include "net/url_request/url_request_http_job.h"
6 6
7 #include "base/base_switches.h" 7 #include "base/base_switches.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 407
408 if (transaction_.get()) { 408 if (transaction_.get()) {
409 rv = transaction_->RestartWithAuth(auth_credentials_, start_callback_); 409 rv = transaction_->RestartWithAuth(auth_credentials_, start_callback_);
410 auth_credentials_ = AuthCredentials(); 410 auth_credentials_ = AuthCredentials();
411 } else { 411 } else {
412 DCHECK(request_->context()->http_transaction_factory()); 412 DCHECK(request_->context()->http_transaction_factory());
413 413
414 rv = request_->context()->http_transaction_factory()->CreateTransaction( 414 rv = request_->context()->http_transaction_factory()->CreateTransaction(
415 priority_, &transaction_); 415 priority_, &transaction_);
416 416
417 transaction_->SetBeforeNetworkStartCallback(base::Bind(
418 &URLRequestHttpJob::NotifyBeforeNetworkStart, base::Unretained(this)));
419
417 if (rv == OK && request_info_.url.SchemeIsWSOrWSS()) { 420 if (rv == OK && request_info_.url.SchemeIsWSOrWSS()) {
418 // TODO(ricea): Implement WebSocket throttling semantics as defined in 421 // TODO(ricea): Implement WebSocket throttling semantics as defined in
419 // RFC6455 Section 4.1. 422 // RFC6455 Section 4.1.
420 base::SupportsUserData::Data* data = request_->GetUserData( 423 base::SupportsUserData::Data* data = request_->GetUserData(
421 WebSocketHandshakeStreamBase::CreateHelper::DataKey()); 424 WebSocketHandshakeStreamBase::CreateHelper::DataKey());
422 if (data) { 425 if (data) {
423 transaction_->SetWebSocketHandshakeStreamCreateHelper( 426 transaction_->SetWebSocketHandshakeStreamCreateHelper(
424 static_cast<WebSocketHandshakeStreamBase::CreateHelper*>(data)); 427 static_cast<WebSocketHandshakeStreamBase::CreateHelper*>(data));
425 } else { 428 } else {
426 rv = ERR_DISALLOWED_URL_SCHEME; 429 rv = ERR_DISALLOWED_URL_SCHEME;
(...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 return; 1163 return;
1161 1164
1162 // The transaction started synchronously, but we need to notify the 1165 // The transaction started synchronously, but we need to notify the
1163 // URLRequest delegate via the message loop. 1166 // URLRequest delegate via the message loop.
1164 base::MessageLoop::current()->PostTask( 1167 base::MessageLoop::current()->PostTask(
1165 FROM_HERE, 1168 FROM_HERE,
1166 base::Bind(&URLRequestHttpJob::OnStartCompleted, 1169 base::Bind(&URLRequestHttpJob::OnStartCompleted,
1167 weak_factory_.GetWeakPtr(), rv)); 1170 weak_factory_.GetWeakPtr(), rv));
1168 } 1171 }
1169 1172
1173 void URLRequestHttpJob::ResumeNetworkStart() {
1174 DCHECK(transaction_.get());
1175 transaction_->ResumeNetworkStart();
1176 }
1177
1170 bool URLRequestHttpJob::ShouldFixMismatchedContentLength(int rv) const { 1178 bool URLRequestHttpJob::ShouldFixMismatchedContentLength(int rv) const {
1171 // Some servers send the body compressed, but specify the content length as 1179 // Some servers send the body compressed, but specify the content length as
1172 // the uncompressed size. Although this violates the HTTP spec we want to 1180 // the uncompressed size. Although this violates the HTTP spec we want to
1173 // support it (as IE and FireFox do), but *only* for an exact match. 1181 // support it (as IE and FireFox do), but *only* for an exact match.
1174 // See http://crbug.com/79694. 1182 // See http://crbug.com/79694.
1175 if (rv == net::ERR_CONTENT_LENGTH_MISMATCH || 1183 if (rv == net::ERR_CONTENT_LENGTH_MISMATCH ||
1176 rv == net::ERR_INCOMPLETE_CHUNKED_ENCODING) { 1184 rv == net::ERR_INCOMPLETE_CHUNKED_ENCODING) {
1177 if (request_ && request_->response_headers()) { 1185 if (request_ && request_->response_headers()) {
1178 int64 expected_length = request_->response_headers()->GetContentLength(); 1186 int64 expected_length = request_->response_headers()->GetContentLength();
1179 VLOG(1) << __FUNCTION__ << "() " 1187 VLOG(1) << __FUNCTION__ << "() "
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1446 return override_response_headers_.get() ? 1454 return override_response_headers_.get() ?
1447 override_response_headers_.get() : 1455 override_response_headers_.get() :
1448 transaction_->GetResponseInfo()->headers.get(); 1456 transaction_->GetResponseInfo()->headers.get();
1449 } 1457 }
1450 1458
1451 void URLRequestHttpJob::NotifyURLRequestDestroyed() { 1459 void URLRequestHttpJob::NotifyURLRequestDestroyed() {
1452 awaiting_callback_ = false; 1460 awaiting_callback_ = false;
1453 } 1461 }
1454 1462
1455 } // namespace net 1463 } // namespace net
OLDNEW
« no previous file with comments | « net/url_request/url_request_http_job.h ('k') | net/url_request/url_request_job.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698