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

weinig at apple.com weinig at apple.com
Wed Dec 22 13:29:10 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 86c5b01b6521836839fc7423add6e3b110783288
Author: weinig at apple.com <weinig at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Sep 16 21:04:44 2010 +0000

    Add support for sending synchronous messages from the InjectedBundle to the WKContext
    <rdar://problem/8365320>
    https://bugs.webkit.org/show_bug.cgi?id=44785
    
    Reviewed by Anders Carlsson.
    
    WebKit2:
    
    * Shared/CoreIPCSupport/WebContextMessageKinds.h:
    * UIProcess/API/C/WKContext.h:
    * UIProcess/WebContext.cpp:
    (WebKit::WebContext::didReceiveSynchronousMessageFromInjectedBundle):
    (WebKit::WebContext::didReceiveMessage):
    (WebKit::WebContext::didReceiveSyncMessage):
    * UIProcess/WebContext.h:
    * UIProcess/WebContextInjectedBundleClient.cpp:
    (WebKit::WebContextInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle):
    * UIProcess/WebContextInjectedBundleClient.h:
    * UIProcess/WebProcessProxy.cpp:
    (WebKit::WebProcessProxy::didReceiveSyncMessage):
    * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
    (WKBundlePostSynchronousMessage):
    * WebProcess/InjectedBundle/API/c/WKBundle.h:
    * WebProcess/InjectedBundle/InjectedBundle.cpp:
    (WebKit::InjectedBundle::postSynchronousMessage):
    * WebProcess/InjectedBundle/InjectedBundle.h:
    
    WebKitTools:
    
    * MiniBrowser/mac/AppDelegate.m:
    (didReceiveSynchronousMessageFromInjectedBundle):
    (-[BrowserAppDelegate init]):
    * MiniBrowser/mac/WebBundle/WebBundleMain.m:
    (didCreatePage):
    * WebKitTestRunner/TestController.cpp:
    (WTR::TestController::initialize):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@67666 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 4ec8623..bc09419 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,30 @@
+2010-09-16  Sam Weinig  <sam at webkit.org>
+
+        Reviewed by Anders Carlsson.
+
+        Add support for sending synchronous messages from the InjectedBundle to the WKContext
+        <rdar://problem/8365320>
+        https://bugs.webkit.org/show_bug.cgi?id=44785
+
+        * Shared/CoreIPCSupport/WebContextMessageKinds.h:
+        * UIProcess/API/C/WKContext.h:
+        * UIProcess/WebContext.cpp:
+        (WebKit::WebContext::didReceiveSynchronousMessageFromInjectedBundle):
+        (WebKit::WebContext::didReceiveMessage):
+        (WebKit::WebContext::didReceiveSyncMessage):
+        * UIProcess/WebContext.h:
+        * UIProcess/WebContextInjectedBundleClient.cpp:
+        (WebKit::WebContextInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle):
+        * UIProcess/WebContextInjectedBundleClient.h:
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::didReceiveSyncMessage):
+        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
+        (WKBundlePostSynchronousMessage):
+        * WebProcess/InjectedBundle/API/c/WKBundle.h:
+        * WebProcess/InjectedBundle/InjectedBundle.cpp:
+        (WebKit::InjectedBundle::postSynchronousMessage):
+        * WebProcess/InjectedBundle/InjectedBundle.h:
+
 2010-09-16  Balazs Kelemen  <kbalazs at webkit.org>
 
         Unreviewed trivial typo fix.
diff --git a/WebKit2/Shared/CoreIPCSupport/WebContextMessageKinds.h b/WebKit2/Shared/CoreIPCSupport/WebContextMessageKinds.h
index 4f6ea1b..eee70c9 100644
--- a/WebKit2/Shared/CoreIPCSupport/WebContextMessageKinds.h
+++ b/WebKit2/Shared/CoreIPCSupport/WebContextMessageKinds.h
@@ -33,7 +33,8 @@
 namespace WebContextMessage {
 
 enum Kind {
-    PostMessage
+    PostMessage,
+    PostSynchronousMessage
 };
 
 }
