Title: [184372] trunk/Source/WebCore
Revision
184372
Author
[email protected]
Date
2015-05-14 22:07:22 -0700 (Thu, 14 May 2015)

Log Message

Have DOMWindow::createWindow() take references to frames
https://bugs.webkit.org/show_bug.cgi?id=145037

Reviewed by Gyuyoung Kim.

Have DOMWindow::createWindow() take references to frames instead of
pointers as they are expected to be non-null. Also return a RefPtr
instead of a PassRefPtr.

* inspector/InspectorFrontendClientLocal.cpp:
(WebCore::InspectorFrontendClientLocal::openInNewTab):
* loader/FrameLoader.cpp:
(WebCore::createWindow):
* loader/FrameLoader.h:
* page/DOMWindow.cpp:
(WebCore::DOMWindow::createWindow):
(WebCore::DOMWindow::open):
(WebCore::DOMWindow::showModalDialog):
* page/DOMWindow.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (184371 => 184372)


--- trunk/Source/WebCore/ChangeLog	2015-05-15 04:43:05 UTC (rev 184371)
+++ trunk/Source/WebCore/ChangeLog	2015-05-15 05:07:22 UTC (rev 184372)
@@ -1,3 +1,25 @@
+2015-05-14  Chris Dumez  <[email protected]>
+
+        Have DOMWindow::createWindow() take references to frames
+        https://bugs.webkit.org/show_bug.cgi?id=145037
+
+        Reviewed by Gyuyoung Kim.
+
+        Have DOMWindow::createWindow() take references to frames instead of
+        pointers as they are expected to be non-null. Also return a RefPtr
+        instead of a PassRefPtr.
+
+        * inspector/InspectorFrontendClientLocal.cpp:
+        (WebCore::InspectorFrontendClientLocal::openInNewTab):
+        * loader/FrameLoader.cpp:
+        (WebCore::createWindow):
+        * loader/FrameLoader.h:
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::createWindow):
+        (WebCore::DOMWindow::open):
+        (WebCore::DOMWindow::showModalDialog):
+        * page/DOMWindow.h:
+
 2015-05-14  Simon Fraser  <[email protected]>
 
         REGRESSION (r183794): Garbage tiles when body background switches to fixed

Modified: trunk/Source/WebCore/inspector/InspectorFrontendClientLocal.cpp (184371 => 184372)


--- trunk/Source/WebCore/inspector/InspectorFrontendClientLocal.cpp	2015-05-15 04:43:05 UTC (rev 184371)
+++ trunk/Source/WebCore/inspector/InspectorFrontendClientLocal.cpp	2015-05-15 05:07:22 UTC (rev 184372)
@@ -214,7 +214,7 @@
 
     bool created;
     WindowFeatures windowFeatures;
-    RefPtr<Frame> frame = WebCore::createWindow(mainFrame, &mainFrame, request, windowFeatures, created);
+    RefPtr<Frame> frame = WebCore::createWindow(mainFrame, mainFrame, request, windowFeatures, created);
     if (!frame)
         return;
 

Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (184371 => 184372)


--- trunk/Source/WebCore/loader/FrameLoader.cpp	2015-05-15 04:43:05 UTC (rev 184371)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp	2015-05-15 05:07:22 UTC (rev 184372)
@@ -3415,19 +3415,19 @@
     return true;
 }
 
-PassRefPtr<Frame> createWindow(Frame& openerFrame, Frame* lookupFrame, const FrameLoadRequest& request, const WindowFeatures& features, bool& created)
+RefPtr<Frame> createWindow(Frame& openerFrame, Frame& lookupFrame, const FrameLoadRequest& request, const WindowFeatures& features, bool& created)
 {
     ASSERT(!features.dialog || request.frameName().isEmpty());
 
     created = false;
 
     if (!request.frameName().isEmpty() && request.frameName() != "_blank") {
-        if (RefPtr<Frame> frame = lookupFrame->loader().findFrameForNavigation(request.frameName(), openerFrame.document())) {
+        if (RefPtr<Frame> frame = lookupFrame.loader().findFrameForNavigation(request.frameName(), openerFrame.document())) {
             if (request.frameName() != "_self") {
                 if (Page* page = frame->page())
                     page->chrome().focus();
             }
-            return frame.release();
+            return WTF::move(frame);
         }
     }
 
@@ -3518,7 +3518,7 @@
     page->chrome().show();
 
     created = true;
-    return frame.release();
+    return WTF::move(frame);
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/loader/FrameLoader.h (184371 => 184372)


--- trunk/Source/WebCore/loader/FrameLoader.h	2015-05-15 04:43:05 UTC (rev 184371)
+++ trunk/Source/WebCore/loader/FrameLoader.h	2015-05-15 05:07:22 UTC (rev 184372)
@@ -458,7 +458,7 @@
 //
 // FIXME: Consider making this function part of an appropriate class (not FrameLoader)
 // and moving it to a more appropriate location.
-PassRefPtr<Frame> createWindow(Frame& openerFrame, Frame* lookupFrame, const FrameLoadRequest&, const WindowFeatures&, bool& created);
+RefPtr<Frame> createWindow(Frame& openerFrame, Frame& lookupFrame, const FrameLoadRequest&, const WindowFeatures&, bool& created);
 
 } // namespace WebCore
 

Modified: trunk/Source/WebCore/page/DOMWindow.cpp (184371 => 184372)


--- trunk/Source/WebCore/page/DOMWindow.cpp	2015-05-15 04:43:05 UTC (rev 184371)
+++ trunk/Source/WebCore/page/DOMWindow.cpp	2015-05-15 05:07:22 UTC (rev 184372)
@@ -2072,13 +2072,13 @@
     return true;
 }
 
