Changeset 160277 in webkit


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

Location:
trunk/Source/WebKit2
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r160270 r160277  
     12013-12-07  Sam Weinig  <sam@webkit.org>
     2
     3        [Cocoa] Make WKWebProcessPlugInBrowserContextController work with WKObject wrapping
     4        https://bugs.webkit.org/show_bug.cgi?id=125403
     5
     6        Reviewed by Dan Bernstein.
     7
     8        * Shared/Cocoa/APIObject.mm:
     9        (API::Object::newObject):
     10        * Shared/mac/ObjCObjectGraphCoders.mm:
     11        (WebKit::InjectedBundleObjCObjectGraphDecoderImpl::decode):
     12        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
     13        (didCreatePage):
     14        (willDestroyPage):
     15        (setUpBundleClient):
     16        (-[WKWebProcessPlugInController _initWithPrincipalClassInstance:bundle:]):
     17        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
     18        (-[WKWebProcessPlugInBrowserContextController dealloc]):
     19        (-[WKWebProcessPlugInBrowserContextController mainFrameDocument]):
     20        (-[WKWebProcessPlugInBrowserContextController selectedRange]):
     21        (-[WKWebProcessPlugInBrowserContextController API::]):
     22        (-[WKWebProcessPlugInBrowserContextController _bundlePageRef]):
     23        (-[WKWebProcessPlugInBrowserContextController handle]):
     24        (+[WKWebProcessPlugInBrowserContextController lookUpBrowsingContextFromHandle:]):
     25        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h:
     26        (WebKit::wrapper):
     27        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:
     28        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
     29        (WebKit::InjectedBundle::load):
     30
    1312013-12-07  Gustavo Noronha Silva  <gns@gnome.org>
    232
  • trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm

    r160245 r160277  
    3333#import "WKBrowsingContextControllerInternal.h"
    3434#import "WKBrowsingContextGroupInternal.h"
     35#import "WKConnectionInternal.h"
    3536#import "WKNSArray.h"
    36 #import "WKConnectionInternal.h"
    3737#import "WKNSDictionary.h"
    3838#import "WKNSError.h"
     
    4343#import "WKNavigationDataInternal.h"
    4444#import "WKProcessGroupInternal.h"
     45#import "WKWebProcessPlugInBrowserContextControllerInternal.h"
    4546
    4647namespace API {
     
    7980    case Type::BackForwardListItem:
    8081        wrapper = [WKBackForwardListItem alloc];
     82        break;
     83
     84    case Type::BundlePage:
     85        wrapper = [WKWebProcessPlugInBrowserContextController alloc];
    8186        break;
    8287
  • trunk/Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm

    r159908 r160277  
    465465                coder.m_root = [NSNull null];
    466466            else
    467                 coder.m_root = [[WKWebProcessPlugInController _shared] _browserContextControllerForBundlePageRef:toAPI(webPage)];
     467                coder.m_root = wrapper(*webPage);
    468468            break;
    469469        }
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm

    r160148 r160277  
    3939using namespace WebKit;
    4040
    41 typedef HashMap<WKBundlePageRef, RetainPtr<WKWebProcessPlugInBrowserContextController *>> BundlePageWrapperCache;
    42 
    4341@interface WKWebProcessPlugInController () {
    4442    RetainPtr<id <WKWebProcessPlugIn>> _principalClassInstance;
    4543    RefPtr<InjectedBundle> _bundle;
    46     BundlePageWrapperCache _bundlePageWrapperCache;
    4744    RetainPtr<WKConnection *> _connectionWrapper;
    4845}
     
    5653    id<WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get();
    5754
    58     if ([principalClassInstance respondsToSelector:@selector(webProcessPlugIn:didCreateBrowserContextController:)]) {
    59         ASSERT(!plugInController->_bundlePageWrapperCache.contains(page));
    60 
    61         WKWebProcessPlugInBrowserContextController* browserContextController = [[WKWebProcessPlugInBrowserContextController alloc] _initWithBundlePageRef:page];
    62         plugInController->_bundlePageWrapperCache.set(page, browserContextController);
    63 
    64         [principalClassInstance webProcessPlugIn:plugInController didCreateBrowserContextController:browserContextController];
    65     }
     55    if ([principalClassInstance respondsToSelector:@selector(webProcessPlugIn:didCreateBrowserContextController:)])
     56        [principalClassInstance webProcessPlugIn:plugInController didCreateBrowserContextController:wrapper(*toImpl(page))];
    6657}
    6758
     
    7162    id<WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get();
    7263
    73     // If we never added the bundle page to the cache, which can happen if webProcessPlugIn:didCreateBrowserContextController: is not implemented,
    74     // there is no reason to call webProcessPlugIn:willDestroyBrowserContextController:, so don't.
    75     BundlePageWrapperCache::iterator it = plugInController->_bundlePageWrapperCache.find(page);
    76     if (it == plugInController->_bundlePageWrapperCache.end()) {
    77         ASSERT(![principalClassInstance respondsToSelector:@selector(webProcessPlugIn:didCreateBrowserContextController:)]);
    78         return;
    79     }
    80 
    8164    if ([principalClassInstance respondsToSelector:@selector(webProcessPlugIn:willDestroyBrowserContextController:)])
    82         [principalClassInstance webProcessPlugIn:plugInController willDestroyBrowserContextController:it->value.get()];
    83 
    84     plugInController->_bundlePageWrapperCache.remove(it);
     65        [principalClassInstance webProcessPlugIn:plugInController willDestroyBrowserContextController:wrapper(*toImpl(page))];
    8566}
    8667
    87 static void setUpBundleClient(WKWebProcessPlugInController *plugInController, WKBundleRef bundleRef)
     68static void setUpBundleClient(WKWebProcessPlugInController *plugInController, InjectedBundle& bundle)
    8869{
    8970    WKBundleClientV1 bundleClient;
     
    9576    bundleClient.willDestroyPage = willDestroyPage;
    9677
    97     WKBundleSetClient(bundleRef, &bundleClient.base);
     78    bundle.initializeClient(&bundleClient.base);
    9879}
    9980
     
    10687}
    10788
    108 - (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundleRef:(WKBundleRef)bundleRef
     89- (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundle:(InjectedBundle&)bundle
    10990{
    11091    self = [super init];
     
    11394
    11495    _principalClassInstance = principalClassInstance;
    115     _bundle = toImpl(bundleRef);
     96    _bundle = &bundle;
    11697
    11798    ASSERT_WITH_MESSAGE(!sharedInstance, "WKWebProcessPlugInController initialized multiple times.");
    11899    sharedInstance = self;
    119100
    120     setUpBundleClient(self, bundleRef);
     101    setUpBundleClient(self, *_bundle);
    121102
    122103    return self;
    123 }
    124 
    125 - (WKWebProcessPlugInBrowserContextController *)_browserContextControllerForBundlePageRef:(WKBundlePageRef)pageRef
    126 {
    127     ASSERT(_bundlePageWrapperCache.contains(pageRef));
    128     return _bundlePageWrapperCache.get(pageRef).get();
    129104}
    130105
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm

    r159760 r160277  
    4545
    4646@implementation WKWebProcessPlugInBrowserContextController {
    47     WKRetainPtr<WKBundlePageRef> _bundlePageRef;
     47    API::ObjectStorage<WebPage> _page;
    4848}
    4949
    50 - (id)_initWithBundlePageRef:(WKBundlePageRef)bundlePageRef
     50- (void)dealloc
    5151{
    52     self = [super init];
    53     if (!self)
    54         return nil;
     52    _page->~WebPage();
    5553
    56     _bundlePageRef = bundlePageRef;
    57 
    58     return self;
     54    [super dealloc];
    5955}
    6056
    6157- (WKDOMDocument *)mainFrameDocument
    6258{
    63     WebCore::Frame* webCoreMainFrame = toImpl(_bundlePageRef.get())->mainFrame();
     59    Frame* webCoreMainFrame = _page->mainFrame();
    6460    if (!webCoreMainFrame)
    6561        return nil;
     
    7066- (WKDOMRange *)selectedRange
    7167{
    72     RefPtr<WebCore::Range> range = toImpl(_bundlePageRef.get())->currentSelectionAsRange();
     68    RefPtr<Range> range = _page->currentSelectionAsRange();
    7369    if (!range)
    7470        return nil;
    7571
    7672    return toWKDOMRange(range.get());
     73}
     74
     75#pragma mark WKObject protocol implementation
     76
     77- (API::Object&)_apiObject
     78{
     79    return *_page;
    7780}
    7881
     
    8386- (WKBundlePageRef)_bundlePageRef
    8487{
    85     return _bundlePageRef.get();
     88    return toAPI(_page.get());
    8689}
    8790
    8891- (WKBrowsingContextHandle *)handle
    8992{
    90     return [[[WKBrowsingContextHandle alloc] _initWithPageID:toImpl(_bundlePageRef.get())->pageID()] autorelease];
     93    return [[[WKBrowsingContextHandle alloc] _initWithPageID:_page->pageID()] autorelease];
    9194}
    9295
     
    97100        return nil;
    98101
    99     return [[WKWebProcessPlugInController _shared] _browserContextControllerForBundlePageRef:toAPI(webPage)];
     102    return wrapper(*webPage);
    100103}
    101104
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h

    r158939 r160277  
    2525
    2626#import "WKWebProcessPlugInBrowserContextControllerPrivate.h"
    27 #import "WKBase.h"
    2827
    2928#if WK_API_ENABLED
    3029
    31 @interface WKWebProcessPlugInBrowserContextController ()
     30#import "WKObject.h"
     31#import "WebPage.h"
    3232
    33 - (id)_initWithBundlePageRef:(WKBundlePageRef)bundlePageRef;
     33namespace WebKit {
    3434
     35inline WKWebProcessPlugInBrowserContextController *wrapper(WebPage& page)
     36{
     37    ASSERT([page.wrapper() isKindOfClass:[WKWebProcessPlugInBrowserContextController class]]);
     38    return (WKWebProcessPlugInBrowserContextController *)page.wrapper();
     39}
     40
     41}
     42
     43@interface WKWebProcessPlugInBrowserContextController () <WKObject>
    3544@end
    3645
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h

    r159775 r160277  
    2828#if WK_API_ENABLED
    2929
     30#import "InjectedBundle.h"
     31
    3032@interface WKWebProcessPlugInController ()
    3133
    3234+ (WKWebProcessPlugInController *)_shared;
    33 - (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundleRef:(WKBundleRef)bundleRef;
    34 
    35 - (WKWebProcessPlugInBrowserContextController *)_browserContextControllerForBundlePageRef:(WKBundlePageRef)pageRef;
     35- (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundle:(WebKit::InjectedBundle&)bundle;
    3636
    3737@end
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm

    r159197 r160277  
    106106
    107107    // Create the shared WKWebProcessPlugInController.
    108     [[WKWebProcessPlugInController alloc] _initWithPrincipalClassInstance:instance bundleRef:toAPI(this)];
     108    [[WKWebProcessPlugInController alloc] _initWithPrincipalClassInstance:instance bundle:*this];
    109109
    110110    if ([instance respondsToSelector:@selector(webProcessPlugIn:initializeWithObject:)]) {
Note: See TracChangeset for help on using the changeset viewer.