diff --git a/WebKit2/UIProcess/API/C/WKContext.h b/WebKit2/UIProcess/API/C/WKContext.h
index cb59cc6..cfe8253 100644
--- a/WebKit2/UIProcess/API/C/WKContext.h
+++ b/WebKit2/UIProcess/API/C/WKContext.h
@@ -34,11 +34,13 @@ extern "C" {
 
 // Injected Bundle Client
 typedef void (*WKContextDidReceiveMessageFromInjectedBundleCallback)(WKContextRef page, WKStringRef messageName, WKTypeRef messageBody, const void *clientInfo);
+typedef void (*WKContextDidReceiveSynchronousMessageFromInjectedBundleCallback)(WKContextRef page, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData, const void *clientInfo);
 
 struct WKContextInjectedBundleClient {
     int                                                                 version;
     const void *                                                        clientInfo;
     WKContextDidReceiveMessageFromInjectedBundleCallback                didReceiveMessageFromInjectedBundle;
+    WKContextDidReceiveSynchronousMessageFromInjectedBundleCallback     didReceiveSynchronousMessageFromInjectedBundle;
 };
 typedef struct WKContextInjectedBundleClient WKContextInjectedBundleClient;
 
diff --git a/WebKit2/UIProcess/WebContext.cpp b/WebKit2/UIProcess/WebContext.cpp
index 6e014c8..8be90c9 100644
--- a/WebKit2/UIProcess/WebContext.cpp
+++ b/WebKit2/UIProcess/WebContext.cpp
@@ -220,6 +220,11 @@ void WebContext::didReceiveMessageFromInjectedBundle(const String& messageName,
     m_injectedBundleClient.didReceiveMessageFromInjectedBundle(this, messageName, messageBody);
 }
 
+void WebContext::didReceiveSynchronousMessageFromInjectedBundle(const String& messageName, APIObject* messageBody, RefPtr<APIObject>& returnData)
+{
+    m_injectedBundleClient.didReceiveSynchronousMessageFromInjectedBundle(this, messageName, messageBody, returnData);
+}
+
 // HistoryClient
 
 void WebContext::didNavigateWithNavigationData(WebFrameProxy* frame, const WebNavigationDataStore& store) 
@@ -293,7 +298,7 @@ void WebContext::addVisitedLink(LinkHash linkHash)
     m_visitedLinkProvider.addVisitedLink(linkHash);
 }
         
-void WebContext::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
+void WebContext::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
 {
     switch (messageID.get<WebContextMessage::Kind>()) {
         case WebContextMessage::PostMessage: {
@@ -306,9 +311,33 @@ void WebContext::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::Mes
             didReceiveMessageFromInjectedBundle(messageName, messageBody.get());
             return;
         }
+        case WebContextMessage::PostSynchronousMessage:
+            ASSERT_NOT_REACHED();
     }
 
     ASSERT_NOT_REACHED();
 }
 
+void WebContext::didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, CoreIPC::ArgumentEncoder* reply)
+{
+    switch (messageID.get<WebContextMessage::Kind>()) {
+        case WebContextMessage::PostSynchronousMessage: {
+            // FIXME: We should probably encode something in the case that the arguments do not decode correctly.
+
+            String messageName;
+            RefPtr<APIObject> messageBody;
+            WebContextUserMessageDecoder messageDecoder(messageBody, this);
+            if (!arguments->decode(CoreIPC::Out(messageName, messageDecoder)))
+                return;
+
+            RefPtr<APIObject> returnData;
+            didReceiveSynchronousMessageFromInjectedBundle(messageName, messageBody.get(), returnData);
+            reply->encode(CoreIPC::In(WebContextUserMessageEncoder(returnData.get())));
+            return;
+        }
+        case WebContextMessage::PostMessage:
+            ASSERT_NOT_REACHED();
+    }
+}
+
 } // namespace WebKit
diff --git a/WebKit2/UIProcess/WebContext.h b/WebKit2/UIProcess/WebContext.h
index e7d24d1..02583e4 100644
--- a/WebKit2/UIProcess/WebContext.h
+++ b/WebKit2/UIProcess/WebContext.h
@@ -84,7 +84,8 @@ public:
     void postMessageToInjectedBundle(const WTF::String&, APIObject*);
 
     // InjectedBundle client
-    void didReceiveMessageFromInjectedBundle(const WTF::String&, APIObject*);
+    void didReceiveMessageFromInjectedBundle(const String&, APIObject*);
+    void didReceiveSynchronousMessageFromInjectedBundle(const String&, APIObject*, RefPtr<APIObject>& returnData);
 
     // History client
     void didNavigateWithNavigationData(WebFrameProxy*, const WebNavigationDataStore&); 
@@ -105,6 +106,7 @@ public:
     void addVisitedLink(WebCore::LinkHash);
 
     void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
+    void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
 
 #if PLATFORM(WIN)
     void setShouldPaintNativeControls(bool);
diff --git a/WebKit2/UIProcess/WebContextInjectedBundleClient.cpp b/WebKit2/UIProcess/WebContextInjectedBundleClient.cpp
index 161c2f2..d030318 100644
--- a/WebKit2/UIProcess/WebContextInjectedBundleClient.cpp
+++ b/WebKit2/UIProcess/WebContextInjectedBundleClient.cpp
@@ -53,4 +53,14 @@ void WebContextInjectedBundleClient::didReceiveMessageFromInjectedBundle(WebCont
     m_client.didReceiveMessageFromInjectedBundle(toRef(context), toRef(messageName.impl()), toRef(messageBody), m_client.clientInfo);
 }
 
