Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(134)

Side by Side Diff: Source/core/loader/DocumentLoader.cpp

Issue 779393002: Turn DocumentParser::pinToMainThread into a cleaner api (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 24 matching lines...) Expand all
35 #include "core/dom/DocumentParser.h" 35 #include "core/dom/DocumentParser.h"
36 #include "core/events/Event.h" 36 #include "core/events/Event.h"
37 #include "core/fetch/MemoryCache.h" 37 #include "core/fetch/MemoryCache.h"
38 #include "core/fetch/ResourceFetcher.h" 38 #include "core/fetch/ResourceFetcher.h"
39 #include "core/fetch/ResourceLoader.h" 39 #include "core/fetch/ResourceLoader.h"
40 #include "core/frame/FrameHost.h" 40 #include "core/frame/FrameHost.h"
41 #include "core/frame/LocalDOMWindow.h" 41 #include "core/frame/LocalDOMWindow.h"
42 #include "core/frame/LocalFrame.h" 42 #include "core/frame/LocalFrame.h"
43 #include "core/frame/csp/ContentSecurityPolicy.h" 43 #include "core/frame/csp/ContentSecurityPolicy.h"
44 #include "core/html/HTMLFrameOwnerElement.h" 44 #include "core/html/HTMLFrameOwnerElement.h"
45 #include "core/html/parser/HTMLDocumentParser.h"
45 #include "core/html/parser/TextResourceDecoder.h" 46 #include "core/html/parser/TextResourceDecoder.h"
46 #include "core/inspector/InspectorInstrumentation.h" 47 #include "core/inspector/InspectorInstrumentation.h"
47 #include "core/loader/FrameLoader.h" 48 #include "core/loader/FrameLoader.h"
48 #include "core/loader/FrameLoaderClient.h" 49 #include "core/loader/FrameLoaderClient.h"
49 #include "core/loader/UniqueIdentifier.h" 50 #include "core/loader/UniqueIdentifier.h"
50 #include "core/loader/appcache/ApplicationCacheHost.h" 51 #include "core/loader/appcache/ApplicationCacheHost.h"
51 #include "core/page/FrameTree.h" 52 #include "core/page/FrameTree.h"
52 #include "core/page/Page.h" 53 #include "core/page/Page.h"
53 #include "core/frame/Settings.h" 54 #include "core/frame/Settings.h"
54 #include "core/inspector/ConsoleMessage.h" 55 #include "core/inspector/ConsoleMessage.h"
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 514
514 const AtomicString& encoding = m_frame->host()->overrideEncoding().isNull() ? response().textEncodingName() : m_frame->host()->overrideEncoding(); 515 const AtomicString& encoding = m_frame->host()->overrideEncoding().isNull() ? response().textEncodingName() : m_frame->host()->overrideEncoding();
515 516
516 // Prepare a DocumentInit before clearing the frame, because it may need to 517 // Prepare a DocumentInit before clearing the frame, because it may need to
517 // inherit an aliased security context. 518 // inherit an aliased security context.
518 DocumentInit init(url(), m_frame); 519 DocumentInit init(url(), m_frame);
519 init.withNewRegistrationContext(); 520 init.withNewRegistrationContext();
520 m_frame->loader().clear(); 521 m_frame->loader().clear();
521 ASSERT(m_frame->page()); 522 ASSERT(m_frame->page());
522 523
523 m_writer = createWriterFor(0, init, mimeType, encoding, false); 524 ParserSynchronizationPolicy parsingPolicy = (m_substituteData.isValid() && m _substituteData.forceSynchronousLoad()) ? ForceSynchronousParsing : AllowAsynchr onousParsing;
525 m_writer = createWriterFor(0, init, mimeType, encoding, false, parsingPolicy );
524 m_writer->setDocumentWasLoadedAsPartOfNavigation(); 526 m_writer->setDocumentWasLoadedAsPartOfNavigation();
525 527
526 if (m_substituteData.isValid() && m_substituteData.forceSynchronousLoad())
527 m_writer->forceSynchronousParse();
528
529 // This should be set before receivedFirstData(). 528 // This should be set before receivedFirstData().
530 if (!overridingURL.isEmpty()) 529 if (!overridingURL.isEmpty())
531 m_frame->document()->setBaseURLOverride(overridingURL); 530 m_frame->document()->setBaseURLOverride(overridingURL);
532 531
533 // Call receivedFirstData() exactly once per load. 532 // Call receivedFirstData() exactly once per load.
534 frameLoader()->receivedFirstData(); 533 frameLoader()->receivedFirstData();
535 m_frame->document()->maybeHandleHttpRefresh(m_response.httpHeaderField("Refr esh"), Document::HttpRefreshFromHeader); 534 m_frame->document()->maybeHandleHttpRefresh(m_response.httpHeaderField("Refr esh"), Document::HttpRefreshFromHeader);
536 } 535 }
537 536
538 void DocumentLoader::commitData(const char* bytes, size_t length) 537 void DocumentLoader::commitData(const char* bytes, size_t length)
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 mainResourceLoader()->attachThreadedDataReceiver(threadedDataReceiver); 789 mainResourceLoader()->attachThreadedDataReceiver(threadedDataReceiver);
791 } 790 }
792 791
793 void DocumentLoader::endWriting(DocumentWriter* writer) 792 void DocumentLoader::endWriting(DocumentWriter* writer)
794 { 793 {
795 ASSERT_UNUSED(writer, m_writer == writer); 794 ASSERT_UNUSED(writer, m_writer == writer);
796 m_writer->end(); 795 m_writer->end();
797 m_writer.clear(); 796 m_writer.clear();
798 } 797 }
799 798
800 PassRefPtrWillBeRawPtr<DocumentWriter> DocumentLoader::createWriterFor(const Doc ument* ownerDocument, const DocumentInit& init, const AtomicString& mimeType, co nst AtomicString& encoding, bool dispatch) 799 PassRefPtrWillBeRawPtr<DocumentWriter> DocumentLoader::createWriterFor(const Doc ument* ownerDocument, const DocumentInit& init, const AtomicString& mimeType, co nst AtomicString& encoding, bool dispatch, ParserSynchronizationPolicy parsingPo licy)
801 { 800 {
802 LocalFrame* frame = init.frame(); 801 LocalFrame* frame = init.frame();
803 802
804 if (frame->document()) 803 if (frame->document())
805 frame->document()->prepareForDestruction(); 804 frame->document()->prepareForDestruction();
806 805
807 if (!init.shouldReuseDefaultView()) 806 if (!init.shouldReuseDefaultView())
808 frame->setDOMWindow(LocalDOMWindow::create(*frame)); 807 frame->setDOMWindow(LocalDOMWindow::create(*frame));
809 808
810 RefPtrWillBeRawPtr<Document> document = frame->localDOMWindow()->installNewD ocument(mimeType, init); 809 RefPtrWillBeRawPtr<Document> document = frame->localDOMWindow()->installNewD ocument(mimeType, init);
811 if (ownerDocument) { 810 if (ownerDocument) {
812 document->setCookieURL(ownerDocument->cookieURL()); 811 document->setCookieURL(ownerDocument->cookieURL());
813 document->setSecurityOrigin(ownerDocument->securityOrigin()); 812 document->setSecurityOrigin(ownerDocument->securityOrigin());
814 if (ownerDocument->isTransitionDocument()) 813 if (ownerDocument->isTransitionDocument())
815 document->setIsTransitionDocument(); 814 document->setIsTransitionDocument();
816 } 815 }
817 816
818 frame->loader().didBeginDocument(dispatch); 817 frame->loader().didBeginDocument(dispatch);
819 818
820 return DocumentWriter::create(document.get(), mimeType, encoding); 819 return DocumentWriter::create(document.get(), parsingPolicy, mimeType, encod ing);
821 } 820 }
822 821
823 const AtomicString& DocumentLoader::mimeType() const 822 const AtomicString& DocumentLoader::mimeType() const
824 { 823 {
825 if (m_writer) 824 if (m_writer)
826 return m_writer->mimeType(); 825 return m_writer->mimeType();
827 return m_response.mimeType(); 826 return m_response.mimeType();
828 } 827 }
829 828
830 void DocumentLoader::setUserChosenEncoding(const String& charset) 829 void DocumentLoader::setUserChosenEncoding(const String& charset)
831 { 830 {
832 if (m_writer) 831 if (m_writer)
833 m_writer->setUserChosenEncoding(charset); 832 m_writer->setUserChosenEncoding(charset);
834 } 833 }
835 834
836 // This is only called by FrameLoader::replaceDocumentWhileExecutingJavaScriptUR L() 835 // This is only called by FrameLoader::replaceDocumentWhileExecutingJavaScriptUR L()
837 void DocumentLoader::replaceDocumentWhileExecutingJavaScriptURL(const DocumentIn it& init, const String& source, Document* ownerDocument) 836 void DocumentLoader::replaceDocumentWhileExecutingJavaScriptURL(const DocumentIn it& init, const String& source, Document* ownerDocument)
838 { 837 {
839 m_writer = createWriterFor(ownerDocument, init, mimeType(), m_writer ? m_wri ter->encoding() : emptyAtom, true); 838 m_writer = createWriterFor(ownerDocument, init, mimeType(), m_writer ? m_wri ter->encoding() : emptyAtom, true, ForceSynchronousParsing);
840 if (!source.isNull()) 839 if (!source.isNull())
841 m_writer->appendReplacingData(source); 840 m_writer->appendReplacingData(source);
842 endWriting(m_writer.get()); 841 endWriting(m_writer.get());
843 } 842 }
844 843
845 } // namespace blink 844 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698