WebCore:
authorandersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 19 Jan 2007 17:28:36 +0000 (17:28 +0000)
committerandersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 19 Jan 2007 17:28:36 +0000 (17:28 +0000)
        Reviewed by Adam.

        Move JavaScript alert and status bar functions to the chrome.

        * bindings/js/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        * page/Chrome.cpp:
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::Chrome::setStatusBarText):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::setJSStatusBarText):
        (WebCore::Frame::setJSDefaultStatusBarText):
        * page/Frame.h:
        * page/mac/FrameMac.h:
        * page/mac/FrameMac.mm:
        * page/mac/WebCoreFrameBridge.h:
        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyChromeClient::runJavaScriptAlert):
        (WebCore::SVGEmptyChromeClient::runJavaScriptConfirm):
        (WebCore::SVGEmptyChromeClient::runJavaScriptPrompt):
        (WebCore::SVGEmptyChromeClient::setStatusBarText):

WebKit:

        Reviewed by Adam.

        Move functions from the bridge to the chrome client.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::runJavaScriptAlert):
        (WebChromeClient::runJavaScriptConfirm):
        (WebChromeClient::runJavaScriptPrompt):
        (WebChromeClient::setStatusBarText):
        * WebCoreSupport/WebFrameBridge.mm:

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

15 files changed:
WebCore/ChangeLog
WebCore/bindings/js/kjs_window.cpp
WebCore/page/Chrome.cpp
WebCore/page/Chrome.h
WebCore/page/ChromeClient.h
WebCore/page/Frame.cpp
WebCore/page/Frame.h
WebCore/page/mac/FrameMac.h
WebCore/page/mac/FrameMac.mm
WebCore/page/mac/WebCoreFrameBridge.h
WebCore/platform/graphics/svg/SVGImageEmptyClients.h
WebKit/ChangeLog
WebKit/WebCoreSupport/WebChromeClient.h
WebKit/WebCoreSupport/WebChromeClient.mm
WebKit/WebCoreSupport/WebFrameBridge.mm

index faa6692..fa9df49 100644 (file)
@@ -1,3 +1,31 @@
+2007-01-18  Anders Carlsson  <acarlsson@apple.com>
+
+        Reviewed by Adam.
+
+        Move JavaScript alert and status bar functions to the chrome.
+        
+        * bindings/js/kjs_window.cpp:
+        (KJS::WindowFunc::callAsFunction):
+        * page/Chrome.cpp:
+        (WebCore::Chrome::runJavaScriptAlert):
+        (WebCore::Chrome::runJavaScriptConfirm):
+        (WebCore::Chrome::runJavaScriptPrompt):
+        (WebCore::Chrome::setStatusBarText):
+        * page/Chrome.h:
+        * page/ChromeClient.h:
+        * page/Frame.cpp:
+        (WebCore::Frame::setJSStatusBarText):
+        (WebCore::Frame::setJSDefaultStatusBarText):
+        * page/Frame.h:
+        * page/mac/FrameMac.h:
+        * page/mac/FrameMac.mm:
+        * page/mac/WebCoreFrameBridge.h:
+        * platform/graphics/svg/SVGImageEmptyClients.h:
+        (WebCore::SVGEmptyChromeClient::runJavaScriptAlert):
+        (WebCore::SVGEmptyChromeClient::runJavaScriptConfirm):
+        (WebCore::SVGEmptyChromeClient::runJavaScriptPrompt):
+        (WebCore::SVGEmptyChromeClient::setStatusBarText):
+
 2007-01-19  Zack Rusin  <zack@kde.org>
 
         Fix the build.
