OLD | NEW |
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 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 RefPtrWillBeRawPtr<ResourceLoader> protect(this); | 339 RefPtrWillBeRawPtr<ResourceLoader> protect(this); |
340 m_resource->didSendData(bytesSent, totalBytesToBeSent); | 340 m_resource->didSendData(bytesSent, totalBytesToBeSent); |
341 } | 341 } |
342 | 342 |
343 bool ResourceLoader::responseNeedsAccessControlCheck() const | 343 bool ResourceLoader::responseNeedsAccessControlCheck() const |
344 { | 344 { |
345 // If the fetch was (potentially) CORS enabled, an access control check of t
he response is required. | 345 // If the fetch was (potentially) CORS enabled, an access control check of t
he response is required. |
346 return m_options.corsEnabled == IsCORSEnabled; | 346 return m_options.corsEnabled == IsCORSEnabled; |
347 } | 347 } |
348 | 348 |
349 void ResourceLoader::didReceiveResponse(blink::WebURLLoader*, const blink::WebUR
LResponse& response) | 349 void ResourceLoader::didReceiveResponse(blink::WebURLLoader*, const blink::WebUR
LResponse& response, WebDataConsumerHandle* rawHandle) |
350 { | 350 { |
351 ASSERT(!response.isNull()); | 351 ASSERT(!response.isNull()); |
352 ASSERT(m_state == Initialized); | 352 ASSERT(m_state == Initialized); |
| 353 // |rawHandle|'s ownership is transferred to the callee. |
| 354 OwnPtr<WebDataConsumerHandle> handle = adoptPtr(rawHandle); |
353 | 355 |
354 bool isMultipartPayload = response.isMultipartPayload(); | 356 bool isMultipartPayload = response.isMultipartPayload(); |
355 bool isValidStateTransition = (m_connectionState == ConnectionStateStarted |
| m_connectionState == ConnectionStateReceivedResponse); | 357 bool isValidStateTransition = (m_connectionState == ConnectionStateStarted |
| m_connectionState == ConnectionStateReceivedResponse); |
356 // In the case of multipart loads, calls to didReceiveData & didReceiveRespo
nse can be interleaved. | 358 // In the case of multipart loads, calls to didReceiveData & didReceiveRespo
nse can be interleaved. |
357 RELEASE_ASSERT(isMultipartPayload || isValidStateTransition); | 359 RELEASE_ASSERT(isMultipartPayload || isValidStateTransition); |
358 m_connectionState = ConnectionStateReceivedResponse; | 360 m_connectionState = ConnectionStateReceivedResponse; |
359 | 361 |
360 const ResourceResponse& resourceResponse = response.toResourceResponse(); | 362 const ResourceResponse& resourceResponse = response.toResourceResponse(); |
361 | 363 |
362 if (responseNeedsAccessControlCheck()) { | 364 if (responseNeedsAccessControlCheck()) { |
(...skipping 22 matching lines...) Expand all Loading... |
385 m_host->didReceiveResponse(m_resource, resourceResponse); | 387 m_host->didReceiveResponse(m_resource, resourceResponse); |
386 cancel(); | 388 cancel(); |
387 return; | 389 return; |
388 } | 390 } |
389 } | 391 } |
390 } | 392 } |
391 | 393 |
392 // Reference the object in this method since the additional processing can d
o | 394 // Reference the object in this method since the additional processing can d
o |
393 // anything including removing the last reference to this object. | 395 // anything including removing the last reference to this object. |
394 RefPtrWillBeRawPtr<ResourceLoader> protect(this); | 396 RefPtrWillBeRawPtr<ResourceLoader> protect(this); |
395 m_resource->responseReceived(resourceResponse); | 397 m_resource->responseReceived(resourceResponse, handle.release()); |
396 if (m_state == Terminated) | 398 if (m_state == Terminated) |
397 return; | 399 return; |
398 | 400 |
399 m_host->didReceiveResponse(m_resource, resourceResponse); | 401 m_host->didReceiveResponse(m_resource, resourceResponse); |
400 if (m_state == Terminated) | 402 if (m_state == Terminated) |
401 return; | 403 return; |
402 | 404 |
403 if (response.toResourceResponse().isMultipart()) { | 405 if (response.toResourceResponse().isMultipart()) { |
404 // We don't count multiParts in a ResourceFetcher's request count | 406 // We don't count multiParts in a ResourceFetcher's request count |
405 m_requestCountTracker.clear(); | 407 m_requestCountTracker.clear(); |
(...skipping 18 matching lines...) Expand all Loading... |
424 if (!m_notifiedLoadComplete) { | 426 if (!m_notifiedLoadComplete) { |
425 m_notifiedLoadComplete = true; | 427 m_notifiedLoadComplete = true; |
426 m_host->didFailLoading(m_resource, ResourceError::cancelledError(m_reque
st.url())); | 428 m_host->didFailLoading(m_resource, ResourceError::cancelledError(m_reque
st.url())); |
427 } | 429 } |
428 | 430 |
429 ASSERT(m_state != Terminated); | 431 ASSERT(m_state != Terminated); |
430 m_resource->error(Resource::LoadError); | 432 m_resource->error(Resource::LoadError); |
431 cancel(); | 433 cancel(); |
432 } | 434 } |
433 | 435 |
| 436 void ResourceLoader::didReceiveResponse(blink::WebURLLoader* loader, const blink
::WebURLResponse& response) |
| 437 { |
| 438 didReceiveResponse(loader, response, nullptr); |
| 439 } |
| 440 |
434 void ResourceLoader::didReceiveData(blink::WebURLLoader*, const char* data, int
length, int encodedDataLength) | 441 void ResourceLoader::didReceiveData(blink::WebURLLoader*, const char* data, int
length, int encodedDataLength) |
435 { | 442 { |
436 ASSERT(m_state != Terminated); | 443 ASSERT(m_state != Terminated); |
437 RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse || m_con
nectionState == ConnectionStateReceivingData); | 444 RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse || m_con
nectionState == ConnectionStateReceivingData); |
438 m_connectionState = ConnectionStateReceivingData; | 445 m_connectionState = ConnectionStateReceivingData; |
439 | 446 |
440 // It is possible to receive data on uninitialized resources if it had an er
ror status code, and we are running a nested message | 447 // It is possible to receive data on uninitialized resources if it had an er
ror status code, and we are running a nested message |
441 // loop. When this occurs, ignoring the data is the correct action. | 448 // loop. When this occurs, ignoring the data is the correct action. |
442 if (m_resource->response().httpStatusCode() >= 400 && !m_resource->shouldIgn
oreHTTPStatusCodeErrors()) | 449 if (m_resource->response().httpStatusCode() >= 400 && !m_resource->shouldIgn
oreHTTPStatusCodeErrors()) |
443 return; | 450 return; |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 didFinishLoading(0, monotonicallyIncreasingTime(), encodedDataLength); | 555 didFinishLoading(0, monotonicallyIncreasingTime(), encodedDataLength); |
549 } | 556 } |
550 | 557 |
551 ResourceRequest& ResourceLoader::applyOptions(ResourceRequest& request) const | 558 ResourceRequest& ResourceLoader::applyOptions(ResourceRequest& request) const |
552 { | 559 { |
553 request.setAllowStoredCredentials(m_options.allowCredentials == AllowStoredC
redentials); | 560 request.setAllowStoredCredentials(m_options.allowCredentials == AllowStoredC
redentials); |
554 return request; | 561 return request; |
555 } | 562 } |
556 | 563 |
557 } | 564 } |
OLD | NEW |