Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(562)

Unified Diff: third_party/WebKit/Source/core/page/CreateWindow.cpp

Issue 2058693002: Do not suppress referrers for '<a ... rel="noopener">'. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/page/CreateWindow.cpp
diff --git a/third_party/WebKit/Source/core/page/CreateWindow.cpp b/third_party/WebKit/Source/core/page/CreateWindow.cpp
index 6b8f1697f905bf261c634a28d29602982326fca9..c1e5ea3ddcaaea86845c85813267032fd1a88e8d 100644
--- a/third_party/WebKit/Source/core/page/CreateWindow.cpp
+++ b/third_party/WebKit/Source/core/page/CreateWindow.cpp
@@ -65,13 +65,13 @@ static Frame* reuseExistingWindow(LocalFrame& activeFrame, LocalFrame& lookupFra
return nullptr;
}
-static Frame* createNewWindow(LocalFrame& openerFrame, const FrameLoadRequest& request, const WindowFeatures& features, NavigationPolicy policy, ShouldSetOpener shouldSetOpener, bool& created)
+static Frame* createNewWindow(LocalFrame& openerFrame, const FrameLoadRequest& request, const WindowFeatures& features, NavigationPolicy policy, bool& created)
{
FrameHost* oldHost = openerFrame.host();
if (!oldHost)
return nullptr;
- Page* page = oldHost->chromeClient().createWindow(&openerFrame, request, features, policy, shouldSetOpener);
+ Page* page = oldHost->chromeClient().createWindow(&openerFrame, request, features, policy);
if (!page)
return nullptr;
FrameHost* host = &page->frameHost();
@@ -112,7 +112,7 @@ static Frame* createNewWindow(LocalFrame& openerFrame, const FrameLoadRequest& r
return &frame;
}
-static Frame* createWindowHelper(LocalFrame& openerFrame, LocalFrame& activeFrame, LocalFrame& lookupFrame, const FrameLoadRequest& request, const WindowFeatures& features, NavigationPolicy policy, ShouldSetOpener shouldSetOpener, bool& created)
+static Frame* createWindowHelper(LocalFrame& openerFrame, LocalFrame& activeFrame, LocalFrame& lookupFrame, const FrameLoadRequest& request, const WindowFeatures& features, NavigationPolicy policy, bool& created)
{
ASSERT(!features.dialog || request.frameName().isEmpty());
ASSERT(request.resourceRequest().requestorOrigin() || openerFrame.document()->url().isEmpty());
@@ -135,12 +135,12 @@ static Frame* createWindowHelper(LocalFrame& openerFrame, LocalFrame& activeFram
}
if (window) {
- if (shouldSetOpener == MaybeSetOpener)
+ if (request.getShouldSetOpener() == MaybeSetOpener)
window->client()->setOpener(&openerFrame);
return window;
}
- return createNewWindow(openerFrame, request, features, policy, shouldSetOpener, created);
+ return createNewWindow(openerFrame, request, features, policy, created);
}
DOMWindow* createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures& windowFeatures,
@@ -157,6 +157,7 @@ DOMWindow* createWindow(const String& urlString, const AtomicString& frameName,
}
FrameLoadRequest frameRequest(callingWindow.document(), completedURL, frameName);
+ frameRequest.setShouldSetOpener(windowFeatures.noopener ? NeverSetOpener : MaybeSetOpener);
frameRequest.resourceRequest().setFrameType(WebURLRequest::FrameTypeAuxiliary);
frameRequest.resourceRequest().setRequestorOrigin(SecurityOrigin::create(activeFrame->document()->url()));
@@ -174,8 +175,7 @@ DOMWindow* createWindow(const String& urlString, const AtomicString& frameName,
// We pass the opener frame for the lookupFrame in case the active frame is different from
// the opener frame, and the name references a frame relative to the opener frame.
bool created;
- ShouldSetOpener opener = windowFeatures.noopener ? NeverSetOpener : MaybeSetOpener;
- Frame* newFrame = createWindowHelper(openerFrame, *activeFrame, openerFrame, frameRequest, windowFeatures, NavigationPolicyIgnore, opener, created);
+ Frame* newFrame = createWindowHelper(openerFrame, *activeFrame, openerFrame, frameRequest, windowFeatures, NavigationPolicyIgnore, created);
if (!newFrame)
return nullptr;
@@ -186,7 +186,7 @@ DOMWindow* createWindow(const String& urlString, const AtomicString& frameName,
return newFrame->domWindow();
}
-void createWindowForRequest(const FrameLoadRequest& request, LocalFrame& openerFrame, NavigationPolicy policy, ShouldSendReferrer shouldSendReferrer, ShouldSetOpener shouldSetOpener)
+void createWindowForRequest(const FrameLoadRequest& request, LocalFrame& openerFrame, NavigationPolicy policy)
{
ASSERT(request.resourceRequest().requestorOrigin() || (openerFrame.document() && openerFrame.document()->url().isEmpty()));
@@ -203,11 +203,12 @@ void createWindowForRequest(const FrameLoadRequest& request, LocalFrame& openerF
policy = NavigationPolicyNewForegroundTab;
WindowFeatures features;
+ features.noopener = request.getShouldSetOpener() == NeverSetOpener;
bool created;
- Frame* newFrame = createWindowHelper(openerFrame, openerFrame, openerFrame, request, features, policy, shouldSetOpener, created);
+ Frame* newFrame = createWindowHelper(openerFrame, openerFrame, openerFrame, request, features, policy, created);
if (!newFrame)
return;
- if (shouldSendReferrer == MaybeSendReferrer) {
+ if (request.getShouldSendReferrer() == MaybeSendReferrer) {
// TODO(japhet): Does ReferrerPolicy need to be proagated for RemoteFrames?
if (newFrame->isLocalFrame())
toLocalFrame(newFrame)->document()->setReferrerPolicy(openerFrame.document()->getReferrerPolicy());

Powered by Google App Engine
This is Rietveld 408576698