Changeset 160277 in webkit
- Timestamp:
- Dec 7, 2013 9:22:02 PM (10 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r160270 r160277 1 2013-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 1 31 2013-12-07 Gustavo Noronha Silva <gns@gnome.org> 2 32 -
trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm
r160245 r160277 33 33 #import "WKBrowsingContextControllerInternal.h" 34 34 #import "WKBrowsingContextGroupInternal.h" 35 #import "WKConnectionInternal.h" 35 36 #import "WKNSArray.h" 36 #import "WKConnectionInternal.h"37 37 #import "WKNSDictionary.h" 38 38 #import "WKNSError.h" … … 43 43 #import "WKNavigationDataInternal.h" 44 44 #import "WKProcessGroupInternal.h" 45 #import "WKWebProcessPlugInBrowserContextControllerInternal.h" 45 46 46 47 namespace API { … … 79 80 case Type::BackForwardListItem: 80 81 wrapper = [WKBackForwardListItem alloc]; 82 break; 83 84 case Type::BundlePage: 85 wrapper = [WKWebProcessPlugInBrowserContextController alloc]; 81 86 break; 82 87 -
trunk/Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm
r159908 r160277 465 465 coder.m_root = [NSNull null]; 466 466 else 467 coder.m_root = [[WKWebProcessPlugInController _shared] _browserContextControllerForBundlePageRef:toAPI(webPage)];467 coder.m_root = wrapper(*webPage); 468 468 break; 469 469 } -
trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm
r160148 r160277 39 39 using namespace WebKit; 40 40 41 typedef HashMap<WKBundlePageRef, RetainPtr<WKWebProcessPlugInBrowserContextController *>> BundlePageWrapperCache;42 43 41 @interface WKWebProcessPlugInController () { 44 42 RetainPtr<id <WKWebProcessPlugIn>> _principalClassInstance; 45 43 RefPtr<InjectedBundle> _bundle; 46 BundlePageWrapperCache _bundlePageWrapperCache;47 44 RetainPtr<WKConnection *> _connectionWrapper; 48 45 } … … 56 53 id<WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get(); 57 54 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))]; 66 57 } 67 58 … … 71 62 id<WKWebProcessPlugIn> principalClassInstance = plugInController->_principalClassInstance.get(); 72 63 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 81 64 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))]; 85 66 } 86 67 87 static void setUpBundleClient(WKWebProcessPlugInController *plugInController, WKBundleRef bundleRef)68 static void setUpBundleClient(WKWebProcessPlugInController *plugInController, InjectedBundle& bundle) 88 69 { 89 70 WKBundleClientV1 bundleClient; … … 95 76 bundleClient.willDestroyPage = willDestroyPage; 96 77 97 WKBundleSetClient(bundleRef,&bundleClient.base);78 bundle.initializeClient(&bundleClient.base); 98 79 } 99 80 … … 106 87 } 107 88 108 - (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundle Ref:(WKBundleRef)bundleRef89 - (id)_initWithPrincipalClassInstance:(id<WKWebProcessPlugIn>)principalClassInstance bundle:(InjectedBundle&)bundle 109 90 { 110 91 self = [super init]; … … 113 94 114 95 _principalClassInstance = principalClassInstance; 115 _bundle = toImpl(bundleRef);96 _bundle = &bundle; 116 97 117 98 ASSERT_WITH_MESSAGE(!sharedInstance, "WKWebProcessPlugInController initialized multiple times."); 118 99 sharedInstance = self; 119 100 120 setUpBundleClient(self, bundleRef);101 setUpBundleClient(self, *_bundle); 121 102 122 103 return self; 123 }124 125 - (WKWebProcessPlugInBrowserContextController *)_browserContextControllerForBundlePageRef:(WKBundlePageRef)pageRef126 {127 ASSERT(_bundlePageWrapperCache.contains(pageRef));128 return _bundlePageWrapperCache.get(pageRef).get();129 104 } 130 105 -
trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm
r159760 r160277 45 45 46 46 @implementation WKWebProcessPlugInBrowserContextController { 47 WKRetainPtr<WKBundlePageRef> _bundlePageRef;47 API::ObjectStorage<WebPage> _page; 48 48 } 49 49 50 - ( id)_initWithBundlePageRef:(WKBundlePageRef)bundlePageRef50 - (void)dealloc 51 51 { 52 self = [super init]; 53 if (!self) 54 return nil; 52 _page->~WebPage(); 55 53 56 _bundlePageRef = bundlePageRef; 57 58 return self; 54 [super dealloc]; 59 55 } 60 56 61 57 - (WKDOMDocument *)mainFrameDocument 62 58 { 63 WebCore::Frame* webCoreMainFrame = toImpl(_bundlePageRef.get())->mainFrame();59 Frame* webCoreMainFrame = _page->mainFrame(); 64 60 if (!webCoreMainFrame) 65 61 return nil; … … 70 66 - (WKDOMRange *)selectedRange 71 67 { 72 RefPtr< WebCore::Range> range = toImpl(_bundlePageRef.get())->currentSelectionAsRange();68 RefPtr<Range> range = _page->currentSelectionAsRange(); 73 69 if (!range) 74 70 return nil; 75 71 76 72 return toWKDOMRange(range.get()); 73 } 74 75 #pragma mark WKObject protocol implementation 76 77 - (API::Object&)_apiObject 78 { 79 return *_page; 77 80 } 78 81 … … 83 86 - (WKBundlePageRef)_bundlePageRef 84 87 { 85 return _bundlePageRef.get();88 return toAPI(_page.get()); 86 89 } 87 90 88 91 - (WKBrowsingContextHandle *)handle 89 92 { 90 return [[[WKBrowsingContextHandle alloc] _initWithPageID: toImpl(_bundlePageRef.get())->pageID()] autorelease];93 return [[[WKBrowsingContextHandle alloc] _initWithPageID:_page->pageID()] autorelease]; 91 94 } 92 95 … … 97 100 return nil; 98 101 99 return [[WKWebProcessPlugInController _shared] _browserContextControllerForBundlePageRef:toAPI(webPage)];102 return wrapper(*webPage); 100 103 } 101 104 -
trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h
r158939 r160277 25 25 26 26 #import "WKWebProcessPlugInBrowserContextControllerPrivate.h" 27 #import "WKBase.h"28 27 29 28 #if WK_API_ENABLED 30 29 31 @interface WKWebProcessPlugInBrowserContextController () 30 #import "WKObject.h" 31 #import "WebPage.h" 32 32 33 - (id)_initWithBundlePageRef:(WKBundlePageRef)bundlePageRef; 33 namespace WebKit { 34 34 35 inline 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> 35 44 @end 36 45 -
trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h
r159775 r160277 28 28 #if WK_API_ENABLED 29 29 30 #import "InjectedBundle.h" 31 30 32 @interface WKWebProcessPlugInController () 31 33 32 34 + (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; 36 36 37 37 @end -
trunk/Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm
r159197 r160277 106 106 107 107 // Create the shared WKWebProcessPlugInController. 108 [[WKWebProcessPlugInController alloc] _initWithPrincipalClassInstance:instance bundle Ref:toAPI(this)];108 [[WKWebProcessPlugInController alloc] _initWithPrincipalClassInstance:instance bundle:*this]; 109 109 110 110 if ([instance respondsToSelector:@selector(webProcessPlugIn:initializeWithObject:)]) {
Note: See TracChangeset
for help on using the changeset viewer.