[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