index 0743e5b..fc21ec9 100644 (file)
@@ -1537,7 +1537,8 @@ JSValue *WindowFunc::callAsFunction(ExecState *exec, JSObject *thisObj, const Li
     if (frame && frame->document())
       frame->document()->updateRendering();
     exec->dynamicInterpreter()->pauseTimeoutCheck();
-    frame->runJavaScriptAlert(str);
+    if (page)
+        page->chrome()->runJavaScriptAlert(frame, str);
     exec->dynamicInterpreter()->resumeTimeoutCheck();
     return jsUndefined();
   case Window::AToB:
@@ -1568,7 +1569,9 @@ JSValue *WindowFunc::callAsFunction(ExecState *exec, JSObject *thisObj, const Li
     if (frame && frame->document())
       frame->document()->updateRendering();
     exec->dynamicInterpreter()->pauseTimeoutCheck();
-    bool result = frame->runJavaScriptConfirm(str);
+    bool result = false;
+    if (page)
+        result = page->chrome()->runJavaScriptConfirm(frame, str);
     exec->dynamicInterpreter()->resumeTimeoutCheck();
     return jsBoolean(result);
   }
@@ -1577,11 +1580,10 @@ JSValue *WindowFunc::callAsFunction(ExecState *exec, JSObject *thisObj, const Li
     if (frame && frame->document())
       frame->document()->updateRendering();
     String message = args.size() >= 2 ? args[1]->toString(exec) : UString();
-    bool ok = frame->runJavaScriptPrompt(str, message, str2);
-    if (ok)
+    if (page && page->chrome()->runJavaScriptPrompt(frame, str, message, str2))
         return jsString(str2);
-    else
-        return jsNull();
+
+    return jsNull();
   }
   case Window::Open:
   {
index a3eb9cd..9da4237 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "ChromeClient.h"
 #include "FloatRect.h"
+#include "Frame.h"
 #include "Page.h"
 #include "ResourceHandle.h"
 #include <wtf/PassRefPtr.h>
@@ -205,5 +206,47 @@ void Chrome::closeWindowSoon()
     m_client->closeWindowSoon();
 }
 
+void Chrome::runJavaScriptAlert(Frame* frame, const String& message)
+{
+    ASSERT(frame);
+    String text = message;
+    text.replace('\\', frame->backslashAsCurrencySymbol());
+    m_client->runJavaScriptAlert(frame, text);
+}
+
+bool Chrome::runJavaScriptConfirm(Frame* frame, const String& message)
+{
+    ASSERT(frame);
+    String text = message;
+    text.replace('\\', frame->backslashAsCurrencySymbol());
+    
+    return m_client->runJavaScriptConfirm(frame, text);
+}
+
+bool Chrome::runJavaScriptPrompt(Frame* frame, const String& prompt, const String& defaultValue, String& result)
+{
+    ASSERT(frame);
+    String promptText = prompt;
+    promptText.replace('\\', frame->backslashAsCurrencySymbol());
+    String defaultValueText = defaultValue;
+    defaultValueText.replace('\\', frame->backslashAsCurrencySymbol());
+    
+    bool ok = m_client->runJavaScriptPrompt(frame, promptText, defaultValueText, result);
+    
+    if (ok)
+        result.replace(frame->backslashAsCurrencySymbol(), '\\');
+    
+    return ok;
+}
+
+void Chrome::setStatusbarText(Frame* frame, const String& status)
+{
+    ASSERT(frame);
+    String text = status;
+    text.replace('\\', frame->backslashAsCurrencySymbol());
+    
+    m_client->setStatusbarText(text);
+}
+
 } // namespace WebCore
 
index 601ed78..4ad63e1 100644 (file)
@@ -85,6 +85,10 @@ namespace WebCore {
 
         void closeWindowSoon();
 
+        void runJavaScriptAlert(Frame*, const String&);
+        bool runJavaScriptConfirm(Frame*, const String&);
+        bool runJavaScriptPrompt(Frame*, const String& message, const String& defaultValue, String& result);        
+        void setStatusbarText(Frame*, const String&);
     private:
         Page* m_page;
         ChromeClient* m_client;
index de7e816..5f3ec35 100644 (file)
@@ -77,6 +77,12 @@ namespace WebCore {
         virtual bool runBeforeUnloadConfirmPanel(const String& message, Frame* frame) = 0;
 
         virtual void closeWindowSoon() = 0;
+        
+        virtual void runJavaScriptAlert(Frame*, const String&) = 0;
+        virtual bool runJavaScriptConfirm(Frame*, const String&) = 0;
+        virtual bool runJavaScriptPrompt(Frame*, const String& message, const String& defaultValue, String& result) = 0;
+        virtual void setStatusbarText(const String&) = 0;
+
 };
 
 }
index 2072921..2789a04 100644 (file)
@@ -513,13 +513,15 @@ void Frame::setZoomFactor(int percent)
 void Frame::setJSStatusBarText(const String& text)
 {
     d->m_kjsStatusBarText = text;
-    setStatusBarText(d->m_kjsStatusBarText);
+    if (d->m_page)
+        d->m_page->chrome()->setStatusbarText(this, d->m_kjsStatusBarText);
 }
 
 void Frame::setJSDefaultStatusBarText(const String& text)
 {
     d->m_kjsDefaultStatusBarText = text;
-    setStatusBarText(d->m_kjsDefaultStatusBarText);
+    if (d->m_page)
+        d->m_page->chrome()->setStatusbarText(this, d->m_kjsDefaultStatusBarText);
 }
 
 String Frame::jsStatusBarText() const
