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

Side by Side Diff: third_party/WebKit/Source/core/dom/ScriptLoader.cpp

Issue 2693423002: Do not re-initialize PendingScript in HTMLParserScriptRunner (Closed)
Patch Set: Reflect comments Created 3 years, 10 months 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) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights
6 * reserved. 6 * reserved.
7 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org> 7 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org>
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 } 135 }
136 136
137 void ScriptLoader::handleAsyncAttribute() { 137 void ScriptLoader::handleAsyncAttribute() {
138 // https://html.spec.whatwg.org/#non-blocking 138 // https://html.spec.whatwg.org/#non-blocking
139 // "In addition, whenever a script element whose "non-blocking" flag is set 139 // "In addition, whenever a script element whose "non-blocking" flag is set
140 // has an async content attribute added, the element's "non-blocking" flag 140 // has an async content attribute added, the element's "non-blocking" flag
141 // must be unset." 141 // must be unset."
142 m_nonBlocking = false; 142 m_nonBlocking = false;
143 } 143 }
144 144
145 void ScriptLoader::detach() { 145 void ScriptLoader::detachPendingScript() {
146 if (!m_pendingScript) 146 if (!m_pendingScript)
147 return; 147 return;
148 m_pendingScript->dispose(); 148 m_pendingScript->dispose();
149 m_pendingScript = nullptr; 149 m_pendingScript = nullptr;
150 } 150 }
151 151
152 static bool isLegacySupportedJavaScriptLanguage(const String& language) { 152 static bool isLegacySupportedJavaScriptLanguage(const String& language) {
153 // Mozilla 1.8 accepts javascript1.0 - javascript1.7, but WinIE 7 accepts only 153 // Mozilla 1.8 accepts javascript1.0 - javascript1.7, but WinIE 7 accepts only
154 // javascript1.1 - javascript1.3. 154 // javascript1.1 - javascript1.3.
155 // Mozilla 1.8 and WinIE 7 both accept javascript and livescript. 155 // Mozilla 1.8 and WinIE 7 both accept javascript and livescript.
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 // if it was incremented in the earlier step." 810 // if it was incremented in the earlier step."
811 // Implemented as the scope out of IgnoreDestructiveWriteCountIncrementer. 811 // Implemented as the scope out of IgnoreDestructiveWriteCountIncrementer.
812 } 812 }
813 813
814 void ScriptLoader::execute() { 814 void ScriptLoader::execute() {
815 DCHECK(!m_willBeParserExecuted); 815 DCHECK(!m_willBeParserExecuted);
816 DCHECK(m_asyncExecType != ScriptRunner::None); 816 DCHECK(m_asyncExecType != ScriptRunner::None);
817 DCHECK(m_pendingScript->resource()); 817 DCHECK(m_pendingScript->resource());
818 bool errorOccurred = false; 818 bool errorOccurred = false;
819 ScriptSourceCode source = m_pendingScript->getSource(KURL(), errorOccurred); 819 ScriptSourceCode source = m_pendingScript->getSource(KURL(), errorOccurred);
820 m_pendingScript->dispose(); 820 detachPendingScript();
821 if (errorOccurred) { 821 if (errorOccurred) {
822 dispatchErrorEvent(); 822 dispatchErrorEvent();
823 } else if (!m_resource->wasCanceled()) { 823 } else if (!m_resource->wasCanceled()) {
824 if (executeScript(source)) 824 if (executeScript(source))
825 dispatchLoadEvent(); 825 dispatchLoadEvent();
826 else 826 else
827 dispatchErrorEvent(); 827 dispatchErrorEvent();
828 } 828 }
829 m_resource = nullptr; 829 m_resource = nullptr;
830 } 830 }
(...skipping 10 matching lines...) Expand all
841 DocumentWriteIntervention::FetchDocWrittenScriptDeferIdle) { 841 DocumentWriteIntervention::FetchDocWrittenScriptDeferIdle) {
842 memoryCache()->remove(m_pendingScript->resource()); 842 memoryCache()->remove(m_pendingScript->resource());
843 m_pendingScript->stopWatchingForLoad(); 843 m_pendingScript->stopWatchingForLoad();
844 return; 844 return;
845 } 845 }
846 846
847 DCHECK(m_asyncExecType != ScriptRunner::None); 847 DCHECK(m_asyncExecType != ScriptRunner::None);
848 848
849 Document* contextDocument = m_element->document().contextDocument(); 849 Document* contextDocument = m_element->document().contextDocument();
850 if (!contextDocument) { 850 if (!contextDocument) {
851 detach(); 851 detachPendingScript();
852 return; 852 return;
853 } 853 }
854 854
855 DCHECK_EQ(pendingScript->resource(), m_resource); 855 DCHECK_EQ(pendingScript->resource(), m_resource);
856 856
857 if (m_resource->errorOccurred()) { 857 if (m_resource->errorOccurred()) {
858 contextDocument->scriptRunner()->notifyScriptLoadError(this, 858 contextDocument->scriptRunner()->notifyScriptLoadError(this,
859 m_asyncExecType); 859 m_asyncExecType);
860 detach(); 860 detachPendingScript();
861 dispatchErrorEvent(); 861 dispatchErrorEvent();
862 return; 862 return;
863 } 863 }
864 contextDocument->scriptRunner()->notifyScriptReady(this, m_asyncExecType); 864 contextDocument->scriptRunner()->notifyScriptReady(this, m_asyncExecType);
865 m_pendingScript->stopWatchingForLoad(); 865 m_pendingScript->stopWatchingForLoad();
866 } 866 }
867 867
868 bool ScriptLoader::ignoresLoadRequest() const { 868 bool ScriptLoader::ignoresLoadRequest() const {
869 return m_alreadyStarted || m_isExternalScript || m_parserInserted || 869 return m_alreadyStarted || m_isExternalScript || m_parserInserted ||
870 !element() || !element()->isConnected(); 870 !element() || !element()->isConnected();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 if (isHTMLScriptLoader(element)) 917 if (isHTMLScriptLoader(element))
918 return toHTMLScriptElement(element)->loader(); 918 return toHTMLScriptElement(element)->loader();
919 919
920 if (isSVGScriptLoader(element)) 920 if (isSVGScriptLoader(element))
921 return toSVGScriptElement(element)->loader(); 921 return toSVGScriptElement(element)->loader();
922 922
923 return 0; 923 return 0;
924 } 924 }
925 925
926 } // namespace blink 926 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698