2010-06-15 Darin Adler <darin@apple.com>
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 15 Jun 2010 22:20:34 +0000 (22:20 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 15 Jun 2010 22:20:34 +0000 (22:20 +0000)
        Reviewed by Adam Barth.

        Move functions out of Frame class that were marked "move to Chrome"
        https://bugs.webkit.org/show_bug.cgi?id=39636

        * src/WebViewImpl.cpp:
        (WebKit::WebViewImpl::dispatchBeforeUnloadEvent): Call shouldClose
        on FrameLoader instead of going through Frame.
2010-06-15  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions out of Frame class that were marked "move to Chrome"
        https://bugs.webkit.org/show_bug.cgi?id=39636

        * WebView.cpp:
        (WebView::shouldClose): Call shouldClose on FrameLoader instead of
        going through Frame.
2010-06-15  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions out of Frame class that were marked "move to Chrome"
        https://bugs.webkit.org/show_bug.cgi?id=39636

        * WebFrame.cpp:
        (wxWebFrame::ShouldClose): Call shouldClose on FrameLoader instead
        of going through Frame.
2010-06-15  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions out of Frame class that were marked "move to Chrome"
        https://bugs.webkit.org/show_bug.cgi?id=39636

        * WebView/WebView.mm:
        (-[WebView shouldClose]): Call shouldClose on FrameLoader instead of
        going through Frame.
2010-06-15  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions out of Frame class that were marked "move to Chrome"
        https://bugs.webkit.org/show_bug.cgi?id=39636

        Refactoring that does not require new tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didOpenURL): Call setStatus and setDefaultStatus
        on DOMWindow rather than going through Frame.
        (WebCore::FrameLoader::open): Ditto.
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Call
        shouldClose on this object instead of going through Frame.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchAllPendingBeforeUnloadEvents): Call
        shouldClose on FrameLoader instead of going through Frame.
        (WebCore::DOMWindow::focus): Moved the code from Frame::focusWindow
        in here.
        (WebCore::DOMWindow::blur): Moved the code from Frame::unfocusWindow
        in here.
        (WebCore::DOMWindow::close): Moved the code from Frame::scheduleClose
        in here.
        (WebCore::DOMWindow::setStatus): Moved the code from
        Frame::setJSStatusBarText in here.
        (WebCore::DOMWindow::setDefaultStatus): Moved the code from
        Frame::setJSDefaultStatusBarText in here.

        * page/DOMWindow.h: Added m_status and m_defaultStatus members to
        store the status messages being set by the DOM.

        * page/Frame.cpp: Removed all the functions that were marked
        "to be moved into Chrome".
        * page/Frame.h: Ditto.
2010-06-15  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions out of Frame class that were marked "move to Chrome"
        https://bugs.webkit.org/show_bug.cgi?id=39636

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::tryClose): Call shouldClose on FrameLoader instead of
        going through Frame.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@61217 268f45cc-cd09-0410-ab3c-d52691b4dbfc

16 files changed:
WebCore/ChangeLog
WebCore/loader/FrameLoader.cpp
WebCore/page/DOMWindow.cpp
WebCore/page/DOMWindow.h
WebCore/page/Frame.cpp
WebCore/page/Frame.h
WebKit/chromium/ChangeLog
WebKit/chromium/src/WebViewImpl.cpp
WebKit/mac/ChangeLog
WebKit/mac/WebView/WebView.mm
WebKit/win/ChangeLog
WebKit/win/WebView.cpp
WebKit/wx/ChangeLog
WebKit/wx/WebFrame.cpp
WebKit2/ChangeLog
WebKit2/WebProcess/WebPage/WebPage.cpp

