Title: [148376] trunk/Source/WebKit2
Revision
148376
Author
wei...@apple.com
Date
2013-04-13 19:12:56 -0700 (Sat, 13 Apr 2013)

Log Message

Add ObjC API for setting initialization data for the WKWebProcessPlugIn
https://bugs.webkit.org/show_bug.cgi?id=103846

Reviewed by Darin Adler.

* UIProcess/API/mac/WKProcessGroup.h:
Adds a new optional processGroupWillCreateConnectionToWebProcessPlugIn: method for the WKProcessGroupDelegate protocol,
which allows the user to pass (via an autoreleased return value) initialization data to the web process plugin.

* UIProcess/API/mac/WKProcessGroup.mm:
(getInjectedBundleInitializationUserData):
(setUpInectedBundleClient):
(-[WKProcessGroup initWithInjectedBundleURL:]):
(-[WKProcessGroup dealloc]):
Use the existing WKContextInjectedBundleClient infrastructure to pass the initialization data to the bundle
via the new ObjCObjectGraph APIObject.

* WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
Adds webProcessPlugIn:initializeWithObject: to the WKWebProcessPlugIn protocol, replacing webProcessPlugInInitialize:.

* WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
(WebKit::InjectedBundle::load):
Pass the initialization data to the web process plugin.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (148375 => 148376)


--- trunk/Source/WebKit2/ChangeLog	2013-04-14 02:00:26 UTC (rev 148375)
+++ trunk/Source/WebKit2/ChangeLog	2013-04-14 02:12:56 UTC (rev 148376)
@@ -1,5 +1,31 @@
 2013-04-13  Sam Weinig  <s...@webkit.org>
 
+        Add ObjC API for setting initialization data for the WKWebProcessPlugIn
+        https://bugs.webkit.org/show_bug.cgi?id=103846
+
+        Reviewed by Darin Adler.
+
+        * UIProcess/API/mac/WKProcessGroup.h:
+        Adds a new optional processGroupWillCreateConnectionToWebProcessPlugIn: method for the WKProcessGroupDelegate protocol,
+        which allows the user to pass (via an autoreleased return value) initialization data to the web process plugin.
+
+        * UIProcess/API/mac/WKProcessGroup.mm:
+        (getInjectedBundleInitializationUserData):
+        (setUpInectedBundleClient):
+        (-[WKProcessGroup initWithInjectedBundleURL:]):
+        (-[WKProcessGroup dealloc]):
+        Use the existing WKContextInjectedBundleClient infrastructure to pass the initialization data to the bundle
+        via the new ObjCObjectGraph APIObject.
+
+        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
+        Adds webProcessPlugIn:initializeWithObject: to the WKWebProcessPlugIn protocol, replacing webProcessPlugInInitialize:.
+
+        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
+        (WebKit::InjectedBundle::load):
+        Pass the initialization data to the web process plugin.
+
+2013-04-13  Sam Weinig  <s...@webkit.org>
+
         Attempt Build Fix.
 
         * WebProcess/Plugins/Netscape/NPJSObject.cpp:

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKProcessGroup.h (148375 => 148376)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKProcessGroup.h	2013-04-14 02:00:26 UTC (rev 148375)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKProcessGroup.h	2013-04-14 02:12:56 UTC (rev 148376)
@@ -29,7 +29,12 @@
 @class WKProcessGroup, WKProcessGroupData, WKConnection;
 
 @protocol WKProcessGroupDelegate <NSObject>
+@optional
 
+- (id)processGroupWillCreateConnectionToWebProcessPlugIn:(WKProcessGroup *)processGroup;
+
+@required
+
 - (void)processGroup:(WKProcessGroup *)processGroup didCreateConnectionToWebProcessPlugIn:(WKConnection *)connection;
 
 @end

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKProcessGroup.mm (148375 => 148376)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKProcessGroup.mm	2013-04-14 02:00:26 UTC (rev 148375)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKProcessGroup.mm	2013-04-14 02:12:56 UTC (rev 148376)
@@ -27,6 +27,7 @@
 #import "WKProcessGroup.h"
 #import "WKProcessGroupPrivate.h"
 
+#import "ObjCObjectGraph.h"
 #import "WKConnectionInternal.h"
 #import "WKContext.h"
 #import "WKRetainPtr.h"
@@ -69,6 +70,30 @@
     WKContextSetConnectionClient(contextRef, &connectionClient);
 }
 
