// This is only called by FrameLoader::replaceDocumentWhileExecutingJavaScriptURL() void DocumentLoader::replaceDocumentWhileExecutingJavaScriptURL(const DocumentInit& init, const String& source, Document* ownerDocument) { m_writer = createWriterFor(ownerDocument, init, mimeType(), m_writer ? m_writer->encoding() : emptyAtom, true, ForceSynchronousParsing); if (!source.isNull()) m_writer->appendReplacingData(source); endWriting(m_writer.get()); }
void DocumentLoader::ensureWriter(const AtomicString& mimeType, const KURL& overridingURL) { if (m_writer) return; const AtomicString& encoding = m_frame->host()->overrideEncoding().isNull() ? response().textEncodingName() : m_frame->host()->overrideEncoding(); // Prepare a DocumentInit before clearing the frame, because it may need to // inherit an aliased security context. DocumentInit init(url(), m_frame); init.withNewRegistrationContext(); m_frame->loader().clear(); ASSERT(m_frame->page()); ParserSynchronizationPolicy parsingPolicy = (m_substituteData.isValid() && m_substituteData.forceSynchronousLoad()) ? ForceSynchronousParsing : AllowAsynchronousParsing; m_writer = createWriterFor(0, init, mimeType, encoding, false, parsingPolicy); m_writer->setDocumentWasLoadedAsPartOfNavigation(); // This should be set before receivedFirstData(). if (!overridingURL.isEmpty()) m_frame->document()->setBaseURLOverride(overridingURL); // Call receivedFirstData() exactly once per load. frameLoader()->receivedFirstData(); m_frame->document()->maybeHandleHttpRefresh(m_response.httpHeaderField("Refresh"), Document::HttpRefreshFromHeader); }
void DocumentLoader::ensureWriter(const AtomicString& mimeType, const KURL& overridingURL) { if (m_writer) return; const AtomicString& encoding = m_frame->host()->overrideEncoding().isNull() ? response().textEncodingName() : m_frame->host()->overrideEncoding(); // Prepare a DocumentInit before clearing the frame, because it may need to // inherit an aliased security context. Document* owner = nullptr; // TODO(dcheng): This differs from the behavior of both IE and Firefox: the // origin is inherited from the document that loaded the URL. if (shouldInheritSecurityOriginFromOwner(url())) { Frame* ownerFrame = m_frame->tree().parent(); if (!ownerFrame) ownerFrame = m_frame->loader().opener(); if (ownerFrame && ownerFrame->isLocalFrame()) owner = toLocalFrame(ownerFrame)->document(); } DocumentInit init(owner, url(), m_frame); init.withNewRegistrationContext(); m_frame->loader().clear(); ASSERT(m_frame->page()); ParserSynchronizationPolicy parsingPolicy = AllowAsynchronousParsing; if ((m_substituteData.isValid() && m_substituteData.forceSynchronousLoad()) || !Document::threadedParsingEnabledForTesting()) parsingPolicy = ForceSynchronousParsing; m_writer = createWriterFor(init, mimeType, encoding, false, parsingPolicy, overridingURL); m_writer->setDocumentWasLoadedAsPartOfNavigation(); m_frame->document()->maybeHandleHttpRefresh(m_response.httpHeaderField(HTTPNames::Refresh), Document::HttpRefreshFromHeader); }
// This is only called by ScriptController::executeScriptIfJavaScriptURL // and always contains the result of evaluating a javascript: url. // This is the <iframe src="javascript:'html'"> case. void DocumentLoader::replaceDocument(const String& source, Document* ownerDocument) { m_frame->loader().stopAllLoaders(); m_writer = createWriterFor(m_frame, ownerDocument, m_frame->document()->url(), mimeType(), m_writer ? m_writer->encoding() : emptyAtom, m_writer ? m_writer->encodingWasChosenByUser() : false, true); if (!source.isNull()) m_writer->appendReplacingData(source); endWriting(m_writer.get()); }
void DocumentLoader::ensureWriter(const AtomicString& mimeType, const KURL& overridingURL) { if (m_writer) return; const AtomicString& encoding = overrideEncoding().isNull() ? response().textEncodingName() : overrideEncoding(); m_writer = createWriterFor(m_frame, 0, url(), mimeType, encoding, false, false); m_writer->setDocumentWasLoadedAsPartOfNavigation(); // This should be set before receivedFirstData(). if (!overridingURL.isEmpty()) m_frame->document()->setBaseURLOverride(overridingURL); // Call receivedFirstData() exactly once per load. frameLoader()->receivedFirstData(); m_frame->document()->maybeHandleHttpRefresh(m_response.httpHeaderField("Refresh"), Document::HttpRefreshFromHeader); }