[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