ScriptableDocumentParser.cpp [plain text]
#include "config.h"
#include "ScriptableDocumentParser.h"
#include "Document.h"
#include "Settings.h"
#include "StyleScope.h"
namespace WebCore {
ScriptableDocumentParser::ScriptableDocumentParser(Document& document, ParserContentPolicy parserContentPolicy)
: DecodedDataDocumentParser(document)
, m_wasCreatedByScript(false)
, m_parserContentPolicy(parserContentPolicy)
, m_scriptsWaitingForStylesheetsExecutionTimer(*this, &ScriptableDocumentParser::scriptsWaitingForStylesheetsExecutionTimerFired)
{
if (!pluginContentIsAllowed(m_parserContentPolicy))
m_parserContentPolicy = allowPluginContent(m_parserContentPolicy);
if (scriptingContentIsAllowed(m_parserContentPolicy) && !document.settings().scriptMarkupEnabled())
m_parserContentPolicy = disallowScriptingContent(m_parserContentPolicy);
}
void ScriptableDocumentParser::executeScriptsWaitingForStylesheetsSoon()
{
ASSERT(!document()->styleScope().hasPendingSheets());
if (m_scriptsWaitingForStylesheetsExecutionTimer.isActive())
return;
if (!hasScriptsWaitingForStylesheets())
return;
m_scriptsWaitingForStylesheetsExecutionTimer.startOneShot(0_s);
}
void ScriptableDocumentParser::scriptsWaitingForStylesheetsExecutionTimerFired()
{
ASSERT(!isDetached());
Ref<ScriptableDocumentParser> protectedThis(*this);
if (!document()->styleScope().hasPendingSheets())
executeScriptsWaitingForStylesheets();
if (!isDetached())
document()->checkCompleted();
}
void ScriptableDocumentParser::detach()
{
m_scriptsWaitingForStylesheetsExecutionTimer.stop();
DecodedDataDocumentParser::detach();
}
};