| Index: Source/core/frame/LocalDOMWindow.cpp
|
| diff --git a/Source/core/frame/LocalDOMWindow.cpp b/Source/core/frame/LocalDOMWindow.cpp
|
| index 2bf805eb1633fed52ff5ab329a28ba2c3c861f5a..e78d9a57326fd8f7f8911e01b84ae32566bd8a69 100644
|
| --- a/Source/core/frame/LocalDOMWindow.cpp
|
| +++ b/Source/core/frame/LocalDOMWindow.cpp
|
| @@ -231,6 +231,10 @@ static void addUnloadEventListener(LocalDOMWindow* domWindow)
|
| if (set.isEmpty())
|
| disableSuddenTermination();
|
| set.add(domWindow);
|
| + if (domWindow->frame()) {
|
| + domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| + 1, FrameLoaderClient::UnloadHandler);
|
| + }
|
| }
|
|
|
| static void removeUnloadEventListener(LocalDOMWindow* domWindow)
|
| @@ -242,6 +246,10 @@ static void removeUnloadEventListener(LocalDOMWindow* domWindow)
|
| set.remove(it);
|
| if (set.isEmpty())
|
| enableSuddenTermination();
|
| + if (domWindow->frame()) {
|
| + domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| + -1, FrameLoaderClient::UnloadHandler);
|
| + }
|
| }
|
|
|
| static void removeAllUnloadEventListeners(LocalDOMWindow* domWindow)
|
| @@ -250,9 +258,14 @@ static void removeAllUnloadEventListeners(LocalDOMWindow* domWindow)
|
| DOMWindowSet::iterator it = set.find(domWindow);
|
| if (it == set.end())
|
| return;
|
| + int numHandlers = set.count(domWindow);
|
| set.removeAll(it);
|
| if (set.isEmpty())
|
| enableSuddenTermination();
|
| + if (domWindow->frame()) {
|
| + domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| + -numHandlers, FrameLoaderClient::UnloadHandler);
|
| + }
|
| }
|
|
|
| static void addBeforeUnloadEventListener(LocalDOMWindow* domWindow)
|
| @@ -261,6 +274,10 @@ static void addBeforeUnloadEventListener(LocalDOMWindow* domWindow)
|
| if (set.isEmpty())
|
| disableSuddenTermination();
|
| set.add(domWindow);
|
| + if (domWindow->frame()) {
|
| + domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| + 1, FrameLoaderClient::BeforeUnloadHandler);
|
| + }
|
| }
|
|
|
| static void removeBeforeUnloadEventListener(LocalDOMWindow* domWindow)
|
| @@ -272,6 +289,10 @@ static void removeBeforeUnloadEventListener(LocalDOMWindow* domWindow)
|
| set.remove(it);
|
| if (set.isEmpty())
|
| enableSuddenTermination();
|
| + if (domWindow->frame()) {
|
| + domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| + -1, FrameLoaderClient::BeforeUnloadHandler);
|
| + }
|
| }
|
|
|
| static void removeAllBeforeUnloadEventListeners(LocalDOMWindow* domWindow)
|
| @@ -280,9 +301,14 @@ static void removeAllBeforeUnloadEventListeners(LocalDOMWindow* domWindow)
|
| DOMWindowSet::iterator it = set.find(domWindow);
|
| if (it == set.end())
|
| return;
|
| + int numHandlers = set.count(domWindow);
|
| set.removeAll(it);
|
| if (set.isEmpty())
|
| enableSuddenTermination();
|
| + if (domWindow->frame()) {
|
| + domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| + -numHandlers, FrameLoaderClient::BeforeUnloadHandler);
|
| + }
|
| }
|
|
|
| static bool allowsBeforeUnloadListeners(LocalDOMWindow* window)
|
|
|