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 23c0121c422682de09655ce209a4a58600b7aa4c..505a1e77808f930919046c60b7d5bd6fc126e7f3 100644 |
--- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
+++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
@@ -287,7 +287,7 @@ void FrameLoader::saveScrollState() { |
} |
void FrameLoader::dispatchUnloadEvent() { |
- NavigationDisablerForUnload navigationDisabler; |
+ FrameNavigationDisabler navigationDisabler(*m_frame); |
// If the frame is unloading, the provisional loader should no longer be |
// protected. It will be detached soon. |
@@ -1085,9 +1085,6 @@ void FrameLoader::load(const FrameLoadRequest& passedRequest, |
HistoryLoadType historyLoadType) { |
DCHECK(m_frame->document()); |
- if (!m_frame->isNavigationAllowed()) |
lfg
2016/11/10 00:15:04
This change has a side effect that javascript: nav
|
- return; |
- |
if (m_inStopAllLoaders) |
return; |
@@ -1117,6 +1114,12 @@ void FrameLoader::load(const FrameLoadRequest& passedRequest, |
? nullptr |
: m_frame->findFrameForNavigation( |
AtomicString(request.frameName()), *m_frame); |
+ |
+ if (targetFrame && targetFrame->isLocalFrame() && |
+ !toLocalFrame(targetFrame)->isNavigationAllowed()) { |
+ return; |
+ } |
+ |
NavigationPolicy policy = navigationPolicyForRequest(request); |
if (targetFrame && targetFrame != m_frame && |
shouldNavigateTargetFrame(policy)) { |
@@ -1552,7 +1555,7 @@ bool FrameLoader::shouldClose(bool isReload) { |
bool shouldClose = false; |
{ |
- NavigationDisablerForUnload navigationDisabler; |
+ FrameNavigationDisabler navigationDisabler(*m_frame); |
size_t i; |
bool didAllowNavigation = false; |