bool DocumentLoader::maybeCreateArchive() { // Only the top-frame can load MHTML. if (m_frame->tree().parent()) return false; // Give the archive machinery a crack at this document. If the MIME type is not an archive type, it will return 0. if (!isArchiveMIMEType(m_response.mimeType())) return false; ASSERT(m_mainResource); m_archive = MHTMLArchive::create(m_response.url(), m_mainResource->resourceBuffer()); // Invalid MHTML. if (!m_archive || !m_archive->mainResource()) { m_archive.clear(); return false; } addAllArchiveResources(m_archive.get()); ArchiveResource* mainResource = m_archive->mainResource(); // The origin is the MHTML file, we need to set the base URL to the document encoded in the MHTML so // relative URLs are resolved properly. ensureWriter(mainResource->mimeType(), m_archive->mainResource()->url()); // The Document has now been created. document()->enforceSandboxFlags(SandboxAll); commitData(mainResource->data()->data(), mainResource->data()->size()); return true; }
bool DocumentLoader::maybeCreateArchive() { // Give the archive machinery a crack at this document. If the MIME type is not an archive type, it will return 0. if (!isArchiveMIMEType(m_response.mimeType())) return false; m_archive = MHTMLArchive::create(m_response.url(), mainResourceData().get()); ASSERT(m_archive); addAllArchiveResources(m_archive.get()); ArchiveResource* mainResource = m_archive->mainResource(); m_writer.setMIMEType(mainResource->mimeType()); ASSERT(m_frame->document()); commitData(mainResource->data()->data(), mainResource->data()->size()); return true; }
void DocumentLoader::prepareSubframeArchiveLoadIfNeeded() { if (!m_frame->tree().parent() || !m_frame->tree().parent()->isLocalFrame()) return; ArchiveResourceCollection* parentCollection = toLocalFrame(m_frame->tree().parent())->loader().documentLoader()->m_archiveResourceCollection.get(); if (!parentCollection) return; m_archive = parentCollection->popSubframeArchive(m_frame->tree().uniqueName(), m_request.url()); if (!m_archive) return; addAllArchiveResources(m_archive.get()); ArchiveResource* mainResource = m_archive->mainResource(); m_substituteData = SubstituteData(mainResource->data(), mainResource->mimeType(), mainResource->textEncoding(), KURL()); }
bool DocumentLoader::maybeCreateArchive() { #if !ENABLE(WEB_ARCHIVE) && !ENABLE(MHTML) return false; #else // Give the archive machinery a crack at this document. If the MIME type is not an archive type, it will return 0. m_archive = ArchiveFactory::create(m_response.url(), mainResourceData().get(), m_response.mimeType()); if (!m_archive) return false; addAllArchiveResources(m_archive.get()); ArchiveResource* mainResource = m_archive->mainResource(); m_parsedArchiveData = mainResource->data(); m_writer.setMIMEType(mainResource->mimeType()); ASSERT(m_frame->document()); commitData(mainResource->data()->data(), mainResource->data()->size()); return true; #endif // !ENABLE(WEB_ARCHIVE) && !ENABLE(MHTML) }
void DocumentLoader::setArchive(PassRefPtr<Archive> archive) { m_archive = archive; addAllArchiveResources(m_archive.get()); }