Title: [160280] trunk/Source/WebKit2
Revision
160280
Author
wei...@apple.com
Date
2013-12-07 22:17:18 -0800 (Sat, 07 Dec 2013)

Log Message

[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):

Modified Paths

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
     }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to