void ResourceLoader::didReceiveResponse(blink::WebURLLoader*, const blink::WebURLResponse& response) { ASSERT(!response.isNull()); ASSERT(m_state == Initialized); bool isMultipartPayload = response.isMultipartPayload(); bool isValidStateTransition = (m_connectionState == ConnectionStateStarted || m_connectionState == ConnectionStateReceivedResponse); // In the case of multipart loads, calls to didReceiveData & didReceiveResponse can be interleaved. RELEASE_ASSERT(isMultipartPayload || isValidStateTransition); m_connectionState = ConnectionStateReceivedResponse; const ResourceResponse& resourceResponse = response.toResourceResponse(); // Reference the object in this method since the additional processing can do // anything including removing the last reference to this object. RefPtr<ResourceLoader> protect(this); m_resource->responseReceived(resourceResponse); if (m_state == Terminated) return; m_host->didReceiveResponse(m_resource, resourceResponse); if (m_state == Terminated) return; if (response.toResourceResponse().isMultipart()) { // We don't count multiParts in a ResourceFetcher's request count m_requestCountTracker.clear(); if (!m_resource->isImage()) { cancel(); return; } } else if (isMultipartPayload) { // Since a subresource loader does not load multipart sections progressively, data was delivered to the loader all at once. // After the first multipart section is complete, signal to delegates that this load is "finished" m_host->subresourceLoaderFinishedLoadingOnePart(this); ASSERT(m_state != Terminated); didFinishLoadingOnePart(0, blink::WebURLLoaderClient::kUnknownEncodedDataLength); } if (m_state == Terminated) return; if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnoreHTTPStatusCodeErrors()) return; m_state = Finishing; if (!m_notifiedLoadComplete) { m_notifiedLoadComplete = true; m_host->didFailLoading(m_resource, ResourceError::cancelledError(m_request.url())); } ASSERT(m_state != Terminated); m_resource->error(Resource::LoadError); cancel(); }
void ResourceLoader::willSendRequest(blink::WebURLLoader*, blink::WebURLRequest& passedRequest, const blink::WebURLResponse& passedRedirectResponse) { ASSERT(m_state != Terminated); RefPtrWillBeRawPtr<ResourceLoader> protect(this); ResourceRequest& request(applyOptions(passedRequest.toMutableResourceRequest())); // FIXME: We should have a real context for redirect requests. Currently, we don't: see WebURLLoaderImpl::Context::OnReceivedRedirect in content/. request.setRequestContext(blink::WebURLRequest::RequestContextInternal); ASSERT(!request.isNull()); const ResourceResponse& redirectResponse(passedRedirectResponse.toResourceResponse()); ASSERT(!redirectResponse.isNull()); if (!m_host->canAccessRedirect(m_resource, request, redirectResponse, m_options)) { cancel(); return; } ASSERT(m_state != Terminated); applyOptions(request); // canAccessRedirect() can modify m_options so we should re-apply it. m_host->redirectReceived(m_resource, redirectResponse); ASSERT(m_state != Terminated); m_resource->willSendRequest(request, redirectResponse); if (request.isNull() || m_state == Terminated) return; m_host->willSendRequest(m_resource->identifier(), request, redirectResponse, m_options.initiatorInfo); ASSERT(m_state != Terminated); ASSERT(!request.isNull()); m_resource->updateRequest(request); m_request = request; }
void PingLoader::didReceiveResponse(blink::WebURLLoader*, const blink::WebURLResponse& response) { if (Page* page = this->page()) { TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ResourceFinish", "data", InspectorResourceFinishEvent::data(m_identifier, 0, true)); const ResourceResponse& resourceResponse = response.toResourceResponse(); InspectorInstrumentation::didReceiveResourceResponse(page->deprecatedLocalMainFrame(), m_identifier, 0, resourceResponse, 0); didFailLoading(page); } dispose(); }
void ResourceLoader::willSendRequest(blink::WebURLLoader*, blink::WebURLRequest& passedRequest, const blink::WebURLResponse& passedRedirectResponse) { RefPtr<ResourceLoader> protect(this); ResourceRequest& request(passedRequest.toMutableResourceRequest()); ASSERT(!request.isNull()); const ResourceResponse& redirectResponse(passedRedirectResponse.toResourceResponse()); ASSERT(!redirectResponse.isNull()); if (!m_host->canAccessRedirect(m_resource, request, redirectResponse, m_options)) { cancel(); return; } m_host->redirectReceived(m_resource, redirectResponse); m_resource->willSendRequest(request, redirectResponse); if (request.isNull() || m_state == Terminated) return; m_host->willSendRequest(m_resource->identifier(), request, redirectResponse, m_options.initiatorInfo); request.setReportLoadTiming(true); ASSERT(!request.isNull()); m_resource->updateRequest(request); m_request = request; }