Chromium Code Reviews| 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 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 444 } | 444 } |
| 445 DocumentInit init(owner, url(), m_frame); | 445 DocumentInit init(owner, url(), m_frame); |
| 446 init.withNewRegistrationContext(); | 446 init.withNewRegistrationContext(); |
| 447 m_frame->loader().clear(); | 447 m_frame->loader().clear(); |
| 448 ASSERT(m_frame->page()); | 448 ASSERT(m_frame->page()); |
| 449 | 449 |
| 450 ParserSynchronizationPolicy parsingPolicy = AllowAsynchronousParsing; | 450 ParserSynchronizationPolicy parsingPolicy = AllowAsynchronousParsing; |
| 451 if ((m_substituteData.isValid() && m_substituteData.forceSynchronousLoad()) || !Document::threadedParsingEnabledForTesting()) | 451 if ((m_substituteData.isValid() && m_substituteData.forceSynchronousLoad()) || !Document::threadedParsingEnabledForTesting()) |
| 452 parsingPolicy = ForceSynchronousParsing; | 452 parsingPolicy = ForceSynchronousParsing; |
| 453 | 453 |
| 454 m_writer = createWriterFor(init, mimeType, encoding, false, parsingPolicy); | 454 m_writer = createWriterFor(init, mimeType, encoding, false, parsingPolicy, o verridingURL); |
| 455 m_writer->setDocumentWasLoadedAsPartOfNavigation(); | 455 m_writer->setDocumentWasLoadedAsPartOfNavigation(); |
| 456 | |
| 457 // This should be set before receivedFirstData(). | |
| 458 if (!overridingURL.isEmpty()) | |
| 459 m_frame->document()->setBaseURLOverride(overridingURL); | |
| 460 | |
| 461 // Call receivedFirstData() exactly once per load. | |
| 462 frameLoader()->receivedFirstData(); | |
| 463 m_frame->document()->maybeHandleHttpRefresh(m_response.httpHeaderField(HTTPN ames::Refresh), Document::HttpRefreshFromHeader); | 456 m_frame->document()->maybeHandleHttpRefresh(m_response.httpHeaderField(HTTPN ames::Refresh), Document::HttpRefreshFromHeader); |
| 464 } | 457 } |
| 465 | 458 |
| 466 void DocumentLoader::commitData(const char* bytes, size_t length) | 459 void DocumentLoader::commitData(const char* bytes, size_t length) |
| 467 { | 460 { |
| 468 ASSERT(m_state < MainResourceDone); | 461 ASSERT(m_state < MainResourceDone); |
| 469 ensureWriter(m_response.mimeType()); | 462 ensureWriter(m_response.mimeType()); |
| 470 | 463 |
| 471 // This can happen if document.close() is called by an event handler while | 464 // This can happen if document.close() is called by an event handler while |
| 472 // there's still pending incoming data. | 465 // there's still pending incoming data. |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 653 m_mainResource->addClient(this); | 646 m_mainResource->addClient(this); |
| 654 } | 647 } |
| 655 | 648 |
| 656 void DocumentLoader::endWriting(DocumentWriter* writer) | 649 void DocumentLoader::endWriting(DocumentWriter* writer) |
| 657 { | 650 { |
| 658 ASSERT_UNUSED(writer, m_writer == writer); | 651 ASSERT_UNUSED(writer, m_writer == writer); |
| 659 m_writer->end(); | 652 m_writer->end(); |
| 660 m_writer.clear(); | 653 m_writer.clear(); |
| 661 } | 654 } |
| 662 | 655 |
| 663 DocumentWriter* DocumentLoader::createWriterFor(const DocumentInit& init, const AtomicString& mimeType, const AtomicString& encoding, bool dispatch, ParserSynch ronizationPolicy parsingPolicy) | 656 DocumentWriter* DocumentLoader::createWriterFor(const DocumentInit& init, const AtomicString& mimeType, const AtomicString& encoding, bool dispatch, ParserSynch ronizationPolicy parsingPolicy, const KURL& overridingURL) |
| 664 { | 657 { |
| 665 LocalFrame* frame = init.frame(); | 658 LocalFrame* frame = init.frame(); |
| 666 | 659 |
| 667 ASSERT(!frame->document() || !frame->document()->isActive()); | 660 ASSERT(!frame->document() || !frame->document()->isActive()); |
| 668 ASSERT(frame->tree().childCount() == 0); | 661 ASSERT(frame->tree().childCount() == 0); |
| 669 | 662 |
| 670 if (!init.shouldReuseDefaultView()) | 663 if (!init.shouldReuseDefaultView()) |
| 671 frame->setDOMWindow(LocalDOMWindow::create(*frame)); | 664 frame->setDOMWindow(LocalDOMWindow::create(*frame)); |
| 672 | 665 |
| 673 Document* document = frame->localDOMWindow()->installNewDocument(mimeType, i nit); | 666 Document* document = frame->localDOMWindow()->installNewDocument(mimeType, i nit); |
| 674 | 667 |
| 675 frame->loader().didBeginDocument(dispatch); | 668 frame->loader().didBeginDocument(dispatch); |
| 676 | 669 |
| 670 // This should be set before receivedFirstData(). | |
| 671 if (!overridingURL.isEmpty()) | |
| 672 frame->document()->setBaseURLOverride(overridingURL); | |
| 673 | |
| 674 if (!dispatch) | |
| 675 frame->loader().receivedFirstData(); | |
|
jochen (gone - plz use gerrit)
2016/04/20 14:23:25
this is still after didBeginDocument. Why not move
meacer
2016/04/20 23:51:00
Had to divide didBeginDocument into two: CSP and s
| |
| 676 | |
| 677 return DocumentWriter::create(document, parsingPolicy, mimeType, encoding); | 677 return DocumentWriter::create(document, parsingPolicy, mimeType, encoding); |
| 678 } | 678 } |
| 679 | 679 |
| 680 const AtomicString& DocumentLoader::mimeType() const | 680 const AtomicString& DocumentLoader::mimeType() const |
| 681 { | 681 { |
| 682 if (m_writer) | 682 if (m_writer) |
| 683 return m_writer->mimeType(); | 683 return m_writer->mimeType(); |
| 684 return m_response.mimeType(); | 684 return m_response.mimeType(); |
| 685 } | 685 } |
| 686 | 686 |
| 687 // This is only called by FrameLoader::replaceDocumentWhileExecutingJavaScriptUR L() | 687 // This is only called by FrameLoader::replaceDocumentWhileExecutingJavaScriptUR L() |
| 688 void DocumentLoader::replaceDocumentWhileExecutingJavaScriptURL(const DocumentIn it& init, const String& source) | 688 void DocumentLoader::replaceDocumentWhileExecutingJavaScriptURL(const DocumentIn it& init, const String& source) |
| 689 { | 689 { |
| 690 m_writer = createWriterFor(init, mimeType(), m_writer ? m_writer->encoding() : emptyAtom, true, ForceSynchronousParsing); | 690 m_writer = createWriterFor(init, mimeType(), m_writer ? m_writer->encoding() : emptyAtom, true, ForceSynchronousParsing); |
| 691 if (!source.isNull()) | 691 if (!source.isNull()) |
| 692 m_writer->appendReplacingData(source); | 692 m_writer->appendReplacingData(source); |
| 693 endWriting(m_writer.get()); | 693 endWriting(m_writer.get()); |
| 694 } | 694 } |
| 695 | 695 |
| 696 DEFINE_WEAK_IDENTIFIER_MAP(DocumentLoader); | 696 DEFINE_WEAK_IDENTIFIER_MAP(DocumentLoader); |
| 697 | 697 |
| 698 } // namespace blink | 698 } // namespace blink |
| OLD | NEW |