<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[195013] releases/WebKitGTK/webkit-2.10</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/195013">195013</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2016-01-14 01:35:03 -0800 (Thu, 14 Jan 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/192270">r192270</a> - alert, confirm, prompt, showModalDialog should be forbidden during page close and navigation
https://bugs.webkit.org/show_bug.cgi?id=150980
Reviewed by Chris Dumez.
Source/WebCore:
Tests: fast/events/beforeunload-alert.html
fast/events/beforeunload-confirm.html
fast/events/beforeunload-prompt.html
fast/events/beforeunload-showModalDialog.html
fast/events/pagehide-alert.html
fast/events/pagehide-confirm.html
fast/events/pagehide-prompt.html
fast/events/pagehide-showModalDialog.html
fast/events/unload-alert.html
fast/events/unload-confirm.html
fast/events/unload-prompt.html
fast/events/unload-showModalDialog.html
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::stopLoading): Factored out a helper function for
unload event processing.
(WebCore::FrameLoader::handleUnloadEvents): Forbid prompts in unload
events just like we do in beforeunload events, and for the same reasons.
(WebCore::FrameLoader::handleBeforeUnloadEvent): Updated for renames.
* loader/FrameLoader.h:
* page/DOMWindow.cpp:
(WebCore::DOMWindow::print):
(WebCore::DOMWindow::alert):
(WebCore::DOMWindow::confirm):
(WebCore::DOMWindow::prompt):
(WebCore::DOMWindow::showModalDialog): Updated for renames. Refactored
some of this code to handle null pages more cleanly. In particular, we
sometimes used to treat null page as "everything is permitted" -- but it
is best practice in a permissions context to treat lack of information
as no permission granted rather than all permissions granted. (I don't
know of a way to trigger this condition in practice.)
* page/Page.cpp:
(WebCore::Page::Page):
(WebCore::Page::forbidPrompts):
(WebCore::Page::allowPrompts):
(WebCore::Page::arePromptsAllowed): Renamed to make these functions
reflect their new, broader context.
(WebCore::Page::incrementFrameHandlingBeforeUnloadEventCount): Deleted.
(WebCore::Page::decrementFrameHandlingBeforeUnloadEventCount): Deleted.
(WebCore::Page::isAnyFrameHandlingBeforeUnloadEvent): Deleted.
* page/Page.h:
LayoutTests:
Added tests to cover the matrix of [ alert, confirm, prompt, showModalDialog ] x [ beforeunload, unload, pagehide ].
* fast/events/beforeunload-alert-expected.txt: Added.
* fast/events/beforeunload-alert.html: Added.
* fast/events/beforeunload-confirm-expected.txt: Added.
* fast/events/beforeunload-confirm.html: Added.
* fast/events/beforeunload-prompt-expected.txt: Added.
* fast/events/beforeunload-prompt.html: Added.
* fast/events/beforeunload-showModalDialog-expected.txt: Added.
* fast/events/beforeunload-showModalDialog.html: Added.
* fast/events/onunload-expected.txt:
* fast/events/onunload-not-on-body-expected.txt:
* fast/events/onunload-window-property-expected.txt:
* fast/events/pagehide-alert-expected.txt: Added.
* fast/events/pagehide-alert.html: Added.
* fast/events/pagehide-confirm-expected.txt: Added.
* fast/events/pagehide-confirm.html: Added.
* fast/events/pagehide-prompt-expected.txt: Added.
* fast/events/pagehide-prompt.html: Added.
* fast/events/pagehide-showModalDialog-expected.txt: Added.
* fast/events/pagehide-showModalDialog.html: Added.
* fast/events/pageshow-pagehide-on-back-cached-expected.txt:
* fast/events/pageshow-pagehide-on-back-uncached-expected.txt:
* fast/events/resources/prompt-landing-page.html: Added.
* fast/events/unload-alert-expected.txt: Added.
* fast/events/unload-alert.html: Added.
* fast/events/unload-confirm-expected.txt: Added.
* fast/events/unload-confirm.html: Added.
* fast/events/unload-prompt-expected.txt: Added.
* fast/events/unload-prompt.html: Added.
* fast/events/unload-showModalDialog-expected.txt: Added.
* fast/events/unload-showModalDialog.html: Added.
* platform/wk2/TestExpectations: WebKit2 can't handle showModalDialog tests.
* compositing/iframes/page-cache-layer-tree-expected.txt:
* fast/dom/Geolocation/notimer-after-unload-expected.txt:
* fast/history/timed-refresh-in-cached-frame-expected.txt:
* fast/loader/frames-with-unload-handlers-in-page-cache-expected.txt:
* fast/loader/page-dismissal-modal-dialogs-expected.txt: These were
pre-existing tests that tried to alert during unload.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsChangeLog">releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestscompositingiframespagecachelayertreeexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/compositing/iframes/page-cache-layer-tree-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfastdomGeolocationnotimerafterunloadexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/dom/Geolocation/notimer-after-unload-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsonunloadexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/onunload-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsonunloadnotonbodyexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/onunload-not-on-body-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsonunloadwindowpropertyexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/onunload-window-property-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventspageshowpagehideonbackcachedexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pageshow-pagehide-on-back-cached-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventspageshowpagehideonbackuncachedexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pageshow-pagehide-on-back-uncached-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasthistorytimedrefreshincachedframeexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/history/timed-refresh-in-cached-frame-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfastloaderframeswithunloadhandlersinpagecacheexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/loader/frames-with-unload-handlers-in-page-cache-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfastloaderpagedismissalmodaldialogsexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/loader/page-dismissal-modal-dialogs-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsplatformwk2TestExpectations">releases/WebKitGTK/webkit-2.10/LayoutTests/platform/wk2/TestExpectations</a></li>
<li><a href="#releasesWebKitGTKwebkit210SourceWebCoreChangeLog">releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit210SourceWebCoreloaderFrameLoadercpp">releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/FrameLoader.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit210SourceWebCoreloaderFrameLoaderh">releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/FrameLoader.h</a></li>
<li><a href="#releasesWebKitGTKwebkit210SourceWebCorepageDOMWindowcpp">releases/WebKitGTK/webkit-2.10/Source/WebCore/page/DOMWindow.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit210SourceWebCorepagePagecpp">releases/WebKitGTK/webkit-2.10/Source/WebCore/page/Page.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit210SourceWebCorepagePageh">releases/WebKitGTK/webkit-2.10/Source/WebCore/page/Page.h</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadalertexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-alert-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadalerthtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-alert.html</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadconfirmexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-confirm-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadconfirmhtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-confirm.html</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadpromptexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-prompt-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadprompthtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-prompt.html</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadshowModalDialogexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-showModalDialog-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadshowModalDialoghtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-showModalDialog.html</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventspagehidealertexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-alert-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventspagehidealerthtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-alert.html</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventspagehideconfirmexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-confirm-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventspagehideconfirmhtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-confirm.html</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventspagehidepromptexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-prompt-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventspagehideprompthtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-prompt.html</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventspagehideshowModalDialogexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-showModalDialog-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventspagehideshowModalDialoghtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-showModalDialog.html</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsresourcespromptlandingpagehtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/resources/prompt-landing-page.html</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadalertexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-alert-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadalerthtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-alert.html</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadconfirmexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-confirm-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadconfirmhtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-confirm.html</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadpromptexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-prompt-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadprompthtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-prompt.html</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadshowModalDialogexpectedtxt">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-showModalDialog-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadshowModalDialoghtml">releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-showModalDialog.html</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit210LayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1,3 +1,52 @@
</span><ins>+2015-11-10 Geoffrey Garen <ggaren@apple.com>
+
+ alert, confirm, prompt, showModalDialog should be forbidden during page close and navigation
+ https://bugs.webkit.org/show_bug.cgi?id=150980
+
+ Reviewed by Chris Dumez.
+
+ Added tests to cover the matrix of [ alert, confirm, prompt, showModalDialog ] x [ beforeunload, unload, pagehide ].
+
+ * fast/events/beforeunload-alert-expected.txt: Added.
+ * fast/events/beforeunload-alert.html: Added.
+ * fast/events/beforeunload-confirm-expected.txt: Added.
+ * fast/events/beforeunload-confirm.html: Added.
+ * fast/events/beforeunload-prompt-expected.txt: Added.
+ * fast/events/beforeunload-prompt.html: Added.
+ * fast/events/beforeunload-showModalDialog-expected.txt: Added.
+ * fast/events/beforeunload-showModalDialog.html: Added.
+ * fast/events/onunload-expected.txt:
+ * fast/events/onunload-not-on-body-expected.txt:
+ * fast/events/onunload-window-property-expected.txt:
+ * fast/events/pagehide-alert-expected.txt: Added.
+ * fast/events/pagehide-alert.html: Added.
+ * fast/events/pagehide-confirm-expected.txt: Added.
+ * fast/events/pagehide-confirm.html: Added.
+ * fast/events/pagehide-prompt-expected.txt: Added.
+ * fast/events/pagehide-prompt.html: Added.
+ * fast/events/pagehide-showModalDialog-expected.txt: Added.
+ * fast/events/pagehide-showModalDialog.html: Added.
+ * fast/events/pageshow-pagehide-on-back-cached-expected.txt:
+ * fast/events/pageshow-pagehide-on-back-uncached-expected.txt:
+ * fast/events/resources/prompt-landing-page.html: Added.
+ * fast/events/unload-alert-expected.txt: Added.
+ * fast/events/unload-alert.html: Added.
+ * fast/events/unload-confirm-expected.txt: Added.
+ * fast/events/unload-confirm.html: Added.
+ * fast/events/unload-prompt-expected.txt: Added.
+ * fast/events/unload-prompt.html: Added.
+ * fast/events/unload-showModalDialog-expected.txt: Added.
+ * fast/events/unload-showModalDialog.html: Added.
+
+ * platform/wk2/TestExpectations: WebKit2 can't handle showModalDialog tests.
+
+ * compositing/iframes/page-cache-layer-tree-expected.txt:
+ * fast/dom/Geolocation/notimer-after-unload-expected.txt:
+ * fast/history/timed-refresh-in-cached-frame-expected.txt:
+ * fast/loader/frames-with-unload-handlers-in-page-cache-expected.txt:
+ * fast/loader/page-dismissal-modal-dialogs-expected.txt: These were
+ pre-existing tests that tried to alert during unload.
+
</ins><span class="cx"> 2015-11-09 Alex Christensen <achristensen@webkit.org>
</span><span class="cx">
</span><span class="cx"> XHR timeouts should not fire if there is an immediate network error.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestscompositingiframespagecachelayertreeexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/compositing/iframes/page-cache-layer-tree-expected.txt (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/compositing/iframes/page-cache-layer-tree-expected.txt        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/compositing/iframes/page-cache-layer-tree-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> ALERT: pageshow - not from cache
</span><del>-ALERT: pagehide - entering cache
</del><ins>+CONSOLE MESSAGE: line 70: Use of window.alert is not allowed while unloading a page.
</ins><span class="cx"> ALERT: pageshow - from cache
</span><span class="cx"> This tests that layers are rebuilt properly after the page is restored from the page cache.
</span><span class="cx">
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfastdomGeolocationnotimerafterunloadexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/dom/Geolocation/notimer-after-unload-expected.txt (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/dom/Geolocation/notimer-after-unload-expected.txt        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/dom/Geolocation/notimer-after-unload-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><span class="cx"> main frame - has 1 onunload handler(s)
</span><del>-ALERT: unload-called
</del><ins>+CONSOLE MESSAGE: line 15: Use of window.alert is not allowed while unloading a page.
</ins><span class="cx"> You should have seen one unload alert appear.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadalertexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-alert-expected.txt (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-alert-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-alert-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+This test verifies that prompts are forbidden when leaving a webpage.
+
+Prompts include alert, confirm, prompt, and showModalDialog.
+
+If there is no prompt, the test passed.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadalerthtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-alert.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-alert.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-alert.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<script>
+if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+}
+
+window.onbeforeunload = function() {
+        alert("FAIL: This prompt should have been ignored.");
+}
+
+setTimeout(function() { window.location = "resources/prompt-landing-page.html" }, 0);
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadconfirmexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-confirm-expected.txt (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-confirm-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-confirm-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+CONSOLE MESSAGE: line 8: Use of window.confirm is not allowed while unloading a page.
+This test verifies that prompts are forbidden when leaving a webpage.
+
+Prompts include alert, confirm, prompt, and showModalDialog.
+
+If there is no prompt, the test passed.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadconfirmhtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-confirm.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-confirm.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-confirm.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<script>
+if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+}
+
+window.onbeforeunload = function() {
+        confirm("FAIL: This prompt should have been ignored.");
+}
+
+setTimeout(function() { window.location = "resources/prompt-landing-page.html" }, 0);
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadpromptexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-prompt-expected.txt (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-prompt-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-prompt-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+CONSOLE MESSAGE: line 8: Use of window.prompt is not allowed while unloading a page.
+This test verifies that prompts are forbidden when leaving a webpage.
+
+Prompts include alert, confirm, prompt, and showModalDialog.
+
+If there is no prompt, the test passed.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadprompthtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-prompt.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-prompt.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-prompt.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<script>
+if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+}
+
+window.onbeforeunload = function() {
+        prompt("FAIL: This prompt should have been ignored.");
+}
+
+setTimeout(function() { window.location = "resources/prompt-landing-page.html" }, 0);
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadshowModalDialogexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-showModalDialog-expected.txt (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-showModalDialog-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-showModalDialog-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+CONSOLE MESSAGE: line 14: Use of window.showModalDialog is not allowed while unloading a page.
+This test verifies that prompts are forbidden when leaving a webpage.
+
+Prompts include alert, confirm, prompt, and showModalDialog.
+
+If there is no prompt, the test passed.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsbeforeunloadshowModalDialoghtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-showModalDialog.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-showModalDialog.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/beforeunload-showModalDialog.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+<script>
+if (window.testRunner) {
+ testRunner.dumpAsText();
+ testRunner.setCanOpenWindows();
+ testRunner.waitUntilDone();
+}
+
+function log()
+{
+        alert("FAIL: This prompt should have been ignored.");
+}
+
+window.onbeforeunload = function() {
+        showModalDialog("resources/modal-dialog.html");
+}
+
+setTimeout(function() { window.location = "resources/prompt-landing-page.html" }, 0);
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsonunloadexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/onunload-expected.txt (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/onunload-expected.txt        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/onunload-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><span class="cx"> main frame - has 1 onunload handler(s)
</span><del>-ALERT: unload
</del><ins>+CONSOLE MESSAGE: line 16: Use of window.alert is not allowed while unloading a page.
</ins><span class="cx"> You should have seen an unload alert appear.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsonunloadnotonbodyexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/onunload-not-on-body-expected.txt (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/onunload-not-on-body-expected.txt        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/onunload-not-on-body-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><span class="cx"> frame "<!--framePath //<!--frame2-->-->" - has 1 onunload handler(s)
</span><del>-ALERT: unload
</del><ins>+CONSOLE MESSAGE: line 1: Use of window.alert is not allowed while unloading a page.
</ins><span class="cx"> you should only see one unload alert appear.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsonunloadwindowpropertyexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/onunload-window-property-expected.txt (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/onunload-window-property-expected.txt        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/onunload-window-property-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1,2 +1,2 @@
</span><del>-ALERT: unload
</del><ins>+CONSOLE MESSAGE: line 13: Use of window.alert is not allowed while unloading a page.
</ins><span class="cx"> You should have seen an unload alert appear.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventspagehidealertexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-alert-expected.txt (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-alert-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-alert-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+This test verifies that prompts are forbidden when leaving a webpage.
+
+Prompts include alert, confirm, prompt, and showModalDialog.
+
+If there is no prompt, the test passed.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventspagehidealerthtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-alert.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-alert.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-alert.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<script>
+if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+}
+
+window.onpagehide = function() {
+        alert("FAIL: This prompt should have been ignored.");
+}
+
+setTimeout(function() { window.location = "resources/prompt-landing-page.html" }, 0);
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventspagehideconfirmexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-confirm-expected.txt (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-confirm-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-confirm-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+CONSOLE MESSAGE: line 8: Use of window.confirm is not allowed while unloading a page.
+This test verifies that prompts are forbidden when leaving a webpage.
+
+Prompts include alert, confirm, prompt, and showModalDialog.
+
+If there is no prompt, the test passed.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventspagehideconfirmhtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-confirm.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-confirm.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-confirm.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<script>
+if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+}
+
+window.onpagehide = function() {
+        confirm("FAIL: This prompt should have been ignored.");
+}
+
+setTimeout(function() { window.location = "resources/prompt-landing-page.html" }, 0);
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventspagehidepromptexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-prompt-expected.txt (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-prompt-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-prompt-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+CONSOLE MESSAGE: line 8: Use of window.prompt is not allowed while unloading a page.
+This test verifies that prompts are forbidden when leaving a webpage.
+
+Prompts include alert, confirm, prompt, and showModalDialog.
+
+If there is no prompt, the test passed.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventspagehideprompthtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-prompt.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-prompt.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-prompt.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<script>
+if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+}
+
+window.onpagehide = function() {
+        prompt("FAIL: This prompt should have been ignored.");
+}
+
+setTimeout(function() { window.location = "resources/prompt-landing-page.html" }, 0);
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventspagehideshowModalDialogexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-showModalDialog-expected.txt (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-showModalDialog-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-showModalDialog-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+CONSOLE MESSAGE: line 14: Use of window.showModalDialog is not allowed while unloading a page.
+This test verifies that prompts are forbidden when leaving a webpage.
+
+Prompts include alert, confirm, prompt, and showModalDialog.
+
+If there is no prompt, the test passed.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventspagehideshowModalDialoghtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-showModalDialog.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-showModalDialog.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pagehide-showModalDialog.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+<script>
+if (window.testRunner) {
+ testRunner.dumpAsText();
+ testRunner.setCanOpenWindows();
+ testRunner.waitUntilDone();
+}
+
+function log()
+{
+        alert("FAIL: This prompt should have been ignored.");
+}
+
+window.onpagehide = function() {
+        showModalDialog("resources/modal-dialog.html");
+}
+
+setTimeout(function() { window.location = "resources/prompt-landing-page.html" }, 0);
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventspageshowpagehideonbackcachedexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pageshow-pagehide-on-back-cached-expected.txt (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pageshow-pagehide-on-back-cached-expected.txt        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pageshow-pagehide-on-back-cached-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> ALERT: window.onload
</span><span class="cx"> ALERT: window.onpageshow, target = [object HTMLDocument], persisted = false
</span><del>-ALERT: window.onpagehide, target = [object HTMLDocument], persisted = true
</del><ins>+CONSOLE MESSAGE: line 25: Use of window.alert is not allowed while unloading a page.
</ins><span class="cx"> ALERT: window.onpageshow, target = [object HTMLDocument], persisted = true
</span><span class="cx"> Test pageshow/pagehide event behavior when navigating back to an cached page.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventspageshowpagehideonbackuncachedexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pageshow-pagehide-on-back-uncached-expected.txt (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pageshow-pagehide-on-back-uncached-expected.txt        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/pageshow-pagehide-on-back-uncached-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> main frame - has 1 onunload handler(s)
</span><span class="cx"> ALERT: window.onload
</span><span class="cx"> ALERT: window.onpageshow, target = [object HTMLDocument], persisted = false
</span><del>-ALERT: window.onpagehide, target = [object HTMLDocument], persisted = false
</del><ins>+CONSOLE MESSAGE: line 28: Use of window.alert is not allowed while unloading a page.
</ins><span class="cx"> main frame "pageshow/pagehide" - has 1 onunload handler(s)
</span><span class="cx"> ALERT: window.onload
</span><span class="cx"> ALERT: window.onpageshow, target = [object HTMLDocument], persisted = false
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsresourcespromptlandingpagehtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/resources/prompt-landing-page.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/resources/prompt-landing-page.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/resources/prompt-landing-page.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<p>This test verifies that prompts are forbidden when leaving a webpage.</p>
+
+<p>Prompts include alert, confirm, prompt, and showModalDialog.</p>
+
+<p>If there is no prompt, the test passed.</p>
+
+<script>
+if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.notifyDone();
+}
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadalertexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-alert-expected.txt (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-alert-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-alert-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+main frame - has 1 onunload handler(s)
+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+This test verifies that prompts are forbidden when leaving a webpage.
+
+Prompts include alert, confirm, prompt, and showModalDialog.
+
+If there is no prompt, the test passed.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadalerthtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-alert.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-alert.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-alert.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<script>
+if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+}
+
+window.onunload = function() {
+        alert("FAIL: This prompt should have been ignored.");
+}
+
+setTimeout(function() { window.location = "resources/prompt-landing-page.html" }, 0);
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadconfirmexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-confirm-expected.txt (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-confirm-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-confirm-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+main frame - has 1 onunload handler(s)
+CONSOLE MESSAGE: line 8: Use of window.confirm is not allowed while unloading a page.
+This test verifies that prompts are forbidden when leaving a webpage.
+
+Prompts include alert, confirm, prompt, and showModalDialog.
+
+If there is no prompt, the test passed.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadconfirmhtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-confirm.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-confirm.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-confirm.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<script>
+if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+}
+
+window.onunload = function() {
+        confirm("FAIL: This prompt should have been ignored.");
+}
+
+setTimeout(function() { window.location = "resources/prompt-landing-page.html" }, 0);
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadpromptexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-prompt-expected.txt (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-prompt-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-prompt-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+main frame - has 1 onunload handler(s)
+CONSOLE MESSAGE: line 8: Use of window.prompt is not allowed while unloading a page.
+This test verifies that prompts are forbidden when leaving a webpage.
+
+Prompts include alert, confirm, prompt, and showModalDialog.
+
+If there is no prompt, the test passed.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadprompthtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-prompt.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-prompt.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-prompt.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<script>
+if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+}
+
+window.onunload = function() {
+        prompt("FAIL: This prompt should have been ignored.");
+}
+
+setTimeout(function() { window.location = "resources/prompt-landing-page.html" }, 0);
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadshowModalDialogexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-showModalDialog-expected.txt (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-showModalDialog-expected.txt         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-showModalDialog-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+main frame - has 1 onunload handler(s)
+CONSOLE MESSAGE: line 14: Use of window.showModalDialog is not allowed while unloading a page.
+This test verifies that prompts are forbidden when leaving a webpage.
+
+Prompts include alert, confirm, prompt, and showModalDialog.
+
+If there is no prompt, the test passed.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasteventsunloadshowModalDialoghtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-showModalDialog.html (0 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-showModalDialog.html         (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/unload-showModalDialog.html        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+<script>
+if (window.testRunner) {
+ testRunner.dumpAsText();
+ testRunner.setCanOpenWindows();
+ testRunner.waitUntilDone();
+}
+
+function log()
+{
+        alert("FAIL: This prompt should have been ignored.");
+}
+
+window.onunload = function() {
+        showModalDialog("resources/modal-dialog.html");
+}
+
+setTimeout(function() { window.location = "resources/prompt-landing-page.html" }, 0);
+</script>
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfasthistorytimedrefreshincachedframeexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/history/timed-refresh-in-cached-frame-expected.txt (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/history/timed-refresh-in-cached-frame-expected.txt        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/history/timed-refresh-in-cached-frame-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1,2 +1,2 @@
</span><del>-ALERT: pagehide true
</del><ins>+CONSOLE MESSAGE: line 1: Use of window.alert is not allowed while unloading a page.
</ins><span class="cx"> PASSED if didn't crash in two seconds.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfastloaderframeswithunloadhandlersinpagecacheexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/loader/frames-with-unload-handlers-in-page-cache-expected.txt (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/loader/frames-with-unload-handlers-in-page-cache-expected.txt        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/loader/frames-with-unload-handlers-in-page-cache-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> frame "<!--framePath //<!--frame0-->/<!--frame0-->-->" - has 1 onunload handler(s)
</span><span class="cx"> ALERT: Subframe onload
</span><span class="cx"> ALERT: Subframe onpageshow
</span><del>-ALERT: Main frame window.onpagehide called
-ALERT: Subframe onpagehide
-ALERT: Subframe onunload
</del><ins>+CONSOLE MESSAGE: line 16: Use of window.alert is not allowed while unloading a page.
+CONSOLE MESSAGE: line 18: Use of window.alert is not allowed while unloading a page.
+CONSOLE MESSAGE: line 10: Use of window.alert is not allowed while unloading a page.
</ins><span class="cx">
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsfastloaderpagedismissalmodaldialogsexpectedtxt"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/loader/page-dismissal-modal-dialogs-expected.txt (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/loader/page-dismissal-modal-dialogs-expected.txt        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/loader/page-dismissal-modal-dialogs-expected.txt        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1,32 +1,32 @@
</span><span class="cx"> frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s)
</span><del>-CONSOLE MESSAGE: line 8: Use of window.alert is not allowed during beforeunload event dispatch.
-CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed during beforeunload event dispatch.
-CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed during beforeunload event dispatch.
-CONSOLE MESSAGE: line 8: Use of window.alert is not allowed during beforeunload event dispatch.
-CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed during beforeunload event dispatch.
-CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed during beforeunload event dispatch.
-CONSOLE MESSAGE: line 8: Use of window.alert is not allowed during beforeunload event dispatch.
-CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed during beforeunload event dispatch.
-CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed during beforeunload event dispatch.
-CONSOLE MESSAGE: line 8: Use of window.alert is not allowed during beforeunload event dispatch.
-CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed during beforeunload event dispatch.
-CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed during beforeunload event dispatch.
-ALERT: mainFrame pagehide PASS
-CONFIRM: mainFrame pagehide PASS
-PROMPT: mainFrame pagehide PASS, default text: PASS
-ALERT: iFrame click PASS
-CONFIRM: iFrame click PASS
-PROMPT: iFrame click PASS, default text: PASS
-ALERT: mainFrame unload PASS
-CONFIRM: mainFrame unload PASS
-PROMPT: mainFrame unload PASS, default text: PASS
-ALERT: iFrame click PASS
-CONFIRM: iFrame click PASS
-PROMPT: iFrame click PASS, default text: PASS
-ALERT: iFrame pagehide PASS
-CONFIRM: iFrame pagehide PASS
-PROMPT: iFrame pagehide PASS, default text: PASS
-ALERT: iFrame unload PASS
-CONFIRM: iFrame unload PASS
-PROMPT: iFrame unload PASS, default text: PASS
</del><ins>+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed while unloading a page.
+CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed while unloading a page.
+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed while unloading a page.
+CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed while unloading a page.
+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed while unloading a page.
+CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed while unloading a page.
+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed while unloading a page.
+CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed while unloading a page.
+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed while unloading a page.
+CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed while unloading a page.
+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed while unloading a page.
+CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed while unloading a page.
+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed while unloading a page.
+CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed while unloading a page.
+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed while unloading a page.
+CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed while unloading a page.
+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed while unloading a page.
+CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed while unloading a page.
+CONSOLE MESSAGE: line 8: Use of window.alert is not allowed while unloading a page.
+CONSOLE MESSAGE: line 9: Use of window.confirm is not allowed while unloading a page.
+CONSOLE MESSAGE: line 10: Use of window.prompt is not allowed while unloading a page.
</ins><span class="cx"> PASS
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210LayoutTestsplatformwk2TestExpectations"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/platform/wk2/TestExpectations (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/LayoutTests/platform/wk2/TestExpectations        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/platform/wk2/TestExpectations        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -140,6 +140,9 @@
</span><span class="cx"> # WebKitTestRunner needs testRunner.abortModal
</span><span class="cx"> # <https://bugs.webkit.org/show_bug.cgi?id=69548>
</span><span class="cx"> fast/events/show-modal-dialog-onblur-onfocus.html
</span><ins>+fast/events/beforeunload-showModalDialog.html
+fast/events/pagehide-showModalDialog.html
+fast/events/unload-showModalDialog.html
</ins><span class="cx">
</span><span class="cx"> # WebKitTestRunner needs testRunner.setWillSendRequestClearHeader
</span><span class="cx"> # <https://bugs.webkit.org/show_bug.cgi?id=42699>
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210SourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1,3 +1,58 @@
</span><ins>+2015-11-10 Geoffrey Garen <ggaren@apple.com>
+
+ alert, confirm, prompt, showModalDialog should be forbidden during page close and navigation
+ https://bugs.webkit.org/show_bug.cgi?id=150980
+
+ Reviewed by Chris Dumez.
+
+ Tests: fast/events/beforeunload-alert.html
+ fast/events/beforeunload-confirm.html
+ fast/events/beforeunload-prompt.html
+ fast/events/beforeunload-showModalDialog.html
+ fast/events/pagehide-alert.html
+ fast/events/pagehide-confirm.html
+ fast/events/pagehide-prompt.html
+ fast/events/pagehide-showModalDialog.html
+ fast/events/unload-alert.html
+ fast/events/unload-confirm.html
+ fast/events/unload-prompt.html
+ fast/events/unload-showModalDialog.html
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::stopLoading): Factored out a helper function for
+ unload event processing.
+ (WebCore::FrameLoader::handleUnloadEvents): Forbid prompts in unload
+ events just like we do in beforeunload events, and for the same reasons.
+
+ (WebCore::FrameLoader::handleBeforeUnloadEvent): Updated for renames.
+
+ * loader/FrameLoader.h:
+
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::print):
+ (WebCore::DOMWindow::alert):
+ (WebCore::DOMWindow::confirm):
+ (WebCore::DOMWindow::prompt):
+ (WebCore::DOMWindow::showModalDialog): Updated for renames. Refactored
+ some of this code to handle null pages more cleanly. In particular, we
+ sometimes used to treat null page as "everything is permitted" -- but it
+ is best practice in a permissions context to treat lack of information
+ as no permission granted rather than all permissions granted. (I don't
+ know of a way to trigger this condition in practice.)
+
+ * page/Page.cpp:
+ (WebCore::Page::Page):
+ (WebCore::Page::forbidPrompts):
+ (WebCore::Page::allowPrompts):
+ (WebCore::Page::arePromptsAllowed): Renamed to make these functions
+ reflect their new, broader context.
+
+ (WebCore::Page::incrementFrameHandlingBeforeUnloadEventCount): Deleted.
+ (WebCore::Page::decrementFrameHandlingBeforeUnloadEventCount): Deleted.
+ (WebCore::Page::isAnyFrameHandlingBeforeUnloadEvent): Deleted.
+
+ * page/Page.h:
+
</ins><span class="cx"> 2015-11-11 Carlos Garcia Campos <cgarcia@igalia.com>
</span><span class="cx">
</span><span class="cx"> Unreviewed. Fix the build after Merge r192169.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210SourceWebCoreloaderFrameLoadercpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/FrameLoader.cpp (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/FrameLoader.cpp        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/FrameLoader.cpp        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -175,6 +175,24 @@
</span><span class="cx"> return frame.document() && frame.document()->isSandboxed(mask);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+struct ForbidPromptsScope {
+ ForbidPromptsScope(Page* page) : m_page(page)
+ {
+ if (!m_page)
+ return;
+ m_page->forbidPrompts();
+ }
+
+ ~ForbidPromptsScope()
+ {
+ if (!m_page)
+ return;
+ m_page->allowPrompts();
+ }
+
+ Page* m_page;
+};
+
</ins><span class="cx"> class FrameLoader::FrameProgressTracker {
</span><span class="cx"> public:
</span><span class="cx"> explicit FrameProgressTracker(Frame& frame)
</span><span class="lines">@@ -419,56 +437,9 @@
</span><span class="cx"> if (m_frame.document() && m_frame.document()->parser())
</span><span class="cx"> m_frame.document()->parser()->stopParsing();
</span><span class="cx">
</span><del>- if (unloadEventPolicy != UnloadEventPolicyNone) {
- if (m_frame.document()) {
- if (m_didCallImplicitClose && !m_wasUnloadEventEmitted) {
- Element* currentFocusedElement = m_frame.document()->focusedElement();
- if (currentFocusedElement && currentFocusedElement->toInputElement())
- currentFocusedElement->toInputElement()->endEditing();
- if (m_pageDismissalEventBeingDispatched == PageDismissalType::None) {
- if (unloadEventPolicy == UnloadEventPolicyUnloadAndPageHide) {
- m_pageDismissalEventBeingDispatched = PageDismissalType::PageHide;
- m_frame.document()->domWindow()->dispatchEvent(PageTransitionEvent::create(eventNames().pagehideEvent, m_frame.document()->inPageCache()), m_frame.document());
- }
</del><ins>+ if (unloadEventPolicy != UnloadEventPolicyNone)
+ handleUnloadEvents(unloadEventPolicy);
</ins><span class="cx">
</span><del>- // FIXME: update Page Visibility state here.
- // https://bugs.webkit.org/show_bug.cgi?id=116770
-
- if (!m_frame.document()->inPageCache()) {
- RefPtr<Event> unloadEvent(Event::create(eventNames().unloadEvent, false, false));
- // The DocumentLoader (and thus its DocumentLoadTiming) might get destroyed
- // while dispatching the event, so protect it to prevent writing the end
- // time into freed memory.
- RefPtr<DocumentLoader> documentLoader = m_provisionalDocumentLoader;
- m_pageDismissalEventBeingDispatched = PageDismissalType::Unload;
- if (documentLoader && !documentLoader->timing().unloadEventStart() && !documentLoader->timing().unloadEventEnd()) {
- DocumentLoadTiming& timing = documentLoader->timing();
- ASSERT(timing.navigationStart());
- timing.markUnloadEventStart();
- m_frame.document()->domWindow()->dispatchEvent(unloadEvent, m_frame.document());
- timing.markUnloadEventEnd();
- } else
- m_frame.document()->domWindow()->dispatchEvent(unloadEvent, m_frame.document());
- }
- }
- m_pageDismissalEventBeingDispatched = PageDismissalType::None;
- if (m_frame.document())
- m_frame.document()->updateStyleIfNeeded();
- m_wasUnloadEventEmitted = true;
- }
- }
-
- // Dispatching the unload event could have made m_frame.document() null.
- if (m_frame.document() && !m_frame.document()->inPageCache()) {
- // Don't remove event listeners from a transitional empty document (see bug 28716 for more information).
- bool keepEventListeners = m_stateMachine.isDisplayingInitialEmptyDocument() && m_provisionalDocumentLoader
- && m_frame.document()->isSecureTransitionTo(m_provisionalDocumentLoader->url());
-
- if (!keepEventListeners)
- m_frame.document()->removeAllEventListeners();
- }
- }
-
</del><span class="cx"> m_isComplete = true; // to avoid calling completed() in finishedParsing()
</span><span class="cx"> m_didCallImplicitClose = true; // don't want that one either
</span><span class="cx">
</span><span class="lines">@@ -2870,6 +2841,64 @@
</span><span class="cx"> return shouldClose;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void FrameLoader::handleUnloadEvents(UnloadEventPolicy unloadEventPolicy)
+{
+ if (!m_frame.document())
+ return;
+
+ // We store the frame's page in a local variable because the frame might get detached inside dispatchEvent.
+ ForbidPromptsScope forbidPrompts(m_frame.page());
+
+ if (m_didCallImplicitClose && !m_wasUnloadEventEmitted) {
+ auto* currentFocusedElement = m_frame.document()->focusedElement();
+ if (is<HTMLInputElement>(currentFocusedElement))
+ downcast<HTMLInputElement>(*currentFocusedElement).endEditing();
+ if (m_pageDismissalEventBeingDispatched == PageDismissalType::None) {
+ if (unloadEventPolicy == UnloadEventPolicyUnloadAndPageHide) {
+ m_pageDismissalEventBeingDispatched = PageDismissalType::PageHide;
+ m_frame.document()->domWindow()->dispatchEvent(PageTransitionEvent::create(eventNames().pagehideEvent, m_frame.document()->inPageCache()), m_frame.document());
+ }
+
+ // FIXME: update Page Visibility state here.
+ // https://bugs.webkit.org/show_bug.cgi?id=116770
+
+ if (!m_frame.document()->inPageCache()) {
+ RefPtr<Event> unloadEvent(Event::create(eventNames().unloadEvent, false, false));
+ // The DocumentLoader (and thus its DocumentLoadTiming) might get destroyed
+ // while dispatching the event, so protect it to prevent writing the end
+ // time into freed memory.
+ RefPtr<DocumentLoader> documentLoader = m_provisionalDocumentLoader;
+ m_pageDismissalEventBeingDispatched = PageDismissalType::Unload;
+ if (documentLoader && documentLoader->timing().navigationStart() && !documentLoader->timing().unloadEventStart() && !documentLoader->timing().unloadEventEnd()) {
+ auto& timing = documentLoader->timing();
+ timing.markUnloadEventStart();
+ m_frame.document()->domWindow()->dispatchEvent(unloadEvent, m_frame.document());
+ timing.markUnloadEventEnd();
+ } else
+ m_frame.document()->domWindow()->dispatchEvent(unloadEvent, m_frame.document());
+ }
+ }
+ m_pageDismissalEventBeingDispatched = PageDismissalType::None;
+ if (m_frame.document())
+ m_frame.document()->updateStyleIfNeeded();
+ m_wasUnloadEventEmitted = true;
+ }
+
+ // Dispatching the unload event could have made m_frame.document() null.
+ if (!m_frame.document())
+ return;
+
+ if (m_frame.document()->inPageCache())
+ return;
+
+ // Don't remove event listeners from a transitional empty document (see bug 28716 for more information).
+ bool keepEventListeners = m_stateMachine.isDisplayingInitialEmptyDocument() && m_provisionalDocumentLoader
+ && m_frame.document()->isSecureTransitionTo(m_provisionalDocumentLoader->url());
+
+ if (!keepEventListeners)
+ m_frame.document()->removeAllEventListeners();
+}
+
</ins><span class="cx"> bool FrameLoader::handleBeforeUnloadEvent(Chrome& chrome, FrameLoader* frameLoaderBeingNavigated)
</span><span class="cx"> {
</span><span class="cx"> DOMWindow* domWindow = m_frame.document()->domWindow();
</span><span class="lines">@@ -2883,11 +2912,10 @@
</span><span class="cx"> RefPtr<BeforeUnloadEvent> beforeUnloadEvent = BeforeUnloadEvent::create();
</span><span class="cx"> m_pageDismissalEventBeingDispatched = PageDismissalType::BeforeUnload;
</span><span class="cx">
</span><del>- // We store the frame's page in a local variable because the frame might get detached inside dispatchEvent.
- Page* page = m_frame.page();
- page->incrementFrameHandlingBeforeUnloadEventCount();
- domWindow->dispatchEvent(beforeUnloadEvent.get(), domWindow->document());
- page->decrementFrameHandlingBeforeUnloadEventCount();
</del><ins>+ {
+ ForbidPromptsScope forbidPrompts(m_frame.page());
+ domWindow->dispatchEvent(beforeUnloadEvent.get(), domWindow->document());
+ }
</ins><span class="cx">
</span><span class="cx"> m_pageDismissalEventBeingDispatched = PageDismissalType::None;
</span><span class="cx">
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210SourceWebCoreloaderFrameLoaderh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/FrameLoader.h (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/FrameLoader.h        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/loader/FrameLoader.h        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -317,6 +317,7 @@
</span><span class="cx"> SubstituteData defaultSubstituteDataForURL(const URL&);
</span><span class="cx">
</span><span class="cx"> bool handleBeforeUnloadEvent(Chrome&, FrameLoader* frameLoaderBeingNavigated);
</span><ins>+ void handleUnloadEvents(UnloadEventPolicy);
</ins><span class="cx">
</span><span class="cx"> void continueLoadAfterNavigationPolicy(const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue, AllowNavigationToInvalidURL);
</span><span class="cx"> void continueLoadAfterNewWindowPolicy(const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, const NavigationAction&, bool shouldContinue, AllowNavigationToInvalidURL, NewFrameOpenerPolicy);
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210SourceWebCorepageDOMWindowcpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/page/DOMWindow.cpp (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/Source/WebCore/page/DOMWindow.cpp        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/page/DOMWindow.cpp        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -1048,13 +1048,12 @@
</span><span class="cx"> if (!m_frame)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- Page* page = m_frame->page();
</del><ins>+ auto* page = m_frame->page();
</ins><span class="cx"> if (!page)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- // Pages are not allowed to bring up a modal print dialog during BeforeUnload dispatch.
- if (page->isAnyFrameHandlingBeforeUnloadEvent()) {
- printErrorMessage("Use of window.print is not allowed during beforeunload event dispatch.");
</del><ins>+ if (!page->arePromptsAllowed()) {
+ printErrorMessage("Use of window.print is not allowed while unloading a page.");
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1081,18 +1080,17 @@
</span><span class="cx"> if (!m_frame)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- // Pages are not allowed to cause modal alerts during BeforeUnload dispatch.
- if (page() && page()->isAnyFrameHandlingBeforeUnloadEvent()) {
- printErrorMessage("Use of window.alert is not allowed during beforeunload event dispatch.");
</del><ins>+ auto* page = m_frame->page();
+ if (!page)
</ins><span class="cx"> return;
</span><ins>+
+ if (!page->arePromptsAllowed()) {
+ printErrorMessage("Use of window.alert is not allowed while unloading a page.");
+ return;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> m_frame->document()->updateStyleIfNeeded();
</span><span class="cx">
</span><del>- Page* page = m_frame->page();
- if (!page)
- return;
-
</del><span class="cx"> page->chrome().runJavaScriptAlert(m_frame, message);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1101,18 +1099,17 @@
</span><span class="cx"> if (!m_frame)
</span><span class="cx"> return false;
</span><span class="cx">
</span><del>- // Pages are not allowed to cause modal alerts during BeforeUnload dispatch.
- if (page() && page()->isAnyFrameHandlingBeforeUnloadEvent()) {
- printErrorMessage("Use of window.confirm is not allowed during beforeunload event dispatch.");
</del><ins>+ auto* page = m_frame->page();
+ if (!page)
</ins><span class="cx"> return false;
</span><ins>+
+ if (!page->arePromptsAllowed()) {
+ printErrorMessage("Use of window.confirm is not allowed while unloading a page.");
+ return false;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> m_frame->document()->updateStyleIfNeeded();
</span><span class="cx">
</span><del>- Page* page = m_frame->page();
- if (!page)
- return false;
-
</del><span class="cx"> return page->chrome().runJavaScriptConfirm(m_frame, message);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1121,18 +1118,17 @@
</span><span class="cx"> if (!m_frame)
</span><span class="cx"> return String();
</span><span class="cx">
</span><del>- // Pages are not allowed to cause modal alerts during BeforeUnload dispatch.
- if (page() && page()->isAnyFrameHandlingBeforeUnloadEvent()) {
- printErrorMessage("Use of window.prompt is not allowed during beforeunload event dispatch.");
</del><ins>+ auto* page = m_frame->page();
+ if (!page)
</ins><span class="cx"> return String();
</span><ins>+
+ if (!page->arePromptsAllowed()) {
+ printErrorMessage("Use of window.prompt is not allowed while unloading a page.");
+ return String();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> m_frame->document()->updateStyleIfNeeded();
</span><span class="cx">
</span><del>- Page* page = m_frame->page();
- if (!page)
- return String();
-
</del><span class="cx"> String returnValue;
</span><span class="cx"> if (page->chrome().runJavaScriptPrompt(m_frame, message, defaultValue, returnValue))
</span><span class="cx"> return returnValue;
</span><span class="lines">@@ -2210,10 +2206,13 @@
</span><span class="cx"> if (!firstFrame)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- // Pages are not allowed to cause modal alerts during BeforeUnload dispatch.
- if (page() && page()->isAnyFrameHandlingBeforeUnloadEvent()) {
- printErrorMessage("Use of window.showModalDialog is not allowed during beforeunload event dispatch.");
</del><ins>+ auto* page = m_frame->page();
+ if (!page)
</ins><span class="cx"> return;
</span><ins>+
+ if (!page->arePromptsAllowed()) {
+ printErrorMessage("Use of window.showModalDialog is not allowed while unloading a page.");
+ return;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (!canShowModalDialogNow(m_frame) || !firstWindow.allowPopUp())
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210SourceWebCorepagePagecpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/page/Page.cpp (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/Source/WebCore/page/Page.cpp        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/page/Page.cpp        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -209,7 +209,7 @@
</span><span class="cx"> , m_inspectorDebuggable(std::make_unique<PageDebuggable>(*this))
</span><span class="cx"> #endif
</span><span class="cx"> , m_lastSpatialNavigationCandidatesCount(0) // NOTE: Only called from Internals for Spatial Navigation testing.
</span><del>- , m_framesHandlingBeforeUnloadEvent(0)
</del><ins>+ , m_forbidPromptsDepth(0)
</ins><span class="cx"> , m_applicationCacheStorage(pageConfiguration.applicationCacheStorage ? *WTF::move(pageConfiguration.applicationCacheStorage) : ApplicationCacheStorage::singleton())
</span><span class="cx"> , m_databaseProvider(*WTF::move(pageConfiguration.databaseProvider))
</span><span class="cx"> , m_storageNamespaceProvider(*WTF::move(pageConfiguration.storageNamespaceProvider))
</span><span class="lines">@@ -1597,20 +1597,20 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-void Page::incrementFrameHandlingBeforeUnloadEventCount()
</del><ins>+void Page::forbidPrompts()
</ins><span class="cx"> {
</span><del>- ++m_framesHandlingBeforeUnloadEvent;
</del><ins>+ ++m_forbidPromptsDepth;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void Page::decrementFrameHandlingBeforeUnloadEventCount()
</del><ins>+void Page::allowPrompts()
</ins><span class="cx"> {
</span><del>- ASSERT(m_framesHandlingBeforeUnloadEvent);
- --m_framesHandlingBeforeUnloadEvent;
</del><ins>+ ASSERT(m_forbidPromptsDepth);
+ --m_forbidPromptsDepth;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-bool Page::isAnyFrameHandlingBeforeUnloadEvent()
</del><ins>+bool Page::arePromptsAllowed()
</ins><span class="cx"> {
</span><del>- return m_framesHandlingBeforeUnloadEvent;
</del><ins>+ return !m_forbidPromptsDepth;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void Page::setUserContentController(UserContentController* userContentController)
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit210SourceWebCorepagePageh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/page/Page.h (195012 => 195013)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.10/Source/WebCore/page/Page.h        2016-01-14 09:17:24 UTC (rev 195012)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/page/Page.h        2016-01-14 09:35:03 UTC (rev 195013)
</span><span class="lines">@@ -409,9 +409,10 @@
</span><span class="cx"> void captionPreferencesChanged();
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- void incrementFrameHandlingBeforeUnloadEventCount();
- void decrementFrameHandlingBeforeUnloadEventCount();
- bool isAnyFrameHandlingBeforeUnloadEvent();
</del><ins>+ void forbidPrompts();
+ void allowPrompts();
+ bool arePromptsAllowed();
+
</ins><span class="cx"> void setLastSpatialNavigationCandidateCount(unsigned count) { m_lastSpatialNavigationCandidatesCount = count; }
</span><span class="cx"> unsigned lastSpatialNavigationCandidateCount() const { return m_lastSpatialNavigationCandidatesCount; }
</span><span class="cx">
</span><span class="lines">@@ -606,7 +607,7 @@
</span><span class="cx"> HashSet<String> m_seenMediaEngines;
</span><span class="cx">
</span><span class="cx"> unsigned m_lastSpatialNavigationCandidatesCount;
</span><del>- unsigned m_framesHandlingBeforeUnloadEvent;
</del><ins>+ unsigned m_forbidPromptsDepth;
</ins><span class="cx">
</span><span class="cx"> Ref<ApplicationCacheStorage> m_applicationCacheStorage;
</span><span class="cx"> Ref<DatabaseProvider> m_databaseProvider;
</span></span></pre>
</div>
</div>
</body>
</html>