[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 06:56:43 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 4302fa62a6c2004f510a6515a368fef0dc848bf3
Author: darin <darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sat Nov 2 02:12:31 2002 +0000

    	- fixed 3090239 -- crash on window close
    
            * WebView.subproj/WebFramePrivate.m: (-[WebFrame _detachFromParent]): Nil out the bridge and
    	release it so we don't close the URL twice.
    
    	- fixed 3058598 -- animated gif animates repeatedly in Alex, but only once in other browsers
    
            * WebCoreSupport.subproj/WebImageRenderer.h: Added fields used by bug workaround.
            * WebCoreSupport.subproj/WebImageRenderer.m:
            (-[WebImageRenderer blockHasGIFExtensionSignature:length:]): Helper method for bug workaround.
            (-[WebImageRenderer checkDataForGIFExtensionSignature:]): Checks incoming data for the GIF
    	extension signatures.
            (-[WebImageRenderer initWithData:]): Override to call checkDataForGIFExtensionSignature.
            (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]): Call checkDataForGIFExtensionSignature.
            (-[WebImageRenderer repetitionCount]): Return 1 if we were going to return 0, but we didn't see a
    	GIF extension signature. This workaround can be removed once we require a system new enough to have
    	the bug fix for bug 3090341.
            (-[WebImageRenderer nextFrame:]): Stop on last frame, don't wrap around to first.
    
            * WebCoreSupport.subproj/WebImageRendererFactory.h: Update for changes to WebCore.
            * WebCoreSupport.subproj/WebImageRendererFactory.m: Tweaks.
    
            * WebView.subproj/WebImageRepresentation.m: Update imports.
            * WebView.subproj/WebImageView.m: Update imports.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2537 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 0ac933a..eacca7a 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,30 @@
+2002-11-01  Darin Adler  <darin at apple.com>
+
+	- fixed 3090239 -- crash on window close
+
+        * WebView.subproj/WebFramePrivate.m: (-[WebFrame _detachFromParent]): Nil out the bridge and
+	release it so we don't close the URL twice.
+
+	- fixed 3058598 -- animated gif animates repeatedly in Alex, but only once in other browsers
+
+        * WebCoreSupport.subproj/WebImageRenderer.h: Added fields used by bug workaround.
+        * WebCoreSupport.subproj/WebImageRenderer.m:
+        (-[WebImageRenderer blockHasGIFExtensionSignature:length:]): Helper method for bug workaround.
+        (-[WebImageRenderer checkDataForGIFExtensionSignature:]): Checks incoming data for the GIF
+	extension signatures.
+        (-[WebImageRenderer initWithData:]): Override to call checkDataForGIFExtensionSignature.
+        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]): Call checkDataForGIFExtensionSignature.
+        (-[WebImageRenderer repetitionCount]): Return 1 if we were going to return 0, but we didn't see a
+	GIF extension signature. This workaround can be removed once we require a system new enough to have
+	the bug fix for bug 3090341.
+        (-[WebImageRenderer nextFrame:]): Stop on last frame, don't wrap around to first.
+
+        * WebCoreSupport.subproj/WebImageRendererFactory.h: Update for changes to WebCore.
+        * WebCoreSupport.subproj/WebImageRendererFactory.m: Tweaks.
+
+        * WebView.subproj/WebImageRepresentation.m: Update imports.
+        * WebView.subproj/WebImageView.m: Update imports.
+
 2002-11-01  Richard Williamson   <rjw at apple.com>
 
         Implemented rendering of diacriticals.
