[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

cjerdonek at webkit.org cjerdonek at webkit.org
Wed Dec 22 11:55:55 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit e1d45417c993f43733edfffd0d9db7eac684aef1
Author: cjerdonek at webkit.org <cjerdonek at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Aug 11 17:40:23 2010 +0000

    2010-08-11  Chris Jerdonek  <cjerdonek at webkit.org>
    
            Reviewed by Adam Barth.
    
            Refactored FrameLoader::createWindow() out of the FrameLoader class
            since FrameLoader should not be responsible for creating windows.
    
            https://bugs.webkit.org/show_bug.cgi?id=39156
    
            No new functionality, so no new tests.
    
            * bindings/generic/BindingDOMWindow.h:
            (WebCore::::createWindow):
              - Updated the call to FrameLoader's createWindow().
            * bindings/js/JSDOMWindowCustom.cpp:
            (WebCore::createWindow):
              - Updated the call to FrameLoader's createWindow().
            * loader/FrameLoader.cpp:
            (WebCore::createWindowFromFrameLoader):
              - Made FrameLoader::createWindow() non-member, non-friend and changed it
                to accept Frame* parameters instead of FrameLoader*.
            * loader/FrameLoader.h:
              - Updated the header file to reflect the above change to FrameLoader.cpp.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@65164 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 90b2b85..35fed2d 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,27 @@
+2010-08-11  Chris Jerdonek  <cjerdonek at webkit.org>
+
+        Reviewed by Adam Barth.
+
+        Refactored FrameLoader::createWindow() out of the FrameLoader class
+        since FrameLoader should not be responsible for creating windows.
+
+        https://bugs.webkit.org/show_bug.cgi?id=39156
+
+        No new functionality, so no new tests.
+
+        * bindings/generic/BindingDOMWindow.h:
+        (WebCore::::createWindow):
+          - Updated the call to FrameLoader's createWindow().
+        * bindings/js/JSDOMWindowCustom.cpp:
+        (WebCore::createWindow):
+          - Updated the call to FrameLoader's createWindow().
+        * loader/FrameLoader.cpp:
+        (WebCore::createWindowFromFrameLoader):
+          - Made FrameLoader::createWindow() non-member, non-friend and changed it
+            to accept Frame* parameters instead of FrameLoader*.
+        * loader/FrameLoader.h:
+          - Updated the header file to reflect the above change to FrameLoader.cpp.
+
 2010-08-11  Ilya Tikhonovsky  <loislo at chromium.org>
 
         Reviewed by Pavel Feldman.
diff --git a/WebCore/bindings/generic/BindingDOMWindow.h b/WebCore/bindings/generic/BindingDOMWindow.h
index dda5644..0c450a5 100644
--- a/WebCore/bindings/generic/BindingDOMWindow.h
+++ b/WebCore/bindings/generic/BindingDOMWindow.h
@@ -108,11 +108,9 @@ Frame* BindingDOMWindow<Binding>::createWindow(State<Binding>* state,
     // issues to pass the URL instead of "".
 
     bool created;
-    // We pass in the opener frame here so it can be used for looking up the
-    // frame name, in case the active frame is different from the opener frame,
-    // and the name references a frame relative to the opener frame, for example
-    // "_self" or "_parent".
-    Frame* newFrame = callingFrame->loader()->createWindow(openerFrame->loader(), frameRequest, windowFeatures, created);
+    // 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 = WebCore::createWindow(callingFrame, openerFrame, frameRequest, windowFeatures, created);
     if (!newFrame)
         return 0;
 
diff --git a/WebCore/bindings/js/JSDOMWindowCustom.cpp b/WebCore/bindings/js/JSDOMWindowCustom.cpp
index c60d57a..0a3ce4a 100644
--- a/WebCore/bindings/js/JSDOMWindowCustom.cpp
+++ b/WebCore/bindings/js/JSDOMWindowCustom.cpp
@@ -724,10 +724,9 @@ static Frame* createWindow(ExecState* exec, Frame* lexicalFrame, Frame* dynamicF
     // We'd have to resolve all those issues to pass the URL instead of "".
 
     bool created;
-    // We pass in the opener frame here so it can be used for looking up the frame name, in case the active frame
-    // is different from the opener frame, and the name references a frame relative to the opener frame, for example
-    // "_self" or "_parent".
-    Frame* newFrame = lexicalFrame->loader()->createWindow(openerFrame->loader(), frameRequest, windowFeatures, created);
+    // 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(lexicalFrame, openerFrame, frameRequest, windowFeatures, created);
     if (!newFrame)
         return 0;
 
diff --git a/WebCore/loader/FrameLoader.cpp b/WebCore/loader/FrameLoader.cpp
index 0c26394..0e5de1e 100644
--- a/WebCore/loader/FrameLoader.cpp
+++ b/WebCore/loader/FrameLoader.cpp
@@ -258,71 +258,6 @@ void FrameLoader::setDefersLoading(bool defers)
     }
 }
 
-Frame* FrameLoader::createWindow(FrameLoader* frameLoaderForFrameLookup, const FrameLoadRequest& request, const WindowFeatures& features, bool& created)
-{ 
-    ASSERT(!features.dialog || request.frameName().isEmpty());
-
-    if (!request.frameName().isEmpty() && request.frameName() != "_blank") {
-        Frame* frame = frameLoaderForFrameLookup->frame()->tree()->find(request.frameName());
-        if (frame && shouldAllowNavigation(frame)) {
-            if (!request.resourceRequest().url().isEmpty())
-                frame->loader()->loadFrameRequest(request, false, false, 0, 0, SendReferrer);
-            if (Page* page = frame->page())
-                page->chrome()->focus();
-            created = false;
-            return frame;
-        }
-    }
-
-    // Sandboxed frames cannot open new auxiliary browsing contexts.
-    if (isDocumentSandboxed(m_frame, SandboxNavigation))
-        return 0;
-
-    // FIXME: Setting the referrer should be the caller's responsibility.
-    FrameLoadRequest requestWithReferrer = request;
-    requestWithReferrer.resourceRequest().setHTTPReferrer(m_outgoingReferrer);
-    addHTTPOriginIfNeeded(requestWithReferrer.resourceRequest(), outgoingOrigin());
-
-    Page* oldPage = m_frame->page();
-    if (!oldPage)
-        return 0;
-        
-    Page* page = oldPage->chrome()->createWindow(m_frame, requestWithReferrer, features);
-    if (!page)
-        return 0;
-
-    Frame* frame = page->mainFrame();
-    if (request.frameName() != "_blank")
-        frame->tree()->setName(request.frameName());
-
-    page->chrome()->setToolbarsVisible(features.toolBarVisible || features.locationBarVisible);
-    page->chrome()->setStatusbarVisible(features.statusBarVisible);
-    page->chrome()->setScrollbarsVisible(features.scrollbarsVisible);
-    page->chrome()->setMenubarVisible(features.menuBarVisible);
-    page->chrome()->setResizable(features.resizable);
-
-    // 'x' and 'y' specify the location of the window, while 'width' and 'height' 
-    // specify the size of the page. We can only resize the window, so 
-    // adjust for the difference between the window size and the page size.
-
-    FloatRect windowRect = page->chrome()->windowRect();
-    FloatSize pageSize = page->chrome()->pageRect().size();
-    if (features.xSet)
-        windowRect.setX(features.x);
-    if (features.ySet)
-        windowRect.setY(features.y);
-    if (features.widthSet)
-        windowRect.setWidth(features.width + (windowRect.width() - pageSize.width()));
-    if (features.heightSet)
-        windowRect.setHeight(features.height + (windowRect.height() - pageSize.height()));
-    page->chrome()->setWindowRect(windowRect);
-
-    page->chrome()->show();
-
-    created = true;
-    return frame;
-}
-
 bool FrameLoader::canHandleRequest(const ResourceRequest& request)
 {
     return m_client->canHandleRequest(request);
@@ -3508,4 +3443,69 @@ bool FrameLoaderClient::hasHTMLView() const
     return true;
 }
 
+Frame* createWindow(Frame* openerFrame, Frame* lookupFrame, const FrameLoadRequest& request, const WindowFeatures& features, bool& created)
+{
+    ASSERT(!features.dialog || request.frameName().isEmpty());
+
+    if (!request.frameName().isEmpty() && request.frameName() != "_blank") {
+        Frame* frame = lookupFrame->tree()->find(request.frameName());
+        if (frame && openerFrame->loader()->shouldAllowNavigation(frame)) {
+            if (!request.resourceRequest().url().isEmpty())
+                frame->loader()->loadFrameRequest(request, false, false, 0, 0, SendReferrer);
+            if (Page* page = frame->page())
+                page->chrome()->focus();
+            created = false;
+            return frame;
+        }
+    }
+
+    // Sandboxed frames cannot open new auxiliary browsing contexts.
+    if (isDocumentSandboxed(openerFrame, SandboxNavigation))
+        return 0;
+
+    // FIXME: Setting the referrer should be the caller's responsibility.
+    FrameLoadRequest requestWithReferrer = request;
+    requestWithReferrer.resourceRequest().setHTTPReferrer(openerFrame->loader()->outgoingReferrer());
+    FrameLoader::addHTTPOriginIfNeeded(requestWithReferrer.resourceRequest(), openerFrame->loader()->outgoingOrigin());
+
+    Page* oldPage = openerFrame->page();
+    if (!oldPage)
+        return 0;
+
+    Page* page = oldPage->chrome()->createWindow(openerFrame, requestWithReferrer, features);
+    if (!page)
+        return 0;
+
+    Frame* frame = page->mainFrame();
+    if (request.frameName() != "_blank")
+        frame->tree()->setName(request.frameName());
+
+    page->chrome()->setToolbarsVisible(features.toolBarVisible || features.locationBarVisible);
+    page->chrome()->setStatusbarVisible(features.statusBarVisible);
+    page->chrome()->setScrollbarsVisible(features.scrollbarsVisible);
+    page->chrome()->setMenubarVisible(features.menuBarVisible);
+    page->chrome()->setResizable(features.resizable);
+
+    // 'x' and 'y' specify the location of the window, while 'width' and 'height'
+    // specify the size of the page. We can only resize the window, so
+    // adjust for the difference between the window size and the page size.
+
+    FloatRect windowRect = page->chrome()->windowRect();
+    FloatSize pageSize = page->chrome()->pageRect().size();
+    if (features.xSet)
+        windowRect.setX(features.x);
+    if (features.ySet)
+        windowRect.setY(features.y);
+    if (features.widthSet)
+        windowRect.setWidth(features.width + (windowRect.width() - pageSize.width()));
+    if (features.heightSet)
+        windowRect.setHeight(features.height + (windowRect.height() - pageSize.height()));
+    page->chrome()->setWindowRect(windowRect);
+
+    page->chrome()->show();
+
+    created = true;
+    return frame;
+}
+
 } // namespace WebCore
