OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. |
3 * Copyright (C) 2013, Intel Corporation | 3 * Copyright (C) 2013, Intel Corporation |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
7 * met: | 7 * met: |
8 * | 8 * |
9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 ThreadableLoaderClient* client = m_client; | 192 ThreadableLoaderClient* client = m_client; |
193 clear(); | 193 clear(); |
194 client->didFail(ResourceError(errorDomainBlinkInternal, 0, | 194 client->didFail(ResourceError(errorDomainBlinkInternal, 0, |
195 request.url().getString(), | 195 request.url().getString(), |
196 "Cross origin requests are not supported.")); | 196 "Cross origin requests are not supported.")); |
197 return; | 197 return; |
198 } | 198 } |
199 | 199 |
200 m_requestStartedSeconds = monotonicallyIncreasingTime(); | 200 m_requestStartedSeconds = monotonicallyIncreasingTime(); |
201 | 201 |
202 // Save any CORS simple headers on the request here. If this request redirects | 202 // Save any headers on the request here. If this request redirects |
203 // cross-origin, we cancel the old request create a new one, and copy these | 203 // cross-origin, we cancel the old request create a new one, and copy these |
204 // headers. | 204 // headers. |
205 const HTTPHeaderMap& headerMap = request.httpHeaderFields(); | 205 m_requestHeaders = request.httpHeaderFields(); |
206 for (const auto& header : headerMap) { | |
207 if (FetchUtils::isSimpleHeader(header.key, header.value)) { | |
208 m_simpleRequestHeaders.add(header.key, header.value); | |
209 } else if (equalIgnoringCase(header.key, HTTPNames::Range) && | |
210 m_options.crossOriginRequestPolicy == UseAccessControl && | |
211 m_options.preflightPolicy == PreventPreflight) { | |
212 // Allow an exception for the "range" header for when CORS callers request | |
213 // no preflight, this ensures cross-origin redirects work correctly for | |
214 // crossOrigin enabled WebURLRequest::RequestContextVideo type requests. | |
215 m_simpleRequestHeaders.add(header.key, header.value); | |
216 } | |
217 } | |
218 | 206 |
219 // DocumentThreadableLoader is used by all javascript initiated fetch, so we | 207 // DocumentThreadableLoader is used by all javascript initiated fetch, so we |
220 // use this chance to record non-GET fetch script requests. However, this is | 208 // use this chance to record non-GET fetch script requests. However, this is |
221 // based on the following assumptions, so please be careful when adding | 209 // based on the following assumptions, so please be careful when adding |
222 // similar logic: | 210 // similar logic: |
223 // - ThreadableLoader is used as backend for all javascript initiated network | 211 // - ThreadableLoader is used as backend for all javascript initiated network |
224 // fetches. | 212 // fetches. |
225 // - Note that ThreadableLoader is also used for non-network fetch such as | 213 // - Note that ThreadableLoader is also used for non-network fetch such as |
226 // FileReaderLoader. However it emulates GET method so signal is not | 214 // FileReaderLoader. However it emulates GET method so signal is not |
227 // recorded here. | 215 // recorded here. |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
640 m_referrerAfterRedirect = | 628 m_referrerAfterRedirect = |
641 Referrer(request.httpReferrer(), request.getReferrerPolicy()); | 629 Referrer(request.httpReferrer(), request.getReferrerPolicy()); |
642 | 630 |
643 ResourceRequest crossOriginRequest(request); | 631 ResourceRequest crossOriginRequest(request); |
644 | 632 |
645 // Remove any headers that may have been added by the network layer that cause | 633 // Remove any headers that may have been added by the network layer that cause |
646 // access control to fail. | 634 // access control to fail. |
647 crossOriginRequest.clearHTTPReferrer(); | 635 crossOriginRequest.clearHTTPReferrer(); |
648 crossOriginRequest.clearHTTPOrigin(); | 636 crossOriginRequest.clearHTTPOrigin(); |
649 crossOriginRequest.clearHTTPUserAgent(); | 637 crossOriginRequest.clearHTTPUserAgent(); |
650 // Add any CORS simple request headers which we previously saved from the | 638 // Add any request headers which we previously saved from the |
651 // original request. | 639 // original request. |
652 for (const auto& header : m_simpleRequestHeaders) | 640 for (const auto& header : m_requestHeaders) |
653 crossOriginRequest.setHTTPHeaderField(header.key, header.value); | 641 crossOriginRequest.setHTTPHeaderField(header.key, header.value); |
654 makeCrossOriginAccessRequest(crossOriginRequest); | 642 makeCrossOriginAccessRequest(crossOriginRequest); |
655 | 643 |
656 return false; | 644 return false; |
657 } | 645 } |
658 | 646 |
659 void DocumentThreadableLoader::redirectBlocked() { | 647 void DocumentThreadableLoader::redirectBlocked() { |
660 m_checker.redirectBlocked(); | 648 m_checker.redirectBlocked(); |
661 | 649 |
662 // Tells the client that a redirect was received but not followed (for an | 650 // Tells the client that a redirect was received but not followed (for an |
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1135 } | 1123 } |
1136 | 1124 |
1137 DEFINE_TRACE(DocumentThreadableLoader) { | 1125 DEFINE_TRACE(DocumentThreadableLoader) { |
1138 visitor->trace(m_resource); | 1126 visitor->trace(m_resource); |
1139 visitor->trace(m_document); | 1127 visitor->trace(m_document); |
1140 ThreadableLoader::trace(visitor); | 1128 ThreadableLoader::trace(visitor); |
1141 RawResourceClient::trace(visitor); | 1129 RawResourceClient::trace(visitor); |
1142 } | 1130 } |
1143 | 1131 |
1144 } // namespace blink | 1132 } // namespace blink |
OLD | NEW |