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

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

Issue 1135633004: Revert of Make createWindow (mostly) work with OOPIF (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 7 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
« no previous file with comments | « Source/core/page/CreateWindow.h ('k') | Source/platform/PlatformScreen.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/page/CreateWindow.cpp
diff --git a/Source/core/page/CreateWindow.cpp b/Source/core/page/CreateWindow.cpp
index 8ce3329c9302c5eb417b85da47e03682dea717b8..c2329edc91b41b680201896fbb7f2f7721548550 100644
--- a/Source/core/page/CreateWindow.cpp
+++ b/Source/core/page/CreateWindow.cpp
@@ -28,7 +28,6 @@
#include "core/page/CreateWindow.h"
#include "core/dom/Document.h"
-#include "core/frame/FrameClient.h"
#include "core/frame/FrameHost.h"
#include "core/frame/LocalFrame.h"
#include "core/frame/Settings.h"
@@ -48,7 +47,7 @@
namespace blink {
-static Frame* createWindow(LocalFrame& openerFrame, LocalFrame& lookupFrame, const FrameLoadRequest& request, const WindowFeatures& features, NavigationPolicy policy, ShouldSendReferrer shouldSendReferrer)
+static LocalFrame* createWindow(LocalFrame& openerFrame, LocalFrame& lookupFrame, const FrameLoadRequest& request, const WindowFeatures& features, NavigationPolicy policy, ShouldSendReferrer shouldSendReferrer, bool& created)
{
ASSERT(!features.dialog || request.frameName().isEmpty());
ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeAuxiliary);
@@ -63,7 +62,9 @@
host->chrome().focus();
}
}
- return frame;
+ created = false;
+ // FIXME: Make this work with RemoteFrames.
+ return frame->isLocalFrame() ? toLocalFrame(frame) : nullptr;
}
}
@@ -74,20 +75,24 @@
return nullptr;
}
- if (openerFrame.settings() && !openerFrame.settings()->supportsMultipleWindows())
- return openerFrame.tree().top();
-
- FrameHost* oldHost = openerFrame.host();
- if (!oldHost)
- return nullptr;
-
- Page* page = oldHost->chrome().client().createWindow(&openerFrame, request, features, policy, shouldSendReferrer);
- if (!page)
+ if (openerFrame.settings() && !openerFrame.settings()->supportsMultipleWindows()) {
+ created = false;
+ if (!openerFrame.tree().top()->isLocalFrame())
+ return nullptr;
+ return toLocalFrame(openerFrame.tree().top());
+ }
+
+ Page* oldPage = openerFrame.page();
+ if (!oldPage)
+ return nullptr;
+
+ Page* page = oldPage->chrome().client().createWindow(&openerFrame, request, features, policy, shouldSendReferrer);
+ if (!page || !page->mainFrame()->isLocalFrame())
return nullptr;
FrameHost* host = &page->frameHost();
ASSERT(page->mainFrame());
- Frame& frame = *page->mainFrame();
+ LocalFrame& frame = *page->deprecatedLocalMainFrame();
if (request.frameName() != "_blank")
frame.tree().setName(request.frameName());
@@ -110,18 +115,19 @@
if (features.heightSet)
windowRect.setHeight(features.height + (windowRect.height() - viewportSize.height()));
- host->chrome().setWindowRect(windowRect);
+ // Ensure minimum size as well as being within valid screen area.
+ IntRect newWindowRect = LocalDOMWindow::adjustWindowRect(frame, windowRect);
+
+ host->chrome().setWindowRect(newWindowRect);
host->chrome().show(policy);
- // TODO(japhet): There's currently no way to set sandbox flags on a RemoteFrame and have it propagate
- // to the real frame in a different process. See crbug.com/483584.
- if (frame.isLocalFrame())
- toLocalFrame(&frame)->loader().forceSandboxFlags(openerFrame.document()->sandboxFlags());
-
+ frame.loader().forceSandboxFlags(openerFrame.document()->sandboxFlags());
+
+ created = true;
return &frame;
}
-Frame* createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures& windowFeatures,
+LocalFrame* createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures& windowFeatures,
LocalDOMWindow& callingWindow, LocalFrame& firstFrame, LocalFrame& openerFrame)
{
LocalFrame* activeFrame = callingWindow.frame();
@@ -144,25 +150,27 @@
// so we need to ensure the proper referrer is set now.
frameRequest.resourceRequest().setHTTPReferrer(SecurityPolicy::generateReferrer(activeFrame->document()->referrerPolicy(), completedURL, activeFrame->document()->outgoingReferrer()));
+ bool hasUserGesture = UserGestureIndicator::processingUserGesture();
+
// 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.
- Frame* newFrame = createWindow(*activeFrame, openerFrame, frameRequest, windowFeatures, NavigationPolicyIgnore, MaybeSendReferrer);
+ bool created;
+ LocalFrame* newFrame = createWindow(*activeFrame, openerFrame, frameRequest, windowFeatures, NavigationPolicyIgnore, MaybeSendReferrer, created);
if (!newFrame)
return nullptr;
- newFrame->client()->setOpener(&openerFrame);
-
- if (newFrame->domWindow()->isInsecureScriptAccess(callingWindow, completedURL))
+ newFrame->loader().setOpener(&openerFrame);
+
+ if (newFrame->localDOMWindow()->isInsecureScriptAccess(callingWindow, completedURL))
return newFrame;
- // TODO(dcheng): Special case for window.open("about:blank") to ensure it loads synchronously into
- // a new window. This is our historical behavior, and it's consistent with the creation of
- // a new iframe with src="about:blank". Perhaps we could get rid of this if we started reporting
- // the initial empty document's url as about:blank? See crbug.com/471239.
- if (newFrame->isLocalFrame() && newFrame->isMainFrame() && !toLocalFrame(newFrame)->loader().stateMachine()->committedFirstRealDocumentLoad() && (completedURL.isEmpty() || completedURL.isAboutBlankURL()))
- toLocalFrame(newFrame)->loader().load(FrameLoadRequest(callingWindow.document(), completedURL));
- else
+ if (created) {
+ FrameLoadRequest request(callingWindow.document(), completedURL);
+ request.resourceRequest().setHasUserGesture(hasUserGesture);
+ newFrame->loader().load(request);
+ } else if (!urlString.isEmpty()) {
newFrame->navigate(*callingWindow.document(), completedURL, false);
+ }
return newFrame;
}
@@ -181,17 +189,17 @@
policy = NavigationPolicyNewForegroundTab;
WindowFeatures features;
- Frame* newFrame = createWindow(openerFrame, openerFrame, request, features, policy, shouldSendReferrer);
+ bool created;
+ LocalFrame* newFrame = createWindow(openerFrame, openerFrame, request, features, policy, shouldSendReferrer, created);
if (!newFrame)
return;
- if (shouldSendReferrer == MaybeSendReferrer)
- newFrame->client()->setOpener(&openerFrame);
-
- // TODO(japhet): Form submissions on RemoteFrames don't work yet.
+ if (shouldSendReferrer == MaybeSendReferrer) {
+ newFrame->loader().setOpener(&openerFrame);
+ newFrame->document()->setReferrerPolicy(openerFrame.document()->referrerPolicy());
+ }
FrameLoadRequest newRequest(0, request.resourceRequest());
newRequest.setFormState(request.formState());
- if (newFrame->isLocalFrame())
- toLocalFrame(newFrame)->loader().load(newRequest);
+ newFrame->loader().load(newRequest);
}
} // namespace blink
« no previous file with comments | « Source/core/page/CreateWindow.h ('k') | Source/platform/PlatformScreen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698