Changeset 61579 in webkit


Ignore:
Timestamp:
Jun 21, 2010 2:36:44 PM (14 years ago)
Author:
weinig@apple.com
Message:

Patch for https://bugs.webkit.org/show_bug.cgi?id=40940
Add message passing support to the WebKit2 API.

Reviewed by Anders Carlsson.

WebKit2:

Adds message passing for both InjectedBundle -> WebContext
and WebContext -> InjectedBundle.

  • Shared/CoreIPCSupport/WebProcessMessageKinds.h:

(WebProcessMessage::):

  • Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h: Added.

(WebProcessProxyMessage::):
(CoreIPC::):

  • UIProcess/API/C/WKContext.cpp:

(WKContextSetInjectedBundleClient):
(WKContextPostMessageToInjectedBundle):

  • UIProcess/API/C/WKContext.h:
  • UIProcess/WebContext.cpp:

(WebKit::WebContext::initializeInjectedBundleClient):
(WebKit::WebContext::forwardMessageToWebContext):
(WebKit::WebContext::postMessageToInjectedBundle):

  • UIProcess/WebContext.h:
  • UIProcess/WebContextInjectedBundleClient.cpp: Added.

(WebKit::WebContextInjectedBundleClient::WebContextInjectedBundleClient):
(WebKit::WebContextInjectedBundleClient::initialize):
(WebKit::WebContextInjectedBundleClient::didRecieveMessageFromInjectedBundle):

  • UIProcess/WebContextInjectedBundleClient.h: Added.
  • UIProcess/WebProcessManager.cpp:

(WebKit::WebProcessManager::processDidClose):

  • UIProcess/WebProcessProxy.cpp:

(WebKit::WebProcessProxy::didReceiveInjectedBundleMessage):
(WebKit::WebProcessProxy::didReceiveMessage):

  • UIProcess/WebProcessProxy.h:
  • WebKit2.xcodeproj/project.pbxproj:
  • WebProcess/InjectedBundle/API/c/WKBundle.cpp:

(WKBundlePostMessage):

  • WebProcess/InjectedBundle/API/c/WKBundle.h:
  • WebProcess/InjectedBundle/InjectedBundle.cpp:

(WebKit::InjectedBundle::postMessage):
(WebKit::InjectedBundle::didCreatePage):
(WebKit::InjectedBundle::didRecieveMessage):

  • WebProcess/InjectedBundle/InjectedBundle.h:
  • WebProcess/WebProcess.cpp:

(WebKit::WebProcess::loadInjectedBundle):
(WebKit::WebProcess::forwardMessageToInjectedBundle):
(WebKit::WebProcess::didReceiveMessage):

  • WebProcess/WebProcess.h:
  • mac/WebKit2.exp:
  • win/WebKit2.vcproj:

WebKitTools:

  • Add some test messages.
  • MiniBrowser/mac/AppDelegate.m:

(_didRecieveMessageFromInjectedBundle):
(-[BrowserAppDelegate init]):

  • MiniBrowser/mac/WebBundle/WebBundleMain.m:

(_didClearWindow):
(_didCreatePage):
(_didRecieveMessage):
(WKBundleInitialize):

