Title: [160277] trunk/Source/WebKit2
Revision
160277
Author
[email protected]
Date
2013-12-07 21:22:02 -0800 (Sat, 07 Dec 2013)

Log Message

[Cocoa] Make WKWebProcessPlugInBrowserContextController work with WKObject wrapping
https://bugs.webkit.org/show_bug.cgi?id=125403

Reviewed by Dan Bernstein.

* Shared/Cocoa/APIObject.mm:
(API::Object::newObject):
* Shared/mac/ObjCObjectGraphCoders.mm:
(WebKit::InjectedBundleObjCObjectGraphDecoderImpl::decode):
* WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
(didCreatePage):
(willDestroyPage):
(setUpBundleClient):
(-[WKWebProcessPlugInController _initWithPrincipalClassInstance:bundle:]):
* WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
(-[WKWebProcessPlugInBrowserContextController dealloc]):
(-[WKWebProcessPlugInBrowserContextController mainFrameDocument]):
(-[WKWebProcessPlugInBrowserContextController selectedRange]):
(-[WKWebProcessPlugInBrowserContextController API::]):
(-[WKWebProcessPlugInBrowserContextController _bundlePageRef]):
(-[WKWebProcessPlugInBrowserContextController handle]):
(+[WKWebProcessPlugInBrowserContextController lookUpBrowsingContextFromHandle:]):
* WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h:
(WebKit::wrapper):
* WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:
* WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
(WebKit::InjectedBundle::load):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (160276 => 160277)


--- trunk/Source/WebKit2/ChangeLog	2013-12-08 03:00:44 UTC (rev 160276)
+++ trunk/Source/WebKit2/ChangeLog	2013-12-08 05:22:02 UTC (rev 160277)
@@ -1,3 +1,33 @@
+2013-12-07  Sam Weinig  <[email protected]>
+
+        [Cocoa] Make WKWebProcessPlugInBrowserContextController work with WKObject wrapping
+        https://bugs.webkit.org/show_bug.cgi?id=125403
+
+        Reviewed by Dan Bernstein.
+
+        * Shared/Cocoa/APIObject.mm:
+        (API::Object::newObject):
+        * Shared/mac/ObjCObjectGraphCoders.mm:
+        (WebKit::InjectedBundleObjCObjectGraphDecoderImpl::decode):
+        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
+        (didCreatePage):
+        (willDestroyPage):
+        (setUpBundleClient):
+        (-[WKWebProcessPlugInController _initWithPrincipalClassInstance:bundle:]):
+        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
+        (-[WKWebProcessPlugInBrowserContextController dealloc]):
+        (-[WKWebProcessPlugInBrowserContextController mainFrameDocument]):
+        (-[WKWebProcessPlugInBrowserContextController selectedRange]):
+        (-[WKWebProcessPlugInBrowserContextController API::]):
+        (-[WKWebProcessPlugInBrowserContextController _bundlePageRef]):
+        (-[WKWebProcessPlugInBrowserContextController handle]):
+        (+[WKWebProcessPlugInBrowserContextController lookUpBrowsingContextFromHandle:]):
+        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h:
+        (WebKit::wrapper):
+        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:
+        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
+        (WebKit::InjectedBundle::load):
+
 2013-12-07  Gustavo Noronha Silva  <[email protected]>
 
         Fix API test expectation following 160220.

Modified: trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm (160276 => 160277)


--- trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm	2013-12-08 03:00:44 UTC (rev 160276)
+++ trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm	2013-12-08 05:22:02 UTC (rev 160277)
@@ -32,8 +32,8 @@
 #import "WKBackForwardListItemInternal.h"
 #import "WKBrowsingContextControllerInternal.h"
 #import "WKBrowsingContextGroupInternal.h"
+#import "WKConnectionInternal.h"
 #import "WKNSArray.h"
-#import "WKConnectionInternal.h"
 #import "WKNSDictionary.h"
 #import "WKNSError.h"
 #import "WKNSString.h"
@@ -42,6 +42,7 @@
 #import "WKNSURLProtectionSpace.h"
 #import "WKNavigationDataInternal.h"
 #import "WKProcessGroupInternal.h"
