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