| 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 |