@@ -1454,10 +1456,6 @@ void Frame::pageDestroyed()
             w->disconnectFrame();
 }
 
-void Frame::setStatusBarText(const String&)
-{
-}
-
 void Frame::disconnectOwnerElement()
 {
     if (d->m_ownerElement) {
index f9bad7e..e80da54 100644 (file)
@@ -204,9 +204,6 @@ private:
 // === to be moved into Chrome
 
 public:
-    virtual void runJavaScriptAlert(const String& message) = 0;
-    virtual bool runJavaScriptConfirm(const String& message) = 0;
-    virtual bool runJavaScriptPrompt(const String& message, const String& defaultValue, String& result) = 0;  
     virtual bool shouldInterruptJavaScript() = 0;
     virtual void focusWindow() = 0;
     virtual void unfocusWindow() = 0;
@@ -214,9 +211,6 @@ public:
     bool shouldClose();
     void scheduleClose();
 
-private:
-    virtual void setStatusBarText(const String&);
-
 // === to be moved into Editor
 
 public:
index 8a2c09e..89f257c 100644 (file)
@@ -123,14 +123,9 @@ private:
 // === to be moved into Chrome
 
 public:
-    virtual void setStatusBarText(const String&);
-
     virtual void focusWindow();
     virtual void unfocusWindow();
 
-    virtual void runJavaScriptAlert(const String&);
-    virtual bool runJavaScriptConfirm(const String&);
-    virtual bool runJavaScriptPrompt(const String& message, const String& defaultValue, String& result);
     virtual bool shouldInterruptJavaScript();    
 
     FloatRect customHighlightLineRect(const AtomicString& type, const FloatRect& lineRect);
index 7c96a7e..3f2960b 100644 (file)
@@ -340,22 +340,6 @@ NSString *FrameMac::matchLabelsAgainstElement(NSArray *labels, Element *element)
     return nil;
 }
 
-void FrameMac::setStatusBarText(const String& status)
-{
-    String text = status;
-    text.replace('\\', backslashAsCurrencySymbol());
-    
-    // We want the temporaries allocated here to be released even before returning to the 
-    // event loop; see <http://bugs.webkit.org/show_bug.cgi?id=9880>.
-    NSAutoreleasePool* localPool = [[NSAutoreleasePool alloc] init];
-
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    [_bridge setStatusText:text];
-    END_BLOCK_OBJC_EXCEPTIONS;
-
-    [localPool release];
-}
-
 void FrameMac::focusWindow()
 {
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
@@ -459,52 +443,6 @@ NPObject *FrameMac::windowScriptNPObject()
     return _windowScriptNPObject;
 }
 
-void FrameMac::runJavaScriptAlert(const String& message)
-{
-    String text = message;
-    text.replace('\\', backslashAsCurrencySymbol());
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    [_bridge runJavaScriptAlertPanelWithMessage:text];
-    END_BLOCK_OBJC_EXCEPTIONS;
-}
-
-bool FrameMac::runJavaScriptConfirm(const String& message)
-{
-    String text = message;
-    text.replace('\\', backslashAsCurrencySymbol());
-
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    return [_bridge runJavaScriptConfirmPanelWithMessage:text];
-    END_BLOCK_OBJC_EXCEPTIONS;
-
-    return false;
-}
-
-bool FrameMac::runJavaScriptPrompt(const String& prompt, const String& defaultValue, String& result)
-{
-    String promptText = prompt;
-    promptText.replace('\\', backslashAsCurrencySymbol());
-    String defaultValueText = defaultValue;
-    defaultValueText.replace('\\', backslashAsCurrencySymbol());
-
-    bool ok;
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    NSString *returnedText = nil;
-
-    ok = [_bridge runJavaScriptTextInputPanelWithPrompt:prompt
-        defaultText:defaultValue returningText:&returnedText];
-
-    if (ok) {
-        result = String(returnedText);
-        result.replace(backslashAsCurrencySymbol(), '\\');
-    }
-
-    return ok;
-    END_BLOCK_OBJC_EXCEPTIONS;
-    
-    return false;
-}
-
 bool FrameMac::shouldInterruptJavaScript()
 {
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
index d266533..f9a579c 100644 (file)
@@ -266,8 +266,6 @@ typedef enum ObjectElementType {
 
 - (NSView *)documentView;
 
-- (void)setStatusText:(NSString *)status;
-
 - (WebCore::Frame*)createChildFrameNamed:(NSString *)frameName withURL:(NSURL *)URL referrer:(const WebCore::String&)referrer
     ownerElement:(WebCore::HTMLFrameOwnerElement *)ownerElement allowsScrolling:(BOOL)allowsScrolling marginWidth:(int)width marginHeight:(int)height;
 
@@ -279,9 +277,6 @@ typedef enum ObjectElementType {
 
 - (BOOL)textViewWasFirstResponderAtMouseDownTime:(NSTextView *)textView;
 
-- (void)runJavaScriptAlertPanelWithMessage:(NSString *)message;
-- (BOOL)runJavaScriptConfirmPanelWithMessage:(NSString *)message;
-- (BOOL)runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText returningText:(NSString **)result;
 - (BOOL)shouldInterruptJavaScript;
 - (void)runOpenPanelForFileButtonWithResultListener:(id <WebCoreOpenPanelResultListener>)resultListener;
 
index c160090..68bc7bf 100644 (file)
@@ -93,6 +93,11 @@ public:
     virtual bool runBeforeUnloadConfirmPanel(const String& message, Frame* frame) { return true; }
     
     virtual void closeWindowSoon() { }
+    
+    virtual void runJavaScriptAlert(Frame*, const String&) { }
+    virtual bool runJavaScriptConfirm(Frame*, const String&) { return false; }
+    virtual bool runJavaScriptPrompt(Frame*, const String& message, const String& defaultValue, String& result) { return false; }
+    virtual void setStatusBarText(const String&) { }
 };
 
 class SVGEmptyFrameLoaderClient : public FrameLoaderClient {
index bdb2b6e..3c655fb 100644 (file)
@@ -1,3 +1,17 @@
+2007-01-18  Anders Carlsson  <acarlsson@apple.com>
+
+        Reviewed by Adam.
+
+        Move functions from the bridge to the chrome client.
+        
+        * WebCoreSupport/WebChromeClient.h:
+        * WebCoreSupport/WebChromeClient.mm:
+        (WebChromeClient::runJavaScriptAlert):
+        (WebChromeClient::runJavaScriptConfirm):
+        (WebChromeClient::runJavaScriptPrompt):
+        (WebChromeClient::setStatusBarText):
+        * WebCoreSupport/WebFrameBridge.mm:
+
 2007-01-18  Adam Roben  <aroben@apple.com>
 
         Reviewed by Beth.
index f5869c3..939297a 100644 (file)
@@ -80,6 +80,11 @@ public:
 
     virtual void closeWindowSoon();
 
+    virtual void runJavaScriptAlert(WebCore::Frame*, const WebCore::String&);
+    virtual bool runJavaScriptConfirm(WebCore::Frame*, const WebCore::String&);
+    virtual bool runJavaScriptPrompt(WebCore::Frame*, const WebCore::String& message, const WebCore::String& defaultValue, WebCore::String& result);
+    virtual void setStatusBarText(const WebCore::String&);
+
 private:
     WebView *m_webView;
 };
index f2e5415..5968714 100644 (file)
@@ -267,3 +267,59 @@ void WebChromeClient::closeWindowSoon()
     [m_webView performSelector:@selector(_closeWindow) withObject:nil afterDelay:0.0];
 }
 
+void WebChromeClient::runJavaScriptAlert(Frame* frame, const String& message)
+{
+    id wd = [m_webView UIDelegate];
+    // Check whether delegate implements new version, then whether delegate implements old version. If neither,
+    // fall back to shared delegate's implementation of new version.
+    if ([wd respondsToSelector:@selector(webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:)])
+        [wd webView:m_webView runJavaScriptAlertPanelWithMessage:message initiatedByFrame:kit(frame)];
+    else if ([wd respondsToSelector:@selector(webView:runJavaScriptAlertPanelWithMessage:)])
+        [wd webView:m_webView runJavaScriptAlertPanelWithMessage:message];
+    else
+        [[WebDefaultUIDelegate sharedUIDelegate] webView:m_webView runJavaScriptAlertPanelWithMessage:message initiatedByFrame:kit(frame)];    
+}
+
+bool WebChromeClient::runJavaScriptConfirm(Frame* frame, const String& message)
+{
+    id wd = [m_webView UIDelegate];
+    // Check whether delegate implements new version, then whether delegate implements old version. If neither,
+    // fall back to shared delegate's implementation of new version.
+    if ([wd respondsToSelector:@selector(webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:)])
+        return [wd webView:m_webView runJavaScriptConfirmPanelWithMessage:message initiatedByFrame:kit(frame)];
+    if ([wd respondsToSelector:@selector(webView:runJavaScriptConfirmPanelWithMessage:)])
+        return [wd webView:m_webView runJavaScriptConfirmPanelWithMessage:message];    
+    return [[WebDefaultUIDelegate sharedUIDelegate] webView:m_webView runJavaScriptConfirmPanelWithMessage:message initiatedByFrame:kit(frame)];
+}
+
+bool WebChromeClient::runJavaScriptPrompt(Frame* frame, const String& prompt, const String& defaultText, String& result)
+{
+    id wd = [m_webView UIDelegate];
+    // Check whether delegate implements new version, then whether delegate implements old version. If neither,
+    // fall back to shared delegate's implementation of new version.
+    if ([wd respondsToSelector:@selector(webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:)])
+        result = [wd webView:m_webView runJavaScriptTextInputPanelWithPrompt:prompt defaultText:defaultText initiatedByFrame:kit(frame)];
+    else if ([wd respondsToSelector:@selector(webView:runJavaScriptTextInputPanelWithPrompt:defaultText:)])
+        result = [wd webView:m_webView runJavaScriptTextInputPanelWithPrompt:prompt defaultText:defaultText];
+    else
+        result = [[WebDefaultUIDelegate sharedUIDelegate] webView:m_webView runJavaScriptTextInputPanelWithPrompt:prompt defaultText:defaultText initiatedByFrame:kit(frame)];
+    
+    return !result.isNull();
+}
+
+void WebChromeClient::setStatusBarText(const WebCore::String& status)
+{
+    id wd = [m_webView UIDelegate];
+
+    if ([wd respondsToSelector:@selector(webView:setStatusText:)]) {
+        // We want the temporaries allocated here to be released even before returning to the 
+        // event loop; see <http://bugs.webkit.org/show_bug.cgi?id=9880>.
+        NSAutoreleasePool* localPool = [[NSAutoreleasePool alloc] init];
+    
+        [wd webView:m_webView setStatusText:status];
+        
+        [localPool release];
+    }
+}
+
+
index 5df1ef8..28ecaf8 100644 (file)
@@ -286,33 +286,6 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
     return [[_frame frameView] window];
 }
 
-- (void)runJavaScriptAlertPanelWithMessage:(NSString *)message
-{
-    WebView *wv = [self webView];
-    id wd = [wv UIDelegate];
-    // Check whether delegate implements new version, then whether delegate implements old version. If neither,
-    // fall back to shared delegate's implementation of new version.
-    if ([wd respondsToSelector:@selector(webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:)])
-        [wd webView:wv runJavaScriptAlertPanelWithMessage:message initiatedByFrame:_frame];
-    else if ([wd respondsToSelector:@selector(webView:runJavaScriptAlertPanelWithMessage:)])
-        [wd webView:wv runJavaScriptAlertPanelWithMessage:message];
-    else
-        [[WebDefaultUIDelegate sharedUIDelegate] webView:wv runJavaScriptAlertPanelWithMessage:message initiatedByFrame:_frame];
-}
-
-- (BOOL)runJavaScriptConfirmPanelWithMessage:(NSString *)message
-{
-    WebView *wv = [self webView];
-    id wd = [wv UIDelegate];
-    // Check whether delegate implements new version, then whether delegate implements old version. If neither,
-    // fall back to shared delegate's implementation of new version.
-    if ([wd respondsToSelector:@selector(webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:)])
-        return [wd webView:wv runJavaScriptConfirmPanelWithMessage:message initiatedByFrame:_frame];
-    if ([wd respondsToSelector:@selector(webView:runJavaScriptConfirmPanelWithMessage:)])
-        return [wd webView:wv runJavaScriptConfirmPanelWithMessage:message];    
-    return [[WebDefaultUIDelegate sharedUIDelegate] webView:wv runJavaScriptConfirmPanelWithMessage:message initiatedByFrame:_frame];
-}
-
 - (BOOL)shouldInterruptJavaScript
 {
     WebView *wv = [self webView];
@@ -353,13 +326,6 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
     return dataSource;
 }
 
-- (void)setStatusText:(NSString *)status
-{
-    ASSERT(_frame != nil);
-    WebView *wv = [self webView];
-    [[wv _UIDelegateForwarder] webView:wv setStatusText:status];
-}
-
 - (void)close
 {
     [super close];