From 6882a04fb36642862b11efe514251d32070c3d65 Mon Sep 17 00:00:00 2001 From: Konstantin Tokarev Date: Thu, 25 Aug 2016 19:20:41 +0300 Subject: Imported QtWebKit TP3 (git b57bc6801f1876c3220d5a4bfea33d620d477443) Change-Id: I3b1d8a2808782c9f34d50240000e20cb38d3680f Reviewed-by: Konstantin Tokarev --- Source/WebCore/dom/ScriptRunner.cpp | 44 ++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 23 deletions(-) (limited to 'Source/WebCore/dom/ScriptRunner.cpp') diff --git a/Source/WebCore/dom/ScriptRunner.cpp b/Source/WebCore/dom/ScriptRunner.cpp index 4f299ebdc..d2605bddb 100644 --- a/Source/WebCore/dom/ScriptRunner.cpp +++ b/Source/WebCore/dom/ScriptRunner.cpp @@ -27,28 +27,26 @@ #include "ScriptRunner.h" #include "CachedScript.h" -#include "Document.h" #include "Element.h" #include "PendingScript.h" #include "ScriptElement.h" namespace WebCore { -ScriptRunner::ScriptRunner(Document* document) +ScriptRunner::ScriptRunner(Document& document) : m_document(document) - , m_timer(this, &ScriptRunner::timerFired) + , m_timer(*this, &ScriptRunner::timerFired) { - ASSERT(document); } ScriptRunner::~ScriptRunner() { for (size_t i = 0; i < m_scriptsToExecuteSoon.size(); ++i) - m_document->decrementLoadEventDelayCount(); + m_document.decrementLoadEventDelayCount(); for (size_t i = 0; i < m_scriptsToExecuteInOrder.size(); ++i) - m_document->decrementLoadEventDelayCount(); - for (int i = 0; i < m_pendingAsyncScripts.size(); ++i) - m_document->decrementLoadEventDelayCount(); + m_document.decrementLoadEventDelayCount(); + for (unsigned i = 0; i < m_pendingAsyncScripts.size(); ++i) + m_document.decrementLoadEventDelayCount(); } void ScriptRunner::queueScriptForExecution(ScriptElement* scriptElement, CachedResourceHandle cachedScript, ExecutionType executionType) @@ -56,19 +54,18 @@ void ScriptRunner::queueScriptForExecution(ScriptElement* scriptElement, CachedR ASSERT(scriptElement); ASSERT(cachedScript.get()); - Element* element = scriptElement->element(); - ASSERT(element); - ASSERT(element->inDocument()); + Element& element = scriptElement->element(); + ASSERT(element.inDocument()); - m_document->incrementLoadEventDelayCount(); + m_document.incrementLoadEventDelayCount(); switch (executionType) { case ASYNC_EXECUTION: - m_pendingAsyncScripts.add(scriptElement, PendingScript(element, cachedScript.get())); + m_pendingAsyncScripts.add(scriptElement, PendingScript(&element, cachedScript.get())); break; case IN_ORDER_EXECUTION: - m_scriptsToExecuteInOrder.append(PendingScript(element, cachedScript.get())); + m_scriptsToExecuteInOrder.append(PendingScript(&element, cachedScript.get())); break; } } @@ -99,11 +96,9 @@ void ScriptRunner::notifyScriptReady(ScriptElement* scriptElement, ExecutionType m_timer.startOneShot(0); } -void ScriptRunner::timerFired(Timer* timer) +void ScriptRunner::timerFired() { - ASSERT_UNUSED(timer, timer == &m_timer); - - RefPtr protect(m_document); + Ref protect(m_document); Vector scripts; scripts.swap(m_scriptsToExecuteSoon); @@ -114,12 +109,15 @@ void ScriptRunner::timerFired(Timer* timer) if (numInOrderScriptsToExecute) m_scriptsToExecuteInOrder.remove(0, numInOrderScriptsToExecute); - size_t size = scripts.size(); - for (size_t i = 0; i < size; ++i) { - CachedScript* cachedScript = scripts[i].cachedScript(); - RefPtr element = scripts[i].releaseElementAndClear(); + for (auto& script : scripts) { + CachedScript* cachedScript = script.cachedScript(); + RefPtr element = script.releaseElementAndClear(); + ASSERT(element); + // Paper over https://bugs.webkit.org/show_bug.cgi?id=144050 + if (!element) + continue; toScriptElementIfPossible(element.get())->execute(cachedScript); - m_document->decrementLoadEventDelayCount(); + m_document.decrementLoadEventDelayCount(); } } -- cgit v1.2.1