void Loader::Host::didReceiveResponse(SubresourceLoader* loader, const ResourceResponse& response) { Request* request = m_requestsLoading.get(loader); // FIXME: This is a workaround for <rdar://problem/5236843> // If a load starts while the frame is still in the provisional state // (this can be the case when loading the user style sheet), committing the load then causes all // requests to be removed from the m_requestsLoading map. This means that request might be null here. // In that case we just return early. // ASSERT(request); if (!request) return; CachedResource* resource = request->cachedResource(); if (resource->isCacheValidator()) { if (response.httpStatusCode() == 304) { // 304 Not modified / Use local copy m_requestsLoading.remove(loader); loader->clearClient(); request->docLoader()->decrementRequestCount(); // Existing resource is ok, just use it updating the expiration time. cache()->revalidationSucceeded(resource, response); if (request->docLoader()->frame()) request->docLoader()->frame()->loader()->checkCompleted(); delete request; servePendingRequests(); return; } // Did not get 304 response, continue as a regular resource load. cache()->revalidationFailed(resource); } resource->setResponse(response); String encoding = response.textEncodingName(); if (!encoding.isNull()) resource->setEncoding(encoding); if (request->isMultipart()) { ASSERT(resource->isImage()); static_cast<CachedImage*>(resource)->clear(); if (request->docLoader()->frame()) request->docLoader()->frame()->loader()->checkCompleted(); } else if (response.isMultipart()) { request->setIsMultipart(true); // We don't count multiParts in a DocLoader's request count request->docLoader()->decrementRequestCount(); // If we get a multipart response, we must have a handle ASSERT(loader->handle()); if (!resource->isImage()) loader->handle()->cancel(); } }
bool saveCachedImageToFile(Frame* frame, String imageUrl, String filePath) { // Copy Image Issue on Nested Frame CachedResource* cachedResource = retrieveCachedResource(frame, imageUrl); if (cachedResource && cachedResource->isImage()) return saveCachedImageToFile(cachedResource, imageUrl, filePath); return false; }
String createLocalResource(Frame* frame , String url) { String filename; CachedResource* cachedResource = frame->document()->cachedResourceLoader()->cachedResource(url); //if (!cachedResource) // cachedResource = cache()->resourceForURL(url); if (cachedResource && cachedResource->isImage()) { return createLocalResource(cachedResource ,savePath); } return String(); }