[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

darin darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 07:41:33 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit d5c0ca74a7c99145ab46199a9058466ce1aeb05d
Author: darin <darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sat May 10 07:59:14 2003 +0000

    WebKit:
    
            Reviewed by Maciej.
    
    	- fixed 3250119 -- REGRESSION: WebFrame leaked after showing pop-up menu
    
            The leak was caused by various code storing the "element" dictionary that describes where
            a click took place.
    
            * WebView.subproj/WebDefaultContextMenuDelegate.m:
            (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]):
            Don't store the element in a retained global. Instead attach it as the represented
            object to each menu item.
            (-[WebDefaultUIDelegate openNewWindowWithURL:element:]): Pass in an element.
            (-[WebDefaultUIDelegate downloadURL:element:]): Ditto.
            (-[WebDefaultUIDelegate openLinkInNewWindow:]): Get element from represented object.
            (-[WebDefaultUIDelegate downloadLinkToDisk:]): Ditto.
            (-[WebDefaultUIDelegate copyLinkToClipboard:]): Ditto.
            (-[WebDefaultUIDelegate openImageInNewWindow:]): Ditto.
            (-[WebDefaultUIDelegate downloadImageToDisk:]): Ditto.
            (-[WebDefaultUIDelegate copyImageToClipboard:]): Ditto.
            (-[WebDefaultUIDelegate openFrameInNewWindow:]): Ditto.
    
            * WebView.subproj/WebDefaultUIDelegate.h: Remove element field.
            * WebView.subproj/WebDefaultUIDelegate.m: (-[WebDefaultUIDelegate dealloc]): No need
            to release element any more.
    
            * WebView.subproj/WebHTMLViewPrivate.h: Remove dragElement instance variable.
            * WebView.subproj/WebHTMLViewPrivate.m:
            (-[WebHTMLViewPrivate dealloc]): No need to release dragElement any more.
            (-[WebHTMLView _handleMouseDragged:]): Get element again here. The old code used to
            get it from an instance variable, but that is unnecessary.
            (-[WebHTMLView _mayStartDragWithMouseDragged:]): Don't store the element.
    
    WebBrowser:
    
            Reviewed by Maciej.
    
    	- fixed 3250119 -- REGRESSION: WebFrame leaked after showing pop-up menu
    
            The leak was caused by various code storing the "element" dictionary that describes where
            a click took place.
    
            * BrowserWebController.h: Added windowController and browserWindow methods for convenience.
            Removed element instance variable. Keeping this dictionary around caused a leak of a WebFrame.
            * BrowserWebController.m:
            (-[BrowserWebView browserWindow]): Added.
            (-[BrowserWebView initWithDocument:request:frameName:]): Use browserWindow.
            (-[BrowserWebView dealloc]): Don't release element.
            (-[BrowserWebView webViewIsResizable:]): Use browserWindow.
            (-[BrowserWebView webViewFrame:]): Use browserWindow.
            (-[BrowserWebView webViewContentRect:]): Use browserWindow.
            (-[BrowserWebView webView:unableToImplementPolicyWithError:frame:]): Use browserWindow.
            (-[BrowserWebView openFileExternallyWithRequest:inFrame:]): Use browserWindow.
            (-[BrowserWebView revealInFinderWithRequest:inFrame:]): Use browserWindow.
            (-[BrowserWebView decidePolicyForAction:request:frame:newFrameName:decisionListener:]): Use browserWindow.
            (-[BrowserWebView setShouldStartEmpty]): Use browserWindow.
    
            * ContextMenuHandler.m:
            (-[NSMutableArray addMenuItemWithTag:fromArray:]): Moved method from BrowserWebView to
            NSMutableArray to simplify parameters.
            (-[NSMutableArray addMenuItemWithTitle:action:]): Ditto. Don't set target any more since
            we do that in a postprocessing pass.
            (-[BrowserWebView webView:contextMenuItemsForElement:defaultMenuItems:]): Don't store the
            element in a retained global. Instead attach it as the represented object to each menu item.
            Update for changed interface for adding menu items. Set targets and represented objects on
            all the menu items at the end.
            (-[BrowserWebView addLinkToBookmarks:]): Get element from represented object. Get window
            from browserWindow method instead of going the long way through the element.
            (-[BrowserWebView viewFrameSource:]): Get element from represented object.
            (-[BrowserWebView savePageAs:]): Get element from represented object. Use the _document instance
            variable instead of going the long way through the element.
            (-[BrowserWebView openWithITunes:]): Get element from represented object.
            (-[BrowserWebView openWithQuickTime:]): Get element from represented object.
            (-[BrowserWebView googleSearch:]): Get element from represented object. Get the window
            controller from the windowController method instead of going the long way through the element.
            (-[BrowserWebView goToAddress:]): Get element from represented object. Do the goToURL: on
            ourselves rather than going through the document (which will just forward the call to us anyway).
            (-[BrowserWebView openInNewTab:]): Get element from represented object.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@4343 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 568e119..ab263ba 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,37 @@
