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

Side by Side Diff: content/child/web_url_loader_impl.cc

Issue 264613006: Move first-party cookie URL logic to browser process. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/child/resource_dispatcher_unittest.cc ('k') | content/common/resource_messages.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 // An implementation of WebURLLoader in terms of ResourceLoaderBridge. 5 // An implementation of WebURLLoader in terms of ResourceLoaderBridge.
6 6
7 #include "content/child/web_url_loader_impl.h" 7 #include "content/child/web_url_loader_impl.h"
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 232
233 void Cancel(); 233 void Cancel();
234 void SetDefersLoading(bool value); 234 void SetDefersLoading(bool value);
235 void DidChangePriority(WebURLRequest::Priority new_priority, 235 void DidChangePriority(WebURLRequest::Priority new_priority,
236 int intra_priority_value); 236 int intra_priority_value);
237 void Start(const WebURLRequest& request, 237 void Start(const WebURLRequest& request,
238 SyncLoadResponse* sync_load_response); 238 SyncLoadResponse* sync_load_response);
239 239
240 // RequestPeer methods: 240 // RequestPeer methods:
241 virtual void OnUploadProgress(uint64 position, uint64 size) OVERRIDE; 241 virtual void OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
242 virtual bool OnReceivedRedirect( 242 virtual bool OnReceivedRedirect(const GURL& new_url,
243 const GURL& new_url, 243 const GURL& new_first_party_for_cookies,
244 const ResourceResponseInfo& info, 244 const ResourceResponseInfo& info) OVERRIDE;
245 bool* has_new_first_party_for_cookies,
246 GURL* new_first_party_for_cookies) OVERRIDE;
247 virtual void OnReceivedResponse(const ResourceResponseInfo& info) OVERRIDE; 245 virtual void OnReceivedResponse(const ResourceResponseInfo& info) OVERRIDE;
248 virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE; 246 virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE;
249 virtual void OnReceivedData(const char* data, 247 virtual void OnReceivedData(const char* data,
250 int data_length, 248 int data_length,
251 int encoded_data_length) OVERRIDE; 249 int encoded_data_length) OVERRIDE;
252 virtual void OnReceivedCachedMetadata(const char* data, int len) OVERRIDE; 250 virtual void OnReceivedCachedMetadata(const char* data, int len) OVERRIDE;
253 virtual void OnCompletedRequest( 251 virtual void OnCompletedRequest(
254 int error_code, 252 int error_code,
255 bool was_ignored_by_handler, 253 bool was_ignored_by_handler,
256 bool stale_copy_in_cache, 254 bool stale_copy_in_cache,
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 } 465 }
468 } 466 }
469 467
470 void WebURLLoaderImpl::Context::OnUploadProgress(uint64 position, uint64 size) { 468 void WebURLLoaderImpl::Context::OnUploadProgress(uint64 position, uint64 size) {
471 if (client_) 469 if (client_)
472 client_->didSendData(loader_, position, size); 470 client_->didSendData(loader_, position, size);
473 } 471 }
474 472
475 bool WebURLLoaderImpl::Context::OnReceivedRedirect( 473 bool WebURLLoaderImpl::Context::OnReceivedRedirect(
476 const GURL& new_url, 474 const GURL& new_url,
477 const ResourceResponseInfo& info, 475 const GURL& new_first_party_for_cookies,
478 bool* has_new_first_party_for_cookies, 476 const ResourceResponseInfo& info) {
479 GURL* new_first_party_for_cookies) {
480 if (!client_) 477 if (!client_)
481 return false; 478 return false;
482 479
483 WebURLResponse response; 480 WebURLResponse response;
484 response.initialize(); 481 response.initialize();
485 PopulateURLResponse(request_.url(), info, &response); 482 PopulateURLResponse(request_.url(), info, &response);
486 483
487 // TODO(darin): We lack sufficient information to construct the actual 484 // TODO(darin): We lack sufficient information to construct the actual
488 // request that resulted from the redirect. 485 // request that resulted from the redirect.
489 WebURLRequest new_request(new_url); 486 WebURLRequest new_request(new_url);
490 new_request.setFirstPartyForCookies(request_.firstPartyForCookies()); 487 new_request.setFirstPartyForCookies(new_first_party_for_cookies);
491 new_request.setDownloadToFile(request_.downloadToFile()); 488 new_request.setDownloadToFile(request_.downloadToFile());
492 489
493 WebString referrer_string = WebString::fromUTF8("Referer"); 490 WebString referrer_string = WebString::fromUTF8("Referer");
494 WebString referrer = WebSecurityPolicy::generateReferrerHeader( 491 WebString referrer = WebSecurityPolicy::generateReferrerHeader(
495 referrer_policy_, 492 referrer_policy_,
496 new_url, 493 new_url,
497 request_.httpHeaderField(referrer_string)); 494 request_.httpHeaderField(referrer_string));
498 if (!referrer.isEmpty()) 495 if (!referrer.isEmpty())
499 new_request.setHTTPReferrer(referrer, referrer_policy_); 496 new_request.setHTTPReferrer(referrer, referrer_policy_);
500 497
501 std::string method = request_.httpMethod().utf8(); 498 std::string method = request_.httpMethod().utf8();
502 std::string new_method = net::URLRequest::ComputeMethodForRedirect( 499 std::string new_method = net::URLRequest::ComputeMethodForRedirect(
503 method, response.httpStatusCode()); 500 method, response.httpStatusCode());
504 new_request.setHTTPMethod(WebString::fromUTF8(new_method)); 501 new_request.setHTTPMethod(WebString::fromUTF8(new_method));
505 if (new_method == method) 502 if (new_method == method)
506 new_request.setHTTPBody(request_.httpBody()); 503 new_request.setHTTPBody(request_.httpBody());
507 504
508 client_->willSendRequest(loader_, new_request, response); 505 client_->willSendRequest(loader_, new_request, response);
509 request_ = new_request; 506 request_ = new_request;
510 *has_new_first_party_for_cookies = true;
511 *new_first_party_for_cookies = request_.firstPartyForCookies();
512 507
513 // Only follow the redirect if WebKit left the URL unmodified. 508 // Only follow the redirect if WebKit left the URL unmodified.
514 if (new_url == GURL(new_request.url())) 509 if (new_url == GURL(new_request.url())) {
510 // First-party cookie logic moved from DocumentLoader in Blink to
511 // CrossSiteResourceHandler in the browser. Assert that Blink didn't try to
512 // change it to something else.
513 DCHECK_EQ(new_first_party_for_cookies.spec(),
514 request_.firstPartyForCookies().string().utf8());
515 return true; 515 return true;
516 }
516 517
517 // We assume that WebKit only changes the URL to suppress a redirect, and we 518 // We assume that WebKit only changes the URL to suppress a redirect, and we
518 // assume that it does so by setting it to be invalid. 519 // assume that it does so by setting it to be invalid.
519 DCHECK(!new_request.url().isValid()); 520 DCHECK(!new_request.url().isValid());
520 return false; 521 return false;
521 } 522 }
522 523
523 void WebURLLoaderImpl::Context::OnReceivedResponse( 524 void WebURLLoaderImpl::Context::OnReceivedResponse(
524 const ResourceResponseInfo& info) { 525 const ResourceResponseInfo& info) {
525 if (!client_) 526 if (!client_)
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 void WebURLLoaderImpl::setDefersLoading(bool value) { 870 void WebURLLoaderImpl::setDefersLoading(bool value) {
870 context_->SetDefersLoading(value); 871 context_->SetDefersLoading(value);
871 } 872 }
872 873
873 void WebURLLoaderImpl::didChangePriority(WebURLRequest::Priority new_priority, 874 void WebURLLoaderImpl::didChangePriority(WebURLRequest::Priority new_priority,
874 int intra_priority_value) { 875 int intra_priority_value) {
875 context_->DidChangePriority(new_priority, intra_priority_value); 876 context_->DidChangePriority(new_priority, intra_priority_value);
876 } 877 }
877 878
878 } // namespace content 879 } // namespace content
OLDNEW
« no previous file with comments | « content/child/resource_dispatcher_unittest.cc ('k') | content/common/resource_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698