diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog index 726a3248e54bb0e17bb3d5319257bc5e0df66aa0..2c63d3fda8a337cd89a7a3ea613e4f1e4a35c7ff 100644 --- a/WebCore/ChangeLog +++ b/WebCore/ChangeLog @@ -1,3 +1,19 @@ +2009-09-18 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=29510 + Active DOM objects should be suspended while a modal dialog is displayed + + * manual-tests/js-timers-beneath-modal-dialog.html: Added a test for JS timers. + + * page/PageGroupLoadDeferrer.cpp: + (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer): + (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer): + Match other platforms, and make Mac also suspend active DOM objects. Since a page that + currently displays a modal dialog cannot go into page cache, there is no danger of suspending + an object twice. + 2009-09-18 Csaba Osztrogonac Reviewed by Eric Seidel. diff --git a/WebCore/manual-tests/js-timers-beneath-modal-dialog.html b/WebCore/manual-tests/js-timers-beneath-modal-dialog.html new file mode 100644 index 0000000000000000000000000000000000000000..6d5f2c7edf81aba675f2cd631b82df52c1e5e5e8 --- /dev/null +++ b/WebCore/manual-tests/js-timers-beneath-modal-dialog.html @@ -0,0 +1,19 @@ +

JS timers should be paused while a modal dialog (or alert) is displayed.

+

Please disable popup blocker for this test.

+
0
+ diff --git a/WebCore/page/PageGroupLoadDeferrer.cpp b/WebCore/page/PageGroupLoadDeferrer.cpp index f274de3e88910508a794205959dd88a0c1a1b9b8..122658b50f62574efbf6cd8f2ddb59339d679bb4 100644 --- a/WebCore/page/PageGroupLoadDeferrer.cpp +++ b/WebCore/page/PageGroupLoadDeferrer.cpp @@ -41,10 +41,10 @@ PageGroupLoadDeferrer::PageGroupLoadDeferrer(Page* page, bool deferSelf) if (!otherPage->defersLoading()) m_deferredFrames.append(otherPage->mainFrame()); -#if !PLATFORM(MAC) + // This code is not logically part of load deferring, but we do not want JS code executed beneath modal + // windows or sheets, which is exactly when PageGroupLoadDeferrer is used. for (Frame* frame = otherPage->mainFrame(); frame; frame = frame->tree()->traverseNext()) frame->document()->suspendActiveDOMObjects(); -#endif } } @@ -60,10 +60,8 @@ PageGroupLoadDeferrer::~PageGroupLoadDeferrer() if (Page* page = m_deferredFrames[i]->page()) { page->setDefersLoading(false); -#if !PLATFORM(MAC) for (Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext()) frame->document()->resumeActiveDOMObjects(); -#endif } } }