-PassRefPtr<Frame> DOMWindow::createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures& windowFeatures, DOMWindow& activeWindow, Frame* firstFrame, Frame* openerFrame, std::function<void (DOMWindow&)> prepareDialogFunction)
+RefPtr<Frame> DOMWindow::createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures& windowFeatures, DOMWindow& activeWindow, Frame& firstFrame, Frame& openerFrame, std::function<void (DOMWindow&)> prepareDialogFunction)
 {
     Frame* activeFrame = activeWindow.frame();
     if (!activeFrame)
         return nullptr;
 
-    URL completedURL = urlString.isEmpty() ? URL(ParsedURLString, emptyString()) : firstFrame->document()->completeURL(urlString);
+    URL completedURL = urlString.isEmpty() ? URL(ParsedURLString, emptyString()) : firstFrame.document()->completeURL(urlString);
     if (!completedURL.isEmpty() && !completedURL.isValid()) {
         // Don't expose client code to invalid URLs.
         activeWindow.printErrorMessage("Unable to open a window with invalid URL '" + completedURL.string() + "'.\n");
@@ -2086,10 +2086,10 @@
     }
 
     // For whatever reason, Firefox uses the first frame to determine the outgoingReferrer. We replicate that behavior here.
-    String referrer = SecurityPolicy::generateReferrerHeader(firstFrame->document()->referrerPolicy(), completedURL, firstFrame->loader().outgoingReferrer());
+    String referrer = SecurityPolicy::generateReferrerHeader(firstFrame.document()->referrerPolicy(), completedURL, firstFrame.loader().outgoingReferrer());
 
     ResourceRequest request(completedURL, referrer);
-    FrameLoader::addHTTPOriginIfNeeded(request, firstFrame->loader().outgoingOrigin());
+    FrameLoader::addHTTPOriginIfNeeded(request, firstFrame.loader().outgoingOrigin());
     FrameLoadRequest frameRequest(activeWindow.document()->securityOrigin(), request, frameName, LockHistory::No, LockBackForwardList::No, MaybeSendReferrer, AllowNavigationToInvalidURL::Yes, NewFrameOpenerPolicy::Allow, ReplaceDocumentIfJavaScriptURL);
 
     // We pass the opener frame for the lookupFrame in case the active frame is different from
@@ -2099,11 +2099,11 @@
     if (!newFrame)
         return nullptr;
 
-    newFrame->loader().setOpener(openerFrame);
+    newFrame->loader().setOpener(&openerFrame);
     newFrame->page()->setOpenedByDOM();
 
     if (newFrame->document()->domWindow()->isInsecureScriptAccess(activeWindow, completedURL))
-        return newFrame.release();
+        return WTF::move(newFrame);
 
     if (prepareDialogFunction)
         prepareDialogFunction(*newFrame->document()->domWindow());
@@ -2121,7 +2121,7 @@
     if (!newFrame->page())
         return nullptr;
 
-    return newFrame.release();
+    return WTF::move(newFrame);
 }
 
 PassRefPtr<DOMWindow> DOMWindow::open(const String& urlString, const AtomicString& frameName, const String& windowFeaturesString,
@@ -2137,8 +2137,7 @@
         return nullptr;
 
 #if ENABLE(CONTENT_EXTENSIONS)
-    if (firstFrame
-        && firstFrame->document()
+    if (firstFrame->document()
         && firstFrame->mainFrame().page()
         && firstFrame->mainFrame().page()->userContentController()
         && firstFrame->mainFrame().document()) {
@@ -2190,7 +2189,7 @@
     }
 
     WindowFeatures windowFeatures(windowFeaturesString);
-    RefPtr<Frame> result = createWindow(urlString, frameName, windowFeatures, activeWindow, firstFrame, m_frame);
+    RefPtr<Frame> result = createWindow(urlString, frameName, windowFeatures, activeWindow, *firstFrame, *m_frame);
     return result ? result->document()->domWindow() : nullptr;
 }
 
@@ -2215,7 +2214,7 @@
         return;
 
     WindowFeatures windowFeatures(dialogFeaturesString, screenAvailableRect(m_frame->view()));
-    RefPtr<Frame> dialogFrame = createWindow(urlString, emptyAtom, windowFeatures, activeWindow, firstFrame, m_frame, WTF::move(prepareDialogFunction));
+    RefPtr<Frame> dialogFrame = createWindow(urlString, emptyAtom, windowFeatures, activeWindow, *firstFrame, *m_frame, WTF::move(prepareDialogFunction));
     if (!dialogFrame)
         return;
     dialogFrame->page()->chrome().runModal();

Modified: trunk/Source/WebCore/page/DOMWindow.h (184371 => 184372)


--- trunk/Source/WebCore/page/DOMWindow.h	2015-05-15 04:43:05 UTC (rev 184371)
+++ trunk/Source/WebCore/page/DOMWindow.h	2015-05-15 05:07:22 UTC (rev 184372)
@@ -353,7 +353,7 @@
         virtual void refEventTarget() override { ref(); }
         virtual void derefEventTarget() override { deref(); }
 
-        static PassRefPtr<Frame> createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures&, DOMWindow& activeWindow, Frame* firstFrame, Frame* openerFrame, std::function<void (DOMWindow&)> prepareDialogFunction = nullptr);
+        static RefPtr<Frame> createWindow(const String& urlString, const AtomicString& frameName, const WindowFeatures&, DOMWindow& activeWindow, Frame& firstFrame, Frame& openerFrame, std::function<void (DOMWindow&)> prepareDialogFunction = nullptr);
         bool isInsecureScriptAccess(DOMWindow& activeWindow, const String& urlString);
 
         void resetDOMWindowProperties();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to