+void WebContextInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle(WebContext* context, const String& messageName, APIObject* messageBody, RefPtr<APIObject>& returnData)
+{
+    if (!m_client.didReceiveSynchronousMessageFromInjectedBundle)
+        return;
+
+    WKTypeRef returnDataRef = 0;
+    m_client.didReceiveSynchronousMessageFromInjectedBundle(toRef(context), toRef(messageName.impl()), toRef(messageBody), &returnDataRef, m_client.clientInfo);
+    returnData = adoptRef(toWK(returnDataRef));
+}
+
 } // namespace WebKit
diff --git a/WebKit2/UIProcess/WebContextInjectedBundleClient.h b/WebKit2/UIProcess/WebContextInjectedBundleClient.h
index 42b994e..89cceb5 100644
--- a/WebKit2/UIProcess/WebContextInjectedBundleClient.h
+++ b/WebKit2/UIProcess/WebContextInjectedBundleClient.h
@@ -40,6 +40,7 @@ public:
     void initialize(const WKContextInjectedBundleClient*);
 
     void didReceiveMessageFromInjectedBundle(WebContext*, const WTF::String&, APIObject*);
+    void didReceiveSynchronousMessageFromInjectedBundle(WebContext*, const String&, APIObject*, RefPtr<APIObject>& returnData);
 
 private:
     WKContextInjectedBundleClient m_client;
diff --git a/WebKit2/UIProcess/WebProcessProxy.cpp b/WebKit2/UIProcess/WebProcessProxy.cpp
index d09a062..52f42a8 100644
--- a/WebKit2/UIProcess/WebProcessProxy.cpp
+++ b/WebKit2/UIProcess/WebProcessProxy.cpp
@@ -351,7 +351,7 @@ void WebProcessProxy::didReceiveSyncMessage(CoreIPC::Connection* connection, Cor
                 getPlugins(refresh, plugins);
 
                 reply->encode(plugins);
-                break;
+                return;
             }
 
             case WebProcessProxyMessage::GetPluginHostConnection: {
@@ -364,7 +364,7 @@ void WebProcessProxy::didReceiveSyncMessage(CoreIPC::Connection* connection, Cor
                 String pluginPath;
                 getPluginHostConnection(mimeType, KURL(ParsedURLString, urlString), pluginPath);
                 reply->encode(CoreIPC::In(pluginPath));
-                break;
+                return;
             }
 
             // These are asynchronous messages and should never be handled here.
@@ -376,10 +376,15 @@ void WebProcessProxy::didReceiveSyncMessage(CoreIPC::Connection* connection, Cor
             case WebProcessProxyMessage::AddVisitedLink:
             case WebProcessProxyMessage::DidDestroyFrame:
                 ASSERT_NOT_REACHED();
-                break;
+                return;
         }
     }
 
+    if (messageID.is<CoreIPC::MessageClassWebContext>()) {
+        m_context->didReceiveSyncMessage(connection, messageID, arguments, reply);    
+        return;
+    }
+
     uint64_t pageID = arguments->destinationID();
     if (!pageID)
         return;
diff --git a/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp b/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp
index 25618a3..b65ba5b 100644
--- a/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp
+++ b/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp
@@ -49,6 +49,14 @@ void WKBundlePostMessage(WKBundleRef bundleRef, WKStringRef messageNameRef, WKTy
     toWK(bundleRef)->postMessage(toWK(messageNameRef)->string(), toWK(messageBodyRef));
 }
 
+void WKBundlePostSynchronousMessage(WKBundleRef bundleRef, WKStringRef messageNameRef, WKTypeRef messageBodyRef, WKTypeRef* returnDataRef)
+{
+    RefPtr<APIObject> returnData;
+    toWK(bundleRef)->postSynchronousMessage(toWK(messageNameRef)->string(), toWK(messageBodyRef), returnData);
+    if (returnDataRef)
+        *returnDataRef = toRef(returnData.release().leakRef());
+}
+
 void WKBundleSetShouldTrackVisitedLinks(WKBundleRef bundleRef, bool shouldTrackVisitedLinks)
 {
     toWK(bundleRef)->setShouldTrackVisitedLinks(shouldTrackVisitedLinks);
diff --git a/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.h b/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.h
index e5a7135..59612a2 100644
--- a/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.h
+++ b/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.h
@@ -52,6 +52,7 @@ WK_EXPORT WKTypeID WKBundleGetTypeID();
 WK_EXPORT void WKBundleSetClient(WKBundleRef bundle, WKBundleClient * client);
 
 WK_EXPORT void WKBundlePostMessage(WKBundleRef bundle, WKStringRef messageName, WKTypeRef messageBody);
+WK_EXPORT void WKBundlePostSynchronousMessage(WKBundleRef bundle, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData);
 
 #ifdef __cplusplus
 }