+2003-05-10  Darin Adler  <darin at apple.com>
+
+        Reviewed by Maciej.
+
+	- fixed 3250119 -- REGRESSION: WebFrame leaked after showing pop-up menu
+
+        The leak was caused by various code storing the "element" dictionary that describes where
+        a click took place.
+
+        * WebView.subproj/WebDefaultContextMenuDelegate.m:
+        (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]):
+        Don't store the element in a retained global. Instead attach it as the represented
+        object to each menu item.
+        (-[WebDefaultUIDelegate openNewWindowWithURL:element:]): Pass in an element.
+        (-[WebDefaultUIDelegate downloadURL:element:]): Ditto.
+        (-[WebDefaultUIDelegate openLinkInNewWindow:]): Get element from represented object.
+        (-[WebDefaultUIDelegate downloadLinkToDisk:]): Ditto.
+        (-[WebDefaultUIDelegate copyLinkToClipboard:]): Ditto.
+        (-[WebDefaultUIDelegate openImageInNewWindow:]): Ditto.
+        (-[WebDefaultUIDelegate downloadImageToDisk:]): Ditto.
+        (-[WebDefaultUIDelegate copyImageToClipboard:]): Ditto.
+        (-[WebDefaultUIDelegate openFrameInNewWindow:]): Ditto.
+
+        * WebView.subproj/WebDefaultUIDelegate.h: Remove element field.
+        * WebView.subproj/WebDefaultUIDelegate.m: (-[WebDefaultUIDelegate dealloc]): No need
+        to release element any more.
+
+        * WebView.subproj/WebHTMLViewPrivate.h: Remove dragElement instance variable.
+        * WebView.subproj/WebHTMLViewPrivate.m:
+        (-[WebHTMLViewPrivate dealloc]): No need to release dragElement any more. 
+        (-[WebHTMLView _handleMouseDragged:]): Get element again here. The old code used to
+        get it from an instance variable, but that is unnecessary.
+        (-[WebHTMLView _mayStartDragWithMouseDragged:]): Don't store the element.
+
 2003-05-09  Maciej Stachowiak  <mjs at apple.com>
 
         Reviewed by Darin.
diff --git a/WebKit/WebView.subproj/WebDefaultContextMenuDelegate.m b/WebKit/WebView.subproj/WebDefaultContextMenuDelegate.m
index 1eaa7cf..f4ef2db 100644
--- a/WebKit/WebView.subproj/WebDefaultContextMenuDelegate.m
+++ b/WebKit/WebView.subproj/WebDefaultContextMenuDelegate.m
@@ -75,27 +75,23 @@
     return [menuItem autorelease];
 }
 
