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 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 void ResourceLoader::trace(Visitor* visitor) | 95 void ResourceLoader::trace(Visitor* visitor) |
96 { | 96 { |
97 visitor->trace(m_host); | 97 visitor->trace(m_host); |
98 visitor->trace(m_resource); | 98 visitor->trace(m_resource); |
99 } | 99 } |
100 | 100 |
101 void ResourceLoader::releaseResources() | 101 void ResourceLoader::releaseResources() |
102 { | 102 { |
103 ASSERT(m_state != Terminated); | 103 ASSERT(m_state != Terminated); |
104 ASSERT(m_notifiedLoadComplete); | 104 ASSERT(m_notifiedLoadComplete); |
105 m_requestCountTracker.clear(); | 105 ASSERT(!m_requestCountTracker); |
106 m_host->didLoadResource(m_resource); | 106 m_host->didLoadResource(); |
107 if (m_state == Terminated) | 107 if (m_state == Terminated) |
108 return; | 108 return; |
109 m_resource->clearLoader(); | 109 m_resource->clearLoader(); |
110 m_resource->deleteIfPossible(); | 110 m_resource->deleteIfPossible(); |
111 m_resource = nullptr; | 111 m_resource = nullptr; |
112 m_host->willTerminateResourceLoader(this); | 112 m_host->willTerminateResourceLoader(this); |
113 | 113 |
114 ASSERT(m_state != Terminated); | 114 ASSERT(m_state != Terminated); |
115 | 115 |
116 // It's possible that when we release the loader, it will be | 116 // It's possible that when we release the loader, it will be |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 | 226 |
227 void ResourceLoader::didFinishLoadingOnePart(double finishTime, int64_t encodedD
ataLength) | 227 void ResourceLoader::didFinishLoadingOnePart(double finishTime, int64_t encodedD
ataLength) |
228 { | 228 { |
229 // If load has been cancelled after finishing (which could happen with a | 229 // If load has been cancelled after finishing (which could happen with a |
230 // JavaScript that changes the window location), do nothing. | 230 // JavaScript that changes the window location), do nothing. |
231 if (m_state == Terminated) | 231 if (m_state == Terminated) |
232 return; | 232 return; |
233 | 233 |
234 if (m_notifiedLoadComplete) | 234 if (m_notifiedLoadComplete) |
235 return; | 235 return; |
236 m_notifiedLoadComplete = true; | 236 didComplete(); |
237 m_host->didFinishLoading(m_resource, finishTime, encodedDataLength); | 237 m_host->didFinishLoading(m_resource, finishTime, encodedDataLength); |
238 } | 238 } |
239 | 239 |
240 void ResourceLoader::didChangePriority(ResourceLoadPriority loadPriority, int in
traPriorityValue) | 240 void ResourceLoader::didChangePriority(ResourceLoadPriority loadPriority, int in
traPriorityValue) |
241 { | 241 { |
242 if (m_loader) { | 242 if (m_loader) { |
243 m_host->didChangeLoadingPriority(m_resource, loadPriority, intraPriority
Value); | 243 m_host->didChangeLoadingPriority(m_resource, loadPriority, intraPriority
Value); |
244 ASSERT(m_state != Terminated); | 244 ASSERT(m_state != Terminated); |
245 m_loader->didChangePriority(static_cast<blink::WebURLRequest::Priority>(
loadPriority), intraPriorityValue); | 245 m_loader->didChangePriority(static_cast<blink::WebURLRequest::Priority>(
loadPriority), intraPriorityValue); |
246 } | 246 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 m_state = Finishing; | 279 m_state = Finishing; |
280 m_resource->setResourceError(nonNullError); | 280 m_resource->setResourceError(nonNullError); |
281 | 281 |
282 if (m_loader) { | 282 if (m_loader) { |
283 m_connectionState = ConnectionStateCanceled; | 283 m_connectionState = ConnectionStateCanceled; |
284 m_loader->cancel(); | 284 m_loader->cancel(); |
285 m_loader.clear(); | 285 m_loader.clear(); |
286 } | 286 } |
287 | 287 |
288 if (!m_notifiedLoadComplete) { | 288 if (!m_notifiedLoadComplete) { |
289 m_notifiedLoadComplete = true; | 289 didComplete(); |
290 m_host->didFailLoading(m_resource, nonNullError); | 290 m_host->didFailLoading(m_resource, nonNullError); |
291 } | 291 } |
292 | 292 |
293 if (m_state == Finishing) | 293 if (m_state == Finishing) |
294 m_resource->error(Resource::LoadError); | 294 m_resource->error(Resource::LoadError); |
295 if (m_state != Terminated) | 295 if (m_state != Terminated) |
296 releaseResources(); | 296 releaseResources(); |
297 } | 297 } |
298 | 298 |
299 void ResourceLoader::willSendRequest(blink::WebURLLoader*, blink::WebURLRequest&
passedNewRequest, const blink::WebURLResponse& passedRedirectResponse) | 299 void ResourceLoader::willSendRequest(blink::WebURLLoader*, blink::WebURLRequest&
passedNewRequest, const blink::WebURLResponse& passedRedirectResponse) |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 didFinishLoadingOnePart(0, blink::WebURLLoaderClient::kUnknownEncodedDat
aLength); | 416 didFinishLoadingOnePart(0, blink::WebURLLoaderClient::kUnknownEncodedDat
aLength); |
417 } | 417 } |
418 if (m_state == Terminated) | 418 if (m_state == Terminated) |
419 return; | 419 return; |
420 | 420 |
421 if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnor
eHTTPStatusCodeErrors()) | 421 if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnor
eHTTPStatusCodeErrors()) |
422 return; | 422 return; |
423 m_state = Finishing; | 423 m_state = Finishing; |
424 | 424 |
425 if (!m_notifiedLoadComplete) { | 425 if (!m_notifiedLoadComplete) { |
426 m_notifiedLoadComplete = true; | 426 didComplete(); |
427 m_host->didFailLoading(m_resource, ResourceError::cancelledError(m_reque
st.url())); | 427 m_host->didFailLoading(m_resource, ResourceError::cancelledError(m_reque
st.url())); |
428 } | 428 } |
429 | 429 |
430 ASSERT(m_state != Terminated); | 430 ASSERT(m_state != Terminated); |
431 m_resource->error(Resource::LoadError); | 431 m_resource->error(Resource::LoadError); |
432 cancel(); | 432 cancel(); |
433 } | 433 } |
434 | 434 |
435 void ResourceLoader::didReceiveData(blink::WebURLLoader*, const char* data, int
length, int encodedDataLength) | 435 void ResourceLoader::didReceiveData(blink::WebURLLoader*, const char* data, int
length, int encodedDataLength) |
436 { | 436 { |
(...skipping 26 matching lines...) Expand all Loading... |
463 RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse || m_con
nectionState == ConnectionStateReceivingData); | 463 RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse || m_con
nectionState == ConnectionStateReceivingData); |
464 m_connectionState = ConnectionStateFinishedLoading; | 464 m_connectionState = ConnectionStateFinishedLoading; |
465 if (m_state != Initialized) | 465 if (m_state != Initialized) |
466 return; | 466 return; |
467 ASSERT(m_state != Terminated); | 467 ASSERT(m_state != Terminated); |
468 WTF_LOG(ResourceLoading, "Received '%s'.", m_resource->url().string().latin1
().data()); | 468 WTF_LOG(ResourceLoading, "Received '%s'.", m_resource->url().string().latin1
().data()); |
469 | 469 |
470 RefPtrWillBeRawPtr<ResourceLoader> protect(this); | 470 RefPtrWillBeRawPtr<ResourceLoader> protect(this); |
471 ResourcePtr<Resource> protectResource(m_resource); | 471 ResourcePtr<Resource> protectResource(m_resource); |
472 m_state = Finishing; | 472 m_state = Finishing; |
| 473 m_resource->setLoadFinishTime(finishTime); |
473 didFinishLoadingOnePart(finishTime, encodedDataLength); | 474 didFinishLoadingOnePart(finishTime, encodedDataLength); |
474 if (m_state == Terminated) | 475 if (m_state == Terminated) |
475 return; | 476 return; |
476 m_resource->finish(finishTime); | 477 m_resource->finish(); |
477 | 478 |
478 // If the load has been cancelled by a delegate in response to didFinishLoad
(), do not release | 479 // If the load has been cancelled by a delegate in response to didFinishLoad
(), do not release |
479 // the resources a second time, they have been released by cancel. | 480 // the resources a second time, they have been released by cancel. |
480 if (m_state == Terminated) | 481 if (m_state == Terminated) |
481 return; | 482 return; |
482 releaseResources(); | 483 releaseResources(); |
483 } | 484 } |
484 | 485 |
485 void ResourceLoader::didFail(blink::WebURLLoader*, const blink::WebURLError& err
or) | 486 void ResourceLoader::didFail(blink::WebURLLoader*, const blink::WebURLError& err
or) |
486 { | 487 { |
487 m_connectionState = ConnectionStateFailed; | 488 m_connectionState = ConnectionStateFailed; |
488 ASSERT(m_state != Terminated); | 489 ASSERT(m_state != Terminated); |
489 WTF_LOG(ResourceLoading, "Failed to load '%s'.\n", m_resource->url().string(
).latin1().data()); | 490 WTF_LOG(ResourceLoading, "Failed to load '%s'.\n", m_resource->url().string(
).latin1().data()); |
490 | 491 |
491 RefPtrWillBeRawPtr<ResourceLoader> protect(this); | 492 RefPtrWillBeRawPtr<ResourceLoader> protect(this); |
492 RefPtrWillBeRawPtr<ResourceLoaderHost> protectHost(m_host.get()); | 493 RefPtrWillBeRawPtr<ResourceLoaderHost> protectHost(m_host.get()); |
493 ResourcePtr<Resource> protectResource(m_resource); | 494 ResourcePtr<Resource> protectResource(m_resource); |
494 m_state = Finishing; | 495 m_state = Finishing; |
495 m_resource->setResourceError(error); | 496 m_resource->setResourceError(error); |
496 | 497 |
497 if (!m_notifiedLoadComplete) { | 498 if (!m_notifiedLoadComplete) { |
498 m_notifiedLoadComplete = true; | 499 didComplete(); |
499 m_host->didFailLoading(m_resource, error); | 500 m_host->didFailLoading(m_resource, error); |
500 } | 501 } |
501 if (m_state == Terminated) | 502 if (m_state == Terminated) |
502 return; | 503 return; |
503 | 504 |
504 m_resource->error(Resource::LoadError); | 505 m_resource->error(Resource::LoadError); |
505 | 506 |
506 if (m_state == Terminated) | 507 if (m_state == Terminated) |
507 return; | 508 return; |
508 | 509 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 didReceiveResponse(0, responseOut); | 543 didReceiveResponse(0, responseOut); |
543 if (m_state == Terminated) | 544 if (m_state == Terminated) |
544 return; | 545 return; |
545 RefPtr<ResourceLoadInfo> resourceLoadInfo = responseOut.toResourceResponse()
.resourceLoadInfo(); | 546 RefPtr<ResourceLoadInfo> resourceLoadInfo = responseOut.toResourceResponse()
.resourceLoadInfo(); |
546 int64_t encodedDataLength = resourceLoadInfo ? resourceLoadInfo->encodedData
Length : blink::WebURLLoaderClient::kUnknownEncodedDataLength; | 547 int64_t encodedDataLength = resourceLoadInfo ? resourceLoadInfo->encodedData
Length : blink::WebURLLoaderClient::kUnknownEncodedDataLength; |
547 m_host->didReceiveData(m_resource, dataOut.data(), dataOut.size(), encodedDa
taLength); | 548 m_host->didReceiveData(m_resource, dataOut.data(), dataOut.size(), encodedDa
taLength); |
548 m_resource->setResourceBuffer(dataOut); | 549 m_resource->setResourceBuffer(dataOut); |
549 didFinishLoading(0, monotonicallyIncreasingTime(), encodedDataLength); | 550 didFinishLoading(0, monotonicallyIncreasingTime(), encodedDataLength); |
550 } | 551 } |
551 | 552 |
| 553 void ResourceLoader::didComplete() |
| 554 { |
| 555 m_notifiedLoadComplete = true; |
| 556 m_requestCountTracker.clear(); |
| 557 } |
| 558 |
552 ResourceRequest& ResourceLoader::applyOptions(ResourceRequest& request) const | 559 ResourceRequest& ResourceLoader::applyOptions(ResourceRequest& request) const |
553 { | 560 { |
554 request.setAllowStoredCredentials(m_options.allowCredentials == AllowStoredC
redentials); | 561 request.setAllowStoredCredentials(m_options.allowCredentials == AllowStoredC
redentials); |
555 return request; | 562 return request; |
556 } | 563 } |
557 | 564 |
558 } | 565 } |
OLD | NEW |