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

Side by Side Diff: third_party/WebKit/Source/core/fetch/FetchRequest.cpp

Issue 2584423002: Loading: move core/fetch to platform/loader/fetch (Closed)
Patch Set: rebase Created 3 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
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2012 Google, Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26 #include "core/fetch/FetchRequest.h"
27
28 #include "core/fetch/CrossOriginAccessControl.h"
29 #include "core/fetch/ResourceFetcher.h"
30 #include "platform/weborigin/KURL.h"
31 #include "platform/weborigin/SecurityOrigin.h"
32 #include "platform/weborigin/Suborigin.h"
33
34 namespace blink {
35
36 FetchRequest::FetchRequest(const ResourceRequest& resourceRequest,
37 const AtomicString& initiator,
38 const String& charset)
39 : m_resourceRequest(resourceRequest),
40 m_charset(charset),
41 m_options(ResourceFetcher::defaultResourceOptions()),
42 m_forPreload(false),
43 m_linkPreload(false),
44 m_preloadDiscoveryTime(0.0),
45 m_defer(NoDefer),
46 m_originRestriction(UseDefaultOriginRestrictionForType),
47 m_placeholderImageRequestType(DisallowPlaceholder) {
48 m_options.initiatorInfo.name = initiator;
49 }
50
51 FetchRequest::FetchRequest(const ResourceRequest& resourceRequest,
52 const AtomicString& initiator,
53 const ResourceLoaderOptions& options)
54 : m_resourceRequest(resourceRequest),
55 m_options(options),
56 m_forPreload(false),
57 m_linkPreload(false),
58 m_preloadDiscoveryTime(0.0),
59 m_defer(NoDefer),
60 m_originRestriction(UseDefaultOriginRestrictionForType),
61 m_placeholderImageRequestType(
62 PlaceholderImageRequestType::DisallowPlaceholder) {
63 m_options.initiatorInfo.name = initiator;
64 }
65
66 FetchRequest::FetchRequest(const ResourceRequest& resourceRequest,
67 const FetchInitiatorInfo& initiator)
68 : m_resourceRequest(resourceRequest),
69 m_options(ResourceFetcher::defaultResourceOptions()),
70 m_forPreload(false),
71 m_linkPreload(false),
72 m_preloadDiscoveryTime(0.0),
73 m_defer(NoDefer),
74 m_originRestriction(UseDefaultOriginRestrictionForType),
75 m_placeholderImageRequestType(
76 PlaceholderImageRequestType::DisallowPlaceholder) {
77 m_options.initiatorInfo = initiator;
78 }
79
80 FetchRequest::~FetchRequest() {}
81
82 void FetchRequest::setCrossOriginAccessControl(
83 SecurityOrigin* origin,
84 CrossOriginAttributeValue crossOrigin) {
85 DCHECK_NE(crossOrigin, CrossOriginAttributeNotSet);
86 // Per https://w3c.github.io/webappsec-suborigins/#security-model-opt-outs,
87 // credentials are forced when credentials mode is "same-origin", the
88 // 'unsafe-credentials' option is set, and the request's physical origin is
89 // the same as the URL's.
90 const bool suboriginPolicyForcesCredentials =
91 origin->hasSuborigin() &&
92 origin->suborigin()->policyContains(
93 Suborigin::SuboriginPolicyOptions::UnsafeCredentials) &&
94 SecurityOrigin::create(url())->isSameSchemeHostPort(origin);
95 const bool useCredentials =
96 crossOrigin == CrossOriginAttributeUseCredentials ||
97 suboriginPolicyForcesCredentials;
98 const bool isSameOriginRequest =
99 origin && origin->canRequestNoSuborigin(m_resourceRequest.url());
100
101 // Currently FetchRequestMode and FetchCredentialsMode are only used when the
102 // request goes to Service Worker.
103 m_resourceRequest.setFetchRequestMode(WebURLRequest::FetchRequestModeCORS);
104 m_resourceRequest.setFetchCredentialsMode(
105 useCredentials ? WebURLRequest::FetchCredentialsModeInclude
106 : WebURLRequest::FetchCredentialsModeSameOrigin);
107
108 if (isSameOriginRequest || useCredentials) {
109 m_options.allowCredentials = AllowStoredCredentials;
110 m_resourceRequest.setAllowStoredCredentials(true);
111 } else {
112 m_options.allowCredentials = DoNotAllowStoredCredentials;
113 m_resourceRequest.setAllowStoredCredentials(false);
114 }
115 m_options.corsEnabled = IsCORSEnabled;
116 m_options.securityOrigin = origin;
117 m_options.credentialsRequested = useCredentials
118 ? ClientRequestedCredentials
119 : ClientDidNotRequestCredentials;
120
121 // TODO: Credentials should be removed only when the request is cross origin.
122 m_resourceRequest.removeCredentials();
123
124 if (origin)
125 m_resourceRequest.setHTTPOrigin(origin);
126 }
127
128 void FetchRequest::setResourceWidth(ResourceWidth resourceWidth) {
129 if (resourceWidth.isSet) {
130 m_resourceWidth.width = resourceWidth.width;
131 m_resourceWidth.isSet = true;
132 }
133 }
134
135 void FetchRequest::setForPreload(bool forPreload, double discoveryTime) {
136 m_forPreload = forPreload;
137 m_preloadDiscoveryTime = discoveryTime;
138 }
139
140 void FetchRequest::makeSynchronous() {
141 // Synchronous requests should always be max priority, lest they hang the
142 // renderer.
143 m_resourceRequest.setPriority(ResourceLoadPriorityHighest);
144 m_resourceRequest.setTimeoutInterval(10);
145 m_options.synchronousPolicy = RequestSynchronously;
146 }
147
148 void FetchRequest::setAllowImagePlaceholder() {
149 DCHECK_EQ(DisallowPlaceholder, m_placeholderImageRequestType);
150 if (!m_resourceRequest.url().protocolIsInHTTPFamily() ||
151 m_resourceRequest.httpMethod() != "GET" ||
152 !m_resourceRequest.httpHeaderField("range").isNull()) {
153 return;
154 }
155
156 m_placeholderImageRequestType = AllowPlaceholder;
157
158 // Fetch the first few bytes of the image. This number is tuned to both (a)
159 // likely capture the entire image for small images and (b) likely contain
160 // the dimensions for larger images.
161 // TODO(sclittle): Calculate the optimal value for this number.
162 m_resourceRequest.setHTTPHeaderField("range", "bytes=0-2047");
163
164 // TODO(sclittle): Indicate somehow (e.g. through a new request bit) to the
165 // embedder that it should return the full resource if the entire resource is
166 // fresh in the cache.
167 }
168
169 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698