diff --git a/WebKit/ChangeLog-2002-12-03 b/WebKit/ChangeLog-2002-12-03
index 0ac933a..eacca7a 100644
--- a/WebKit/ChangeLog-2002-12-03
+++ b/WebKit/ChangeLog-2002-12-03
@@ -1,3 +1,30 @@
+2002-11-01  Darin Adler  <darin at apple.com>
+
+	- fixed 3090239 -- crash on window close
+
+        * WebView.subproj/WebFramePrivate.m: (-[WebFrame _detachFromParent]): Nil out the bridge and
+	release it so we don't close the URL twice.
+
+	- fixed 3058598 -- animated gif animates repeatedly in Alex, but only once in other browsers
+
+        * WebCoreSupport.subproj/WebImageRenderer.h: Added fields used by bug workaround.
+        * WebCoreSupport.subproj/WebImageRenderer.m:
+        (-[WebImageRenderer blockHasGIFExtensionSignature:length:]): Helper method for bug workaround.
+        (-[WebImageRenderer checkDataForGIFExtensionSignature:]): Checks incoming data for the GIF
+	extension signatures.
+        (-[WebImageRenderer initWithData:]): Override to call checkDataForGIFExtensionSignature.
+        (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]): Call checkDataForGIFExtensionSignature.
+        (-[WebImageRenderer repetitionCount]): Return 1 if we were going to return 0, but we didn't see a
+	GIF extension signature. This workaround can be removed once we require a system new enough to have
+	the bug fix for bug 3090341.
+        (-[WebImageRenderer nextFrame:]): Stop on last frame, don't wrap around to first.
+
+        * WebCoreSupport.subproj/WebImageRendererFactory.h: Update for changes to WebCore.
+        * WebCoreSupport.subproj/WebImageRendererFactory.m: Tweaks.
+
+        * WebView.subproj/WebImageRepresentation.m: Update imports.
+        * WebView.subproj/WebImageView.m: Update imports.
+
 2002-11-01  Richard Williamson   <rjw at apple.com>
 
         Implemented rendering of diacriticals.
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRenderer.h b/WebKit/WebCoreSupport.subproj/WebImageRenderer.h
index acf5a9f..3fb61e2 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRenderer.h
+++ b/WebKit/WebCoreSupport.subproj/WebImageRenderer.h
@@ -3,7 +3,8 @@
 */
 
 #import <Cocoa/Cocoa.h>
-#import <WebCore/WebCoreImageRenderer.h>
+
+ at protocol WebCoreImageRenderer;
 
 @interface WebImageRenderer : NSImage <WebCoreImageRenderer>
 {
@@ -11,11 +12,18 @@
     NSView *frameView;
     NSRect imageRect;
     NSRect targetRect;
+
     int loadStatus;
+
     NSColor *patternColor;
     int patternColorLoadStatus;
+
     int repetitionsComplete;
     BOOL animationFinished;
+
+    BOOL sawGIFExtensionSignature;
+    char GIFExtensionBuffer[10];
+    int GIFExtensionBufferLength;
 }
 
 + (void)stopAnimationsInView:(NSView *)aView;
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRenderer.m b/WebKit/WebCoreSupport.subproj/WebImageRenderer.m
index cc6a239..3d3a25e 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRenderer.m
+++ b/WebKit/WebCoreSupport.subproj/WebImageRenderer.m
@@ -5,6 +5,7 @@
 
 #import <WebKit/WebImageRenderer.h>
 
+#import <WebCore/WebCoreImageRenderer.h>
 #import <WebFoundation/WebAssertions.h>
 
 extern NSString *NSImageLoopCount;
@@ -28,6 +29,71 @@ static NSMutableArray *activeImageRenderers;
     }
 }
 