diff --git a/WebCore/loader/FrameLoader.h b/WebCore/loader/FrameLoader.h
index 12b536b..2686e34 100644
--- a/WebCore/loader/FrameLoader.h
+++ b/WebCore/loader/FrameLoader.h
@@ -120,10 +120,6 @@ public:
 
     static void reportLocalLoadFailed(Frame*, const String& url);
 
-    // Called by createWindow in JSDOMWindowBase.cpp, e.g. to fulfill a modal dialog creation
-    // FIXME: Move this method outside of the FrameLoader class.
-    Frame* createWindow(FrameLoader* frameLoaderForFrameLookup, const FrameLoadRequest&, const WindowFeatures&, bool& created);
-
     unsigned long loadResourceSynchronously(const ResourceRequest&, StoredCredentials, ResourceError&, ResourceResponse&, Vector<char>& data);
 
     bool canHandleRequest(const ResourceRequest&);
@@ -501,6 +497,15 @@ private:
 #endif
 };
 
+// This function is called by createWindow() in JSDOMWindowBase.cpp, for example, for
+// modal dialog creation.  The lookupFrame is for looking up the frame name in case
+// the frame name references a frame different from the openerFrame, e.g. when it is
+// "_self" or "_parent".
+//
+// FIXME: Consider making this function part of an appropriate class (not FrameLoader)
+// and moving it to a more appropriate location.
+Frame* createWindow(Frame* openerFrame, Frame* lookupFrame, const FrameLoadRequest&, const WindowFeatures&, bool& created);
+
 } // namespace WebCore
 
 #endif // FrameLoader_h

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list