| Index: Source/core/page/CreateWindow.cpp
|
| diff --git a/Source/core/page/CreateWindow.cpp b/Source/core/page/CreateWindow.cpp
|
| index 0c8604fb5c8f40dcba974b2cb7bc70d3f03ae691..1979dfc6b2a49cdfa115900b514dc8890c9782af 100644
|
| --- a/Source/core/page/CreateWindow.cpp
|
| +++ b/Source/core/page/CreateWindow.cpp
|
| @@ -44,12 +44,12 @@
|
|
|
| namespace WebCore {
|
|
|
| -static LocalFrame* createWindow(LocalFrame* openerFrame, LocalFrame* lookupFrame, const FrameLoadRequest& request, const WindowFeatures& features, NavigationPolicy policy, ShouldSendReferrer shouldSendReferrer, bool& created)
|
| +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());
|
|
|
| if (!request.frameName().isEmpty() && request.frameName() != "_blank" && policy == NavigationPolicyIgnore) {
|
| - if (LocalFrame* frame = lookupFrame->loader().findFrameForNavigation(request.frameName(), openerFrame->document())) {
|
| + if (LocalFrame* frame = lookupFrame.loader().findFrameForNavigation(request.frameName(), openerFrame.document())) {
|
| if (request.frameName() != "_self")
|
| frame->page()->focusController().setFocusedFrame(frame);
|
| created = false;
|
| @@ -58,32 +58,33 @@ static LocalFrame* createWindow(LocalFrame* openerFrame, LocalFrame* lookupFrame
|
| }
|
|
|
| // Sandboxed frames cannot open new auxiliary browsing contexts.
|
| - if (openerFrame->document()->isSandboxed(SandboxPopups)) {
|
| + if (openerFrame.document()->isSandboxed(SandboxPopups)) {
|
| // FIXME: This message should be moved off the console once a solution to https://bugs.webkit.org/show_bug.cgi?id=103274 exists.
|
| - openerFrame->document()->addConsoleMessage(SecurityMessageSource, ErrorMessageLevel, "Blocked opening '" + request.resourceRequest().url().elidedString() + "' in a new window because the request was made in a sandboxed frame whose 'allow-popups' permission is not set.");
|
| + openerFrame.document()->addConsoleMessage(SecurityMessageSource, ErrorMessageLevel, "Blocked opening '" + request.resourceRequest().url().elidedString() + "' in a new window because the request was made in a sandboxed frame whose 'allow-popups' permission is not set.");
|
| return 0;
|
| }
|
|
|
| - if (openerFrame->settings() && !openerFrame->settings()->supportsMultipleWindows()) {
|
| + if (openerFrame.settings() && !openerFrame.settings()->supportsMultipleWindows()) {
|
| created = false;
|
| - return openerFrame->tree().top();
|
| + return openerFrame.tree().top();
|
| }
|
|
|
| - Page* oldPage = openerFrame->page();
|
| + Page* oldPage = openerFrame.page();
|
| if (!oldPage)
|
| return 0;
|
|
|
| - Page* page = oldPage->chrome().client().createWindow(openerFrame, request, features, policy, shouldSendReferrer);
|
| + Page* page = oldPage->chrome().client().createWindow(&openerFrame, request, features, policy, shouldSendReferrer);
|
| if (!page)
|
| return 0;
|
| FrameHost* host = &page->frameHost();
|
|
|
| - LocalFrame* frame = page->mainFrame();
|
| + ASSERT(page->mainFrame());
|
| + LocalFrame& frame = *page->mainFrame();
|
|
|
| - frame->loader().forceSandboxFlags(openerFrame->document()->sandboxFlags());
|
| + frame.loader().forceSandboxFlags(openerFrame.document()->sandboxFlags());
|
|
|
| if (request.frameName() != "_blank")
|
| - frame->tree().setName(request.frameName());
|
| + frame.tree().setName(request.frameName());
|
|
|
| host->chrome().setWindowFeatures(features);
|
|
|
| @@ -110,56 +111,57 @@ static LocalFrame* createWindow(LocalFrame* openerFrame, LocalFrame* lookupFrame
|
| host->chrome().show(policy);
|
|
|
| created = true;
|
| - return frame;
|
| + return &frame;
|
| }
|
|
|
| LocalFrame* createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures& windowFeatures,
|
| - DOMWindow* callingWindow, LocalFrame* firstFrame, LocalFrame* openerFrame)
|
| + DOMWindow& callingWindow, LocalFrame& firstFrame, LocalFrame& openerFrame)
|
| {
|
| - LocalFrame* activeFrame = callingWindow->frame();
|
| + LocalFrame* activeFrame = callingWindow.frame();
|
| + ASSERT(activeFrame);
|
|
|
| - KURL completedURL = urlString.isEmpty() ? KURL(ParsedURLString, emptyString()) : firstFrame->document()->completeURL(urlString);
|
| + KURL completedURL = urlString.isEmpty() ? KURL(ParsedURLString, emptyString()) : firstFrame.document()->completeURL(urlString);
|
| if (!completedURL.isEmpty() && !completedURL.isValid()) {
|
| // Don't expose client code to invalid URLs.
|
| - callingWindow->printErrorMessage("Unable to open a window with invalid URL '" + completedURL.string() + "'.\n");
|
| + callingWindow.printErrorMessage("Unable to open a window with invalid URL '" + completedURL.string() + "'.\n");
|
| return 0;
|
| }
|
|
|
| // For whatever reason, Firefox uses the first frame to determine the outgoingReferrer. We replicate that behavior here.
|
| - Referrer referrer(SecurityPolicy::generateReferrerHeader(firstFrame->document()->referrerPolicy(), completedURL, firstFrame->document()->outgoingReferrer()), firstFrame->document()->referrerPolicy());
|
| + Referrer referrer(SecurityPolicy::generateReferrerHeader(firstFrame.document()->referrerPolicy(), completedURL, firstFrame.document()->outgoingReferrer()), firstFrame.document()->referrerPolicy());
|
|
|
| ResourceRequest request(completedURL, referrer);
|
| - FrameLoader::addHTTPOriginIfNeeded(request, AtomicString(firstFrame->document()->outgoingOrigin()));
|
| - FrameLoadRequest frameRequest(callingWindow->document(), request, frameName);
|
| + FrameLoader::addHTTPOriginIfNeeded(request, AtomicString(firstFrame.document()->outgoingOrigin()));
|
| + FrameLoadRequest frameRequest(callingWindow.document(), request, 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;
|
| - LocalFrame* newFrame = createWindow(activeFrame, openerFrame, frameRequest, windowFeatures, NavigationPolicyIgnore, MaybeSendReferrer, created);
|
| + LocalFrame* newFrame = createWindow(*activeFrame, openerFrame, frameRequest, windowFeatures, NavigationPolicyIgnore, MaybeSendReferrer, created);
|
| if (!newFrame)
|
| return 0;
|
|
|
| - newFrame->loader().setOpener(openerFrame);
|
| + newFrame->loader().setOpener(&openerFrame);
|
| newFrame->page()->setOpenedByDOM();
|
|
|
| if (newFrame->domWindow()->isInsecureScriptAccess(callingWindow, completedURL))
|
| return newFrame;
|
|
|
| if (created) {
|
| - FrameLoadRequest request(callingWindow->document(), ResourceRequest(completedURL, referrer));
|
| + FrameLoadRequest request(callingWindow.document(), ResourceRequest(completedURL, referrer));
|
| newFrame->loader().load(request);
|
| } else if (!urlString.isEmpty()) {
|
| - newFrame->navigationScheduler().scheduleLocationChange(callingWindow->document(), completedURL.string(), referrer, false);
|
| + newFrame->navigationScheduler().scheduleLocationChange(callingWindow.document(), completedURL.string(), referrer, false);
|
| }
|
| return newFrame;
|
| }
|
|
|
| -void createWindowForRequest(const FrameLoadRequest& request, LocalFrame* openerFrame, NavigationPolicy policy, ShouldSendReferrer shouldSendReferrer)
|
| +void createWindowForRequest(const FrameLoadRequest& request, LocalFrame& openerFrame, NavigationPolicy policy, ShouldSendReferrer shouldSendReferrer)
|
| {
|
| - if (openerFrame->document()->pageDismissalEventBeingDispatched() != Document::NoDismissal)
|
| + if (openerFrame.document()->pageDismissalEventBeingDispatched() != Document::NoDismissal)
|
| return;
|
|
|
| - if (openerFrame->document() && openerFrame->document()->isSandboxed(SandboxPopups))
|
| + if (openerFrame.document() && openerFrame.document()->isSandboxed(SandboxPopups))
|
| return;
|
|
|
| if (!DOMWindow::allowPopUp(openerFrame))
|
| @@ -175,8 +177,8 @@ void createWindowForRequest(const FrameLoadRequest& request, LocalFrame* openerF
|
| return;
|
| newFrame->page()->setOpenedByDOM();
|
| if (shouldSendReferrer == MaybeSendReferrer) {
|
| - newFrame->loader().setOpener(openerFrame);
|
| - newFrame->document()->setReferrerPolicy(openerFrame->document()->referrerPolicy());
|
| + newFrame->loader().setOpener(&openerFrame);
|
| + newFrame->document()->setReferrerPolicy(openerFrame.document()->referrerPolicy());
|
| }
|
| FrameLoadRequest newRequest(0, request.resourceRequest());
|
| newRequest.setFormState(request.formState());
|
|
|