Index: third_party/WebKit/Source/core/loader/FrameLoader.cpp |
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
index 73b5374e1fb259a7c7e283ebc37fa32fa832e0c7..dbd70133ba9236ec3aef57a965168f8ee938f144 100644 |
--- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
+++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
@@ -1351,6 +1351,7 @@ bool FrameLoader::shouldClose(bool isReload) |
} |
bool shouldClose = false; |
+ bool eventListenerCalled = false; |
{ |
NavigationDisablerForBeforeUnload navigationDisabler; |
size_t i; |
@@ -1359,7 +1360,7 @@ bool FrameLoader::shouldClose(bool isReload) |
for (i = 0; i < targetFrames.size(); i++) { |
if (!targetFrames[i]->tree().isDescendantOf(m_frame)) |
continue; |
- if (!targetFrames[i]->document()->dispatchBeforeUnloadEvent(page->chromeClient(), isReload, didAllowNavigation)) |
+ if (!targetFrames[i]->document()->dispatchBeforeUnloadEvent(page->chromeClient(), isReload, didAllowNavigation, eventListenerCalled)) |
break; |
} |
@@ -1367,6 +1368,13 @@ bool FrameLoader::shouldClose(bool isReload) |
shouldClose = true; |
} |
+ if (shouldClose) { |
+ for (size_t i = 0; i < targetFrames.size(); ++i) { |
+ if (auto* client = targetFrames[i]->loader().client()) |
+ client->dispatchDidHandleOnBeforeUnloadEvent(eventListenerCalled); |
+ } |
+ } |
+ |
return shouldClose; |
} |