index a916c6f..fd75ec1 100644 (file)
@@ -1,3 +1,40 @@
+2010-06-15  Darin Adler  <darin@apple.com>
+
+        Reviewed by Adam Barth.
+
+        Move functions out of Frame class that were marked "move to Chrome"
+        https://bugs.webkit.org/show_bug.cgi?id=39636
+
+        Refactoring that does not require new tests.
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::didOpenURL): Call setStatus and setDefaultStatus
+        on DOMWindow rather than going through Frame.
+        (WebCore::FrameLoader::open): Ditto.
+        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Call
+        shouldClose on this object instead of going through Frame.
+
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::dispatchAllPendingBeforeUnloadEvents): Call
+        shouldClose on FrameLoader instead of going through Frame.
+        (WebCore::DOMWindow::focus): Moved the code from Frame::focusWindow
+        in here.
+        (WebCore::DOMWindow::blur): Moved the code from Frame::unfocusWindow
+        in here.
+        (WebCore::DOMWindow::close): Moved the code from Frame::scheduleClose
+        in here.
+        (WebCore::DOMWindow::setStatus): Moved the code from
+        Frame::setJSStatusBarText in here.
+        (WebCore::DOMWindow::setDefaultStatus): Moved the code from
+        Frame::setJSDefaultStatusBarText in here.
+
+        * page/DOMWindow.h: Added m_status and m_defaultStatus members to
+        store the status messages being set by the DOM.
+
+        * page/Frame.cpp: Removed all the functions that were marked
+        "to be moved into Chrome".
+        * page/Frame.h: Ditto.
+
 2010-06-15  Simon Fraser  <simon.fraser@apple.com>
 
         Reviewed by Dave Hyatt.
index 6d8a2a5..30b315a 100644 (file)
@@ -62,9 +62,6 @@
 #include "HTMLAppletElement.h"
 #include "HTMLFormElement.h"
 #include "HTMLFrameElement.h"
-#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
-#include "HTMLMediaElement.h"
-#endif
 #include "HTMLNames.h"
 #include "HTMLObjectElement.h"
 #include "HTTPParsers.h"
@@ -85,9 +82,6 @@
 #include "PluginDocument.h"
 #include "ProgressTracker.h"
 #include "RenderEmbeddedObject.h"
-#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
-#include "RenderVideo.h"
-#endif
 #include "RenderView.h"
 #include "ResourceHandle.h"
 #include "ResourceRequest.h"
 #include "SecurityOrigin.h"
 #include "SegmentedString.h"
 #include "Settings.h"
-
-#if ENABLE(SHARED_WORKERS)
-#include "SharedWorkerRepository.h"
-#endif
-
 #include "TextResourceDecoder.h"
 #include "WindowFeatures.h"
-#include "XMLHttpRequest.h"
 #include "XMLDocumentParser.h"
+#include "XMLHttpRequest.h"
 #include "XSSAuditor.h"
-#include <wtf/text/CString.h>
 #include <wtf/CurrentTime.h>
 #include <wtf/StdLibExtras.h>
+#include <wtf/text/CString.h>
 
+#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
+#include "HTMLMediaElement.h"
+#include "RenderVideo.h"
+#endif
+
+#if ENABLE(SHARED_WORKERS)
+#include "SharedWorkerRepository.h"
+#endif
 
 #if ENABLE(SVG)
 #include "SVGDocument.h"
 
 namespace WebCore {
 
+using namespace HTMLNames;
+
 #if ENABLE(SVG)
 using namespace SVGNames;
 #endif
-using namespace HTMLNames;
 
 #if ENABLE(XHTMLMP)
 static const char defaultAcceptHeader[] = "application/xml,application/vnd.wap.xhtml+xml,application/xhtml+xml;profile='http://www.wapforum.org/xhtml',text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
 #else
 static const char defaultAcceptHeader[] = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
 #endif
+
 static double storedTimeOfLastCompletedLoad;
 
 bool isBackForwardLoadType(FrameLoadType type)
@@ -681,8 +680,10 @@ bool FrameLoader::didOpenURL(const KURL& url)
     // its frame is not in a consistent state for rendering, so avoid setJSStatusBarText
     // since it may cause clients to attempt to render the frame.
     if (!m_creatingInitialEmptyDocument) {
-        m_frame->setJSStatusBarText(String());
-        m_frame->setJSDefaultStatusBarText(String());
+        if (DOMWindow* window = m_frame->existingDOMWindow()) {
+            window->setStatus(String());
+            window->setDefaultStatus(String());
+        }
     }
     m_URL = url;
     if (m_URL.protocolInHTTPFamily() && !m_URL.host().isEmpty() && m_URL.path().isEmpty())
@@ -2413,8 +2414,10 @@ void FrameLoader::prepareForCachedPageRestore()
     
     // Delete old status bar messages (if it _was_ activated on last URL).
     if (m_frame->script()->canExecuteScripts(NotAboutToExecuteScript)) {
-        m_frame->setJSStatusBarText(String());
-        m_frame->setJSDefaultStatusBarText(String());
+        if (DOMWindow* window = m_frame->existingDOMWindow()) {
+            window->setStatus(String());
+            window->setDefaultStatus(String());
+        }
     }
 }
 
