PassRefPtr<ArchiveResource> DocumentLoader::subresource(const KURL& url) const { if (!isCommitted()) return 0; Document* doc = m_frame->document(); if (!doc) return archiveResourceForURL(url); CachedResource* resource = doc->docLoader()->cachedResource(url); if (!resource || resource->preloadResult() == CachedResource::PreloadReferenced) return archiveResourceForURL(url); return ArchiveResource::create(resource->data(), url, resource->response()); }
bool DocumentLoader::scheduleArchiveLoad(ResourceLoader* loader, const ResourceRequest& request) { if (ArchiveResource* resource = archiveResourceForURL(request.url())) { m_pendingSubstituteResources.set(loader, resource); deliverSubstituteResourcesAfterDelay(); return true; } if (!m_archive) return false; switch (m_archive->type()) { #if ENABLE(WEB_ARCHIVE) case Archive::WebArchive: // WebArchiveDebugMode means we fail loads instead of trying to fetch them from the network if they're not in the archive. return m_frame->settings() && m_frame->settings()->webArchiveDebugModeEnabled() && ArchiveFactory::isArchiveMimeType(responseMIMEType()); #endif #if ENABLE(MHTML) case Archive::MHTML: return true; // Always fail the load for resources not included in the MHTML. #endif default: return false; } }
bool DocumentLoader::scheduleArchiveLoad(ResourceLoader* loader, const ResourceRequest& request, const KURL& originalURL) { ArchiveResource* resource = 0; if (request.url() == originalURL) resource = archiveResourceForURL(originalURL); if (!resource) { // WebArchiveDebugMode means we fail loads instead of trying to fetch them from the network if they're not in the archive. bool shouldFailLoad = m_frame->settings()->webArchiveDebugModeEnabled() && ArchiveFactory::isArchiveMimeType(responseMIMEType()); if (!shouldFailLoad) return false; } m_pendingSubstituteResources.set(loader, resource); deliverSubstituteResourcesAfterDelay(); return true; }
PassRefPtr<ArchiveResource> DocumentLoader::subresource(const KURL& url) const { if (!isCommitted()) return 0; CachedResource* resource = m_frame->document()->docLoader()->cachedResource(url); if (!resource || !resource->isLoaded()) return archiveResourceForURL(url); // FIXME: This has the side effect of making the resource non-purgeable. // It would be better if it didn't have this permanent effect. if (!resource->makePurgeable(false)) return 0; RefPtr<SharedBuffer> data = resource->data(); if (!data) return 0; return ArchiveResource::create(data.release(), url, resource->response()); }