Changeset 214194 in webkit
- Timestamp:
- Mar 20, 2017 4:07:50 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r214189 r214194 1 2017-03-20 Daniel Bates <dabates@apple.com> 2 3 Prevent new navigations from onbeforeunload handler 4 https://bugs.webkit.org/show_bug.cgi?id=169891 5 <rdar://problem/31155736> 6 7 Reviewed by Ryosuke Niwa. 8 9 Update test to ensure that we disallow navigation initiated via a DOM click event from 10 an onbeforeunload handler. 11 12 * fast/events/before-unload-forbidden-navigation.html: 13 1 14 2017-03-20 Andy Estes <aestes@apple.com> 2 15 -
trunk/LayoutTests/fast/events/before-unload-forbidden-navigation.html
r120792 r214194 13 13 14 14 var log = document.getElementById('log'); 15 var didFireBeforeUnloadEvent = false; 15 16 16 17 function test(iframe) { … … 26 27 } 27 28 29 function navigateByClickingHyperlink(contentWindow, url) { 30 var link = contentWindow.document.createElement('a'); 31 link.href = url; 32 link.click(); 33 } 34 28 35 function fired(contentWindow) { 36 if (didFireBeforeUnloadEvent) 37 return; 38 didFireBeforeUnloadEvent = true; 39 29 40 location.href = 'resources/before-unload-in-subframe-fail.html'; 30 41 contentWindow.location.href = 'resources/before-unload-in-subframe-fail.html'; 42 navigateByClickingHyperlink(contentWindow, 'resources/before-unload-in-subframe-fail.html'); 43 navigateByClickingHyperlink(window, 'resources/before-unload-in-subframe-fail.html'); 44 31 45 log.innerHTML = 'PASS 1/2'; 32 46 contentWindow.frameElement.halfPassed = true; -
trunk/Source/WebCore/ChangeLog
r214190 r214194 1 2017-03-20 Daniel Bates <dabates@apple.com> 2 3 Prevent new navigations from onbeforeunload handler 4 https://bugs.webkit.org/show_bug.cgi?id=169891 5 <rdar://problem/31155736> 6 7 Reviewed by Ryosuke Niwa. 8 9 Ensure that all navigations initiated from an onbeforeunload handler are disallowed 10 regardless of how they were scheduled. Such navigations go against the expectation 11 of a user. 12 13 * loader/FrameLoader.cpp: 14 (WebCore::FrameLoader::isNavigationAllowed): Added. 15 (WebCore::FrameLoader::loadURL): Modified code to call FrameLoader::isNavigationAllowed(). 16 (WebCore::FrameLoader::loadWithDocumentLoader): Ditto. 17 (WebCore::FrameLoader::stopAllLoaders): Ditto. 18 * loader/FrameLoader.h: 19 1 20 2017-03-20 Alex Christensen <achristensen@webkit.org> 2 21 -
trunk/Source/WebCore/loader/FrameLoader.cpp
r214113 r214194 1211 1211 } 1212 1212 1213 bool FrameLoader::isNavigationAllowed() const 1214 { 1215 return m_pageDismissalEventBeingDispatched == PageDismissalType::None && NavigationDisablerForBeforeUnload::isNavigationAllowed(); 1216 } 1217 1213 1218 void FrameLoader::loadURL(const FrameLoadRequest& frameLoadRequest, const String& referrer, FrameLoadType newLoadType, Event* event, FormState* formState) 1214 1219 { … … 1249 1254 } 1250 1255 1251 if ( m_pageDismissalEventBeingDispatched != PageDismissalType::None)1256 if (!isNavigationAllowed()) 1252 1257 return; 1253 1258 … … 1454 1459 ASSERT(m_frame.view()); 1455 1460 1456 if ( m_pageDismissalEventBeingDispatched != PageDismissalType::None)1461 if (!isNavigationAllowed()) 1457 1462 return; 1458 1463 … … 1649 1654 { 1650 1655 ASSERT(!m_frame.document() || m_frame.document()->pageCacheState() != Document::InPageCache); 1651 if ( m_pageDismissalEventBeingDispatched != PageDismissalType::None)1656 if (!isNavigationAllowed()) 1652 1657 return; 1653 1658 -
trunk/Source/WebCore/loader/FrameLoader.h
r214113 r214194 389 389 void applyShouldOpenExternalURLsPolicyToNewDocumentLoader(DocumentLoader&, ShouldOpenExternalURLsPolicy propagatedPolicy); 390 390 391 bool isNavigationAllowed() const; 392 391 393 Frame& m_frame; 392 394 FrameLoaderClient& m_client;
Note: See TracChangeset
for help on using the changeset viewer.