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

Side by Side Diff: headless/public/util/generic_url_request_job.cc

Issue 2352663003: Adds a --deterministic-fetch flag to headless_shell (Closed)
Patch Set: Changes for Sami Created 4 years, 2 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "headless/public/util/generic_url_request_job.h" 5 #include "headless/public/util/generic_url_request_job.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 #include <algorithm> 8 #include <algorithm>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 30 matching lines...) Expand all
41 weak_factory_(this) {} 41 weak_factory_(this) {}
42 42
43 GenericURLRequestJob::~GenericURLRequestJob() = default; 43 GenericURLRequestJob::~GenericURLRequestJob() = default;
44 44
45 void GenericURLRequestJob::SetExtraRequestHeaders( 45 void GenericURLRequestJob::SetExtraRequestHeaders(
46 const net::HttpRequestHeaders& headers) { 46 const net::HttpRequestHeaders& headers) {
47 extra_request_headers_ = headers; 47 extra_request_headers_ = headers;
48 } 48 }
49 49
50 void GenericURLRequestJob::Start() { 50 void GenericURLRequestJob::Start() {
51 auto callback = [this](RewriteResult result, const GURL& url) { 51 auto callback = [this](RewriteResult result, const GURL& url,
52 const std::string& method) {
52 switch (result) { 53 switch (result) {
53 case RewriteResult::kAllow: 54 case RewriteResult::kAllow:
54 // Note that we use the rewritten url for selecting cookies. 55 // Note that we use the rewritten url for selecting cookies.
55 // Also, rewriting does not affect the request initiator. 56 // Also, rewriting does not affect the request initiator.
56 PrepareCookies(url, url::Origin(url)); 57 PrepareCookies(url, method, url::Origin(url));
57 break; 58 break;
58 case RewriteResult::kDeny: 59 case RewriteResult::kDeny:
59 DispatchStartError(net::ERR_FILE_NOT_FOUND); 60 DispatchStartError(net::ERR_FILE_NOT_FOUND);
60 break; 61 break;
61 case RewriteResult::kFailure: 62 case RewriteResult::kFailure:
62 DispatchStartError(net::ERR_UNEXPECTED); 63 DispatchStartError(net::ERR_UNEXPECTED);
63 break; 64 break;
64 default: 65 default:
65 DCHECK(false); 66 DCHECK(false);
66 } 67 }
67 }; 68 };
68 69
69 if (!delegate_->BlockOrRewriteRequest(request_->url(), request_->referrer(), 70 if (!delegate_->BlockOrRewriteRequest(request_->url(), request_->method(),
70 callback)) { 71 request_->referrer(), callback)) {
71 PrepareCookies(request()->url(), 72 PrepareCookies(request_->url(), request_->method(),
72 url::Origin(request_->first_party_for_cookies())); 73 url::Origin(request_->first_party_for_cookies()));
73 } 74 }
74 } 75 }
75 76
76 void GenericURLRequestJob::PrepareCookies(const GURL& rewritten_url, 77 void GenericURLRequestJob::PrepareCookies(const GURL& rewritten_url,
78 const std::string& method,
77 const url::Origin& site_for_cookies) { 79 const url::Origin& site_for_cookies) {
78 net::CookieStore* cookie_store = request_->context()->cookie_store(); 80 net::CookieStore* cookie_store = request_->context()->cookie_store();
79 net::CookieOptions options; 81 net::CookieOptions options;
80 options.set_include_httponly(); 82 options.set_include_httponly();
81 83
82 // See net::URLRequestHttpJob::AddCookieHeaderAndStart(). 84 // See net::URLRequestHttpJob::AddCookieHeaderAndStart().
83 url::Origin requested_origin(rewritten_url); 85 url::Origin requested_origin(rewritten_url);
84 if (net::registry_controlled_domains::SameDomainOrHost( 86 if (net::registry_controlled_domains::SameDomainOrHost(
85 requested_origin, site_for_cookies, 87 requested_origin, site_for_cookies,
86 net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES)) { 88 net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES)) {
87 if (net::registry_controlled_domains::SameDomainOrHost( 89 if (net::registry_controlled_domains::SameDomainOrHost(
88 requested_origin, request_->initiator(), 90 requested_origin, request_->initiator(),
89 net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES)) { 91 net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES)) {
90 options.set_same_site_cookie_mode( 92 options.set_same_site_cookie_mode(
91 net::CookieOptions::SameSiteCookieMode::INCLUDE_STRICT_AND_LAX); 93 net::CookieOptions::SameSiteCookieMode::INCLUDE_STRICT_AND_LAX);
92 } else if (IsMethodSafe(request_->method())) { 94 } else if (IsMethodSafe(request_->method())) {
93 options.set_same_site_cookie_mode( 95 options.set_same_site_cookie_mode(
94 net::CookieOptions::SameSiteCookieMode::INCLUDE_LAX); 96 net::CookieOptions::SameSiteCookieMode::INCLUDE_LAX);
95 } 97 }
96 } 98 }
97 99
98 cookie_store->GetCookieListWithOptionsAsync( 100 cookie_store->GetCookieListWithOptionsAsync(
99 rewritten_url, options, 101 rewritten_url, options,
100 base::Bind(&GenericURLRequestJob::OnCookiesAvailable, 102 base::Bind(&GenericURLRequestJob::OnCookiesAvailable,
101 weak_factory_.GetWeakPtr(), rewritten_url)); 103 weak_factory_.GetWeakPtr(), rewritten_url, method));
102 } 104 }
103 105
104 void GenericURLRequestJob::OnCookiesAvailable( 106 void GenericURLRequestJob::OnCookiesAvailable(
105 const GURL& rewritten_url, 107 const GURL& rewritten_url,
108 const std::string& method,
106 const net::CookieList& cookie_list) { 109 const net::CookieList& cookie_list) {
107 // TODO(alexclarke): Set user agent. 110 // TODO(alexclarke): Set user agent.
108 // Pass cookies, the referrer and any extra headers into the fetch request. 111 // Pass cookies, the referrer and any extra headers into the fetch request.
109 extra_request_headers_.SetHeader( 112 extra_request_headers_.SetHeader(
110 net::HttpRequestHeaders::kCookie, 113 net::HttpRequestHeaders::kCookie,
111 net::CookieStore::BuildCookieLine(cookie_list)); 114 net::CookieStore::BuildCookieLine(cookie_list));
112 115
113 extra_request_headers_.SetHeader(net::HttpRequestHeaders::kReferer, 116 extra_request_headers_.SetHeader(net::HttpRequestHeaders::kReferer,
114 request_->referrer()); 117 request_->referrer());
115 118
116 // The resource may have been supplied in the request. 119 // The resource may have been supplied in the request.
117 const HttpResponse* matched_resource = 120 const HttpResponse* matched_resource = delegate_->MaybeMatchResource(
118 delegate_->MaybeMatchResource(rewritten_url, extra_request_headers_); 121 rewritten_url, method, extra_request_headers_);
119 122
120 if (matched_resource) { 123 if (matched_resource) {
121 OnFetchCompleteExtractHeaders( 124 OnFetchCompleteExtractHeaders(
122 matched_resource->final_url, matched_resource->http_response_code, 125 matched_resource->final_url, matched_resource->http_response_code,
123 matched_resource->response_data, matched_resource->response_data_size); 126 matched_resource->response_data, matched_resource->response_data_size);
124 } else { 127 } else {
125 url_fetcher_->StartFetch(rewritten_url, extra_request_headers_, this); 128 url_fetcher_->StartFetch(rewritten_url, method, extra_request_headers_,
129 this);
126 } 130 }
127 } 131 }
128 132
129 void GenericURLRequestJob::OnFetchStartError(net::Error error) { 133 void GenericURLRequestJob::OnFetchStartError(net::Error error) {
130 DispatchStartError(error); 134 DispatchStartError(error);
131 } 135 }
132 136
133 void GenericURLRequestJob::OnFetchComplete( 137 void GenericURLRequestJob::OnFetchComplete(
134 const GURL& final_url, 138 const GURL& final_url,
135 int http_response_code, 139 int http_response_code,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 return response_headers_->GetMimeType(mime_type); 180 return response_headers_->GetMimeType(mime_type);
177 } 181 }
178 182
179 bool GenericURLRequestJob::GetCharset(std::string* charset) { 183 bool GenericURLRequestJob::GetCharset(std::string* charset) {
180 if (!response_headers_) 184 if (!response_headers_)
181 return false; 185 return false;
182 return response_headers_->GetCharset(charset); 186 return response_headers_->GetCharset(charset);
183 } 187 }
184 188
185 } // namespace headless 189 } // namespace headless
OLDNEW
« no previous file with comments | « headless/public/util/generic_url_request_job.h ('k') | headless/public/util/generic_url_request_job_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698