| 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 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 m_deferredRequest = m_request; | 137 m_deferredRequest = m_request; |
| 138 return; | 138 return; |
| 139 } | 139 } |
| 140 | 140 |
| 141 if (m_state == Terminated) | 141 if (m_state == Terminated) |
| 142 return; | 142 return; |
| 143 | 143 |
| 144 RELEASE_ASSERT(m_connectionState == ConnectionStateNew); | 144 RELEASE_ASSERT(m_connectionState == ConnectionStateNew); |
| 145 m_connectionState = ConnectionStateStarted; | 145 m_connectionState = ConnectionStateStarted; |
| 146 | 146 |
| 147 m_loader = adoptPtr(blink::Platform::current()->createURLLoader()); | 147 m_loader = adoptPtr(Platform::current()->createURLLoader()); |
| 148 ASSERT(m_loader); | 148 ASSERT(m_loader); |
| 149 blink::WrappedResourceRequest wrappedRequest(m_request); | 149 WrappedResourceRequest wrappedRequest(m_request); |
| 150 m_loader->loadAsynchronously(wrappedRequest, this); | 150 m_loader->loadAsynchronously(wrappedRequest, this); |
| 151 } | 151 } |
| 152 | 152 |
| 153 void ResourceLoader::changeToSynchronous() | 153 void ResourceLoader::changeToSynchronous() |
| 154 { | 154 { |
| 155 ASSERT(m_options.synchronousPolicy == RequestAsynchronously); | 155 ASSERT(m_options.synchronousPolicy == RequestAsynchronously); |
| 156 ASSERT(m_loader); | 156 ASSERT(m_loader); |
| 157 m_loader->cancel(); | 157 m_loader->cancel(); |
| 158 m_loader.clear(); | 158 m_loader.clear(); |
| 159 m_request.setPriority(ResourceLoadPriorityHighest); | 159 m_request.setPriority(ResourceLoadPriorityHighest); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 178 if (m_loader) { | 178 if (m_loader) { |
| 179 // The implementor of the WebURLLoader assumes ownership of the | 179 // The implementor of the WebURLLoader assumes ownership of the |
| 180 // threaded data receiver if it signals that it got successfully | 180 // threaded data receiver if it signals that it got successfully |
| 181 // attached. | 181 // attached. |
| 182 WebThreadedDataReceiver* webDataReceiver = new WebThreadedDataReceiver(t
hreadedDataReceiver); | 182 WebThreadedDataReceiver* webDataReceiver = new WebThreadedDataReceiver(t
hreadedDataReceiver); |
| 183 if (!m_loader->attachThreadedDataReceiver(webDataReceiver)) | 183 if (!m_loader->attachThreadedDataReceiver(webDataReceiver)) |
| 184 delete webDataReceiver; | 184 delete webDataReceiver; |
| 185 } | 185 } |
| 186 } | 186 } |
| 187 | 187 |
| 188 void ResourceLoader::didDownloadData(blink::WebURLLoader*, int length, int encod
edDataLength) | 188 void ResourceLoader::didDownloadData(WebURLLoader*, int length, int encodedDataL
ength) |
| 189 { | 189 { |
| 190 ASSERT(m_state != Terminated); | 190 ASSERT(m_state != Terminated); |
| 191 RefPtrWillBeRawPtr<ResourceLoader> protect(this); | 191 RefPtrWillBeRawPtr<ResourceLoader> protect(this); |
| 192 RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse); | 192 RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse); |
| 193 m_host->didDownloadData(m_resource, length, encodedDataLength); | 193 m_host->didDownloadData(m_resource, length, encodedDataLength); |
| 194 if (m_state == Terminated) | 194 if (m_state == Terminated) |
| 195 return; | 195 return; |
| 196 m_resource->didDownloadData(length); | 196 m_resource->didDownloadData(length); |
| 197 } | 197 } |
| 198 | 198 |
| 199 void ResourceLoader::didFinishLoadingOnePart(double finishTime, int64_t encodedD
ataLength) | 199 void ResourceLoader::didFinishLoadingOnePart(double finishTime, int64_t encodedD
ataLength) |
| 200 { | 200 { |
| 201 // If load has been cancelled after finishing (which could happen with a | 201 // If load has been cancelled after finishing (which could happen with a |
| 202 // JavaScript that changes the window location), do nothing. | 202 // JavaScript that changes the window location), do nothing. |
| 203 if (m_state == Terminated) | 203 if (m_state == Terminated) |
| 204 return; | 204 return; |
| 205 | 205 |
| 206 if (m_notifiedLoadComplete) | 206 if (m_notifiedLoadComplete) |
| 207 return; | 207 return; |
| 208 m_notifiedLoadComplete = true; | 208 m_notifiedLoadComplete = true; |
| 209 m_host->didFinishLoading(m_resource, finishTime, encodedDataLength); | 209 m_host->didFinishLoading(m_resource, finishTime, encodedDataLength); |
| 210 } | 210 } |
| 211 | 211 |
| 212 void ResourceLoader::didChangePriority(ResourceLoadPriority loadPriority, int in
traPriorityValue) | 212 void ResourceLoader::didChangePriority(ResourceLoadPriority loadPriority, int in
traPriorityValue) |
| 213 { | 213 { |
| 214 if (m_loader) { | 214 if (m_loader) { |
| 215 m_host->didChangeLoadingPriority(m_resource, loadPriority, intraPriority
Value); | 215 m_host->didChangeLoadingPriority(m_resource, loadPriority, intraPriority
Value); |
| 216 ASSERT(m_state != Terminated); | 216 ASSERT(m_state != Terminated); |
| 217 m_loader->didChangePriority(static_cast<blink::WebURLRequest::Priority>(
loadPriority), intraPriorityValue); | 217 m_loader->didChangePriority(static_cast<WebURLRequest::Priority>(loadPri
ority), intraPriorityValue); |
| 218 } | 218 } |
| 219 } | 219 } |
| 220 | 220 |
| 221 void ResourceLoader::cancelIfNotFinishing() | 221 void ResourceLoader::cancelIfNotFinishing() |
| 222 { | 222 { |
| 223 if (m_state != Initialized) | 223 if (m_state != Initialized) |
| 224 return; | 224 return; |
| 225 cancel(); | 225 cancel(); |
| 226 } | 226 } |
| 227 | 227 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 m_notifiedLoadComplete = true; | 261 m_notifiedLoadComplete = true; |
| 262 m_host->didFailLoading(m_resource, nonNullError); | 262 m_host->didFailLoading(m_resource, nonNullError); |
| 263 } | 263 } |
| 264 | 264 |
| 265 if (m_state == Finishing) | 265 if (m_state == Finishing) |
| 266 m_resource->error(Resource::LoadError); | 266 m_resource->error(Resource::LoadError); |
| 267 if (m_state != Terminated) | 267 if (m_state != Terminated) |
| 268 releaseResources(); | 268 releaseResources(); |
| 269 } | 269 } |
| 270 | 270 |
| 271 void ResourceLoader::willSendRequest(blink::WebURLLoader*, blink::WebURLRequest&
passedNewRequest, const blink::WebURLResponse& passedRedirectResponse) | 271 void ResourceLoader::willSendRequest(WebURLLoader*, WebURLRequest& passedNewRequ
est, const WebURLResponse& passedRedirectResponse) |
| 272 { | 272 { |
| 273 ASSERT(m_state != Terminated); | 273 ASSERT(m_state != Terminated); |
| 274 RefPtrWillBeRawPtr<ResourceLoader> protect(this); | 274 RefPtrWillBeRawPtr<ResourceLoader> protect(this); |
| 275 | 275 |
| 276 ResourceRequest& newRequest(applyOptions(passedNewRequest.toMutableResourceR
equest())); | 276 ResourceRequest& newRequest(applyOptions(passedNewRequest.toMutableResourceR
equest())); |
| 277 | 277 |
| 278 ASSERT(!newRequest.isNull()); | 278 ASSERT(!newRequest.isNull()); |
| 279 const ResourceResponse& redirectResponse(passedRedirectResponse.toResourceRe
sponse()); | 279 const ResourceResponse& redirectResponse(passedRedirectResponse.toResourceRe
sponse()); |
| 280 ASSERT(!redirectResponse.isNull()); | 280 ASSERT(!redirectResponse.isNull()); |
| 281 newRequest.setFollowedRedirect(true); | 281 newRequest.setFollowedRedirect(true); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 292 if (newRequest.isNull() || m_state == Terminated) | 292 if (newRequest.isNull() || m_state == Terminated) |
| 293 return; | 293 return; |
| 294 | 294 |
| 295 m_host->willSendRequest(m_resource->identifier(), newRequest, redirectRespon
se, m_options.initiatorInfo); | 295 m_host->willSendRequest(m_resource->identifier(), newRequest, redirectRespon
se, m_options.initiatorInfo); |
| 296 ASSERT(m_state != Terminated); | 296 ASSERT(m_state != Terminated); |
| 297 ASSERT(!newRequest.isNull()); | 297 ASSERT(!newRequest.isNull()); |
| 298 m_resource->updateRequest(newRequest); | 298 m_resource->updateRequest(newRequest); |
| 299 m_request = newRequest; | 299 m_request = newRequest; |
| 300 } | 300 } |
| 301 | 301 |
| 302 void ResourceLoader::didReceiveCachedMetadata(blink::WebURLLoader*, const char*
data, int length) | 302 void ResourceLoader::didReceiveCachedMetadata(WebURLLoader*, const char* data, i
nt length) |
| 303 { | 303 { |
| 304 RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse || m_con
nectionState == ConnectionStateReceivingData); | 304 RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse || m_con
nectionState == ConnectionStateReceivingData); |
| 305 ASSERT(m_state == Initialized); | 305 ASSERT(m_state == Initialized); |
| 306 m_resource->setSerializedCachedMetadata(data, length); | 306 m_resource->setSerializedCachedMetadata(data, length); |
| 307 } | 307 } |
| 308 | 308 |
| 309 void ResourceLoader::didSendData(blink::WebURLLoader*, unsigned long long bytesS
ent, unsigned long long totalBytesToBeSent) | 309 void ResourceLoader::didSendData(WebURLLoader*, unsigned long long bytesSent, un
signed long long totalBytesToBeSent) |
| 310 { | 310 { |
| 311 ASSERT(m_state == Initialized); | 311 ASSERT(m_state == Initialized); |
| 312 m_resource->didSendData(bytesSent, totalBytesToBeSent); | 312 m_resource->didSendData(bytesSent, totalBytesToBeSent); |
| 313 } | 313 } |
| 314 | 314 |
| 315 bool ResourceLoader::responseNeedsAccessControlCheck() const | 315 bool ResourceLoader::responseNeedsAccessControlCheck() const |
| 316 { | 316 { |
| 317 // If the fetch was (potentially) CORS enabled, an access control check of t
he response is required. | 317 // If the fetch was (potentially) CORS enabled, an access control check of t
he response is required. |
| 318 return m_options.corsEnabled == IsCORSEnabled; | 318 return m_options.corsEnabled == IsCORSEnabled; |
| 319 } | 319 } |
| 320 | 320 |
| 321 void ResourceLoader::didReceiveResponse(blink::WebURLLoader*, const blink::WebUR
LResponse& response, WebDataConsumerHandle* rawHandle) | 321 void ResourceLoader::didReceiveResponse(WebURLLoader*, const WebURLResponse& res
ponse, WebDataConsumerHandle* rawHandle) |
| 322 { | 322 { |
| 323 ASSERT(!response.isNull()); | 323 ASSERT(!response.isNull()); |
| 324 ASSERT(m_state == Initialized); | 324 ASSERT(m_state == Initialized); |
| 325 // |rawHandle|'s ownership is transferred to the callee. | 325 // |rawHandle|'s ownership is transferred to the callee. |
| 326 OwnPtr<WebDataConsumerHandle> handle = adoptPtr(rawHandle); | 326 OwnPtr<WebDataConsumerHandle> handle = adoptPtr(rawHandle); |
| 327 | 327 |
| 328 bool isMultipartPayload = response.isMultipartPayload(); | 328 bool isMultipartPayload = response.isMultipartPayload(); |
| 329 bool isValidStateTransition = (m_connectionState == ConnectionStateStarted |
| m_connectionState == ConnectionStateReceivedResponse); | 329 bool isValidStateTransition = (m_connectionState == ConnectionStateStarted |
| m_connectionState == ConnectionStateReceivedResponse); |
| 330 // In the case of multipart loads, calls to didReceiveData & didReceiveRespo
nse can be interleaved. | 330 // In the case of multipart loads, calls to didReceiveData & didReceiveRespo
nse can be interleaved. |
| 331 RELEASE_ASSERT(isMultipartPayload || isValidStateTransition); | 331 RELEASE_ASSERT(isMultipartPayload || isValidStateTransition); |
| 332 m_connectionState = ConnectionStateReceivedResponse; | 332 m_connectionState = ConnectionStateReceivedResponse; |
| 333 | 333 |
| 334 const ResourceResponse& resourceResponse = response.toResourceResponse(); | 334 const ResourceResponse& resourceResponse = response.toResourceResponse(); |
| 335 | 335 |
| 336 if (responseNeedsAccessControlCheck()) { | 336 if (responseNeedsAccessControlCheck()) { |
| 337 if (response.wasFetchedViaServiceWorker()) { | 337 if (response.wasFetchedViaServiceWorker()) { |
| 338 if (response.wasFallbackRequiredByServiceWorker()) { | 338 if (response.wasFallbackRequiredByServiceWorker()) { |
| 339 ASSERT(m_fallbackRequestForServiceWorker); | 339 ASSERT(m_fallbackRequestForServiceWorker); |
| 340 m_loader->cancel(); | 340 m_loader->cancel(); |
| 341 m_loader.clear(); | 341 m_loader.clear(); |
| 342 m_connectionState = ConnectionStateStarted; | 342 m_connectionState = ConnectionStateStarted; |
| 343 m_request = *m_fallbackRequestForServiceWorker; | 343 m_request = *m_fallbackRequestForServiceWorker; |
| 344 m_loader = adoptPtr(blink::Platform::current()->createURLLoader(
)); | 344 m_loader = adoptPtr(Platform::current()->createURLLoader()); |
| 345 ASSERT(m_loader); | 345 ASSERT(m_loader); |
| 346 blink::WrappedResourceRequest wrappedRequest(m_request); | 346 WrappedResourceRequest wrappedRequest(m_request); |
| 347 m_loader->loadAsynchronously(wrappedRequest, this); | 347 m_loader->loadAsynchronously(wrappedRequest, this); |
| 348 return; | 348 return; |
| 349 } | 349 } |
| 350 } else { | 350 } else { |
| 351 // If the response successfully validated a cached resource, perform | 351 // If the response successfully validated a cached resource, perform |
| 352 // the access control with respect to it. Need to do this right here | 352 // the access control with respect to it. Need to do this right here |
| 353 // before the resource switches clients over to that validated resou
rce. | 353 // before the resource switches clients over to that validated resou
rce. |
| 354 Resource* resource = m_resource; | 354 Resource* resource = m_resource; |
| 355 if (resource->isCacheValidator() && resourceResponse.httpStatusCode(
) == 304) | 355 if (resource->isCacheValidator() && resourceResponse.httpStatusCode(
) == 304) |
| 356 resource = m_resource->resourceToRevalidate(); | 356 resource = m_resource->resourceToRevalidate(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 377 | 377 |
| 378 if (response.toResourceResponse().isMultipart()) { | 378 if (response.toResourceResponse().isMultipart()) { |
| 379 if (!m_resource->isImage()) { | 379 if (!m_resource->isImage()) { |
| 380 cancel(); | 380 cancel(); |
| 381 return; | 381 return; |
| 382 } | 382 } |
| 383 } else if (isMultipartPayload) { | 383 } else if (isMultipartPayload) { |
| 384 // Since a subresource loader does not load multipart sections progressi
vely, data was delivered to the loader all at once. | 384 // Since a subresource loader does not load multipart sections progressi
vely, data was delivered to the loader all at once. |
| 385 // After the first multipart section is complete, signal to delegates th
at this load is "finished" | 385 // After the first multipart section is complete, signal to delegates th
at this load is "finished" |
| 386 m_host->subresourceLoaderFinishedLoadingOnePart(this); | 386 m_host->subresourceLoaderFinishedLoadingOnePart(this); |
| 387 didFinishLoadingOnePart(0, blink::WebURLLoaderClient::kUnknownEncodedDat
aLength); | 387 didFinishLoadingOnePart(0, WebURLLoaderClient::kUnknownEncodedDataLength
); |
| 388 } | 388 } |
| 389 if (m_state == Terminated) | 389 if (m_state == Terminated) |
| 390 return; | 390 return; |
| 391 | 391 |
| 392 if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnor
eHTTPStatusCodeErrors()) | 392 if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnor
eHTTPStatusCodeErrors()) |
| 393 return; | 393 return; |
| 394 m_state = Finishing; | 394 m_state = Finishing; |
| 395 | 395 |
| 396 if (!m_notifiedLoadComplete) { | 396 if (!m_notifiedLoadComplete) { |
| 397 m_notifiedLoadComplete = true; | 397 m_notifiedLoadComplete = true; |
| 398 m_host->didFailLoading(m_resource, ResourceError::cancelledError(m_reque
st.url())); | 398 m_host->didFailLoading(m_resource, ResourceError::cancelledError(m_reque
st.url())); |
| 399 } | 399 } |
| 400 | 400 |
| 401 ASSERT(m_state != Terminated); | 401 ASSERT(m_state != Terminated); |
| 402 m_resource->error(Resource::LoadError); | 402 m_resource->error(Resource::LoadError); |
| 403 cancel(); | 403 cancel(); |
| 404 } | 404 } |
| 405 | 405 |
| 406 void ResourceLoader::didReceiveResponse(blink::WebURLLoader* loader, const blink
::WebURLResponse& response) | 406 void ResourceLoader::didReceiveResponse(WebURLLoader* loader, const WebURLRespon
se& response) |
| 407 { | 407 { |
| 408 didReceiveResponse(loader, response, nullptr); | 408 didReceiveResponse(loader, response, nullptr); |
| 409 } | 409 } |
| 410 | 410 |
| 411 void ResourceLoader::didReceiveData(blink::WebURLLoader*, const char* data, int
length, int encodedDataLength) | 411 void ResourceLoader::didReceiveData(WebURLLoader*, const char* data, int length,
int encodedDataLength) |
| 412 { | 412 { |
| 413 ASSERT(m_state != Terminated); | 413 ASSERT(m_state != Terminated); |
| 414 RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse || m_con
nectionState == ConnectionStateReceivingData); | 414 RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse || m_con
nectionState == ConnectionStateReceivingData); |
| 415 m_connectionState = ConnectionStateReceivingData; | 415 m_connectionState = ConnectionStateReceivingData; |
| 416 | 416 |
| 417 // It is possible to receive data on uninitialized resources if it had an er
ror status code, and we are running a nested message | 417 // It is possible to receive data on uninitialized resources if it had an er
ror status code, and we are running a nested message |
| 418 // loop. When this occurs, ignoring the data is the correct action. | 418 // loop. When this occurs, ignoring the data is the correct action. |
| 419 if (m_resource->response().httpStatusCode() >= 400 && !m_resource->shouldIgn
oreHTTPStatusCodeErrors()) | 419 if (m_resource->response().httpStatusCode() >= 400 && !m_resource->shouldIgn
oreHTTPStatusCodeErrors()) |
| 420 return; | 420 return; |
| 421 ASSERT(m_state == Initialized); | 421 ASSERT(m_state == Initialized); |
| 422 | 422 |
| 423 // Reference the object in this method since the additional processing can d
o | 423 // Reference the object in this method since the additional processing can d
o |
| 424 // anything including removing the last reference to this object. | 424 // anything including removing the last reference to this object. |
| 425 RefPtrWillBeRawPtr<ResourceLoader> protect(this); | 425 RefPtrWillBeRawPtr<ResourceLoader> protect(this); |
| 426 | 426 |
| 427 // FIXME: If we get a resource with more than 2B bytes, this code won't do t
he right thing. | 427 // FIXME: If we get a resource with more than 2B bytes, this code won't do t
he right thing. |
| 428 // However, with today's computers and networking speeds, this won't happen
in practice. | 428 // However, with today's computers and networking speeds, this won't happen
in practice. |
| 429 // Could be an issue with a giant local file. | 429 // Could be an issue with a giant local file. |
| 430 m_host->didReceiveData(m_resource, data, length, encodedDataLength); | 430 m_host->didReceiveData(m_resource, data, length, encodedDataLength); |
| 431 if (m_state == Terminated) | 431 if (m_state == Terminated) |
| 432 return; | 432 return; |
| 433 RELEASE_ASSERT(length >= 0); | 433 RELEASE_ASSERT(length >= 0); |
| 434 m_resource->appendData(data, length); | 434 m_resource->appendData(data, length); |
| 435 } | 435 } |
| 436 | 436 |
| 437 void ResourceLoader::didFinishLoading(blink::WebURLLoader*, double finishTime, i
nt64_t encodedDataLength) | 437 void ResourceLoader::didFinishLoading(WebURLLoader*, double finishTime, int64_t
encodedDataLength) |
| 438 { | 438 { |
| 439 RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse || m_con
nectionState == ConnectionStateReceivingData); | 439 RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse || m_con
nectionState == ConnectionStateReceivingData); |
| 440 m_connectionState = ConnectionStateFinishedLoading; | 440 m_connectionState = ConnectionStateFinishedLoading; |
| 441 if (m_state != Initialized) | 441 if (m_state != Initialized) |
| 442 return; | 442 return; |
| 443 ASSERT(m_state != Terminated); | 443 ASSERT(m_state != Terminated); |
| 444 WTF_LOG(ResourceLoading, "Received '%s'.", m_resource->url().string().latin1
().data()); | 444 WTF_LOG(ResourceLoading, "Received '%s'.", m_resource->url().string().latin1
().data()); |
| 445 | 445 |
| 446 RefPtrWillBeRawPtr<ResourceLoader> protect(this); | 446 RefPtrWillBeRawPtr<ResourceLoader> protect(this); |
| 447 ResourcePtr<Resource> protectResource(m_resource); | 447 ResourcePtr<Resource> protectResource(m_resource); |
| 448 m_state = Finishing; | 448 m_state = Finishing; |
| 449 m_resource->setLoadFinishTime(finishTime); | 449 m_resource->setLoadFinishTime(finishTime); |
| 450 didFinishLoadingOnePart(finishTime, encodedDataLength); | 450 didFinishLoadingOnePart(finishTime, encodedDataLength); |
| 451 if (m_state == Terminated) | 451 if (m_state == Terminated) |
| 452 return; | 452 return; |
| 453 m_resource->finish(); | 453 m_resource->finish(); |
| 454 | 454 |
| 455 // If the load has been cancelled by a delegate in response to didFinishLoad
(), do not release | 455 // If the load has been cancelled by a delegate in response to didFinishLoad
(), do not release |
| 456 // the resources a second time, they have been released by cancel. | 456 // the resources a second time, they have been released by cancel. |
| 457 if (m_state == Terminated) | 457 if (m_state == Terminated) |
| 458 return; | 458 return; |
| 459 releaseResources(); | 459 releaseResources(); |
| 460 } | 460 } |
| 461 | 461 |
| 462 void ResourceLoader::didFail(blink::WebURLLoader*, const blink::WebURLError& err
or) | 462 void ResourceLoader::didFail(WebURLLoader*, const WebURLError& error) |
| 463 { | 463 { |
| 464 m_connectionState = ConnectionStateFailed; | 464 m_connectionState = ConnectionStateFailed; |
| 465 ASSERT(m_state != Terminated); | 465 ASSERT(m_state != Terminated); |
| 466 WTF_LOG(ResourceLoading, "Failed to load '%s'.\n", m_resource->url().string(
).latin1().data()); | 466 WTF_LOG(ResourceLoading, "Failed to load '%s'.\n", m_resource->url().string(
).latin1().data()); |
| 467 | 467 |
| 468 RefPtrWillBeRawPtr<ResourceLoader> protect(this); | 468 RefPtrWillBeRawPtr<ResourceLoader> protect(this); |
| 469 RefPtrWillBeRawPtr<ResourceLoaderHost> protectHost(m_host.get()); | 469 RefPtrWillBeRawPtr<ResourceLoaderHost> protectHost(m_host.get()); |
| 470 ResourcePtr<Resource> protectResource(m_resource); | 470 ResourcePtr<Resource> protectResource(m_resource); |
| 471 m_state = Finishing; | 471 m_state = Finishing; |
| 472 m_resource->setResourceError(error); | 472 m_resource->setResourceError(error); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 486 releaseResources(); | 486 releaseResources(); |
| 487 } | 487 } |
| 488 | 488 |
| 489 bool ResourceLoader::isLoadedBy(ResourceLoaderHost* loader) const | 489 bool ResourceLoader::isLoadedBy(ResourceLoaderHost* loader) const |
| 490 { | 490 { |
| 491 return m_host->isLoadedBy(loader); | 491 return m_host->isLoadedBy(loader); |
| 492 } | 492 } |
| 493 | 493 |
| 494 void ResourceLoader::requestSynchronously() | 494 void ResourceLoader::requestSynchronously() |
| 495 { | 495 { |
| 496 OwnPtr<blink::WebURLLoader> loader = adoptPtr(blink::Platform::current()->cr
eateURLLoader()); | 496 OwnPtr<WebURLLoader> loader = adoptPtr(Platform::current()->createURLLoader(
)); |
| 497 ASSERT(loader); | 497 ASSERT(loader); |
| 498 | 498 |
| 499 // downloadToFile is not supported for synchronous requests. | 499 // downloadToFile is not supported for synchronous requests. |
| 500 ASSERT(!m_request.downloadToFile()); | 500 ASSERT(!m_request.downloadToFile()); |
| 501 | 501 |
| 502 RefPtrWillBeRawPtr<ResourceLoader> protect(this); | 502 RefPtrWillBeRawPtr<ResourceLoader> protect(this); |
| 503 RefPtrWillBeRawPtr<ResourceLoaderHost> protectHost(m_host.get()); | 503 RefPtrWillBeRawPtr<ResourceLoaderHost> protectHost(m_host.get()); |
| 504 ResourcePtr<Resource> protectResource(m_resource); | 504 ResourcePtr<Resource> protectResource(m_resource); |
| 505 | 505 |
| 506 RELEASE_ASSERT(m_connectionState == ConnectionStateNew); | 506 RELEASE_ASSERT(m_connectionState == ConnectionStateNew); |
| 507 m_connectionState = ConnectionStateStarted; | 507 m_connectionState = ConnectionStateStarted; |
| 508 | 508 |
| 509 blink::WrappedResourceRequest requestIn(m_request); | 509 WrappedResourceRequest requestIn(m_request); |
| 510 blink::WebURLResponse responseOut; | 510 WebURLResponse responseOut; |
| 511 responseOut.initialize(); | 511 responseOut.initialize(); |
| 512 blink::WebURLError errorOut; | 512 WebURLError errorOut; |
| 513 blink::WebData dataOut; | 513 WebData dataOut; |
| 514 loader->loadSynchronously(requestIn, responseOut, errorOut, dataOut); | 514 loader->loadSynchronously(requestIn, responseOut, errorOut, dataOut); |
| 515 if (errorOut.reason) { | 515 if (errorOut.reason) { |
| 516 didFail(0, errorOut); | 516 didFail(0, errorOut); |
| 517 return; | 517 return; |
| 518 } | 518 } |
| 519 didReceiveResponse(0, responseOut); | 519 didReceiveResponse(0, responseOut); |
| 520 if (m_state == Terminated) | 520 if (m_state == Terminated) |
| 521 return; | 521 return; |
| 522 RefPtr<ResourceLoadInfo> resourceLoadInfo = responseOut.toResourceResponse()
.resourceLoadInfo(); | 522 RefPtr<ResourceLoadInfo> resourceLoadInfo = responseOut.toResourceResponse()
.resourceLoadInfo(); |
| 523 int64_t encodedDataLength = resourceLoadInfo ? resourceLoadInfo->encodedData
Length : blink::WebURLLoaderClient::kUnknownEncodedDataLength; | 523 int64_t encodedDataLength = resourceLoadInfo ? resourceLoadInfo->encodedData
Length : WebURLLoaderClient::kUnknownEncodedDataLength; |
| 524 m_host->didReceiveData(m_resource, dataOut.data(), dataOut.size(), encodedDa
taLength); | 524 m_host->didReceiveData(m_resource, dataOut.data(), dataOut.size(), encodedDa
taLength); |
| 525 m_resource->setResourceBuffer(dataOut); | 525 m_resource->setResourceBuffer(dataOut); |
| 526 didFinishLoading(0, monotonicallyIncreasingTime(), encodedDataLength); | 526 didFinishLoading(0, monotonicallyIncreasingTime(), encodedDataLength); |
| 527 } | 527 } |
| 528 | 528 |
| 529 ResourceRequest& ResourceLoader::applyOptions(ResourceRequest& request) const | 529 ResourceRequest& ResourceLoader::applyOptions(ResourceRequest& request) const |
| 530 { | 530 { |
| 531 request.setAllowStoredCredentials(m_options.allowCredentials == AllowStoredC
redentials); | 531 request.setAllowStoredCredentials(m_options.allowCredentials == AllowStoredC
redentials); |
| 532 return request; | 532 return request; |
| 533 } | 533 } |
| 534 | 534 |
| 535 } | 535 } |
| OLD | NEW |