diff --git a/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp b/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
index 1d4b863..65d1b74 100644
--- a/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
+++ b/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
@@ -75,6 +75,22 @@ void InjectedBundle::postMessage(const String& messageName, APIObject* messageBo
     WebProcess::shared().connection()->send(WebContextMessage::PostMessage, 0, CoreIPC::In(messageName, InjectedBundleUserMessageEncoder(messageBody)));
 }
 
+void InjectedBundle::postSynchronousMessage(const String& messageName, APIObject* messageBody, RefPtr<APIObject>& returnData)
+{
+    RefPtr<APIObject> returnDataTmp;
+    InjectedBundleUserMessageDecoder messageDecoder(returnDataTmp);
+    
+    bool succeeded = WebProcess::shared().connection()->sendSync(WebContextMessage::PostSynchronousMessage, 0,
+                                                CoreIPC::In(messageName, InjectedBundleUserMessageEncoder(messageBody)),
+                                                CoreIPC::Out(messageDecoder),
+                                                CoreIPC::Connection::NoTimeout);
+
+    if (!succeeded)
+        return;
+
+    returnData = returnDataTmp;
+}
+
 void InjectedBundle::setShouldTrackVisitedLinks(bool shouldTrackVisitedLinks)
 {
     PageGroup::setShouldTrackVisitedLinks(shouldTrackVisitedLinks);
diff --git a/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h b/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h
index 5f403fd..c9eb5ee 100644
--- a/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h
+++ b/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h
@@ -75,7 +75,10 @@ public:
 
     // API
     void initializeClient(WKBundleClient*);
-    void postMessage(const WTF::String&, APIObject*);
+    void postMessage(const String&, APIObject*);
+    void postSynchronousMessage(const String&, APIObject*, RefPtr<APIObject>& returnData);
+
+    // TestRunner only SPI
     void setShouldTrackVisitedLinks(bool);
     void removeAllVisitedLinks();
     void activateMacFontAscentHack();
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index 18cfed5..49ef04d 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,19 @@
+2010-09-16  Sam Weinig  <sam at webkit.org>
+
+        Reviewed by Anders Carlsson.
+
+        Add support for sending synchronous messages from the InjectedBundle to the WKContext
+        <rdar://problem/8365320>
+        https://bugs.webkit.org/show_bug.cgi?id=44785
+
+        * MiniBrowser/mac/AppDelegate.m:
+        (didReceiveSynchronousMessageFromInjectedBundle):
+        (-[BrowserAppDelegate init]):
+        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
+        (didCreatePage):
+        * WebKitTestRunner/TestController.cpp:
+        (WTR::TestController::initialize):
+
 2010-09-16  Leonid Ebril  <leonid.ebril at nokia.com>
 
         Reviewed by Andreas Kling.
diff --git a/WebKitTools/MiniBrowser/mac/AppDelegate.m b/WebKitTools/MiniBrowser/mac/AppDelegate.m
index 3bd3d57..7098cea 100644
--- a/WebKitTools/MiniBrowser/mac/AppDelegate.m
+++ b/WebKitTools/MiniBrowser/mac/AppDelegate.m
@@ -141,7 +141,8 @@ static void populateVisitedLinks(WKContextRef context, const void *clientInfo)
         WKContextInjectedBundleClient bundleClient = {
             0,      /* version */
             0,      /* clientInfo */
-            didRecieveMessageFromInjectedBundle
+            didRecieveMessageFromInjectedBundle,
+            0
         };
         WKContextSetInjectedBundleClient(processContext, &bundleClient);
         WKContextSetHistoryClient(processContext, &historyClient);
diff --git a/WebKitTools/WebKitTestRunner/TestController.cpp b/WebKitTools/WebKitTestRunner/TestController.cpp
index 0cea616..2464e90 100644
--- a/WebKitTools/WebKitTestRunner/TestController.cpp
+++ b/WebKitTools/WebKitTestRunner/TestController.cpp
@@ -143,7 +143,8 @@ void TestController::initialize(int argc, const char* argv[])
     WKContextInjectedBundleClient injectedBundleClient = {
         0,
         this,
-        didReceiveMessageFromInjectedBundle
+        didReceiveMessageFromInjectedBundle,
+        0
     };
     WKContextSetInjectedBundleClient(m_context.get(), &injectedBundleClient);
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list