@@ -3219,7 +3222,7 @@ void FrameLoader::continueLoadAfterNavigationPolicy(const ResourceRequest&, Pass
     //       is the user responding Cancel to the form repost nag sheet.
     //    2) User responded Cancel to an alert popped up by the before unload event handler.
     // The "before unload" event handler runs only for the main frame.
-    bool canContinue = shouldContinue && (!isLoadingMainFrame() || m_frame->shouldClose());
+    bool canContinue = shouldContinue && (!isLoadingMainFrame() || shouldClose());
 
     if (!canContinue) {
         // If we were waiting for a quick redirect, but the policy delegate decided to ignore it, then we 
index e21432a..04a62bd 100644 (file)
@@ -229,7 +229,7 @@ bool DOMWindow::dispatchAllPendingBeforeUnloadEvents()
         if (!frame)
             continue;
 
-        if (!frame->shouldClose())
+        if (!frame->loader()->shouldClose())
             return false;
     }
 
@@ -756,7 +756,18 @@ void DOMWindow::focus()
     if (!m_frame)
         return;
 
-    m_frame->focusWindow();
+    Page* page = m_frame->page();
+    if (!page)
+        return;
+
+    // If we're a top level window, bring the window to the front.
+    if (m_frame == page->mainFrame())
+        page->chrome()->focus();
+
+    if (!m_frame)
+        return;
+
+    m_frame->eventHandler()->focusDocumentView();
 }
 
 void DOMWindow::blur()
@@ -764,7 +775,14 @@ void DOMWindow::blur()
     if (!m_frame)
         return;
 
-    m_frame->unfocusWindow();
+    Page* page = m_frame->page();
+    if (!page)
+        return;
+
+    if (m_frame != page->mainFrame())
+        return;
+
+    page->chrome()->unfocus();
 }
 
 void DOMWindow::close()
@@ -782,8 +800,13 @@ void DOMWindow::close()
     Settings* settings = m_frame->settings();
     bool allowScriptsToCloseWindows = settings && settings->allowScriptsToCloseWindows();
 
-    if (page->openedByDOM() || page->getHistoryLength() <= 1 || allowScriptsToCloseWindows)
-        m_frame->scheduleClose();
+    if (!(page->openedByDOM() || page->getHistoryLength() <= 1 || allowScriptsToCloseWindows))
+        return;
+
+    if (!m_frame->loader()->shouldClose())
+        return;
+
+    page->chrome()->closeWindowSoon();
 }
 
 void DOMWindow::print()
@@ -1048,36 +1071,34 @@ void DOMWindow::setName(const String& string)
     m_frame->tree()->setName(string);
 }
 
-String DOMWindow::status() const
+void DOMWindow::setStatus(const String& string) 
 {
-    if (!m_frame)
-        return String();
+    m_status = string;
 
-    return m_frame->jsStatusBarText();
-}
+    if (!m_frame)
+        return;
 
-void DOMWindow::setStatus(const String& string) 
-{ 
-    if (!m_frame) 
-        return; 
+    Page* page = m_frame->page();
+    if (!page)
+        return;
 
-    m_frame->setJSStatusBarText(string); 
+    ASSERT(m_frame->document()); // Client calls shouldn't be made when the frame is in inconsistent state.
+    page->chrome()->setStatusbarText(m_frame, m_status);
 } 
     
-String DOMWindow::defaultStatus() const
+void DOMWindow::setDefaultStatus(const String& string) 
 {
-    if (!m_frame)
-        return String();
+    m_defaultStatus = string;
 
-    return m_frame->jsDefaultStatusBarText();
-} 
+    if (!m_frame)
+        return;
 
-void DOMWindow::setDefaultStatus(const String& string) 
-{ 
-    if (!m_frame) 
-        return; 
+    Page* page = m_frame->page();
+    if (!page)
+        return;
 
-    m_frame->setJSDefaultStatusBarText(string);
+    ASSERT(m_frame->document()); // Client calls shouldn't be made when the frame is in inconsistent state.
+    page->chrome()->setStatusbarText(m_frame, m_defaultStatus);
 }
 
 DOMWindow* DOMWindow::self() const
index a1f40a8..4765b31 100644 (file)
@@ -410,8 +410,21 @@ namespace WebCore {
 #endif
 
         EventTargetData m_eventTargetData;
+
+        String m_status;
+        String m_defaultStatus;
     };
 
+    inline String DOMWindow::status() const
+    {
+        return m_status;
+    }
+
+    inline String DOMWindow::defaultStatus() const
+    {
+        return m_defaultStatus;
+    } 
+
 } // namespace WebCore
 
 #endif // DOMWindow_h
