| Index: Source/core/frame/LocalDOMWindow.cpp
|
| diff --git a/Source/core/frame/LocalDOMWindow.cpp b/Source/core/frame/LocalDOMWindow.cpp
|
| index f2f19e14a2b9bbe4f84ae0b3309272fea0222c2e..ebac82e5703d2bbfd5b1b6d65397a717934ca4c6 100644
|
| --- a/Source/core/frame/LocalDOMWindow.cpp
|
| +++ b/Source/core/frame/LocalDOMWindow.cpp
|
| @@ -229,13 +229,14 @@ static DOMWindowSet& windowsWithBeforeUnloadEventListeners()
|
| static void addUnloadEventListener(LocalDOMWindow* domWindow)
|
| {
|
| DOMWindowSet& set = windowsWithUnloadEventListeners();
|
| - if (set.isEmpty())
|
| + if (set.isEmpty()) {
|
| disableSuddenTermination();
|
| - set.add(domWindow);
|
| - if (domWindow->frame()) {
|
| - domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| - 1, FrameLoaderClient::UnloadHandler);
|
| + if (domWindow->frame()) {
|
| + domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| + true, FrameLoaderClient::UnloadHandler);
|
| + }
|
| }
|
| + set.add(domWindow);
|
| }
|
|
|
| static void removeUnloadEventListener(LocalDOMWindow* domWindow)
|
| @@ -245,11 +246,12 @@ static void removeUnloadEventListener(LocalDOMWindow* domWindow)
|
| if (it == set.end())
|
| return;
|
| set.remove(it);
|
| - if (set.isEmpty())
|
| + if (set.isEmpty()) {
|
| enableSuddenTermination();
|
| - if (domWindow->frame()) {
|
| - domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| - -1, FrameLoaderClient::UnloadHandler);
|
| + if (domWindow->frame()) {
|
| + domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| + false, FrameLoaderClient::UnloadHandler);
|
| + }
|
| }
|
| }
|
|
|
| @@ -259,26 +261,27 @@ 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())
|
| + if (set.isEmpty()) {
|
| enableSuddenTermination();
|
| - if (domWindow->frame()) {
|
| - domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| - -numHandlers, FrameLoaderClient::UnloadHandler);
|
| + if (domWindow->frame()) {
|
| + domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| + false, FrameLoaderClient::UnloadHandler);
|
| + }
|
| }
|
| }
|
|
|
| static void addBeforeUnloadEventListener(LocalDOMWindow* domWindow)
|
| {
|
| DOMWindowSet& set = windowsWithBeforeUnloadEventListeners();
|
| - if (set.isEmpty())
|
| + if (set.isEmpty()) {
|
| disableSuddenTermination();
|
| - set.add(domWindow);
|
| - if (domWindow->frame()) {
|
| - domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| - 1, FrameLoaderClient::BeforeUnloadHandler);
|
| + if (domWindow->frame()) {
|
| + domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| + true, FrameLoaderClient::BeforeUnloadHandler);
|
| + }
|
| }
|
| + set.add(domWindow);
|
| }
|
|
|
| static void removeBeforeUnloadEventListener(LocalDOMWindow* domWindow)
|
| @@ -288,11 +291,12 @@ static void removeBeforeUnloadEventListener(LocalDOMWindow* domWindow)
|
| if (it == set.end())
|
| return;
|
| set.remove(it);
|
| - if (set.isEmpty())
|
| + if (set.isEmpty()) {
|
| enableSuddenTermination();
|
| - if (domWindow->frame()) {
|
| - domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| - -1, FrameLoaderClient::BeforeUnloadHandler);
|
| + if (domWindow->frame()) {
|
| + domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| + false, FrameLoaderClient::BeforeUnloadHandler);
|
| + }
|
| }
|
| }
|
|
|
| @@ -302,13 +306,13 @@ 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())
|
| + if (set.isEmpty()) {
|
| enableSuddenTermination();
|
| - if (domWindow->frame()) {
|
| - domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| - -numHandlers, FrameLoaderClient::BeforeUnloadHandler);
|
| + if (domWindow->frame()) {
|
| + domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
|
| + false, FrameLoaderClient::BeforeUnloadHandler);
|
| + }
|
| }
|
| }
|
|
|
|
|