+2006-10-21 Darin Adler <darin@apple.com>
+
+ Reviewed by Anders.
+
+ - fix http://bugs.webkit.org/show_bug.cgi?id=10328
+ REGRESSION: frame leak reported by buildbot
+
+ * WebCoreSupport/WebEditorClient.mm:
+ (WebEditorClient::WebEditorClient): Don't retain the web view.
+ (WebEditorClient::~WebEditorClient): Don't release the web view.
+ (WebEditorClient::setWebView): Ditto.
+
+ * WebCoreSupport/WebFrameBridge.m:
+ (-[WebFrameBridge finishInitializingWithFrameName:view:]): Added. Common code for use by both
+ init methods below.
+ (-[WebFrameBridge initMainFrameWithPage:frameName:view:]): Changed to use new method.
+ Also added comment pointing out design flaw -- we attach the client to the web view here,
+ but we need to be sure to detach in case the web view is deallocated first.
+ (-[WebFrameBridge initSubframeWithOwnerElement:frameName:view:]): Ditto.
+
2006-10-21 Darin Adler <darin@apple.com>
Reviewed by Adam.
#import <WebCore/WebLoader.h>
#import <WebCore/WebSubresourceLoader.h>
#import <WebKitSystemInterface.h>
+#import <wtf/RefPtr.h>
// For compatibility only with old SPI.
@interface NSObject (OldWebPlugin)
return [(WebPageBridge *)[self page] webView];
}
-- (id)initMainFrameWithPage:(WebPageBridge *)page frameName:(NSString *)name view:(WebFrameView *)view
+- (void)finishInitializingWithFrameName:(NSString *)name view:(WebFrameView *)view
{
- self = [super initMainFrameWithPage:page withEditorClient:new WebEditorClient([page webView])];
- _frame = [[WebFrame alloc] _initWithWebFrameView:view webView:[self webView] bridge:self];
+ WebView *webView = [self webView];
+ _frame = [[WebFrame alloc] _initWithWebFrameView:view webView:webView bridge:self];
++WebBridgeCount;
[self setName:name];
- [self initializeSettings:[[self webView] _settings]];
- [self setTextSizeMultiplier:[[self webView] textSizeMultiplier]];
+ [self initializeSettings:[webView _settings]];
+ [self setTextSizeMultiplier:[webView textSizeMultiplier]];
+}
+- (id)initMainFrameWithPage:(WebPageBridge *)page frameName:(NSString *)name view:(WebFrameView *)view
+{
+ // FIXME: Need to clear the WebView pointer in WebEditorClient when the WebView is deallocated.
+ self = [super initMainFrameWithPage:page withEditorClient:new WebEditorClient([page webView])];
+ [self finishInitializingWithFrameName:name view:view];
return self;
}
- (id)initSubframeWithOwnerElement:(WebCoreElement *)ownerElement frameName:(NSString *)name view:(WebFrameView *)view
{
- WebEditorClient* editorClient = new WebEditorClient();
- self = [super initSubframeWithOwnerElement:ownerElement withEditorClient:editorClient];
- _frame = [[WebFrame alloc] _initWithWebFrameView:view webView:[self webView] bridge:self];
+ RefPtr<WebEditorClient> editorClient = new WebEditorClient;
+ self = [super initSubframeWithOwnerElement:ownerElement withEditorClient:editorClient.get()];
+ // FIXME: Need to clear the WebView pointer in WebEditorClient when the WebView is deallocated.
editorClient->setWebView([self webView]);
- ++WebBridgeCount;
-
- [self setName:name];
- [self initializeSettings:[[self webView] _settings]];
- [self setTextSizeMultiplier:[[self webView] textSizeMultiplier]];
-
+ [self finishInitializingWithFrameName:name view:view];
return self;
}