Changeset 160280 in webkit


Ignore:
Timestamp:
Dec 7, 2013 10:17:18 PM (10 years ago)
Author:
weinig@apple.com
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):

Location:
trunk/Source/WebKit2
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r160278 r160280  
     12013-12-07  Sam Weinig  <sam@webkit.org>
     2
     3        [Cocoa] Make WKWebProcessPlugInController work with WKObject wrapping
     4        https://bugs.webkit.org/show_bug.cgi?id=125404
     5
     6        Reviewed by Dan Bernstein.
     7
     8        * Shared/Cocoa/APIObject.mm:
     9        (API::Object::newObject):
     10        * Shared/mac/ObjCObjectGraphCoders.mm:
     11        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
     12        (-[WKWebProcessPlugInController dealloc]):
     13        (didCreatePage):
     14        (willDestroyPage):
     15        (-[WKWebProcessPlugInController _setPrincipalClassInstance:]):
     16        (-[WKWebProcessPlugInController API::]):
     17        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:
     18        (WebKit::wrapper):
     19        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInPrivate.h:
     20        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
     21        (WebKit::InjectedBundle::load):
     22
    1232013-12-07  Dan Bernstein  <mitz@apple.com>
    224
     
    628        Reviewed by Sam Weinig.
    729
    8         Added WKNSData, an NSData subclass that confroms to WKObject and wraps a WebData.
     30        Added WKNSData, an NSData subclass that conforms to WKObject and wraps a WebData.
    931
    1032        * Shared/Cocoa/APIObject.mm:
  • trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm

    r160278 r160280  
    4545#import "WKProcessGroupInternal.h"
    4646#import "WKWebProcessPlugInBrowserContextControllerInternal.h"
     47#import "WKWebProcessPlugInInternal.h"
    4748
    4849namespace API {
     
    8182    case Type::BackForwardListItem:
    8283        wrapper = [WKBackForwardListItem alloc];
     84        break;
     85
     86    case Type::Bundle:
     87        wrapper = [WKWebProcessPlugInController alloc];
    8388        break;
    8489
  • trunk/Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm

    r160277 r160280  
    4141#import "WKBundleAPICast.h"
    4242#import "WKWebProcessPlugInBrowserContextControllerInternal.h"
    43 #import "WKWebProcessPlugInBrowserContextControllerPrivate.h"
    4443#import "WKWebProcessPlugInInternal.h"
    4544#import "WebPage.h"
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm

    r160277 r160280  
    2929#if WK_API_ENABLED
    3030
    31 #import "InjectedBundle.h"
    3231#import "WKConnectionInternal.h"
    3332#import "WKBundle.h"
     
    4039
    4140@interface WKWebProcessPlugInController () {
     41    API::ObjectStorage<InjectedBundle> _bundle;
    4242    RetainPtr<id <WKWebProcessPlugIn>> _principalClassInstance;
    43     RefPtr<InjectedBundle> _bundle;
    44     RetainPtr<WKConnection *> _connectionWrapper;
    4543}
    4644@end
     
    4846@implementation WKWebProcessPlugInController
    4947
     48- (void)dealloc
     49{
     50    _bundle->~InjectedBundle();
     51
     52    [super dealloc];
     53}
     54
    5055static void didCreatePage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo)
    5156{
    5257    WKWebProcessPlugInController *plugInController = (WKWebProcessPlugInController *)clientInfo;
    53     id<WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get();
     58    id <WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get();
    5459
    5560    if ([principalClassInstance respondsToSelector:@selector(webProcessPlugIn:didCreateBrowserContextController:)])
     
    6065{
    6166    WKWebProcessPlugInController *plugInController = (WKWebProcessPlugInController *)clientInfo;
    62     id<WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get();
     67    id <WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get();
    6368
    6469    if ([principalClassInstance respondsToSelector:@selector(webProcessPlugIn:willDestroyBrowserContextController:)])
     
    7984}
    8085
    81 static WKWebProcessPlugInController *sharedInstance;
    82 
    83 + (WKWebProcessPlugInController *)_shared
     86- (void)_setPrincipalClassInstance:(id <WKWebProcessPlugIn>)principalClassInstance
    8487{
    85     ASSERT_WITH_MESSAGE(sharedInstance, "+[WKWebProcessPlugIn _shared] called without first initializing it.");
    86     return sharedInstance;
    87 }
    88 
    89 - (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundle:(InjectedBundle&)bundle
    90 {
    91     self = [super init];
    92     if (!self)
    93         return nil;
    94 
     88    ASSERT(!_principalClassInstance);
    9589    _principalClassInstance = principalClassInstance;
    96     _bundle = &bundle;
    97 
    98     ASSERT_WITH_MESSAGE(!sharedInstance, "WKWebProcessPlugInController initialized multiple times.");
    99     sharedInstance = self;
    10090
    10191    setUpBundleClient(self, *_bundle);
    102 
    103     return self;
    10492}
    10593
     
    10795{
    10896    return wrapper(*_bundle->webConnectionToUIProcess());
     97}
     98
     99#pragma mark WKObject protocol implementation
     100
     101- (API::Object&)_apiObject
     102{
     103    return *_bundle;
    109104}
    110105
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h

    r160277 r160280  
    2424 */
    2525
    26 #import "WKWebProcessPlugIn.h"
     26#import "WKWebProcessPlugInPrivate.h"
    2727
    2828#if WK_API_ENABLED
    2929
    3030#import "InjectedBundle.h"
     31#import "WKObject.h"
    3132
    32 @interface WKWebProcessPlugInController ()
     33namespace WebKit {
    3334
    34 + (WKWebProcessPlugInController *)_shared;
    35 - (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundle:(WebKit::InjectedBundle&)bundle;
     35inline WKWebProcessPlugInController *wrapper(InjectedBundle& bundle)
     36{
     37    ASSERT([bundle.wrapper() isKindOfClass:[WKWebProcessPlugInController class]]);
     38    return (WKWebProcessPlugInController *)bundle.wrapper();
     39}
    3640
     41}
     42
     43@interface WKWebProcessPlugInController () <WKObject>
     44- (void)_setPrincipalClassInstance:(id <WKWebProcessPlugIn>)principalClassInstance;
    3745@end
    3846
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInPrivate.h

    r157620 r160280  
    3030@interface WKWebProcessPlugInController (Private)
    3131
    32 @property(readonly) WKBundleRef _bundleRef;
     32@property (readonly) WKBundleRef _bundleRef;
    3333
    3434@end
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm

    r160277 r160280  
    9999    }
    100100
    101     id<WKWebProcessPlugIn> instance = (id<WKWebProcessPlugIn>)[[principalClass alloc] init];
     101    id <WKWebProcessPlugIn> instance = (id <WKWebProcessPlugIn>)[[principalClass alloc] init];
    102102    if (!instance) {
    103103        WTFLogAlways("InjectedBundle::load failed - Could not initialize an instance of the principal class.\n");
     
    105105    }
    106106
    107     // Create the shared WKWebProcessPlugInController.
    108     [[WKWebProcessPlugInController alloc] _initWithPrincipalClassInstance:instance bundle:*this];
     107    WKWebProcessPlugInController* plugInController = WebKit::wrapper(*this);
     108    [plugInController _setPrincipalClassInstance:instance];
    109109
    110110    if ([instance respondsToSelector:@selector(webProcessPlugIn:initializeWithObject:)]) {
     
    112112        if (initializationUserData && initializationUserData->type() == API::Object::Type::ObjCObjectGraph)
    113113            objCInitializationUserData = static_cast<ObjCObjectGraph*>(initializationUserData)->rootObject();
    114         [instance webProcessPlugIn:[WKWebProcessPlugInController _shared] initializeWithObject:objCInitializationUserData.get()];
     114        [instance webProcessPlugIn:plugInController initializeWithObject:objCInitializationUserData.get()];
    115115    } else if ([instance respondsToSelector:@selector(webProcessPlugInInitialize:)]) {
    116116#pragma clang diagnostic push
    117117#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    118         [instance webProcessPlugInInitialize:[WKWebProcessPlugInController _shared]];
     118        [instance webProcessPlugInInitialize:plugInController];
    119119#pragma clang diagnostic pop
    120120    }
Note: See TracChangeset for help on using the changeset viewer.