Index: Source/web/ChromeClientImpl.cpp |
diff --git a/Source/web/ChromeClientImpl.cpp b/Source/web/ChromeClientImpl.cpp |
index 68ed7ab0e41f67737a3aa4919499f677dc2233a7..aaf72f9694894c7e5183d814c5e299fadbaf079f 100644 |
--- a/Source/web/ChromeClientImpl.cpp |
+++ b/Source/web/ChromeClientImpl.cpp |
@@ -249,7 +249,7 @@ void updatePolicyForEvent(const WebInputEvent* inputEvent, NavigationPolicy* pol |
*policy = userPolicy; |
} |
-WebNavigationPolicy getNavigationPolicy(const WindowFeatures& features) |
+WebNavigationPolicy getNavigationPolicy(const WindowFeatures& features, CreateWindowReason createWindowReason) |
{ |
// If our default configuration was modified by a script or wasn't |
// created by a user gesture, then show as a popup. Else, let this |
@@ -263,17 +263,18 @@ WebNavigationPolicy getNavigationPolicy(const WindowFeatures& features) |
NavigationPolicy policy = NavigationPolicyNewForegroundTab; |
if (asPopup) |
policy = NavigationPolicyNewPopup; |
- updatePolicyForEvent(WebViewImpl::currentInputEvent(), &policy); |
+ if (createWindowReason == CreatedFromLoadRequest) |
+ updatePolicyForEvent(WebViewImpl::currentInputEvent(), &policy); |
return static_cast<WebNavigationPolicy>(policy); |
} |
-WebNavigationPolicy effectiveNavigationPolicy(NavigationPolicy navigationPolicy, const WindowFeatures& features) |
+WebNavigationPolicy effectiveNavigationPolicy(NavigationPolicy navigationPolicy, const WindowFeatures& features, CreateWindowReason createWindowReason) |
{ |
WebNavigationPolicy policy = static_cast<WebNavigationPolicy>(navigationPolicy); |
if (policy == WebNavigationPolicyIgnore) |
- return getNavigationPolicy(features); |
- if (policy == WebNavigationPolicyNewBackgroundTab && getNavigationPolicy(features) != WebNavigationPolicyNewBackgroundTab && !UIEventWithKeyState::newTabModifierSetFromIsolatedWorld()) |
+ return getNavigationPolicy(features, createWindowReason); |
+ if (policy == WebNavigationPolicyNewBackgroundTab && getNavigationPolicy(features, createWindowReason) != WebNavigationPolicyNewBackgroundTab && !UIEventWithKeyState::newTabModifierSetFromIsolatedWorld()) |
return WebNavigationPolicyNewForegroundTab; |
return policy; |
@@ -282,12 +283,12 @@ WebNavigationPolicy effectiveNavigationPolicy(NavigationPolicy navigationPolicy, |
} // namespace |
Page* ChromeClientImpl::createWindow(LocalFrame* frame, const FrameLoadRequest& r, const WindowFeatures& features, |
- NavigationPolicy navigationPolicy, ShouldSendReferrer shouldSendReferrer) |
+ NavigationPolicy navigationPolicy, ShouldSendReferrer shouldSendReferrer, CreateWindowReason createWindowReason) |
{ |
if (!m_webView->client()) |
return nullptr; |
- WebNavigationPolicy policy = effectiveNavigationPolicy(navigationPolicy, features); |
+ WebNavigationPolicy policy = effectiveNavigationPolicy(navigationPolicy, features, createWindowReason); |
ASSERT(frame->document()); |
Fullscreen::fullyExitFullscreen(*frame->document()); |
@@ -306,10 +307,10 @@ void ChromeClientImpl::didOverscroll(const FloatSize& unusedDelta, const FloatSi |
m_webView->client()->didOverscroll(unusedDelta, accumulatedRootOverScroll, position, velocity); |
} |
-void ChromeClientImpl::show(NavigationPolicy navigationPolicy) |
+void ChromeClientImpl::show(NavigationPolicy navigationPolicy, CreateWindowReason createWindowReason) |
{ |
if (m_webView->client()) |
- m_webView->client()->show(effectiveNavigationPolicy(navigationPolicy, m_windowFeatures)); |
+ m_webView->client()->show(effectiveNavigationPolicy(navigationPolicy, m_windowFeatures, createWindowReason)); |
} |
void ChromeClientImpl::setToolbarsVisible(bool value) |