+// Part of the workaround for bug 3090341.
+- (BOOL)blockHasGIFExtensionSignature:(const char *)block length:(int)length
+{
+    int i;
+    for (i = 0; i < length - 10; i++) {
+        if (block[i + 8] == '1' && block[i + 9] == '.' && block[i + 10] == '0') {
+            if (memcmp(block + i, "NETSCAPE", 8) == 0 || memcmp(block + i, "ANIMEXTS", 8) == 0) {
+                return YES;
+            }
+        }
+    }
+    return NO;
+}
+
+// Part of the workaround for bug 3090341.
+- (void)checkDataForGIFExtensionSignature:(NSData *)data
+{
+    if (sawGIFExtensionSignature) {
+        return;
+    }
+    
+    const char *dataBytes = [data bytes];
+    int dataLength = [data length];
+    
+    if (GIFExtensionBufferLength) {
+        char leadingEdgeBuffer[20];
+        memcpy(leadingEdgeBuffer, GIFExtensionBuffer, GIFExtensionBufferLength);
+        int dataForLeadingEdgeBufferLength = dataLength;
+        if (dataForLeadingEdgeBufferLength > 10) {
+            dataForLeadingEdgeBufferLength = 10;
+        }
+        memcpy(leadingEdgeBuffer + GIFExtensionBufferLength, dataBytes, dataForLeadingEdgeBufferLength);
+        if ([self blockHasGIFExtensionSignature:leadingEdgeBuffer
+                length:GIFExtensionBufferLength + dataForLeadingEdgeBufferLength]) {
+            sawGIFExtensionSignature = YES;
+            return;
+        }
+    }
+    
+    if ([self blockHasGIFExtensionSignature:dataBytes length:dataLength]) {
+        sawGIFExtensionSignature = YES;
+        return;
+    }
+    
+    if (dataLength < 10) {
+        int keepLength = 10 - dataLength;
+        if (keepLength > GIFExtensionBufferLength) {
+            keepLength = GIFExtensionBufferLength;
+        }
+        memmove(GIFExtensionBuffer + GIFExtensionBufferLength - keepLength, GIFExtensionBuffer, keepLength);
+        memcpy(GIFExtensionBuffer + keepLength, dataBytes, dataLength);
+        GIFExtensionBufferLength = keepLength + dataLength;
+    } else {
+        memcpy(GIFExtensionBuffer, dataBytes + dataLength - 10, 10);
+        GIFExtensionBufferLength = 10;
+    }
+}
+
+// Part of the workaround for bug 3090341.
+- initWithData:(NSData *)data
+{
+    [self checkDataForGIFExtensionSignature:data];
+    return [super initWithData:data];
+}
+
 - copyWithZone:(NSZone *)zone
 {
     WebImageRenderer *copy = [super copyWithZone:zone];
@@ -47,6 +113,9 @@ static NSMutableArray *activeImageRenderers;
     NSData *data = [[NSData alloc] initWithBytes:bytes length:length];
     NSSize size;
     
+    // Part of the workaround for bug 3090341.
+    [self checkDataForGIFExtensionSignature:data];
+    
     loadStatus = [imageRep incrementalLoadFromData:data complete:isComplete];
     [data release];
     switch (loadStatus) {
@@ -142,7 +211,13 @@ static NSMutableArray *activeImageRenderers;
 - (int)repetitionCount
 {
     id property = [self firstRepProperty:NSImageLoopCount];
-    return property ? [property intValue] : 0;
+    int count = property ? [property intValue] : 0;
+    // This is a workaround for bug 3090341.
+    // If we see no extension, then the loop count is 1, not 0.
+    if (count == 0 && !sawGIFExtensionSignature) {
+        count = 1;
+    }
+    return count;
 }
 
 - (void)scheduleFrame
@@ -203,6 +278,7 @@ static NSMutableArray *activeImageRenderers;
         repetitionsComplete += 1;
         if ([self repetitionCount] && repetitionsComplete >= [self repetitionCount]) {
             animationFinished = YES;
+            return;
         }
 	// Don't repeat if the last frame has a duration of 0.  
         // IE doesn't repeat, so we don't.
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.h b/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.h
index d9ee95b..0db938c 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.h
+++ b/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.h
@@ -9,12 +9,11 @@
 
 @class WebImageRenderer;
 
- at interface WebImageRendererFactory : WebCoreImageRendererFactory
+ at interface WebImageRendererFactory : WebCoreImageRendererFactory <WebCoreImageRendererFactory>
 {
 }
 
 + (void)createSharedFactory;
 + (WebImageRendererFactory *)sharedFactory;
-- (id <WebCoreImageRenderer>)imageRendererWithBytes: (const void *)bytes length:(unsigned)length;
 
 @end
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m b/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m
index e271537..209e896 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m
+++ b/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m
@@ -48,35 +48,35 @@
     NSImage *imageRenderer = [[WebImageRenderer alloc] init];
 
     NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initForIncrementalLoad];
-    [imageRenderer addRepresentation: rep];
+    [imageRenderer addRepresentation:rep];
     [rep release];
-    [imageRenderer setFlipped: YES];
+    [imageRenderer setFlipped:YES];
 
-    [imageRenderer setScalesWhenResized: NO];
+    [imageRenderer setScalesWhenResized:NO];
     return [imageRenderer autorelease];
 }
 
 