+#import "WKWebProcessPlugInBrowserContextControllerInternal.h"
 
 namespace API {
 
@@ -80,6 +81,10 @@
         wrapper = [WKBackForwardListItem alloc];
         break;
 
+    case Type::BundlePage:
+        wrapper = [WKWebProcessPlugInBrowserContextController alloc];
+        break;
+
     case Type::Connection:
         wrapper = NSAllocateObject([WKConnection self], size, nullptr);
         break;

Modified: trunk/Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm (160276 => 160277)


--- trunk/Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm	2013-12-08 03:00:44 UTC (rev 160276)
+++ trunk/Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm	2013-12-08 05:22:02 UTC (rev 160277)
@@ -464,7 +464,7 @@
             if (!webPage)
                 coder.m_root = [NSNull null];
             else 
-                coder.m_root = [[WKWebProcessPlugInController _shared] _browserContextControllerForBundlePageRef:toAPI(webPage)];
+                coder.m_root = wrapper(*webPage);
             break;
         }
         case WKTypeRefWrapperType: {

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm (160276 => 160277)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm	2013-12-08 03:00:44 UTC (rev 160276)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm	2013-12-08 05:22:02 UTC (rev 160277)
@@ -38,12 +38,9 @@
 
 using namespace WebKit;
 
-typedef HashMap<WKBundlePageRef, RetainPtr<WKWebProcessPlugInBrowserContextController *>> BundlePageWrapperCache;
-
 @interface WKWebProcessPlugInController () {
     RetainPtr<id <WKWebProcessPlugIn>> _principalClassInstance;
     RefPtr<InjectedBundle> _bundle;
-    BundlePageWrapperCache _bundlePageWrapperCache;
     RetainPtr<WKConnection *> _connectionWrapper;
 }
 @end
@@ -55,14 +52,8 @@
     WKWebProcessPlugInController *plugInController = (WKWebProcessPlugInController *)clientInfo;
     id<WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get();
 
-    if ([principalClassInstance respondsToSelector:@selector(webProcessPlugIn:didCreateBrowserContextController:)]) {
-        ASSERT(!plugInController->_bundlePageWrapperCache.contains(page));
-
-        WKWebProcessPlugInBrowserContextController* browserContextController = [[WKWebProcessPlugInBrowserContextController alloc] _initWithBundlePageRef:page];
-        plugInController->_bundlePageWrapperCache.set(page, browserContextController);
-
-        [principalClassInstance webProcessPlugIn:plugInController didCreateBrowserContextController:browserContextController];
-    }
+    if ([principalClassInstance respondsToSelector:@selector(webProcessPlugIn:didCreateBrowserContextController:)])
+        [principalClassInstance webProcessPlugIn:plugInController didCreateBrowserContextController:wrapper(*toImpl(page))];
 }
 
 static void willDestroyPage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo)
@@ -70,21 +61,11 @@
     WKWebProcessPlugInController *plugInController = (WKWebProcessPlugInController *)clientInfo;
     id<WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get();
 
-    // If we never added the bundle page to the cache, which can happen if webProcessPlugIn:didCreateBrowserContextController: is not implemented,
-    // there is no reason to call webProcessPlugIn:willDestroyBrowserContextController:, so don't.
-    BundlePageWrapperCache::iterator it = plugInController->_bundlePageWrapperCache.find(page);
-    if (it == plugInController->_bundlePageWrapperCache.end()) {
-        ASSERT(![principalClassInstance respondsToSelector:@selector(webProcessPlugIn:didCreateBrowserContextController:)]);
-        return;
-    }
-
     if ([principalClassInstance respondsToSelector:@selector(webProcessPlugIn:willDestroyBrowserContextController:)])
-        [principalClassInstance webProcessPlugIn:plugInController willDestroyBrowserContextController:it->value.get()];
-
-    plugInController->_bundlePageWrapperCache.remove(it);
+        [principalClassInstance webProcessPlugIn:plugInController willDestroyBrowserContextController:wrapper(*toImpl(page))];
 }
 
-static void setUpBundleClient(WKWebProcessPlugInController *plugInController, WKBundleRef bundleRef)
+static void setUpBundleClient(WKWebProcessPlugInController *plugInController, InjectedBundle& bundle)
 {
     WKBundleClientV1 bundleClient;
     memset(&bundleClient, 0, sizeof(bundleClient));
@@ -94,7 +75,7 @@
     bundleClient.didCreatePage = didCreatePage;
     bundleClient.willDestroyPage = willDestroyPage;
 
-    WKBundleSetClient(bundleRef, &bundleClient.base);
+    bundle.initializeClient(&bundleClient.base);
 }
 
 static WKWebProcessPlugInController *sharedInstance;
@@ -105,29 +86,23 @@
     return sharedInstance;
 }
 