Location:
trunk
Files:
3 added
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit2/ChangeLog

    r61563 r61579  
     12010-06-21  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Anders Carlsson.
     4
     5        Patch for https://bugs.webkit.org/show_bug.cgi?id=40940
     6        Add message passing support to the WebKit2 API.
     7
     8        Adds message passing for both InjectedBundle -> WebContext
     9        and WebContext -> InjectedBundle.
     10
     11        * Shared/CoreIPCSupport/WebProcessMessageKinds.h:
     12        (WebProcessMessage::):
     13        * Shared/CoreIPCSupport/WebProcessProxyMessageKinds.h: Added.
     14        (WebProcessProxyMessage::):
     15        (CoreIPC::):
     16        * UIProcess/API/C/WKContext.cpp:
     17        (WKContextSetInjectedBundleClient):
     18        (WKContextPostMessageToInjectedBundle):
     19        * UIProcess/API/C/WKContext.h:
     20        * UIProcess/WebContext.cpp:
     21        (WebKit::WebContext::initializeInjectedBundleClient):
     22        (WebKit::WebContext::forwardMessageToWebContext):
     23        (WebKit::WebContext::postMessageToInjectedBundle):
     24        * UIProcess/WebContext.h:
     25        * UIProcess/WebContextInjectedBundleClient.cpp: Added.
     26        (WebKit::WebContextInjectedBundleClient::WebContextInjectedBundleClient):
     27        (WebKit::WebContextInjectedBundleClient::initialize):
     28        (WebKit::WebContextInjectedBundleClient::didRecieveMessageFromInjectedBundle):
     29        * UIProcess/WebContextInjectedBundleClient.h: Added.
     30        * UIProcess/WebProcessManager.cpp:
     31        (WebKit::WebProcessManager::processDidClose):
     32        * UIProcess/WebProcessProxy.cpp:
     33        (WebKit::WebProcessProxy::didReceiveInjectedBundleMessage):
     34        (WebKit::WebProcessProxy::didReceiveMessage):
     35        * UIProcess/WebProcessProxy.h:
     36        * WebKit2.xcodeproj/project.pbxproj:
     37        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
     38        (WKBundlePostMessage):
     39        * WebProcess/InjectedBundle/API/c/WKBundle.h:
     40        * WebProcess/InjectedBundle/InjectedBundle.cpp:
     41        (WebKit::InjectedBundle::postMessage):
     42        (WebKit::InjectedBundle::didCreatePage):
     43        (WebKit::InjectedBundle::didRecieveMessage):
     44        * WebProcess/InjectedBundle/InjectedBundle.h:
     45        * WebProcess/WebProcess.cpp:
     46        (WebKit::WebProcess::loadInjectedBundle):
     47        (WebKit::WebProcess::forwardMessageToInjectedBundle):
     48        (WebKit::WebProcess::didReceiveMessage):
     49        * WebProcess/WebProcess.h:
     50        * mac/WebKit2.exp:
     51        * win/WebKit2.vcproj:
     52
    1532010-06-21  Anders Carlsson  <andersca@apple.com>
    254
  • trunk/WebKit2/Shared/CoreIPCSupport/WebProcessMessageKinds.h

    r61222 r61579  
    3535enum Kind {
    3636    LoadInjectedBundle,
    37     Create
     37    Create,
     38    PostMessage
    3839};
    3940
  • trunk/WebKit2/UIProcess/API/C/WKContext.cpp

    r61500 r61579  
    6868}
    6969
     70void WKContextSetInjectedBundleClient(WKContextRef contextRef, WKContextInjectedBundleClient* wkClient)
     71{
     72    if (wkClient && !wkClient->version)
     73        toWK(contextRef)->initializeInjectedBundleClient(wkClient);
     74}
     75
     76void WKContextPostMessageToInjectedBundle(WKContextRef contextRef, WKStringRef messageRef)
     77{
     78    toWK(contextRef)->postMessageToInjectedBundle(toWK(messageRef));
     79}
     80
    7081void WKContextGetStatistics(WKContextRef contextRef, WKContextStatistics* statistics)
    7182{
  • trunk/WebKit2/UIProcess/API/C/WKContext.h

    r61500 r61579  
    3333#endif
    3434
     35// Policy Client.
     36typedef void (*WKContextDidRecieveMessageFromInjectedBundleCallback)(WKContextRef page, WKStringRef message, const void *clientInfo);
     37
     38struct WKContextInjectedBundleClient {
     39    int                                                                 version;
     40    const void *                                                        clientInfo;
     41    WKContextDidRecieveMessageFromInjectedBundleCallback                didRecieveMessageFromInjectedBundle;
     42};
     43typedef struct WKContextInjectedBundleClient WKContextInjectedBundleClient;
     44
    3545WK_EXPORT WKContextRef WKContextCreate();
    3646WK_EXPORT WKContextRef WKContextCreateWithInjectedBundlePath(WKStringRef path);
    37 
    3847WK_EXPORT WKContextRef WKContextGetSharedProcessContext();
    3948
    4049WK_EXPORT void WKContextSetPreferences(WKContextRef context, WKPreferencesRef preferences);
    4150WK_EXPORT WKPreferencesRef WKContextGetPreferences(WKContextRef context);
     51
     52WK_EXPORT void WKContextSetInjectedBundleClient(WKContextRef context, WKContextInjectedBundleClient * client);
     53
     54WK_EXPORT void WKContextPostMessageToInjectedBundle(WKContextRef context, WKStringRef message);
    4255
    4356WK_EXPORT WKContextRef WKContextRetain(WKContextRef context);
  • trunk/WebKit2/UIProcess/WebContext.cpp

    r61500 r61579  
    2727
    2828#include "RunLoop.h"
     29#include "WebCoreTypeArgumentMarshalling.h"
    2930#include "WebPageNamespace.h"
    3031#include "WebPreferences.h"
    3132#include "WebProcessManager.h"
     33#include "WebProcessMessageKinds.h"
    3234#include "WebProcessProxy.h"
    3335
     
    8082    webContextCounter.decrement();
    8183#endif
     84}
     85
     86void WebContext::initializeInjectedBundleClient(WKContextInjectedBundleClient* client)
     87{
     88    m_injectedBundleClient.initialize(client);
    8289}
    8390
     
    141148}
    142149
     150// InjectedBundle client
     151
     152void WebContext::didRecieveMessageFromInjectedBundle(const WebCore::String& message)
     153{
     154    m_injectedBundleClient.didRecieveMessageFromInjectedBundle(this, message);
     155}
     156
     157void WebContext::postMessageToInjectedBundle(WebCore::StringImpl* message)
     158{
     159    if (!m_process || !m_process->isValid())
     160        return;
     161
     162    m_process->connection()->send(WebProcessMessage::PostMessage, 0, CoreIPC::In(String(message)));
     163}
     164
    143165void WebContext::getStatistics(WKContextStatistics* statistics)
    144166{
  • trunk/WebKit2/UIProcess/WebContext.h

    r61500 r61579  
    2828
    2929#include "ProcessModel.h"
     30#include "WebContextInjectedBundleClient.h"
    3031#include <WebCore/PlatformString.h>
    3132#include <wtf/Forward.h>
     
    5657    ~WebContext();
    5758
     59    void initializeInjectedBundleClient(WKContextInjectedBundleClient*);
     60
    5861    ProcessModel processModel() const { return m_processModel; }
    5962    WebProcessProxy* process() const { return m_process.get(); }
     
    7174
    7275    const WebCore::String& injectedBundlePath() const { return m_injectedBundlePath; }
     76
     77    // InjectedBundle client
     78    void didRecieveMessageFromInjectedBundle(const WebCore::String&);
     79
     80    void postMessageToInjectedBundle(WebCore::StringImpl*);
    7381
    7482    void getStatistics(WKContextStatistics* statistics);
     
    8896
    8997    WebCore::String m_injectedBundlePath;
     98    WebContextInjectedBundleClient m_injectedBundleClient;
    9099};
    91100
  • trunk/WebKit2/UIProcess/WebProcessManager.cpp

    r61500 r61579  
    8181        ASSERT(it->second == process);
    8282        m_processMap.remove(it);
     83        return;
    8384    }
    8485
  • trunk/WebKit2/UIProcess/WebProcessProxy.cpp

    r61500 r61579  
    3232#include "WebProcessManager.h"
    3333#include "WebProcessMessageKinds.h"
     34#include "WebProcessProxyMessageKinds.h"
    3435#include <WebCore/PlatformString.h>
    3536
     
    128129}
    129130
     131void WebProcessProxy::forwardMessageToWebContext(const WebCore::String& message)
     132{
     133    m_context->didRecieveMessageFromInjectedBundle(message);
     134}
     135
    130136void WebProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
    131137{
     138    if (messageID.is<CoreIPC::MessageClassWebProcessProxy>()) {
     139        switch (messageID.get<WebProcessProxyMessage::Kind>()) {
     140            case WebProcessProxyMessage::PostMessage: {
     141                WebCore::String message;
     142                if (!arguments->decode(CoreIPC::Out(message)))
     143                    return;
     144
     145                forwardMessageToWebContext(message);
     146                return;
     147            }
     148        }
     149    }
     150
    132151    uint64_t pageID = arguments->destinationID();
    133152    if (!pageID)
  • trunk/WebKit2/UIProcess/WebProcessProxy.h

    r61500 r61579  
    7777    void connect();
    7878
     79    void forwardMessageToWebContext(const WebCore::String&);
     80
    7981    // CoreIPC::Connection::Client
    8082    void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
  • trunk/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r61453 r61579  
    149149                BC9E969C11457F3F00870E71 /* DrawingAreaMessageKinds.h in Headers */ = {isa = PBXBuildFile; fileRef = BC9E969B11457F3F00870E71 /* DrawingAreaMessageKinds.h */; };
    150150                BCB63478116BF10600603215 /* WebKit2.h in Headers */ = {isa = PBXBuildFile; fileRef = BCB63477116BF10600603215 /* WebKit2.h */; settings = {ATTRIBUTES = (Public, ); }; };
     151                BCB7346E11CEE3FF00EC5002 /* WebProcessProxyMessageKinds.h in Headers */ = {isa = PBXBuildFile; fileRef = BCB7346D11CEE3FF00EC5002 /* WebProcessProxyMessageKinds.h */; };
    151152                BCB9E2431120DACA00A137E0 /* WebContext.h in Headers */ = {isa = PBXBuildFile; fileRef = BCB9E2411120DACA00A137E0 /* WebContext.h */; };
    152153                BCB9E2441120DACA00A137E0 /* WebContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCB9E2421120DACA00A137E0 /* WebContext.cpp */; };
     
    176177                BCD598AC112B7FDF00EC8C23 /* WebPreferencesStore.h in Headers */ = {isa = PBXBuildFile; fileRef = BCD598AA112B7FDF00EC8C23 /* WebPreferencesStore.h */; };
    177178                BCD598AD112B7FDF00EC8C23 /* WebPreferencesStore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD598AB112B7FDF00EC8C23 /* WebPreferencesStore.cpp */; };
     179                BCDE059B11CDA8AE00E41AF1 /* WebContextInjectedBundleClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BCDE059911CDA8AE00E41AF1 /* WebContextInjectedBundleClient.h */; };
     180                BCDE059C11CDA8AE00E41AF1 /* WebContextInjectedBundleClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCDE059A11CDA8AE00E41AF1 /* WebContextInjectedBundleClient.cpp */; };
    178181                BCEE966C112FAF57006BCC24 /* Attachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCEE966A112FAF57006BCC24 /* Attachment.cpp */; };
    179182                BCEE966D112FAF57006BCC24 /* Attachment.h in Headers */ = {isa = PBXBuildFile; fileRef = BCEE966B112FAF57006BCC24 /* Attachment.h */; };
     
    364367                BC9E969B11457F3F00870E71 /* DrawingAreaMessageKinds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DrawingAreaMessageKinds.h; sourceTree = "<group>"; };
    365368                BCB63477116BF10600603215 /* WebKit2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKit2.h; sourceTree = "<group>"; };
     369                BCB7346D11CEE3FF00EC5002 /* WebProcessProxyMessageKinds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProcessProxyMessageKinds.h; sourceTree = "<group>"; };
    366370                BCB86F4B116AAACD00CE20B7 /* WebKit2.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = WebKit2.xcconfig; sourceTree = "<group>"; };
    367371                BCB8D4E011AF78C1008F9103 /* WebKit2.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; name = WebKit2.exp; path = mac/WebKit2.exp; sourceTree = "<group>"; };
     
    393397                BCD598AA112B7FDF00EC8C23 /* WebPreferencesStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebPreferencesStore.h; sourceTree = "<group>"; };
    394398                BCD598AB112B7FDF00EC8C23 /* WebPreferencesStore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebPreferencesStore.cpp; sourceTree = "<group>"; };
     399                BCDE059911CDA8AE00E41AF1 /* WebContextInjectedBundleClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebContextInjectedBundleClient.h; sourceTree = "<group>"; };
     400                BCDE059A11CDA8AE00E41AF1 /* WebContextInjectedBundleClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebContextInjectedBundleClient.cpp; sourceTree = "<group>"; };
    395401                BCEE966A112FAF57006BCC24 /* Attachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Attachment.cpp; sourceTree = "<group>"; };
    396402                BCEE966B112FAF57006BCC24 /* Attachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Attachment.h; sourceTree = "<group>"; };
     
    643649                                BCB9E2421120DACA00A137E0 /* WebContext.cpp */,
    644650                                BCB9E2411120DACA00A137E0 /* WebContext.h */,
     651                                BCDE059A11CDA8AE00E41AF1 /* WebContextInjectedBundleClient.cpp */,
     652                                BCDE059911CDA8AE00E41AF1 /* WebContextInjectedBundleClient.h */,
    645653                                BCB9F69F1123A84B00A137E0 /* WebFramePolicyListenerProxy.cpp */,
    646654                                BCB9F69E1123A84B00A137E0 /* WebFramePolicyListenerProxy.h */,
     
    786794                                BC111B61112F638300337BAB /* WebPageProxyMessageKinds.h */,
    787795                                BC111B62112F638300337BAB /* WebProcessMessageKinds.h */,
     796                                BCB7346D11CEE3FF00EC5002 /* WebProcessProxyMessageKinds.h */,
    788797                        );
    789798                        path = CoreIPCSupport;
     
    10021011                                BC20528811C943A5008F3375 /* InjectedBundlePageClient.h in Headers */,
    10031012                                1A3E736111CC2659007BD539 /* WebPlatformStrategies.h in Headers */,
     1013                                BCDE059B11CDA8AE00E41AF1 /* WebContextInjectedBundleClient.h in Headers */,
     1014                                BCB7346E11CEE3FF00EC5002 /* WebProcessProxyMessageKinds.h in Headers */,
    10041015                        );
    10051016                        runOnlyForDeploymentPostprocessing = 0;
     
    11611172                                BC20528911C943A5008F3375 /* InjectedBundlePageClient.cpp in Sources */,
    11621173                                1A3E736211CC2659007BD539 /* WebPlatformStrategies.cpp in Sources */,
     1174                                BCDE059C11CDA8AE00E41AF1 /* WebContextInjectedBundleClient.cpp in Sources */,
    11631175                        );
    11641176                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp

    r61222 r61579  
    2626#include "WKBundle.h"
    2727
     28#include "InjectedBundle.h"
     29#include "WKAPICast.h"
    2830#include "WKBundleAPICast.h"
    29 #include "InjectedBundle.h"
    3031
    3132using namespace WebKit;
     
    3637        toWK(bundleRef)->initializeClient(wkClient);
    3738}
     39
     40void WKBundlePostMessage(WKBundleRef bundleRef, WKStringRef messageRef)
     41{
     42    toWK(bundleRef)->postMessage(toWK(messageRef));
     43}
  • trunk/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.h

    r61222 r61579  
    2727#define WKBundle_h
    2828
     29#include <WebKit2/WKBase.h>
    2930#include <WebKit2/WKBundleBase.h>
    3031
     
    3435
    3536// Client
    36 typedef void (*WKBundleDidCreatePageCallback)(WKBundlePageRef page, const void *clientInfo);
     37typedef void (*WKBundleDidCreatePageCallback)(WKBundleRef bundle, WKBundlePageRef page, const void *clientInfo);
     38typedef void (*WKBundleDidRecieveMessageCallback)(WKBundleRef bundle, WKStringRef message, const void *clientInfo);
    3739
    3840struct WKBundleClient {
     
    4042    const void *                                                        clientInfo;
    4143    WKBundleDidCreatePageCallback                                       didCreatePage;
     44    WKBundleDidRecieveMessageCallback                                   didRecieveMessage;
    4245};
    4346typedef struct WKBundleClient WKBundleClient;
    4447
    4548WK_EXPORT void WKBundleSetClient(WKBundleRef bundle, WKBundleClient * client);
     49
     50WK_EXPORT void WKBundlePostMessage(WKBundleRef bundle, WKStringRef message);
    4651
    4752#ifdef __cplusplus
  • trunk/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp

    r61222 r61579  
    2626#include "InjectedBundle.h"
    2727
     28#include "WKAPICast.h"
    2829#include "WKBundleAPICast.h"
     30#include "WebCoreTypeArgumentMarshalling.h"
     31#include "WebProcess.h"
     32#include "WebProcessProxyMessageKinds.h"
     33
     34using namespace WebCore;
    2935
    3036namespace WebKit {
     
    4955}
    5056
     57void InjectedBundle::postMessage(StringImpl* message)
     58{
     59    WebProcess::shared().connection()->send(WebProcessProxyMessage::PostMessage, 0, CoreIPC::In(String(message)));
     60}
     61
    5162void InjectedBundle::didCreatePage(WebPage* page)
    5263{
    5364    if (m_client.didCreatePage)
    54         m_client.didCreatePage(toRef(page), m_client.clientInfo);
     65        m_client.didCreatePage(toRef(this), toRef(page), m_client.clientInfo);
     66}
     67
     68void InjectedBundle::didRecieveMessage(const WebCore::String& message)
     69{
     70    if (m_client.didRecieveMessage)
     71        m_client.didRecieveMessage(toRef(this), toRef(message.impl()), m_client.clientInfo);
    5572}
    5673
  • trunk/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h

    r61222 r61579  
    5454    // API
    5555    void initializeClient(WKBundleClient*);
     56    void postMessage(WebCore::StringImpl*);
    5657
    5758    // Callback hooks
    5859    void didCreatePage(WebPage*);
     60    void didRecieveMessage(const WebCore::String&);
    5961
    6062private:
  • trunk/WebKit2/WebProcess/WebProcess.cpp

    r61516 r61579  
    7070}
    7171
    72 void WebProcess::loadInjectedBundle(const WebCore::String& path)
     72void WebProcess::loadInjectedBundle(const String& path)
    7373{
    7474    ASSERT(m_pageMap.isEmpty());
     
    8080        m_injectedBundle.clear();
    8181    }
     82}
     83
     84void WebProcess::forwardMessageToInjectedBundle(const String& message)
     85{
     86    if (!m_injectedBundle)
     87        return;
     88
     89    m_injectedBundle->didRecieveMessage(message);
    8290}
    8391
     
    139147        switch (messageID.get<WebProcessMessage::Kind>()) {
    140148            case WebProcessMessage::LoadInjectedBundle: {
    141                 WebCore::String path;
     149                String path;
    142150                if (!arguments->decode(CoreIPC::Out(path)))
    143151                    return;
     
    157165                return;
    158166            }
     167            case WebProcessMessage::PostMessage: {
     168                String message;
     169                if (!arguments->decode(CoreIPC::Out(message)))
     170                    return;
     171
     172                forwardMessageToInjectedBundle(message);
     173                return;
     174            }
    159175        }
    160176    }
  • trunk/WebKit2/WebProcess/WebProcess.h

    r61563 r61579  
    6464
    6565    void loadInjectedBundle(const WebCore::String&);
     66    void forwardMessageToInjectedBundle(const WebCore::String&);
    6667
    6768    // CoreIPC::Connection::Client
  • trunk/WebKit2/mac/WebKit2.exp

    r61500 r61579  
    22_WKBundlePageGetMainFrameURL
    33_WKBundlePageSetClient
     4_WKBundlePostMessage
    45_WKBundleSetClient
    56_WKContextCreate
     
    89_WKContextGetSharedThreadContext
    910_WKContextGetStatistics
     11_WKContextPostMessageToInjectedBundle
    1012_WKContextRelease
    1113_WKContextRetain
     14_WKContextSetInjectedBundleClient
    1215_WKFrameGetFrameLoadState
    1316_WKFrameGetPage
  • trunk/WebKit2/win/WebKit2.vcproj

    r61443 r61579  
    525525                                <File
    526526                                        RelativePath="..\Shared\CoreIPCSupport\WebProcessMessageKinds.h"
     527                                        >
     528                                </File>
     529                                <File
     530                                        RelativePath="..\Shared\CoreIPCSupport\WebProcessProxyMessageKinds.h"
    527531                                        >
    528532                                </File>
     
    813817                        </File>
    814818                        <File
     819                                RelativePath="..\UIProcess\WebContextInjectedBundleClient.cpp"
     820                                >
     821                        </File>
     822                        <File
     823                                RelativePath="..\UIProcess\WebContextInjectedBundleClient.h"
     824                                >
     825                        </File>
     826                        <File
    815827                                RelativePath="..\UIProcess\WebFramePolicyListenerProxy.cpp"
    816828                                >
  • trunk/WebKitTools/ChangeLog

    r61564 r61579  
     12010-06-21  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Anders Carlsson.
     4
     5        Patch for https://bugs.webkit.org/show_bug.cgi?id=40940
     6        Add message passing support to the WebKit2 API.
     7
     8        - Add some test messages.
     9
     10        * MiniBrowser/mac/AppDelegate.m:
     11        (_didRecieveMessageFromInjectedBundle):
     12        (-[BrowserAppDelegate init]):
     13        * MiniBrowser/mac/WebBundle/WebBundleMain.m:
     14        (_didClearWindow):
     15        (_didCreatePage):
     16        (_didRecieveMessage):
     17        (WKBundleInitialize):
     18
    1192010-06-21  Drew Wilson  <atwilson@chromium.org>
    220
  • trunk/WebKitTools/MiniBrowser/mac/AppDelegate.m

    r61500 r61579  
    3636@implementation BrowserAppDelegate
    3737
     38void _didRecieveMessageFromInjectedBundle(WKContextRef context, WKStringRef message, const void *clientInfo)
     39{
     40    CFStringRef cfMessage = WKStringCopyCFString(0, message);
     41    NSLog(@"ContextInjectedBundleClient - didRecieveMessage - message: %@", cfMessage);
     42    CFRelease(cfMessage);
     43
     44    WKStringRef newMessage = WKStringCreateWithCFString(CFSTR("Roger that!"));
     45    WKContextPostMessageToInjectedBundle(context, newMessage);
     46    WKStringRelease(newMessage);
     47}
     48
    3849- (id)init
    3950{
     
    5364
    5465        WKContextRef processContext = WKContextCreateWithInjectedBundlePath(bundlePath);
     66       
     67        WKContextInjectedBundleClient bundleClient = {
     68            0,      /* version */
     69            0,      /* clientInfo */
     70            _didRecieveMessageFromInjectedBundle
     71        };
     72        WKContextSetInjectedBundleClient(processContext, &bundleClient);
     73       
    5574        processPageNamespace = WKPageNamespaceCreate(processContext);
    5675        WKContextRelease(processContext);
  • trunk/WebKitTools/MiniBrowser/mac/WebBundle/WebBundleMain.m

    r61443 r61579  
    2424 */
    2525
    26 #include <stdio.h>
    2726#include <Cocoa/Cocoa.h>
    2827#include <WebKit2/WKBundle.h>
     28#include <WebKit2/WKBundleInitialize.h>
    2929#include <WebKit2/WKBundlePage.h>
    30 #include <WebKit2/WKBundleInitialize.h>
     30#include <WebKit2/WKString.h>
     31#include <WebKit2/WKStringCF.h>
    3132#include <WebKit2/WKURLCF.h>
     33#include <stdio.h>
    3234
    3335static WKBundleRef globalBundle;
     
    3840    NSLog(@"WKBundlePageClient - _didClearWindowForFrame %@", [(NSURL *)cfURL absoluteString]);
    3941    CFRelease(cfURL);
     42
     43    WKStringRef message = WKStringCreateWithCFString(CFSTR("Window was cleared"));
     44    WKBundlePostMessage(globalBundle, message);
     45    WKStringRelease(message);
    4046}
    4147
    42 void _didCreatePage(WKBundlePageRef page, const void* clientInfo)
     48void _didCreatePage(WKBundlePageRef bundle, WKBundlePageRef page, const void* clientInfo)
    4349{
    4450    NSLog(@"WKBundleClient - didCreatePage\n");
     
    5258}
    5359
     60void _didRecieveMessage(WKBundleRef bundle, WKStringRef message, const void *clientInfo)
     61{
     62    CFStringRef cfMessage = WKStringCopyCFString(0, message);
     63    NSLog(@"WKBundleClient - didRecieveMessage %@\n", cfMessage);
     64    CFRelease(cfMessage);
     65}
     66
    5467void WKBundleInitialize(WKBundleRef bundle)
    5568{
     
    5972        0,
    6073        0,
    61         _didCreatePage
     74        _didCreatePage,
     75        _didRecieveMessage
    6276    };
    6377    WKBundleSetClient(bundle, &client);
Note: See TracChangeset for help on using the changeset viewer.