OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. |
3 * Copyright (C) 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2011 Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * | 8 * |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
767 mainResourceLoader()->attachThreadedDataReceiver(threadedDataReceiver); | 767 mainResourceLoader()->attachThreadedDataReceiver(threadedDataReceiver); |
768 } | 768 } |
769 | 769 |
770 void DocumentLoader::endWriting(DocumentWriter* writer) | 770 void DocumentLoader::endWriting(DocumentWriter* writer) |
771 { | 771 { |
772 ASSERT_UNUSED(writer, m_writer == writer); | 772 ASSERT_UNUSED(writer, m_writer == writer); |
773 m_writer->end(); | 773 m_writer->end(); |
774 m_writer.clear(); | 774 m_writer.clear(); |
775 } | 775 } |
776 | 776 |
777 PassRefPtr<DocumentWriter> DocumentLoader::createWriterFor(LocalFrame* frame, co
nst Document* ownerDocument, const KURL& url, const AtomicString& mimeType, cons
t AtomicString& encoding, bool userChosen, bool dispatch) | 777 PassRefPtrWillBeRawPtr<DocumentWriter> DocumentLoader::createWriterFor(LocalFram
e* frame, const Document* ownerDocument, const KURL& url, const AtomicString& mi
meType, const AtomicString& encoding, bool userChosen, bool dispatch) |
778 { | 778 { |
779 // Create a new document before clearing the frame, because it may need to | 779 // Create a new document before clearing the frame, because it may need to |
780 // inherit an aliased security context. | 780 // inherit an aliased security context. |
781 DocumentInit init(url, frame); | 781 DocumentInit init(url, frame); |
782 init.withNewRegistrationContext(); | 782 init.withNewRegistrationContext(); |
783 | 783 |
784 // In some rare cases, we'll re-used a DOMWindow for a new Document. For exa
mple, | 784 // In some rare cases, we'll re-used a DOMWindow for a new Document. For exa
mple, |
785 // when a script calls window.open("..."), the browser gives JavaScript a wi
ndow | 785 // when a script calls window.open("..."), the browser gives JavaScript a wi
ndow |
786 // synchronously but kicks off the load in the window asynchronously. Web si
tes | 786 // synchronously but kicks off the load in the window asynchronously. Web si
tes |
787 // expect that modifications that they make to the window object synchronous
ly | 787 // expect that modifications that they make to the window object synchronous
ly |
788 // won't be blown away when the network load commits. To make that happen, w
e | 788 // won't be blown away when the network load commits. To make that happen, w
e |
789 // "securely transition" the existing DOMWindow to the Document that results
from | 789 // "securely transition" the existing DOMWindow to the Document that results
from |
790 // the network load. See also SecurityContext::isSecureTransitionTo. | 790 // the network load. See also SecurityContext::isSecureTransitionTo. |
791 bool shouldReuseDefaultView = frame->loader().stateMachine()->isDisplayingIn
itialEmptyDocument() && frame->document()->isSecureTransitionTo(url); | 791 bool shouldReuseDefaultView = frame->loader().stateMachine()->isDisplayingIn
itialEmptyDocument() && frame->document()->isSecureTransitionTo(url); |
792 | 792 |
793 frame->loader().clear(); | 793 frame->loader().clear(); |
794 | 794 |
795 if (frame->document()) | 795 if (frame->document()) |
796 frame->document()->prepareForDestruction(); | 796 frame->document()->prepareForDestruction(); |
797 | 797 |
798 if (!shouldReuseDefaultView) | 798 if (!shouldReuseDefaultView) |
799 frame->setDOMWindow(DOMWindow::create(*frame)); | 799 frame->setDOMWindow(DOMWindow::create(*frame)); |
800 | 800 |
801 RefPtr<Document> document = frame->domWindow()->installNewDocument(mimeType,
init); | 801 RefPtrWillBeRawPtr<Document> document = frame->domWindow()->installNewDocume
nt(mimeType, init); |
802 if (ownerDocument) { | 802 if (ownerDocument) { |
803 document->setCookieURL(ownerDocument->cookieURL()); | 803 document->setCookieURL(ownerDocument->cookieURL()); |
804 document->setSecurityOrigin(ownerDocument->securityOrigin()); | 804 document->setSecurityOrigin(ownerDocument->securityOrigin()); |
805 } | 805 } |
806 | 806 |
807 frame->loader().didBeginDocument(dispatch); | 807 frame->loader().didBeginDocument(dispatch); |
808 | 808 |
809 return DocumentWriter::create(document.get(), mimeType, encoding, userChosen
); | 809 return DocumentWriter::create(document.get(), mimeType, encoding, userChosen
); |
810 } | 810 } |
811 | 811 |
(...skipping 16 matching lines...) Expand all Loading... |
828 void DocumentLoader::replaceDocument(const String& source, Document* ownerDocume
nt) | 828 void DocumentLoader::replaceDocument(const String& source, Document* ownerDocume
nt) |
829 { | 829 { |
830 m_frame->loader().stopAllLoaders(); | 830 m_frame->loader().stopAllLoaders(); |
831 m_writer = createWriterFor(m_frame, ownerDocument, m_frame->document()->url(
), mimeType(), m_writer ? m_writer->encoding() : emptyAtom, m_writer ? m_writer
->encodingWasChosenByUser() : false, true); | 831 m_writer = createWriterFor(m_frame, ownerDocument, m_frame->document()->url(
), mimeType(), m_writer ? m_writer->encoding() : emptyAtom, m_writer ? m_writer
->encodingWasChosenByUser() : false, true); |
832 if (!source.isNull()) | 832 if (!source.isNull()) |
833 m_writer->appendReplacingData(source); | 833 m_writer->appendReplacingData(source); |
834 endWriting(m_writer.get()); | 834 endWriting(m_writer.get()); |
835 } | 835 } |
836 | 836 |
837 } // namespace WebCore | 837 } // namespace WebCore |
OLD | NEW |