-- (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundleRef:(WKBundleRef)bundleRef
+- (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundle:(InjectedBundle&)bundle
 {
     self = [super init];
     if (!self)
         return nil;
 
     _principalClassInstance = principalClassInstance;
-    _bundle = toImpl(bundleRef);
+    _bundle = &bundle;
 
     ASSERT_WITH_MESSAGE(!sharedInstance, "WKWebProcessPlugInController initialized multiple times.");
     sharedInstance = self;
 
-    setUpBundleClient(self, bundleRef);
+    setUpBundleClient(self, *_bundle);
 
     return self;
 }
 
-- (WKWebProcessPlugInBrowserContextController *)_browserContextControllerForBundlePageRef:(WKBundlePageRef)pageRef
-{
-    ASSERT(_bundlePageWrapperCache.contains(pageRef));
-    return _bundlePageWrapperCache.get(pageRef).get();
-}
-
 - (WKConnection *)connection
 {
     return wrapper(*_bundle->webConnectionToUIProcess());

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm (160276 => 160277)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm	2013-12-08 03:00:44 UTC (rev 160276)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm	2013-12-08 05:22:02 UTC (rev 160277)
@@ -44,23 +44,19 @@
 using namespace WebKit;
 
 @implementation WKWebProcessPlugInBrowserContextController {
-    WKRetainPtr<WKBundlePageRef> _bundlePageRef;
+    API::ObjectStorage<WebPage> _page;
 }
 
-- (id)_initWithBundlePageRef:(WKBundlePageRef)bundlePageRef
+- (void)dealloc
 {
-    self = [super init];
-    if (!self)
-        return nil;
+    _page->~WebPage();
 
-    _bundlePageRef = bundlePageRef;
-
-    return self;
+    [super dealloc];
 }
 
 - (WKDOMDocument *)mainFrameDocument
 {
-    WebCore::Frame* webCoreMainFrame = toImpl(_bundlePageRef.get())->mainFrame();
+    Frame* webCoreMainFrame = _page->mainFrame();
     if (!webCoreMainFrame)
         return nil;
 
@@ -69,25 +65,32 @@
 
 - (WKDOMRange *)selectedRange
 {
-    RefPtr<WebCore::Range> range = toImpl(_bundlePageRef.get())->currentSelectionAsRange();
+    RefPtr<Range> range = _page->currentSelectionAsRange();
     if (!range)
         return nil;
 
     return toWKDOMRange(range.get());
 }
 
+#pragma mark WKObject protocol implementation
+
+- (API::Object&)_apiObject
+{
+    return *_page;
+}
+
 @end
 
 @implementation WKWebProcessPlugInBrowserContextController (Private)
 
 - (WKBundlePageRef)_bundlePageRef
 {
-    return _bundlePageRef.get();
+    return toAPI(_page.get());
 }
 
 - (WKBrowsingContextHandle *)handle
 {
-    return [[[WKBrowsingContextHandle alloc] _initWithPageID:toImpl(_bundlePageRef.get())->pageID()] autorelease];
+    return [[[WKBrowsingContextHandle alloc] _initWithPageID:_page->pageID()] autorelease];
 }
 
 + (instancetype)lookUpBrowsingContextFromHandle:(WKBrowsingContextHandle *)handle
@@ -96,7 +99,7 @@
     if (!webPage)
         return nil;
 
-    return [[WKWebProcessPlugInController _shared] _browserContextControllerForBundlePageRef:toAPI(webPage)];
+    return wrapper(*webPage);
 }
 
 @end

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h (160276 => 160277)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h	2013-12-08 03:00:44 UTC (rev 160276)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h	2013-12-08 05:22:02 UTC (rev 160277)
@@ -24,14 +24,23 @@
  */
 
 #import "WKWebProcessPlugInBrowserContextControllerPrivate.h"
-#import "WKBase.h"
 
 #if WK_API_ENABLED
 
-@interface WKWebProcessPlugInBrowserContextController ()
+#import "WKObject.h"
+#import "WebPage.h"
 
-- (id)_initWithBundlePageRef:(WKBundlePageRef)bundlePageRef;
+namespace WebKit {
 
+inline WKWebProcessPlugInBrowserContextController *wrapper(WebPage& page)
+{
+    ASSERT([page.wrapper() isKindOfClass:[WKWebProcessPlugInBrowserContextController class]]);
+    return (WKWebProcessPlugInBrowserContextController *)page.wrapper();
+}
+
+}
+
+@interface WKWebProcessPlugInBrowserContextController () <WKObject>
 @end
 
 #endif // WK_API_ENABLED

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h (160276 => 160277)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h	2013-12-08 03:00:44 UTC (rev 160276)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h	2013-12-08 05:22:02 UTC (rev 160277)
@@ -27,13 +27,13 @@
 
 #if WK_API_ENABLED
 
+#import "InjectedBundle.h"
+
 @interface WKWebProcessPlugInController ()
 
 + (WKWebProcessPlugInController *)_shared;
-- (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundleRef:(WKBundleRef)bundleRef;
+- (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundle:(WebKit::InjectedBundle&)bundle;
 
-- (WKWebProcessPlugInBrowserContextController *)_browserContextControllerForBundlePageRef:(WKBundlePageRef)pageRef;
-
 @end
 
 #endif // WK_API_ENABLED

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


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm	2013-12-08 03:00:44 UTC (rev 160276)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm	2013-12-08 05:22:02 UTC (rev 160277)
@@ -105,7 +105,7 @@
     }
 
     // Create the shared WKWebProcessPlugInController.
-    [[WKWebProcessPlugInController alloc] _initWithPrincipalClassInstance:instance bundleRef:toAPI(this)];
+    [[WKWebProcessPlugInController alloc] _initWithPrincipalClassInstance:instance bundle:*this];
 
     if ([instance respondsToSelector:@selector(webProcessPlugIn:initializeWithObject:)]) {
         RetainPtr<id> objCInitializationUserData;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to