Diff
Modified: trunk/Source/WebKit2/ChangeLog (160279 => 160280)
--- trunk/Source/WebKit2/ChangeLog 2013-12-08 05:53:33 UTC (rev 160279)
+++ trunk/Source/WebKit2/ChangeLog 2013-12-08 06:17:18 UTC (rev 160280)
@@ -1,3 +1,25 @@
+2013-12-07 Sam Weinig <s...@webkit.org>
+
+ [Cocoa] Make WKWebProcessPlugInController work with WKObject wrapping
+ https://bugs.webkit.org/show_bug.cgi?id=125404
+
+ Reviewed by Dan Bernstein.
+
+ * Shared/Cocoa/APIObject.mm:
+ (API::Object::newObject):
+ * Shared/mac/ObjCObjectGraphCoders.mm:
+ * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
+ (-[WKWebProcessPlugInController dealloc]):
+ (didCreatePage):
+ (willDestroyPage):
+ (-[WKWebProcessPlugInController _setPrincipalClassInstance:]):
+ (-[WKWebProcessPlugInController API::]):
+ * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:
+ (WebKit::wrapper):
+ * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInPrivate.h:
+ * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
+ (WebKit::InjectedBundle::load):
+
2013-12-07 Dan Bernstein <m...@apple.com>
[Cocoa] WebData has a generic wrapper
@@ -5,7 +27,7 @@
Reviewed by Sam Weinig.
- Added WKNSData, an NSData subclass that confroms to WKObject and wraps a WebData.
+ Added WKNSData, an NSData subclass that conforms to WKObject and wraps a WebData.
* Shared/Cocoa/APIObject.mm:
(API::Object::newObject): Allocate a WKNSData if the API::Object is data.
Modified: trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm (160279 => 160280)
--- trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm 2013-12-08 05:53:33 UTC (rev 160279)
+++ trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm 2013-12-08 06:17:18 UTC (rev 160280)
@@ -44,6 +44,7 @@
#import "WKNavigationDataInternal.h"
#import "WKProcessGroupInternal.h"
#import "WKWebProcessPlugInBrowserContextControllerInternal.h"
+#import "WKWebProcessPlugInInternal.h"
namespace API {
@@ -82,6 +83,10 @@
wrapper = [WKBackForwardListItem alloc];
break;
+ case Type::Bundle:
+ wrapper = [WKWebProcessPlugInController alloc];
+ break;
+
case Type::BundlePage:
wrapper = [WKWebProcessPlugInBrowserContextController alloc];
break;
Modified: trunk/Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm (160279 => 160280)
--- trunk/Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm 2013-12-08 05:53:33 UTC (rev 160279)
+++ trunk/Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm 2013-12-08 06:17:18 UTC (rev 160280)
@@ -40,7 +40,6 @@
#import "InjectedBundleUserMessageCoders.h"
#import "WKBundleAPICast.h"
#import "WKWebProcessPlugInBrowserContextControllerInternal.h"
-#import "WKWebProcessPlugInBrowserContextControllerPrivate.h"
#import "WKWebProcessPlugInInternal.h"
#import "WebPage.h"
#import "WebProcess.h"
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm (160279 => 160280)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm 2013-12-08 05:53:33 UTC (rev 160279)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm 2013-12-08 06:17:18 UTC (rev 160280)
@@ -28,7 +28,6 @@
#if WK_API_ENABLED
-#import "InjectedBundle.h"
#import "WKConnectionInternal.h"
#import "WKBundle.h"
#import "WKBundleAPICast.h"
@@ -39,18 +38,24 @@
using namespace WebKit;
@interface WKWebProcessPlugInController () {
+ API::ObjectStorage<InjectedBundle> _bundle;
RetainPtr<id <WKWebProcessPlugIn>> _principalClassInstance;
- RefPtr<InjectedBundle> _bundle;
- RetainPtr<WKConnection *> _connectionWrapper;
}
@end
@implementation WKWebProcessPlugInController
+- (void)dealloc
+{
+ _bundle->~InjectedBundle();
+
+ [super dealloc];
+}
+
static void didCreatePage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo)
{
WKWebProcessPlugInController *plugInController = (WKWebProcessPlugInController *)clientInfo;
- id<WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get();
+ id <WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get();
if ([principalClassInstance respondsToSelector:@selector(webProcessPlugIn:didCreateBrowserContextController:)])
[principalClassInstance webProcessPlugIn:plugInController didCreateBrowserContextController:wrapper(*toImpl(page))];
@@ -59,7 +64,7 @@
static void willDestroyPage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo)
{
WKWebProcessPlugInController *plugInController = (WKWebProcessPlugInController *)clientInfo;
- id<WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get();
+ id <WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get();
if ([principalClassInstance respondsToSelector:@selector(webProcessPlugIn:willDestroyBrowserContextController:)])
[principalClassInstance webProcessPlugIn:plugInController willDestroyBrowserContextController:wrapper(*toImpl(page))];
@@ -78,29 +83,12 @@
bundle.initializeClient(&bundleClient.base);
}
-static WKWebProcessPlugInController *sharedInstance;
-
-+ (WKWebProcessPlugInController *)_shared
+- (void)_setPrincipalClassInstance:(id <WKWebProcessPlugIn>)principalClassInstance
{
- ASSERT_WITH_MESSAGE(sharedInstance, "+[WKWebProcessPlugIn _shared] called without first initializing it.");
- return sharedInstance;
-}
-
-- (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundle:(InjectedBundle&)bundle
-{
- self = [super init];
- if (!self)
- return nil;
-
+ ASSERT(!_principalClassInstance);
_principalClassInstance = principalClassInstance;
- _bundle = &bundle;
- ASSERT_WITH_MESSAGE(!sharedInstance, "WKWebProcessPlugInController initialized multiple times.");
- sharedInstance = self;
-
setUpBundleClient(self, *_bundle);
-
- return self;
}
- (WKConnection *)connection
@@ -108,6 +96,13 @@
return wrapper(*_bundle->webConnectionToUIProcess());
}
+#pragma mark WKObject protocol implementation
+
+- (API::Object&)_apiObject
+{
+ return *_bundle;
+}
+
@end
@implementation WKWebProcessPlugInController (Private)
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h (160279 => 160280)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h 2013-12-08 05:53:33 UTC (rev 160279)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h 2013-12-08 06:17:18 UTC (rev 160280)
@@ -23,17 +23,25 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#import "WKWebProcessPlugIn.h"
+#import "WKWebProcessPlugInPrivate.h"
#if WK_API_ENABLED
#import "InjectedBundle.h"
+#import "WKObject.h"
-@interface WKWebProcessPlugInController ()
+namespace WebKit {
-+ (WKWebProcessPlugInController *)_shared;
-- (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundle:(WebKit::InjectedBundle&)bundle;
+inline WKWebProcessPlugInController *wrapper(InjectedBundle& bundle)
+{
+ ASSERT([bundle.wrapper() isKindOfClass:[WKWebProcessPlugInController class]]);
+ return (WKWebProcessPlugInController *)bundle.wrapper();
+}
+}
+
+@interface WKWebProcessPlugInController () <WKObject>
+- (void)_setPrincipalClassInstance:(id <WKWebProcessPlugIn>)principalClassInstance;
@end
#endif // WK_API_ENABLED
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInPrivate.h (160279 => 160280)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInPrivate.h 2013-12-08 05:53:33 UTC (rev 160279)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInPrivate.h 2013-12-08 06:17:18 UTC (rev 160280)
@@ -29,7 +29,7 @@
@interface WKWebProcessPlugInController (Private)
-@property(readonly) WKBundleRef _bundleRef;
+@property (readonly) WKBundleRef _bundleRef;
@end
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm (160279 => 160280)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm 2013-12-08 05:53:33 UTC (rev 160279)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm 2013-12-08 06:17:18 UTC (rev 160280)
@@ -98,24 +98,24 @@
return false;
}
- id<WKWebProcessPlugIn> instance = (id<WKWebProcessPlugIn>)[[principalClass alloc] init];
+ id <WKWebProcessPlugIn> instance = (id <WKWebProcessPlugIn>)[[principalClass alloc] init];
if (!instance) {
WTFLogAlways("InjectedBundle::load failed - Could not initialize an instance of the principal class.\n");
return false;
}
- // Create the shared WKWebProcessPlugInController.
- [[WKWebProcessPlugInController alloc] _initWithPrincipalClassInstance:instance bundle:*this];
+ WKWebProcessPlugInController* plugInController = WebKit::wrapper(*this);
+ [plugInController _setPrincipalClassInstance:instance];
if ([instance respondsToSelector:@selector(webProcessPlugIn:initializeWithObject:)]) {
RetainPtr<id> objCInitializationUserData;
if (initializationUserData && initializationUserData->type() == API::Object::Type::ObjCObjectGraph)
objCInitializationUserData = static_cast<ObjCObjectGraph*>(initializationUserData)->rootObject();
- [instance webProcessPlugIn:[WKWebProcessPlugInController _shared] initializeWithObject:objCInitializationUserData.get()];
+ [instance webProcessPlugIn:plugInController initializeWithObject:objCInitializationUserData.get()];
} else if ([instance respondsToSelector:@selector(webProcessPlugInInitialize:)]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- [instance webProcessPlugInInitialize:[WKWebProcessPlugInController _shared]];
+ [instance webProcessPlugInInitialize:plugInController];
#pragma clang diagnostic pop
}