diff options
Diffstat (limited to 'WebCore/dom/ScriptElement.cpp')
-rw-r--r-- | WebCore/dom/ScriptElement.cpp | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/WebCore/dom/ScriptElement.cpp b/WebCore/dom/ScriptElement.cpp index 518aead..dab8f8c 100644 --- a/WebCore/dom/ScriptElement.cpp +++ b/WebCore/dom/ScriptElement.cpp @@ -27,6 +27,7 @@ #include "CachedScript.h" #include "DocLoader.h" #include "Document.h" +#include "DocumentParser.h" #include "Frame.h" #include "FrameLoader.h" #include "HTMLNames.h" @@ -53,6 +54,16 @@ void ScriptElement::insertedIntoDocument(ScriptElementData& data, const String& if (data.createdByParser()) return; + // http://www.whatwg.org/specs/web-apps/current-work/#script + + // If the element's Document has an active parser, and the parser's script + // nesting level is non-zero, but this script element does not have the + // "parser-inserted" flag set, the user agent must set the element's + // "write-neutralised" flag. + DocumentParser* parser = data.element()->document()->parser(); + if (parser && parser->hasInsertionPoint()) + data.setWriteDisabled(true); + if (!sourceUrl.isEmpty()) { data.requestScript(sourceUrl); return; @@ -84,13 +95,6 @@ void ScriptElement::childrenChanged(ScriptElementData& data) data.evaluateScript(ScriptSourceCode(data.scriptContent(), element->document()->url())); // FIXME: Provide a real starting line number here } -static inline bool useHTML5Parser(Document* document) -{ - ASSERT(document); - Settings* settings = document->page() ? document->page()->settings() : 0; - return settings && settings->html5ParserEnabled(); -} - void ScriptElement::finishParsingChildren(ScriptElementData& data, const String& sourceUrl) { // The parser just reached </script>. If we have no src and no text, @@ -137,6 +141,7 @@ ScriptElementData::ScriptElementData(ScriptElement* scriptElement, Element* elem , m_element(element) , m_cachedScript(0) , m_createdByParser(false) + , m_writeDisabled(false) , m_requested(false) , m_evaluated(false) , m_firedLoad(false) @@ -191,7 +196,29 @@ void ScriptElementData::evaluateScript(const ScriptSourceCode& sourceCode) m_evaluated = true; + // http://www.whatwg.org/specs/web-apps/current-work/#script + + // If the script element's "write-neutralised" flag is set, then flag + // the Document the script element was in when the "write-neutralised" + // flag was set as being itself "write-neutralised". Let neutralised doc + // be that Document. + if (m_writeDisabled) { + ASSERT(!m_element->document()->writeDisabled()); + m_element->document()->setWriteDisabled(true); + } + + // Create a script from the script element node, using the script + // block's source and the script block's type. + // Note: This is where the script is compiled and actually executed. frame->script()->evaluate(sourceCode); + + // Remove the "write-neutralised" flag from neutralised doc, if it was + // set in the earlier step. + if (m_writeDisabled) { + ASSERT(m_element->document()->writeDisabled()); + m_element->document()->setWriteDisabled(false); + } + Document::updateStyleForAllDocuments(); } } |