| Index: third_party/WebKit/Source/core/loader/NavigationScheduler.cpp
|
| diff --git a/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp b/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp
|
| index da4158c631839ea4577fb0e933d76a030cb3e9ef..94e7e6fc23441d022c34b7f8cc3261980170f5db 100644
|
| --- a/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp
|
| +++ b/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp
|
| @@ -278,6 +278,23 @@ bool NavigationScheduler::isNavigationScheduledWithin(double interval) const
|
| return m_redirect && m_redirect->delay() <= interval;
|
| }
|
|
|
| +// TODO(dcheng): There are really two different load blocking concepts at work
|
| +// here and they have been incorrectly tangled together.
|
| +//
|
| +// 1. NavigationDisablerForBeforeUnload is for blocking navigation scheduling
|
| +// during a beforeunload event. Scheduled navigations during beforeunload
|
| +// would make it possible to get trapped in an endless loop of beforeunload
|
| +// dialogs.
|
| +//
|
| +// Checking Frame::isNavigationAllowed() doesn't make sense in this context:
|
| +// NavigationScheduler is always cleared when a new load commits, so it's
|
| +// impossible for a scheduled navigation to clobber a navigation that just
|
| +// committed.
|
| +//
|
| +// 2. FrameNavigationDisabler / LocalFrame::isNavigationAllowed() are intended
|
| +// to prevent Documents from being reattached during destruction, since it
|
| +// can cause bugs with security origin confusion. This is primarily intended
|
| +// to block /synchronous/ navigations during things lke Document::detach().
|
| inline bool NavigationScheduler::shouldScheduleReload() const
|
| {
|
| return m_frame->page() && m_frame->isNavigationAllowed() && NavigationDisablerForBeforeUnload::isNavigationAllowed();
|
|
|