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

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

Issue 1757633005: Don't duplicate ResourceRequests and ResourceLoaderOptions on ResourceLoader (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make synchronousPolicy check higher priority in determineRevalidationPolicy Created 4 years, 9 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 /* 1 /*
2 * Copyright (C) 2006, 2007, 2010, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2010, 2011 Apple Inc. All rights reserved.
3 * (C) 2007 Graham Dennis (graham.dennis@gmail.com) 3 * (C) 2007 Graham Dennis (graham.dennis@gmail.com)
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 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 8 *
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. 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 29 matching lines...) Expand all
40 #include "public/platform/Platform.h" 40 #include "public/platform/Platform.h"
41 #include "public/platform/WebData.h" 41 #include "public/platform/WebData.h"
42 #include "public/platform/WebURLError.h" 42 #include "public/platform/WebURLError.h"
43 #include "public/platform/WebURLRequest.h" 43 #include "public/platform/WebURLRequest.h"
44 #include "public/platform/WebURLResponse.h" 44 #include "public/platform/WebURLResponse.h"
45 #include "wtf/Assertions.h" 45 #include "wtf/Assertions.h"
46 #include "wtf/CurrentTime.h" 46 #include "wtf/CurrentTime.h"
47 47
48 namespace blink { 48 namespace blink {
49 49
50 namespace { 50 ResourceLoader* ResourceLoader::create(ResourceFetcher* fetcher, Resource* resou rce)
51
52 bool isManualRedirectFetchRequest(const ResourceRequest& request)
53 { 51 {
54 return request.fetchRedirectMode() == WebURLRequest::FetchRedirectModeManual && request.requestContext() == WebURLRequest::RequestContextFetch; 52 return new ResourceLoader(fetcher, resource);
55 } 53 }
56 54
57 } // namespace 55 ResourceLoader::ResourceLoader(ResourceFetcher* fetcher, Resource* resource)
58
59 ResourceLoader* ResourceLoader::create(ResourceFetcher* fetcher, Resource* resou rce, const ResourceRequest& request, const ResourceLoaderOptions& options)
60 {
61 ResourceLoader* loader = new ResourceLoader(fetcher, resource, options);
62 loader->init(request);
63 return loader;
64 }
65
66 ResourceLoader::ResourceLoader(ResourceFetcher* fetcher, Resource* resource, con st ResourceLoaderOptions& options)
67 : m_fetcher(fetcher) 56 : m_fetcher(fetcher)
68 , m_notifiedLoadComplete(false) 57 , m_notifiedLoadComplete(false)
69 , m_loadingMultipartContent(false) 58 , m_loadingMultipartContent(false)
70 , m_options(options)
71 , m_resource(resource) 59 , m_resource(resource)
72 , m_state(ConnectionStateNew) 60 , m_state(ConnectionStateNew)
73 { 61 {
74 ASSERT(m_resource); 62 ASSERT(m_resource);
75 ASSERT(m_fetcher); 63 ASSERT(m_fetcher);
76 } 64 }
77 65
78 ResourceLoader::~ResourceLoader() 66 ResourceLoader::~ResourceLoader()
79 { 67 {
80 ASSERT(m_state == ConnectionStateReleased); 68 ASSERT(m_state == ConnectionStateReleased);
(...skipping 17 matching lines...) Expand all
98 86
99 ASSERT(m_state != ConnectionStateReleased); 87 ASSERT(m_state != ConnectionStateReleased);
100 m_state = ConnectionStateReleased; 88 m_state = ConnectionStateReleased;
101 if (m_loader) { 89 if (m_loader) {
102 m_loader->cancel(); 90 m_loader->cancel();
103 m_loader.clear(); 91 m_loader.clear();
104 } 92 }
105 m_fetcher.clear(); 93 m_fetcher.clear();
106 } 94 }
107 95
108 void ResourceLoader::init(const ResourceRequest& passedRequest) 96 void ResourceLoader::start(ResourceRequest& request)
109 {
110 ResourceRequest request(passedRequest);
111 m_fetcher->willSendRequest(m_resource->identifier(), request, ResourceRespon se(), m_options.initiatorInfo);
112 m_originalRequest = m_request = applyOptions(request);
113 m_resource->updateRequest(request);
114 m_fetcher->didInitializeResourceLoader(this);
115 }
116
117 void ResourceLoader::start()
118 { 97 {
119 ASSERT(!m_loader); 98 ASSERT(!m_loader);
120 ASSERT(!m_request.isNull());
121 99
122 m_fetcher->willStartLoadingResource(m_resource.get(), m_request); 100 m_fetcher->willStartLoadingResource(m_resource.get(), this, request);
123 RELEASE_ASSERT(m_state == ConnectionStateNew); 101 RELEASE_ASSERT(m_state == ConnectionStateNew);
124 m_state = ConnectionStateStarted; 102 m_state = ConnectionStateStarted;
125 103
126 m_loader = adoptPtr(Platform::current()->createURLLoader()); 104 m_loader = adoptPtr(Platform::current()->createURLLoader());
127 m_loader->setDefersLoading(m_fetcher->defersLoading()); 105 m_loader->setDefersLoading(m_fetcher->defersLoading());
128 ASSERT(m_loader); 106 ASSERT(m_loader);
129 m_loader->setLoadingTaskRunner(m_fetcher->loadingTaskRunner()); 107 m_loader->setLoadingTaskRunner(m_fetcher->loadingTaskRunner());
130 108
131 if (m_options.synchronousPolicy == RequestSynchronously) 109 if (m_resource->options().synchronousPolicy == RequestSynchronously)
132 requestSynchronously(); 110 requestSynchronously(request);
133 else 111 else
134 m_loader->loadAsynchronously(WrappedResourceRequest(m_request), this); 112 m_loader->loadAsynchronously(WrappedResourceRequest(request), this);
135 }
136
137 void ResourceLoader::changeToSynchronous()
138 {
139 ASSERT(m_options.synchronousPolicy == RequestAsynchronously);
140 ASSERT(m_loader);
141 m_loader->cancel();
142 m_loader.clear();
143 m_loader = adoptPtr(Platform::current()->createURLLoader());
144 ASSERT(m_loader);
145 m_request.setPriority(ResourceLoadPriorityHighest);
146 m_state = ConnectionStateStarted;
147 requestSynchronously();
148 } 113 }
149 114
150 void ResourceLoader::setDefersLoading(bool defers) 115 void ResourceLoader::setDefersLoading(bool defers)
151 { 116 {
152 ASSERT(m_loader); 117 ASSERT(m_loader);
153 m_loader->setDefersLoading(defers); 118 m_loader->setDefersLoading(defers);
154 } 119 }
155 120
156 void ResourceLoader::didDownloadData(WebURLLoader*, int length, int encodedDataL ength) 121 void ResourceLoader::didDownloadData(WebURLLoader*, int length, int encodedDataL ength)
157 { 122 {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 void ResourceLoader::cancel(const ResourceError& error) 162 void ResourceLoader::cancel(const ResourceError& error)
198 { 163 {
199 // If the load has already completed - succeeded, failed, or previously canc elled - do nothing. 164 // If the load has already completed - succeeded, failed, or previously canc elled - do nothing.
200 if (m_state == ConnectionStateReleased) 165 if (m_state == ConnectionStateReleased)
201 return; 166 return;
202 if (isFinishing()) { 167 if (isFinishing()) {
203 releaseResources(); 168 releaseResources();
204 return; 169 return;
205 } 170 }
206 171
207 ResourceError nonNullError = error.isNull() ? ResourceError::cancelledError( m_request.url()) : error; 172 ResourceError nonNullError = error.isNull() ? ResourceError::cancelledError( m_resource->lastResourceRequest().url()) : error;
208 173
209 WTF_LOG(ResourceLoading, "Cancelled load of '%s'.\n", m_resource->url().getS tring().latin1().data()); 174 WTF_LOG(ResourceLoading, "Cancelled load of '%s'.\n", m_resource->url().getS tring().latin1().data());
210 m_state = ConnectionStateCanceled; 175 m_state = ConnectionStateCanceled;
211 m_resource->setResourceError(nonNullError); 176 m_resource->setResourceError(nonNullError);
212 177
213 if (!m_notifiedLoadComplete) { 178 if (!m_notifiedLoadComplete) {
214 m_notifiedLoadComplete = true; 179 m_notifiedLoadComplete = true;
215 m_fetcher->didFailLoading(m_resource.get(), nonNullError); 180 m_fetcher->didFailLoading(m_resource.get(), nonNullError);
216 } 181 }
217 182
218 if (m_state != ConnectionStateReleased) 183 if (m_state != ConnectionStateReleased)
219 m_resource->error(Resource::LoadError); 184 m_resource->error(Resource::LoadError);
220 if (m_state != ConnectionStateReleased) 185 if (m_state != ConnectionStateReleased)
221 releaseResources(); 186 releaseResources();
222 } 187 }
223 188
224 void ResourceLoader::willFollowRedirect(WebURLLoader*, WebURLRequest& passedNewR equest, const WebURLResponse& passedRedirectResponse) 189 void ResourceLoader::willFollowRedirect(WebURLLoader*, WebURLRequest& passedNewR equest, const WebURLResponse& passedRedirectResponse)
225 { 190 {
226 ASSERT(m_state != ConnectionStateReleased); 191 ASSERT(m_state != ConnectionStateReleased);
192 ASSERT(!passedNewRequest.isNull());
193 ASSERT(!passedRedirectResponse.isNull());
227 194
228 ResourceRequest& newRequest(applyOptions(passedNewRequest.toMutableResourceR equest())); 195 ResourceRequest& newRequest(passedNewRequest.toMutableResourceRequest());
196 const ResourceResponse& redirectResponse(passedRedirectResponse.toResourceRe sponse());
197 newRequest.setFollowedRedirect(true);
229 198
230 ASSERT(!newRequest.isNull()); 199 if (m_fetcher->willFollowRedirect(m_resource.get(), newRequest, redirectResp onse))
231 const ResourceResponse& redirectResponse(passedRedirectResponse.toResourceRe sponse()); 200 m_resource->willFollowRedirect(newRequest, redirectResponse);
232 ASSERT(!redirectResponse.isNull()); 201 else
233 newRequest.setFollowedRedirect(true);
234 if (!isManualRedirectFetchRequest(m_resource->resourceRequest()) && !m_fetch er->canAccessRedirect(m_resource.get(), newRequest, redirectResponse, m_options) ) {
235 cancel(ResourceError::cancelledDueToAccessCheckError(newRequest.url())); 202 cancel(ResourceError::cancelledDueToAccessCheckError(newRequest.url()));
236 return;
237 }
238 ASSERT(m_state != ConnectionStateReleased);
239
240 applyOptions(newRequest); // canAccessRedirect() can modify m_options so we should re-apply it.
241 m_fetcher->redirectReceived(m_resource.get(), redirectResponse);
242 ASSERT(m_state != ConnectionStateReleased);
243 m_resource->willFollowRedirect(newRequest, redirectResponse);
244 if (newRequest.isNull() || m_state == ConnectionStateReleased)
245 return;
246
247 m_fetcher->willSendRequest(m_resource->identifier(), newRequest, redirectRes ponse, m_options.initiatorInfo);
248 ASSERT(m_state != ConnectionStateReleased);
249 ASSERT(!newRequest.isNull());
250 m_resource->updateRequest(newRequest);
251 m_request = newRequest;
252 } 203 }
253 204
254 void ResourceLoader::didReceiveCachedMetadata(WebURLLoader*, const char* data, i nt length) 205 void ResourceLoader::didReceiveCachedMetadata(WebURLLoader*, const char* data, i nt length)
255 { 206 {
256 RELEASE_ASSERT(m_state == ConnectionStateReceivedResponse || m_state == Conn ectionStateReceivingData); 207 RELEASE_ASSERT(m_state == ConnectionStateReceivedResponse || m_state == Conn ectionStateReceivingData);
257 m_resource->setSerializedCachedMetadata(data, length); 208 m_resource->setSerializedCachedMetadata(data, length);
258 } 209 }
259 210
260 void ResourceLoader::didSendData(WebURLLoader*, unsigned long long bytesSent, un signed long long totalBytesToBeSent) 211 void ResourceLoader::didSendData(WebURLLoader*, unsigned long long bytesSent, un signed long long totalBytesToBeSent)
261 { 212 {
262 m_resource->didSendData(bytesSent, totalBytesToBeSent); 213 m_resource->didSendData(bytesSent, totalBytesToBeSent);
263 } 214 }
264 215
265 bool ResourceLoader::responseNeedsAccessControlCheck() const 216 bool ResourceLoader::responseNeedsAccessControlCheck() const
266 { 217 {
267 // If the fetch was (potentially) CORS enabled, an access control check of t he response is required. 218 // If the fetch was (potentially) CORS enabled, an access control check of t he response is required.
268 return m_options.corsEnabled == IsCORSEnabled; 219 return m_resource->options().corsEnabled == IsCORSEnabled;
269 } 220 }
270 221
271 void ResourceLoader::didReceiveResponse(WebURLLoader*, const WebURLResponse& res ponse, WebDataConsumerHandle* rawHandle) 222 void ResourceLoader::didReceiveResponse(WebURLLoader*, const WebURLResponse& res ponse, WebDataConsumerHandle* rawHandle)
272 { 223 {
273 ASSERT(!response.isNull()); 224 ASSERT(!response.isNull());
274 // |rawHandle|'s ownership is transferred to the callee. 225 // |rawHandle|'s ownership is transferred to the callee.
275 OwnPtr<WebDataConsumerHandle> handle = adoptPtr(rawHandle); 226 OwnPtr<WebDataConsumerHandle> handle = adoptPtr(rawHandle);
276 227
277 bool isMultipartPayload = response.isMultipartPayload(); 228 bool isMultipartPayload = response.isMultipartPayload();
278 bool isValidStateTransition = (m_state == ConnectionStateStarted || m_state == ConnectionStateReceivedResponse); 229 bool isValidStateTransition = (m_state == ConnectionStateStarted || m_state == ConnectionStateReceivedResponse);
279 // In the case of multipart loads, calls to didReceiveData & didReceiveRespo nse can be interleaved. 230 // In the case of multipart loads, calls to didReceiveData & didReceiveRespo nse can be interleaved.
280 RELEASE_ASSERT(isMultipartPayload || isValidStateTransition); 231 RELEASE_ASSERT(isMultipartPayload || isValidStateTransition);
281 m_state = ConnectionStateReceivedResponse; 232 m_state = ConnectionStateReceivedResponse;
282 233
283 const ResourceResponse& resourceResponse = response.toResourceResponse(); 234 const ResourceResponse& resourceResponse = response.toResourceResponse();
284 235
285 if (responseNeedsAccessControlCheck()) { 236 if (responseNeedsAccessControlCheck()) {
286 if (response.wasFetchedViaServiceWorker()) { 237 if (response.wasFetchedViaServiceWorker()) {
287 if (response.wasFallbackRequiredByServiceWorker()) { 238 if (response.wasFallbackRequiredByServiceWorker()) {
288 m_loader->cancel(); 239 m_loader->cancel();
289 m_loader.clear(); 240 m_loader.clear();
290 m_state = ConnectionStateStarted; 241 m_state = ConnectionStateStarted;
291 m_loader = adoptPtr(Platform::current()->createURLLoader()); 242 m_loader = adoptPtr(Platform::current()->createURLLoader());
292 ASSERT(m_loader); 243 ASSERT(m_loader);
293 ASSERT(!m_request.skipServiceWorker()); 244 ResourceRequest request = m_resource->lastResourceRequest();
294 m_request.setSkipServiceWorker(true); 245 ASSERT(!request.skipServiceWorker());
295 WrappedResourceRequest wrappedRequest(m_request); 246 request.setSkipServiceWorker(true);
296 m_loader->loadAsynchronously(wrappedRequest, this); 247 m_loader->loadAsynchronously(WrappedResourceRequest(request), th is);
297 return; 248 return;
298 } 249 }
299 } else { 250 } else {
300 if (!m_resource->isCacheValidator() || resourceResponse.httpStatusCo de() != 304) 251 if (!m_resource->isCacheValidator() || resourceResponse.httpStatusCo de() != 304)
301 m_resource->setResponse(resourceResponse); 252 m_resource->setResponse(resourceResponse);
302 if (!m_fetcher->canAccessResource(m_resource.get(), m_options.securi tyOrigin.get(), response.url(), ResourceFetcher::ShouldLogAccessControlErrors)) { 253 if (!m_fetcher->canAccessResource(m_resource.get(), m_resource->opti ons().securityOrigin.get(), response.url(), ResourceFetcher::ShouldLogAccessCont rolErrors)) {
303 m_fetcher->didReceiveResponse(m_resource.get(), resourceResponse ); 254 m_fetcher->didReceiveResponse(m_resource.get(), resourceResponse );
304 cancel(ResourceError::cancelledDueToAccessCheckError(KURL(respon se.url()))); 255 cancel(ResourceError::cancelledDueToAccessCheckError(KURL(respon se.url())));
305 return; 256 return;
306 } 257 }
307 } 258 }
308 } 259 }
309 260
310 m_resource->responseReceived(resourceResponse, handle.release()); 261 m_resource->responseReceived(resourceResponse, handle.release());
311 if (m_state == ConnectionStateReleased) 262 if (m_state == ConnectionStateReleased)
312 return; 263 return;
313 264
314 m_fetcher->didReceiveResponse(m_resource.get(), resourceResponse); 265 m_fetcher->didReceiveResponse(m_resource.get(), resourceResponse);
315 if (m_state == ConnectionStateReleased) 266 if (m_state == ConnectionStateReleased)
316 return; 267 return;
317 268
318 if (response.toResourceResponse().isMultipart()) { 269 if (response.toResourceResponse().isMultipart()) {
319 // We only support multipart for images, though the image may be loaded 270 // We only support multipart for images, though the image may be loaded
320 // as a main resource that we end up displaying through an ImageDocument . 271 // as a main resource that we end up displaying through an ImageDocument .
321 if (!m_resource->isImage() && m_resource->getType() != Resource::MainRes ource) { 272 if (!m_resource->isImage() && m_resource->getType() != Resource::MainRes ource) {
322 cancel(); 273 cancel(ResourceError::cancelledError(resourceResponse.url()));
323 return; 274 return;
324 } 275 }
325 m_loadingMultipartContent = true; 276 m_loadingMultipartContent = true;
326 } else if (isMultipartPayload) { 277 } else if (isMultipartPayload) {
327 // Since a subresource loader does not load multipart sections progressi vely, data was delivered to the loader all at once. 278 // Since a subresource loader does not load multipart sections progressi vely, data was delivered to the loader all at once.
328 // After the first multipart section is complete, signal to delegates th at this load is "finished" 279 // After the first multipart section is complete, signal to delegates th at this load is "finished"
329 m_fetcher->subresourceLoaderFinishedLoadingOnePart(this); 280 m_fetcher->subresourceLoaderFinishedLoadingOnePart(this);
330 didFinishLoadingOnePart(0, WebURLLoaderClient::kUnknownEncodedDataLength ); 281 didFinishLoadingOnePart(0, WebURLLoaderClient::kUnknownEncodedDataLength );
331 } 282 }
332 if (m_state == ConnectionStateReleased) 283 if (m_state == ConnectionStateReleased)
333 return; 284 return;
334 285
335 if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnor eHTTPStatusCodeErrors()) 286 if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnor eHTTPStatusCodeErrors())
336 return; 287 return;
337 288
338 if (!m_notifiedLoadComplete) { 289 if (!m_notifiedLoadComplete) {
339 m_notifiedLoadComplete = true; 290 m_notifiedLoadComplete = true;
340 m_fetcher->didFailLoading(m_resource.get(), ResourceError::cancelledErro r(m_request.url())); 291 m_fetcher->didFailLoading(m_resource.get(), ResourceError::cancelledErro r(resourceResponse.url()));
341 } 292 }
342 293
343 ASSERT(m_state != ConnectionStateReleased); 294 ASSERT(m_state != ConnectionStateReleased);
344 m_resource->error(Resource::LoadError); 295 m_resource->error(Resource::LoadError);
345 cancel(); 296 cancel(ResourceError::cancelledError(resourceResponse.url()));
346 } 297 }
347 298
348 void ResourceLoader::didReceiveResponse(WebURLLoader* loader, const WebURLRespon se& response) 299 void ResourceLoader::didReceiveResponse(WebURLLoader* loader, const WebURLRespon se& response)
349 { 300 {
350 didReceiveResponse(loader, response, nullptr); 301 didReceiveResponse(loader, response, nullptr);
351 } 302 }
352 303
353 void ResourceLoader::didReceiveData(WebURLLoader*, const char* data, int length, int encodedDataLength) 304 void ResourceLoader::didReceiveData(WebURLLoader*, const char* data, int length, int encodedDataLength)
354 { 305 {
355 RELEASE_ASSERT(m_state == ConnectionStateReceivedResponse || m_state == Conn ectionStateReceivingData); 306 RELEASE_ASSERT(m_state == ConnectionStateReceivedResponse || m_state == Conn ectionStateReceivingData);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 return; 360 return;
410 361
411 m_resource->error(Resource::LoadError); 362 m_resource->error(Resource::LoadError);
412 363
413 if (m_state == ConnectionStateReleased) 364 if (m_state == ConnectionStateReleased)
414 return; 365 return;
415 366
416 releaseResources(); 367 releaseResources();
417 } 368 }
418 369
419 void ResourceLoader::requestSynchronously() 370 void ResourceLoader::requestSynchronously(ResourceRequest& request)
420 { 371 {
421 // downloadToFile is not supported for synchronous requests. 372 // downloadToFile is not supported for synchronous requests.
422 ASSERT(!m_request.downloadToFile()); 373 ASSERT(!request.downloadToFile());
423 ASSERT(m_loader); 374 ASSERT(m_loader);
424 375
376 // Synchronous requests should always be max priority, lest they hang the re nderer.
377 request.setPriority(ResourceLoadPriorityHighest);
378
425 if (m_fetcher->defersLoading()) { 379 if (m_fetcher->defersLoading()) {
426 cancel(); 380 cancel();
427 return; 381 return;
428 } 382 }
429 383
430 RefPtrWillBeRawPtr<Resource> protectResource(m_resource.get()); 384 RefPtrWillBeRawPtr<Resource> protectResource(m_resource.get());
431 WrappedResourceRequest requestIn(m_request); 385 WrappedResourceRequest requestIn(request);
432 WebURLResponse responseOut; 386 WebURLResponse responseOut;
433 responseOut.initialize(); 387 responseOut.initialize();
434 WebURLError errorOut; 388 WebURLError errorOut;
435 WebData dataOut; 389 WebData dataOut;
436 m_loader->loadSynchronously(requestIn, responseOut, errorOut, dataOut); 390 m_loader->loadSynchronously(requestIn, responseOut, errorOut, dataOut);
437 if (errorOut.reason) { 391 if (errorOut.reason) {
438 if (m_state == ConnectionStateReleased) { 392 if (m_state == ConnectionStateReleased) {
439 // A message dispatched while synchronously fetching the resource 393 // A message dispatched while synchronously fetching the resource
440 // can bring about the cancellation of this load. 394 // can bring about the cancellation of this load.
441 ASSERT(!m_resource); 395 ASSERT(!m_resource);
(...skipping 12 matching lines...) Expand all
454 // appending data to m_resource if the response body is empty. Copying the 408 // appending data to m_resource if the response body is empty. Copying the
455 // empty buffer is a noop in most cases, but is destructive in the case of 409 // empty buffer is a noop in most cases, but is destructive in the case of
456 // a 304, where it will overwrite the cached data we should be reusing. 410 // a 304, where it will overwrite the cached data we should be reusing.
457 if (dataOut.size()) { 411 if (dataOut.size()) {
458 m_fetcher->didReceiveData(m_resource.get(), dataOut.data(), dataOut.size (), encodedDataLength); 412 m_fetcher->didReceiveData(m_resource.get(), dataOut.data(), dataOut.size (), encodedDataLength);
459 m_resource->setResourceBuffer(dataOut); 413 m_resource->setResourceBuffer(dataOut);
460 } 414 }
461 didFinishLoading(0, monotonicallyIncreasingTime(), encodedDataLength); 415 didFinishLoading(0, monotonicallyIncreasingTime(), encodedDataLength);
462 } 416 }
463 417
464 ResourceRequest& ResourceLoader::applyOptions(ResourceRequest& request) const
465 {
466 request.setAllowStoredCredentials(m_options.allowCredentials == AllowStoredC redentials);
467 return request;
468 }
469
470 } // namespace blink 418 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698