+static WKTypeRef getInjectedBundleInitializationUserData(WKContextRef, const void* clientInfo)
+{
+    WKProcessGroup *processGroup = (WKProcessGroup *)clientInfo;
+    if ([processGroup.delegate respondsToSelector:@selector(processGroupWillCreateConnectionToWebProcessPlugIn:)]) {
+        RetainPtr<id> initializationUserData = [processGroup.delegate processGroupWillCreateConnectionToWebProcessPlugIn:processGroup];
+        RefPtr<WebKit::ObjCObjectGraph> wkMessageBody = WebKit::ObjCObjectGraph::create(initializationUserData.get());
+        return (WKTypeRef)wkMessageBody.release().leakRef();
+    }
+
+    return 0;
+}
+
+static void setUpInectedBundleClient(WKProcessGroup *processGroup, WKContextRef contextRef)
+{
+    WKContextInjectedBundleClient injectedBundleClient;
+    memset(&injectedBundleClient, 0, sizeof(injectedBundleClient));
+
+    injectedBundleClient.version = kWKContextInjectedBundleClientCurrentVersion;
+    injectedBundleClient.clientInfo = processGroup;
+    injectedBundleClient.getInjectedBundleInitializationUserData = getInjectedBundleInitializationUserData;
+
+    WKContextSetInjectedBundleClient(contextRef, &injectedBundleClient);
+}
+
 - (id)init
 {
     return [self initWithInjectedBundleURL:nil];
@@ -88,6 +113,7 @@
         _data->_contextRef = adoptWK(WKContextCreate());
 
     setUpConnectionClient(self, _data->_contextRef.get());
+    setUpInectedBundleClient(self, _data->_contextRef.get());
 
     return self;
 }
@@ -95,6 +121,7 @@
 - (void)dealloc
 {
     WKContextSetConnectionClient(_data->_contextRef.get(), 0);
+    WKContextSetInjectedBundleClient(_data->_contextRef.get(), 0);
 
     [_data release];
     [super dealloc];

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h (148375 => 148376)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h	2013-04-14 02:00:26 UTC (rev 148375)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h	2013-04-14 02:12:56 UTC (rev 148376)
@@ -34,9 +34,12 @@
 
 @protocol WKWebProcessPlugIn <NSObject>
 @optional
-- (void)webProcessPlugInInitialize:(WKWebProcessPlugInController *)plugInController;
+- (void)webProcessPlugIn:(WKWebProcessPlugInController *)plugInController initializeWithObject:(id)initializationObject;
 - (void)webProcessPlugIn:(WKWebProcessPlugInController *)plugInController didCreateBrowserContextController:(WKWebProcessPlugInBrowserContextController *)browserContextController;
 - (void)webProcessPlugIn:(WKWebProcessPlugInController *)plugInController willDestroyBrowserContextController:(WKWebProcessPlugInBrowserContextController *)browserContextController;
+
+- (void)webProcessPlugInInitialize:(WKWebProcessPlugInController *)plugInController DEPRECATED_ATTRIBUTE;
+
 @end
 
 WK_EXPORT

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm (148375 => 148376)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm	2013-04-14 02:00:26 UTC (rev 148375)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm	2013-04-14 02:12:56 UTC (rev 148376)
@@ -26,10 +26,10 @@
 #import "config.h"
 #import "InjectedBundle.h"
 
+#import "ObjCObjectGraph.h"
 #import "WKBundleAPICast.h"
 #import "WKBundleInitialize.h"
 #import "WKWebProcessPlugInInternal.h"
-
 #import <Foundation/NSBundle.h>
 #import <stdio.h>
 #import <wtf/RetainPtr.h>
@@ -107,8 +107,17 @@
     // Create the shared WKWebProcessPlugInController.
     [[WKWebProcessPlugInController alloc] _initWithPrincipalClassInstance:instance bundleRef:toAPI(this)];
 
-    if ([instance respondsToSelector:@selector(webProcessPlugInInitialize:)])
+    if ([instance respondsToSelector:@selector(webProcessPlugIn:initializeWithObject:)]) {
+        RetainPtr<id> objCInitializationUserData;
+        if (initializationUserData && initializationUserData->type() == APIObject::TypeObjCObjectGraph)
+            objCInitializationUserData = static_cast<ObjCObjectGraph*>(initializationUserData)->rootObject();
+        [instance webProcessPlugIn:[WKWebProcessPlugInController _shared] initializeWithObject:objCInitializationUserData.get()];
+    } else if ([instance respondsToSelector:@selector(webProcessPlugInInitialize:)]) {
+        CLANG_PRAGMA("clang diagnostic push")
+        CLANG_PRAGMA("clang diagnostic ignored \"-Wdeprecated-declarations\"")
         [instance webProcessPlugInInitialize:[WKWebProcessPlugInController _shared]];
+        CLANG_PRAGMA("clang diagnostic pop")
+    }
 
     return true;
 #else
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to