index e007504..9946c0a 100644 (file)
@@ -620,22 +620,6 @@ void Frame::setPrinting(bool printing, float minPageWidth, float maxPageWidth, b
         child->setPrinting(printing, minPageWidth, maxPageWidth, adjustViewSize);
 }
 
-void Frame::setJSStatusBarText(const String& text)
-{
-    ASSERT(m_doc); // Client calls shouldn't be made when the frame is in inconsistent state.
-    m_kjsStatusBarText = text;
-    if (m_page)
-        m_page->chrome()->setStatusbarText(this, m_kjsStatusBarText);
-}
-
-void Frame::setJSDefaultStatusBarText(const String& text)
-{
-    ASSERT(m_doc); // Client calls shouldn't be made when the frame is in inconsistent state.
-    m_kjsDefaultStatusBarText = text;
-    if (m_page)
-        m_page->chrome()->setStatusbarText(this, m_kjsDefaultStatusBarText);
-}
-
 void Frame::setNeedsReapplyStyles()
 {
     // When the frame is not showing web content, it doesn't make sense to apply styles.
@@ -1432,38 +1416,6 @@ String Frame::documentTypeString() const
     return String();
 }
 
-void Frame::focusWindow()
-{
-    if (!page())
-        return;
-
-    // If we're a top level window, bring the window to the front.
-    if (!tree()->parent())
-        page()->chrome()->focus();
-
-    eventHandler()->focusDocumentView();
-}
-
-void Frame::unfocusWindow()
-{
-    if (!page())
-        return;
-
-    // If we're a top level window, deactivate the window.
-    if (!tree()->parent())
-        page()->chrome()->unfocus();
-}
-
-void Frame::scheduleClose()
-{
-    if (!shouldClose())
-        return;
-
-    Chrome* chrome = page() ? page()->chrome() : 0;
-    if (chrome)
-        chrome->closeWindowSoon();
-}
-
 void Frame::respondToChangedSelection(const VisibleSelection& oldSelection, bool closeTyping)
 {
     bool isContinuousSpellCheckingEnabled = editor()->isContinuousSpellCheckingEnabled();
index cb7e977..7573cf4 100644 (file)
@@ -189,19 +189,6 @@ namespace WebCore {
     private:
         void lifeSupportTimerFired(Timer<Frame>*);
 
-    // === to be moved into Chrome
-
-    public:
-        void focusWindow();
-        void unfocusWindow();
-        bool shouldClose();
-        void scheduleClose();
-
-        void setJSStatusBarText(const String&);
-        void setJSDefaultStatusBarText(const String&);
-        String jsStatusBarText() const;
-        String jsDefaultStatusBarText() const;
-
     // === to be moved into Editor
 
     public:
@@ -336,9 +323,6 @@ namespace WebCore {
 
         ScriptController m_script;
 
-        String m_kjsStatusBarText;
-        String m_kjsDefaultStatusBarText;
-
         mutable VisibleSelection m_mark;
         mutable Editor m_editor;
         mutable SelectionController m_selectionController;
@@ -424,16 +408,6 @@ namespace WebCore {
         m_mark = s;
     }
 
-    inline String Frame::jsStatusBarText() const
-    {
-        return m_kjsStatusBarText;
-    }
-
-    inline String Frame::jsDefaultStatusBarText() const
-    {
-        return m_kjsDefaultStatusBarText;
-    }
-
     inline bool Frame::needsReapplyStyles() const
     {
         return m_needsReapplyStyles;
@@ -509,13 +483,6 @@ namespace WebCore {
         return &m_eventHandler;
     }
 
-    inline bool Frame::shouldClose()
-    {
-        // FIXME: Some WebKit clients call Frame::shouldClose() directly.
-        // We should transition them to calling FrameLoader::shouldClose() then get rid of this method.
-        return m_loader.shouldClose();
-    }
-
 } // namespace WebCore
 
 #endif // Frame_h
index 74873bd..62e079f 100644 (file)
@@ -1,3 +1,14 @@
+2010-06-15  Darin Adler  <darin@apple.com>
+
+        Reviewed by Adam Barth.
+
+        Move functions out of Frame class that were marked "move to Chrome"
+        https://bugs.webkit.org/show_bug.cgi?id=39636
+
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::dispatchBeforeUnloadEvent): Call shouldClose
+        on FrameLoader instead of going through Frame.
+
 2010-06-11  Darin Fisher  <darin@chromium.org>
 
         Reviewed by Brady Eidson.
index 5adc35c..116018f 100644 (file)
@@ -1393,7 +1393,7 @@ bool WebViewImpl::dispatchBeforeUnloadEvent()
     if (!frame)
         return true;
 
-    return frame->shouldClose();
+    return frame->loader()->shouldClose();
 }
 
 void WebViewImpl::dispatchUnloadEvent()
index 86d54f6..1e30702 100644 (file)
@@ -1,3 +1,14 @@
+2010-06-15  Darin Adler  <darin@apple.com>
+
+        Reviewed by Adam Barth.
+
+        Move functions out of Frame class that were marked "move to Chrome"
+        https://bugs.webkit.org/show_bug.cgi?id=39636
+
+        * WebView/WebView.mm:
+        (-[WebView shouldClose]): Call shouldClose on FrameLoader instead of
+        going through Frame.
+
 2010-06-15  Anders Carlsson  <andersca@apple.com>
 
         Reviewed by Dan Bernstein.
index a8c5a2b..10ed5cf 100644 (file)
@@ -4210,7 +4210,7 @@ static WebFrame *incrementFrame(WebFrame *frame, BOOL forward, BOOL wrapFlag)
     Frame* coreFrame = [self _mainCoreFrame];
     if (!coreFrame)
         return YES;
-    return coreFrame->shouldClose();
+    return coreFrame->loader()->shouldClose();
 }
 
 static NSAppleEventDescriptor* aeDescFromJSValue(ExecState* exec, JSValue jsValue)