-- (id <WebCoreImageRenderer>)imageRendererWithBytes: (const void *)bytes length:(unsigned)length
+- (id <WebCoreImageRenderer>)imageRendererWithBytes:(const void *)bytes length:(unsigned)length
 {
-    // FIXME:  Why must we copy the data here?
-    //NSData *data = [[NSData alloc] initWithBytesNoCopy: (void *)bytes length: length freeWhenDone: NO];
-    NSData *data = [[NSData alloc] initWithBytes: (void *)bytes length: length];
-    WebImageRenderer *imageRenderer = [[WebImageRenderer alloc] initWithData: data];
-    [imageRenderer setScalesWhenResized: NO];
+    // FIXME: Why must we copy the data here?
+    //NSData *data = [[NSData alloc] initWithBytesNoCopy:(void *)bytes length:length freeWhenDone:NO];
+    NSData *data = [[NSData alloc] initWithBytes:(void *)bytes length:length];
+    WebImageRenderer *imageRenderer = [[WebImageRenderer alloc] initWithData:data];
+    [imageRenderer setScalesWhenResized:NO];
     NSArray *reps = [imageRenderer representations];
-    NSImageRep *rep = [reps objectAtIndex: 0];
+    NSImageRep *rep = [reps objectAtIndex:0];
     // Force the image to use the pixel size and ignore the dpi.
     [rep setSize:NSMakeSize([rep pixelsWide], [rep pixelsHigh])];
     [data release];
-    [imageRenderer setFlipped: YES];
+    [imageRenderer setFlipped:YES];
     return [imageRenderer autorelease];
 }
 
-- (id <WebCoreImageRenderer>)imageRendererWithSize: (NSSize)s
+- (id <WebCoreImageRenderer>)imageRendererWithSize:(NSSize)s
 {
-    WebImageRenderer *imageRenderer = [[[WebImageRenderer alloc] initWithSize: s] autorelease];
-    [imageRenderer setScalesWhenResized: NO];
+    WebImageRenderer *imageRenderer = [[[WebImageRenderer alloc] initWithSize:s] autorelease];
+    [imageRenderer setScalesWhenResized:NO];
     return imageRenderer;
 }
 
diff --git a/WebKit/WebView.subproj/WebFramePrivate.m b/WebKit/WebView.subproj/WebFramePrivate.m
index c7714f6..151c752 100644
--- a/WebKit/WebView.subproj/WebFramePrivate.m
+++ b/WebKit/WebView.subproj/WebFramePrivate.m
@@ -151,7 +151,10 @@ static const char * const stateNames[] = {
 
 - (void)_detachFromParent
 {
-    [_private->bridge closeURL];
+    WebBridge *bridge = _private->bridge;
+    _private->bridge = nil;
+    
+    [bridge closeURL];
 
     [[self children] makeObjectsPerformSelector:@selector(_detachFromParent)];
     
@@ -166,6 +169,8 @@ static const char * const stateNames[] = {
     [_private->scheduledLayoutTimer invalidate];
     [_private->scheduledLayoutTimer release];
     _private->scheduledLayoutTimer = nil;
+    
+    [bridge release];
 }
 
 - (void)_setController: (WebController *)controller
diff --git a/WebKit/WebView.subproj/WebImageRepresentation.m b/WebKit/WebView.subproj/WebImageRepresentation.m
index 298d27f..d3dd7c8 100644
--- a/WebKit/WebView.subproj/WebImageRepresentation.m
+++ b/WebKit/WebView.subproj/WebImageRepresentation.m
@@ -4,6 +4,8 @@
 */
 
 #import "WebImageRepresentation.h"
+
+#import <WebCore/WebCoreImageRenderer.h>
 #import <WebKit/WebDataSource.h>
 #import <WebKit/WebImageRenderer.h>
 #import <WebKit/WebImageRendererFactory.h>
diff --git a/WebKit/WebView.subproj/WebImageView.m b/WebKit/WebView.subproj/WebImageView.m
index 43d3f4d..fae1b5a 100644
--- a/WebKit/WebView.subproj/WebImageView.m
+++ b/WebKit/WebView.subproj/WebImageView.m
@@ -3,13 +3,14 @@
 	Copyright 2002, Apple, Inc. All rights reserved.
 */
 
+#import <WebKit/WebImageView.h>
 
+#import <WebCore/WebCoreImageRenderer.h>
 #import <WebKit/WebControllerPrivate.h>
 #import <WebKit/WebDataSource.h>
 #import <WebKit/WebDocument.h>
 #import <WebKit/WebImageRenderer.h>
 #import <WebKit/WebImageRepresentation.h>
-#import <WebKit/WebImageView.h>
 #import <WebKit/WebNSViewExtras.h>
 #import <WebKit/WebView.h>
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list