2011-01-05 Yong Li <yoli@rim.com>
Reviewed by Adam Barth.
Suspend HTMLParserScheduler when page load is deferred to
avoid potential JS re-entrancy. Otherwise, when JS execution is triggered
from an external script or by events, and is blocked by a modal dialog,
WebKit can parse more HTML source and also start another JS execution.
https://bugs.webkit.org/show_bug.cgi?id=48077
Test case: WebCore/manual-tests/bugzilla-48077.html.
* dom/DocumentParser.cpp:
(WebCore::DocumentParser::suspendScheduledTasks):
(WebCore::DocumentParser::resumeScheduledTasks):
* dom/DocumentParser.h:
* html/parser/HTMLDocumentParser.cpp:
(WebCore::HTMLDocumentParser::suspendScheduledTasks):
(WebCore::HTMLDocumentParser::resumeScheduledTasks):
* html/parser/HTMLParserScheduler.cpp:
(WebCore::HTMLParserScheduler::HTMLParserScheduler):
(WebCore::HTMLParserScheduler::suspend):
(WebCore::HTMLParserScheduler::resume):
* html/parser/HTMLParserScheduler.h:
(WebCore::HTMLParserScheduler::isScheduledForResume):
* page/PageGroupLoadDeferrer.cpp:
(WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
(WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@75066 268f45cc-cd09-0410-ab3c-d52691b4dbfc
8 files changed