index 2cf8bf7..6daa5e8 100644 (file)
@@ -1,3 +1,14 @@
+2010-06-15  Darin Adler  <darin@apple.com>
+
+        Reviewed by Adam Barth.
+
+        Move functions out of Frame class that were marked "move to Chrome"
+        https://bugs.webkit.org/show_bug.cgi?id=39636
+
+        * WebView.cpp:
+        (WebView::shouldClose): Call shouldClose on FrameLoader instead of
+        going through Frame.
+
 2010-06-14  Adam Roben  <aroben@apple.com>
 
         Add WebKitLauncherWin to WebKit.sln
index a85cc92..3da7d3c 100644 (file)
@@ -5197,7 +5197,7 @@ HRESULT STDMETHODCALLTYPE WebView::shouldClose(
 
     *result = TRUE;
     if (Frame* frame = m_page->mainFrame())
-        *result = frame->shouldClose() ? TRUE : FALSE;
+        *result = frame->loader()->shouldClose();
     return S_OK;
 }
 
index aefe2a1..180732f 100644 (file)
@@ -1,3 +1,14 @@
+2010-06-15  Darin Adler  <darin@apple.com>
+
+        Reviewed by Adam Barth.
+
+        Move functions out of Frame class that were marked "move to Chrome"
+        https://bugs.webkit.org/show_bug.cgi?id=39636
+
+        * WebFrame.cpp:
+        (wxWebFrame::ShouldClose): Call shouldClose on FrameLoader instead
+        of going through Frame.
+
 2010-06-14  Ilya Tikhonovsky  <loislo@chromium.org>
 
         Reviewed by Pavel Feldman.
index cb66a72..e1f7ecc 100644 (file)
@@ -414,7 +414,7 @@ wxWebViewDOMElementInfo wxWebFrame::HitTest(const wxPoint& pos) const
 bool wxWebFrame::ShouldClose() const
 {
     if (m_impl->frame)
-        return m_impl->frame->shouldClose();
+        return m_impl->frame->loader()->shouldClose();
 
     return true;
 }
index 30299da..738b45c 100644 (file)
@@ -1,3 +1,14 @@
+2010-06-15  Darin Adler  <darin@apple.com>
+
+        Reviewed by Adam Barth.
+
+        Move functions out of Frame class that were marked "move to Chrome"
+        https://bugs.webkit.org/show_bug.cgi?id=39636
+
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::tryClose): Call shouldClose on FrameLoader instead of
+        going through Frame.
+
 2010-06-14  Steve Falkenburg  <sfalken@apple.com>
 
         Windows build fix.
index bebe349..97dee36 100644 (file)
@@ -142,7 +142,7 @@ void WebPage::close()
 
 void WebPage::tryClose()
 {
-    if (!m_mainFrame->coreFrame()->shouldClose())
+    if (!m_mainFrame->coreFrame()->loader()->shouldClose())
         return;
 
     WebProcess::shared().connection()->send(WebPageProxyMessage::ClosePage, m_pageID, CoreIPC::In());