-- (NSArray *)webView: (WebView *)wv contextMenuItemsForElement: (NSDictionary *)theElement  defaultMenuItems: (NSArray *)defaultMenuItems
+- (NSArray *)webView: (WebView *)wv contextMenuItemsForElement: (NSDictionary *)element  defaultMenuItems: (NSArray *)defaultMenuItems
 {
     NSMutableArray *menuItems = [NSMutableArray array];
-    NSURL *linkURL, *imageURL;
-    
-    [element release];
-    element = [theElement retain];
 
-    linkURL = [element objectForKey:WebElementLinkURLKey];
+    NSURL *linkURL = [element objectForKey:WebElementLinkURLKey];
 
     if (linkURL) {
-        if([NSURLConnection canHandleRequest:[NSURLRequest requestWithURL:linkURL]]){
+        if([NSURLConnection canHandleRequest:[NSURLRequest requestWithURL:linkURL]]) {
             [menuItems addObject:[self menuItemWithTag:WebMenuItemTagOpenLinkInNewWindow]];
             [menuItems addObject:[self menuItemWithTag:WebMenuItemTagDownloadLinkToDisk]];
             [menuItems addObject:[self menuItemWithTag:WebMenuItemTagCopyLinkToClipboard]];
         }
     }
 
-    imageURL = [element objectForKey:WebElementImageURLKey];
-    if(imageURL){
-        if(linkURL){
+    NSURL *imageURL = [element objectForKey:WebElementImageURLKey];
+    if (imageURL) {
+        if (linkURL) {
             [menuItems addObject:[NSMenuItem separatorItem]];
         }
         [menuItems addObject:[self menuItemWithTag:WebMenuItemTagOpenImageInNewWindow]];
@@ -109,16 +105,19 @@
         } else {        
             WebFrame *webFrame = [element objectForKey:WebElementFrameKey];
     
-            if(webFrame != [[webFrame webView] mainFrame]){
+            if (webFrame != [[webFrame webView] mainFrame]) {
                 [menuItems addObject:[self menuItemWithTag:WebMenuItemTagOpenFrameInNewWindow]];
             }
         }
     }
 
+    // Attach element as the represented object to each item.
+    [menuItems makeObjectsPerformSelector:@selector(setRepresentedObject:) withObject:element];
+
     return menuItems;
 }
 
-- (void)openNewWindowWithURL:(NSURL *)URL
+- (void)openNewWindowWithURL:(NSURL *)URL element:(NSDictionary *)element
 {
     WebFrame *webFrame = [element objectForKey:WebElementFrameKey];
     WebView *webView = [webFrame webView];
@@ -132,7 +131,7 @@
     [webView _openNewWindowWithRequest:request];
 }
 
-- (void)downloadURL:(NSURL *)URL
+- (void)downloadURL:(NSURL *)URL element:(NSDictionary *)element
 {
     WebFrame *webFrame = [element objectForKey:WebElementFrameKey];
     WebView *webView = [webFrame webView];
@@ -141,16 +140,19 @@
 
 - (void)openLinkInNewWindow:(id)sender
 {
-    [self openNewWindowWithURL:[element objectForKey:WebElementLinkURLKey]];
+    NSDictionary *element = [sender representedObject];
+    [self openNewWindowWithURL:[element objectForKey:WebElementLinkURLKey] element:element];
 }
 
 - (void)downloadLinkToDisk:(id)sender
 {
-    [self downloadURL:[element objectForKey:WebElementLinkURLKey]];
+    NSDictionary *element = [sender representedObject];
+    [self downloadURL:[element objectForKey:WebElementLinkURLKey] element:element];
 }
 
 - (void)copyLinkToClipboard:(id)sender
 {
+    NSDictionary *element = [sender representedObject];
     NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
     [pasteboard _web_writeURL:[element objectForKey:WebElementLinkURLKey]
                      andTitle:[element objectForKey:WebElementLinkLabelKey]
@@ -159,29 +161,31 @@
 
 - (void)openImageInNewWindow:(id)sender
 {
-    [self openNewWindowWithURL:[element objectForKey:WebElementImageURLKey]];
+    NSDictionary *element = [sender representedObject];
+    [self openNewWindowWithURL:[element objectForKey:WebElementImageURLKey] element:element];
 }
 
 - (void)downloadImageToDisk:(id)sender
 {
-    [self downloadURL:[element objectForKey:WebElementImageURLKey]];
+    NSDictionary *element = [sender representedObject];
+    [self downloadURL:[element objectForKey:WebElementImageURLKey] element:element];
 }
 
 - (void)copyImageToClipboard:(id)sender
 {
-    NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
+    NSDictionary *element = [sender representedObject];
     NSData *tiff = [[element objectForKey:WebElementImageKey] TIFFRepresentation];
     
+    NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
     [pasteboard declareTypes:[NSArray arrayWithObject:NSTIFFPboardType] owner:nil];
     [pasteboard setData:tiff forType:NSTIFFPboardType];
 }
 
 - (void)openFrameInNewWindow:(id)sender
 {
+    NSDictionary *element = [sender representedObject];
     WebFrame *webFrame = [element objectForKey:WebElementFrameKey];
-    WebDataSource *dataSource = [webFrame dataSource];
-    NSURL *URL = [dataSource _URL];
-    [self openNewWindowWithURL:URL];
+    [self openNewWindowWithURL:[[webFrame dataSource] _URL] element:element];
 }
 
 
diff --git a/WebKit/WebView.subproj/WebDefaultUIDelegate.h b/WebKit/WebView.subproj/WebDefaultUIDelegate.h
index 453d95f..bdd2968 100644
--- a/WebKit/WebView.subproj/WebDefaultUIDelegate.h
+++ b/WebKit/WebView.subproj/WebDefaultUIDelegate.h
@@ -1,5 +1,5 @@
 /*	
-    WebDefaultPolicyDelegate.h
+    WebDefaultUIDelegate.h
     Copyright 2003, Apple Computer, Inc.
     
     Private header file.
@@ -7,11 +7,6 @@
 
 #import <Foundation/Foundation.h>
 
-
 @interface WebDefaultUIDelegate : NSObject
-{
-    NSDictionary *element;
-}
-
 + (WebDefaultUIDelegate *)sharedUIDelegate;
 @end
diff --git a/WebKit/WebView.subproj/WebDefaultUIDelegate.m b/WebKit/WebView.subproj/WebDefaultUIDelegate.m
index 5119974..c121edb 100644
--- a/WebKit/WebView.subproj/WebDefaultUIDelegate.m
+++ b/WebKit/WebView.subproj/WebDefaultUIDelegate.m
@@ -32,12 +32,6 @@ static WebDefaultUIDelegate *sharedDelegate = nil;
     return sharedDelegate;
 }
 
-- (void)dealloc
-{
-    [element release];
-    [super dealloc];
-}
-
 - (WebView *)webView: (WebView *)wv createWebViewWithRequest:(NSURLRequest *)request
 {
     return nil;
diff --git a/WebKit/WebView.subproj/WebHTMLViewPrivate.h b/WebKit/WebView.subproj/WebHTMLViewPrivate.h
index c964911..88fc683 100644
--- a/WebKit/WebView.subproj/WebHTMLViewPrivate.h
+++ b/WebKit/WebView.subproj/WebHTMLViewPrivate.h
@@ -28,7 +28,6 @@
     BOOL subviewsSetAside;
 
     NSEvent *mouseDownEvent;
-    NSDictionary *dragElement;
 
     NSURL *draggingImageURL;
     
diff --git a/WebKit/WebView.subproj/WebHTMLViewPrivate.m b/WebKit/WebView.subproj/WebHTMLViewPrivate.m
index d9d0183..8ad4bef 100644
--- a/WebKit/WebView.subproj/WebHTMLViewPrivate.m
+++ b/WebKit/WebView.subproj/WebHTMLViewPrivate.m
@@ -92,7 +92,6 @@ static BOOL forceRealHitTest = NO;
     [pluginController destroyAllPlugins];
     
     [mouseDownEvent release];
-    [dragElement release];
     [draggingImageURL release];
     [pluginController release];
     
@@ -503,7 +502,8 @@ static WebHTMLView *lastHitView = nil;
 	return;
     }
 
-    NSDictionary *element = _private->dragElement;
+    NSPoint mouseDownPoint = [self convertPoint:[_private->mouseDownEvent locationInWindow] fromView:nil];
+    NSDictionary *element = [self _elementAtPoint:mouseDownPoint];
 
     NSURL *linkURL = [element objectForKey:WebElementLinkURLKey];
     NSURL *imageURL = [element objectForKey:WebElementImageURLKey];
@@ -516,7 +516,6 @@ static WebHTMLView *lastHitView = nil;
     ASSERT((imageURL && [[WebPreferences standardPreferences] loadsImagesAutomatically]) ||
            (!imageURL && linkURL) || isSelectedText); 
 
-    NSPoint mouseDownPoint = [self convertPoint:[_private->mouseDownEvent locationInWindow] fromView:nil];
     NSPoint mouseDraggedPoint = [self convertPoint:[event locationInWindow] fromView:nil];
     float deltaX = ABS(mouseDraggedPoint.x - mouseDownPoint.x);
     float deltaY = ABS(mouseDraggedPoint.y - mouseDownPoint.y);
@@ -577,13 +576,10 @@ static WebHTMLView *lastHitView = nil;
 - (BOOL)_mayStartDragWithMouseDragged:(NSEvent *)mouseDraggedEvent
 {
     NSPoint mouseDownPoint = [self convertPoint:[_private->mouseDownEvent locationInWindow] fromView:nil];
-    NSDictionary *mouseDownElement = [[self _elementAtPoint:mouseDownPoint] retain];
-    
-    [_private->dragElement release];
-    _private->dragElement = mouseDownElement;
+    NSDictionary *mouseDownElement = [self _elementAtPoint:mouseDownPoint];
 
     NSURL *imageURL = [mouseDownElement objectForKey: WebElementImageURLKey];
-    
+
     if ((imageURL && [[WebPreferences standardPreferences] loadsImagesAutomatically]) ||
         (!imageURL && [mouseDownElement objectForKey: WebElementLinkURLKey]) ||
         ([[mouseDownElement objectForKey:WebElementIsSelectedKey] boolValue] &&

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list