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

cblu cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 07:06:56 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 07dd4f5a5a8fa1c64affbb26aefc681d565bd5af
Author: cblu <cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Nov 22 23:05:20 2002 +0000

    WebKit:
    
    	Attempt to fix: 3078737 - Crash in -[WebHistoryItem dealloc] after closing last window
    	I haven't found anything that would cause the crash. I did some clean-up, added asserts and error messages in hopes that this help me track this down.
    
            * Misc.subproj/WebIconDatabase.h:
            * Misc.subproj/WebIconDatabase.m:
            (-[WebIconDatabase init]):
            (-[WebIconDatabase iconForSiteURL:withSize:cache:]):
            (-[WebIconDatabase iconForSiteURL:withSize:]):
            (-[WebIconDatabase retainIconForSiteURL:]):
            (-[WebIconDatabase releaseIconForSiteURL:]):
            (-[WebIconDatabase delayDatabaseCleanup]):
            (-[WebIconDatabase allowDatabaseCleanup]):
            (-[WebIconDatabase _iconDictionariesAreGood]):
            (-[WebIconDatabase _loadIconDictionaries]):
            (-[WebIconDatabase _updateFileDatabase]):
            (-[WebIconDatabase _hasIconForSiteURL:]):
            (-[WebIconDatabase _iconsForIconURLString:]):
            (-[WebIconDatabase _iconForFileURL:withSize:]):
            (-[WebIconDatabase _setIcon:forIconURL:]):
            (-[WebIconDatabase _setIconURL:forSiteURL:]):
            (-[WebIconDatabase _retainIconForIconURLString:]):
            (-[WebIconDatabase _releaseIconForIconURLString:]):
            (-[WebIconDatabase _retainFutureIconForSiteURL:]):
            (-[WebIconDatabase _releaseFutureIconForSiteURL:]):
            (-[WebIconDatabase _releaseOriginalIconsOnDisk]):
            (-[WebIconDatabase _sendNotificationForSiteURL:]):
            (-[WebIconDatabase _addObject:toSetForKey:inDictionary:]):
            (-[WebIconDatabase _largestIconFromDictionary:]):
            (-[WebIconDatabase _iconsBySplittingRepresentationsOfIcon:]):
            (-[WebIconDatabase _iconFromDictionary:forSize:cache:]):
            (-[WebIconDatabase _scaleIcon:toSize:]):
            * Misc.subproj/WebIconDatabasePrivate.h:
            * WebKit.exp:
            * WebView.subproj/WebDataSourcePrivate.m:
            (-[WebDataSource _loadIcon]):
    
    WebBrowser:
    
    	- Removed old scripting code.
    	- Removed code that installed built-in icons.
    
            * AppController.m:
            (-[AppController awakeFromNib]):
            * Scripting.subproj/Scripting.h: Removed.
            * Scripting.subproj/Scripting.m: Removed.
            * WebBrowser.pbproj/project.pbxproj:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2833 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 134d714..cc6d715 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,41 @@
+2002-11-22  Chris Blumenberg  <cblu at apple.com>
+
+	Attempt to fix: 3078737 - Crash in -[WebHistoryItem dealloc] after closing last window
+	I haven't found anything that would cause the crash. I did some clean-up, added asserts and error messages in hopes that this help me track this down.
+
+        * Misc.subproj/WebIconDatabase.h:
+        * Misc.subproj/WebIconDatabase.m:
+        (-[WebIconDatabase init]):
+        (-[WebIconDatabase iconForSiteURL:withSize:cache:]):
+        (-[WebIconDatabase iconForSiteURL:withSize:]):
+        (-[WebIconDatabase retainIconForSiteURL:]):
+        (-[WebIconDatabase releaseIconForSiteURL:]):
+        (-[WebIconDatabase delayDatabaseCleanup]):
+        (-[WebIconDatabase allowDatabaseCleanup]):
+        (-[WebIconDatabase _iconDictionariesAreGood]):
+        (-[WebIconDatabase _loadIconDictionaries]):
+        (-[WebIconDatabase _updateFileDatabase]):
+        (-[WebIconDatabase _hasIconForSiteURL:]):
+        (-[WebIconDatabase _iconsForIconURLString:]):
+        (-[WebIconDatabase _iconForFileURL:withSize:]):
+        (-[WebIconDatabase _setIcon:forIconURL:]):
+        (-[WebIconDatabase _setIconURL:forSiteURL:]):
+        (-[WebIconDatabase _retainIconForIconURLString:]):
+        (-[WebIconDatabase _releaseIconForIconURLString:]):
+        (-[WebIconDatabase _retainFutureIconForSiteURL:]):
+        (-[WebIconDatabase _releaseFutureIconForSiteURL:]):
+        (-[WebIconDatabase _releaseOriginalIconsOnDisk]):
+        (-[WebIconDatabase _sendNotificationForSiteURL:]):
+        (-[WebIconDatabase _addObject:toSetForKey:inDictionary:]):
+        (-[WebIconDatabase _largestIconFromDictionary:]):
+        (-[WebIconDatabase _iconsBySplittingRepresentationsOfIcon:]):
+        (-[WebIconDatabase _iconFromDictionary:forSize:cache:]):
+        (-[WebIconDatabase _scaleIcon:toSize:]):
+        * Misc.subproj/WebIconDatabasePrivate.h:
+        * WebKit.exp:
+        * WebView.subproj/WebDataSourcePrivate.m:
+        (-[WebDataSource _loadIcon]):
+
 2002-11-22  Richard Williamson   <rjw at apple.com>
 
         Fixed rendering issues associated with 3100120.
diff --git a/WebKit/ChangeLog-2002-12-03 b/WebKit/ChangeLog-2002-12-03
index 134d714..cc6d715 100644
--- a/WebKit/ChangeLog-2002-12-03
+++ b/WebKit/ChangeLog-2002-12-03
@@ -1,3 +1,41 @@
+2002-11-22  Chris Blumenberg  <cblu at apple.com>
+
+	Attempt to fix: 3078737 - Crash in -[WebHistoryItem dealloc] after closing last window
+	I haven't found anything that would cause the crash. I did some clean-up, added asserts and error messages in hopes that this help me track this down.
+
+        * Misc.subproj/WebIconDatabase.h:
+        * Misc.subproj/WebIconDatabase.m:
+        (-[WebIconDatabase init]):
+        (-[WebIconDatabase iconForSiteURL:withSize:cache:]):
+        (-[WebIconDatabase iconForSiteURL:withSize:]):
+        (-[WebIconDatabase retainIconForSiteURL:]):
+        (-[WebIconDatabase releaseIconForSiteURL:]):
+        (-[WebIconDatabase delayDatabaseCleanup]):
+        (-[WebIconDatabase allowDatabaseCleanup]):
+        (-[WebIconDatabase _iconDictionariesAreGood]):
+        (-[WebIconDatabase _loadIconDictionaries]):
+        (-[WebIconDatabase _updateFileDatabase]):
+        (-[WebIconDatabase _hasIconForSiteURL:]):
+        (-[WebIconDatabase _iconsForIconURLString:]):
+        (-[WebIconDatabase _iconForFileURL:withSize:]):
+        (-[WebIconDatabase _setIcon:forIconURL:]):
+        (-[WebIconDatabase _setIconURL:forSiteURL:]):
+        (-[WebIconDatabase _retainIconForIconURLString:]):
+        (-[WebIconDatabase _releaseIconForIconURLString:]):
+        (-[WebIconDatabase _retainFutureIconForSiteURL:]):
+        (-[WebIconDatabase _releaseFutureIconForSiteURL:]):
+        (-[WebIconDatabase _releaseOriginalIconsOnDisk]):
+        (-[WebIconDatabase _sendNotificationForSiteURL:]):
+        (-[WebIconDatabase _addObject:toSetForKey:inDictionary:]):
+        (-[WebIconDatabase _largestIconFromDictionary:]):
+        (-[WebIconDatabase _iconsBySplittingRepresentationsOfIcon:]):
+        (-[WebIconDatabase _iconFromDictionary:forSize:cache:]):
+        (-[WebIconDatabase _scaleIcon:toSize:]):
+        * Misc.subproj/WebIconDatabasePrivate.h:
+        * WebKit.exp:
+        * WebView.subproj/WebDataSourcePrivate.m:
+        (-[WebDataSource _loadIcon]):
+
 2002-11-22  Richard Williamson   <rjw at apple.com>
 
         Fixed rendering issues associated with 3100120.
diff --git a/WebKit/Misc.subproj/WebIconDatabase.h b/WebKit/Misc.subproj/WebIconDatabase.h
index 66f79b4..9f08058 100644
--- a/WebKit/Misc.subproj/WebIconDatabase.h
+++ b/WebKit/Misc.subproj/WebIconDatabase.h
@@ -10,7 +10,7 @@
 // Sent whenever a site icon has changed. The object of the notification is the icon database.
 // The userInfo contains the site URL who's icon has changed.
 // It can be accessed with the key WebIconNotificationUserInfoSiteURLKey.
-extern NSString *WebIconDidChangeNotification;
+extern NSString *WebIconDatabaseDidAddIconNotification;
 
 extern NSString *WebIconNotificationUserInfoSiteURLKey;
 
@@ -26,7 +26,6 @@ extern NSSize WebIconLargeSize;  // 128 x 128
         - memory cache icons at different sizes
         - disk storage
         - icon update notification
-        - user/client icon customization
         
         Uses:
         - WebIconLoader to cache icon images
@@ -78,22 +77,6 @@ extern NSSize WebIconLargeSize;  // 128 x 128
 - (NSImage *)defaultIconWithSize:(NSSize)size;
 
 /*!
-    @method setIcon:forHost:
-    @abstract Customize the site icon for all web sites with the given host name.
-    @param icon
-    @param host
-*/
-- (void)setIcon:(NSImage *)icon forHost:(NSString *)host;
-
-/*!
-    @method setIcon:forSiteURL:
-    @abstract Customize the site icon for a specific web page.
-    @param icon
-    @param siteURL
-*/
-- (void)setIcon:(NSImage *)icon forSiteURL:(NSURL *)siteURL;
-
-/*!
     @method retainIconForSiteURL:
     @abstract Increments the retain count of the icon.
     @param siteURL
diff --git a/WebKit/Misc.subproj/WebIconDatabase.m b/WebKit/Misc.subproj/WebIconDatabase.m
index d7f902a..dc0453b 100644
--- a/WebKit/Misc.subproj/WebIconDatabase.m
+++ b/WebKit/Misc.subproj/WebIconDatabase.m
@@ -17,12 +17,12 @@
 
 #define WebIconDatabaseDefaultDirectory ([NSString stringWithFormat:@"%@/%@", NSHomeDirectory(), @"Library/Caches/com.apple.WebKit/Icons"])
 
-#define WebIconsOnDiskKey @"WebIconsOnDisk"
+#define WebIconsOnDiskKey 	@"WebIconsOnDisk"
 #define WebSiteURLToIconURLKey 	@"WebSiteURLToIconURLKey"
 #define WebIconURLToSiteURLsKey @"WebIconURLToSiteURLs"
-#define WebHostToSiteURLsKey @"WebHostToSiteURLs"
+#define WebHostToSiteURLsKey 	@"WebHostToSiteURLs"
 
-NSString *WebIconDidChangeNotification = @"WebIconDidChangeNotification";
+NSString *WebIconDatabaseDidAddIconNotification = @"WebIconDatabaseDidAddIconNotification";
 NSString *WebIconNotificationUserInfoSiteURLKey = @"WebIconNotificationUserInfoSiteURLKey";
 
 NSSize WebIconSmallSize = {16, 16};
@@ -40,7 +40,6 @@ NSSize WebIconLargeSize = {128, 128};
 - (void)_updateFileDatabase;
 - (NSMutableDictionary *)_iconsForIconURLString:(NSString *)iconURL;
 - (NSImage *)_iconForFileURL:(NSURL *)fileURL withSize:(NSSize)size;
-- (NSString *)_pathForBuiltInIconForHost:(NSString *)host;
 - (NSMutableDictionary *)_builtInIconsForHost:(NSString *)host;
 - (void)_retainIconForIconURLString:(NSString *)iconURL;
 - (void)_releaseIconForIconURLString:(NSString *)iconURL;
@@ -50,11 +49,10 @@ NSSize WebIconLargeSize = {128, 128};
 - (void)_releaseOriginalIconsOnDisk;
 - (void)_sendNotificationForSiteURL:(NSURL *)siteURL;
 - (void)_addObject:(id)object toSetForKey:(id)key inDictionary:(NSMutableDictionary *)dictionary;
-- (NSURL *)_uniqueIconURL;
 - (NSImage *)_largestIconFromDictionary:(NSMutableDictionary *)icons;
 - (NSMutableDictionary *)_iconsBySplittingRepresentationsOfIcon:(NSImage *)icon;
 - (NSImage *)_iconFromDictionary:(NSMutableDictionary *)icons forSize:(NSSize)size cache:(BOOL)cache;
-- (NSImage *)_iconByScalingIcon:(NSImage *)icon toSize:(NSSize)size;
+- (void)_scaleIcon:(NSImage *)icon toSize:(NSSize)size;
 
 @end
 
@@ -80,14 +78,12 @@ NSSize WebIconLargeSize = {128, 128};
     [self _createFileDatabase];
     [self _loadIconDictionaries];
 
-    _private->iconURLToIcons = [[NSMutableDictionary dictionary] retain];
-    _private->iconURLToRetainCount = [[NSMutableDictionary dictionary] retain];
-    _private->futureSiteURLToRetainCount = [[NSMutableDictionary dictionary] retain];
-    _private->pathToBuiltInIcons = [[NSMutableDictionary dictionary] retain];
-    _private->hostToBuiltInIconPath = [[NSMutableDictionary dictionary] retain];
+    _private->iconURLToIcons = 			[[NSMutableDictionary dictionary] retain];
+    _private->iconURLToRetainCount = 		[[NSMutableDictionary dictionary] retain];
+    _private->futureSiteURLToRetainCount = 	[[NSMutableDictionary dictionary] retain];
 
-    _private->iconsToEraseWithURLs = [[NSMutableSet set] retain];
-    _private->iconsToSaveWithURLs = [[NSMutableSet set] retain];
+    _private->iconsToEraseWithURLs = 	[[NSMutableSet set] retain];
+    _private->iconsToSaveWithURLs = 	[[NSMutableSet set] retain];
     
     [[NSNotificationCenter defaultCenter] addObserver:self
                                              selector:@selector(applicationWillTerminate:)
@@ -102,11 +98,6 @@ NSSize WebIconLargeSize = {128, 128};
     return self;
 }
 
-- (NSImage *)iconForSiteURL:(NSURL *)siteURL withSize:(NSSize)size
-{
-    return [self iconForSiteURL:siteURL withSize:size cache:YES];
-}
-
 - (NSImage *)iconForSiteURL:(NSURL *)siteURL withSize:(NSSize)size cache:(BOOL)cache
 {
     ASSERT(size.width);
@@ -119,26 +110,27 @@ NSSize WebIconLargeSize = {128, 128};
     if ([siteURL isFileURL]) {
         return [self _iconForFileURL:siteURL withSize:size];
     }
-
-    NSMutableDictionary *icons = [self _builtInIconsForHost:[siteURL host]];
     
-    if (!icons) {
-        NSString *iconURLString = [_private->siteURLToIconURL objectForKey:[siteURL absoluteString]];
-        if (!iconURLString) {
-            // Don't have it
-            return [self defaultIconWithSize:size];
-        }
-
-        icons = [self _iconsForIconURLString:iconURLString];
-        if (!icons) {
-            // This should not happen
-            return [self defaultIconWithSize:size];
-        }        
+    NSString *iconURLString = [_private->siteURLToIconURL objectForKey:[siteURL absoluteString]];
+    if (!iconURLString) {
+        // Don't have it
+        return [self defaultIconWithSize:size];
     }
 
+    NSMutableDictionary *icons = [self _iconsForIconURLString:iconURLString];
+    if (!icons) {
+        ERROR("WebIconDatabase said it had %@, but it doesn't.", iconURLString);
+        return [self defaultIconWithSize:size];
+    }        
+
     return [self _iconFromDictionary:icons forSize:size cache:cache];
 }
 
+- (NSImage *)iconForSiteURL:(NSURL *)siteURL withSize:(NSSize)size
+{
+    return [self iconForSiteURL:siteURL withSize:size cache:YES];
+}
+
 - (NSImage *)defaultIconWithSize:(NSSize)size
 {
     ASSERT(size.width);
@@ -156,62 +148,28 @@ NSSize WebIconLargeSize = {128, 128};
     return [self _iconFromDictionary:_private->defaultIcons forSize:size cache:YES];
 }
 
-- (void)setIcon:(NSImage *)icon forSiteURL:(NSURL *)siteURL
-{
-    if(!icon || !siteURL){
-        return;
-    }
-
-    NSURL *iconURL = [self _uniqueIconURL];
-    
-    [self _setIcon:icon forIconURL:iconURL];
-    [self _setIconURL:iconURL forSiteURL:siteURL];
-}
-
-- (void)setIcon:(NSImage *)icon forHost:(NSString *)host
-{
-    if(!icon || !host){
-        return;
-    }
-
-    NSMutableSet *siteURLs = [_private->hostToSiteURLs objectForKey:host];
-    NSURL *iconURL = [self _uniqueIconURL];
-    NSEnumerator *enumerator;
-    NSURL *siteURL;
-    
-    [self _setIcon:icon forIconURL:iconURL];
-
-    if(siteURLs){
-        enumerator = [siteURLs objectEnumerator];
-    
-        while ((siteURL = [enumerator nextObject]) != nil) {
-            [self releaseIconForSiteURL:siteURL];
-            [self _setIconURL:iconURL forSiteURL:siteURL];
-            [self retainIconForSiteURL:siteURL];
-        }
-    }
-}
-
 - (void)retainIconForSiteURL:(NSURL *)siteURL
 {
+    ASSERT(siteURL);
+    
     NSString *iconURLString = [_private->siteURLToIconURL objectForKey:[siteURL absoluteString]];
     
     if(iconURLString){
         [self _retainIconForIconURLString:iconURLString];
     }else{
-        // Retaining an icon not in the DB. This is OK. Just remember this.
         [self _retainFutureIconForSiteURL:siteURL];
     }
 }
 
 - (void)releaseIconForSiteURL:(NSURL *)siteURL
 {
+    ASSERT(siteURL);
+    
     NSString *iconURLString = [_private->siteURLToIconURL objectForKey:[siteURL absoluteString]];
     
     if(iconURLString){
         [self _releaseIconForIconURLString:iconURLString];
     }else{
-        // Releasing an icon not in the DB. This is OK. Just remember this.
         [self _releaseFutureIconForSiteURL:siteURL];        
     }
 }
@@ -219,21 +177,21 @@ NSSize WebIconLargeSize = {128, 128};
 - (void)delayDatabaseCleanup
 {
     if(_private->didCleanup){
-        [NSException raise:NSGenericException format:@"delayDatabaseCleanup cannot be called after cleanup has begun"];
+        ERROR("delayDatabaseCleanup cannot be called after cleanup has begun");
+        return;
     }
     
     _private->cleanupCount++;
-    //NSLog(@"delayDatabaseCleanup %d", _private->cleanupCount);
 }
 
 - (void)allowDatabaseCleanup
 {
     if(_private->didCleanup){
-        [NSException raise:NSGenericException format:@"allowDatabaseCleanup cannot be called after cleanup has begun"];
+        ERROR("allowDatabaseCleanup cannot be called after cleanup has begun");
+        return;
     }
     
     _private->cleanupCount--;
-    //NSLog(@"allowDatabaseCleanup %d", _private->cleanupCount);
 
     if(_private->cleanupCount == 0 && _private->waitingToCleanup){
         [self _releaseOriginalIconsOnDisk];
@@ -302,22 +260,6 @@ NSSize WebIconLargeSize = {128, 128};
             return NO;
         }
     }
-
-    if (![_private->hostToSiteURLs isKindOfClass:[NSMutableDictionary class]]) {
-        return NO;
-    }
-    if (![[_private->hostToSiteURLs keyEnumerator] _web_isAllStrings]) {
-        return NO;
-    }
-    e = [_private->hostToSiteURLs objectEnumerator];
-    while ((o = [e nextObject])) {
-        if (![o isKindOfClass:[NSMutableSet class]]) {
-            return NO;
-        }
-        if (![[o objectEnumerator] _web_isAllStrings]) {
-            return NO;
-        }
-    }
     
     return YES;
 }
@@ -329,19 +271,16 @@ NSSize WebIconLargeSize = {128, 128};
     _private->iconsOnDiskWithURLs = [fileDB objectForKey:WebIconsOnDiskKey];
     _private->siteURLToIconURL = [fileDB objectForKey:WebSiteURLToIconURLKey];
     _private->iconURLToSiteURLs = [fileDB objectForKey:WebIconURLToSiteURLsKey];
-    _private->hostToSiteURLs = [fileDB objectForKey:WebHostToSiteURLsKey];
 
     if (![self _iconDictionariesAreGood]) {
         _private->iconsOnDiskWithURLs = [NSMutableSet set];
         _private->siteURLToIconURL = [NSMutableDictionary dictionary];
         _private->iconURLToSiteURLs = [NSMutableDictionary dictionary];
-        _private->hostToSiteURLs = [NSMutableDictionary dictionary];
     }
 
     [_private->iconsOnDiskWithURLs retain];
     [_private->iconURLToSiteURLs retain];
     [_private->siteURLToIconURL retain];
-    [_private->hostToSiteURLs retain];
 }
 
 // Only called by _setIconURL:forKey:
@@ -351,19 +290,13 @@ NSSize WebIconLargeSize = {128, 128};
         return;
     }
 
-    //NSLog(@"_updateFileDatabase");
-
     WebFileDatabase *fileDB = _private->fileDatabase;
 
-    NSEnumerator *enumerator;
-    NSData *iconData;
-    NSString *iconURLString;
-
     // Erase icons that have been released that are on disk
-    enumerator = [_private->iconsToEraseWithURLs objectEnumerator];
-
+    NSEnumerator *enumerator = [_private->iconsToEraseWithURLs objectEnumerator];
+    NSString *iconURLString;
+    
     while ((iconURLString = [enumerator nextObject]) != nil) {
-        //NSLog(@"removing %@", iconURL);
         [fileDB removeObjectForKey:iconURLString];
         [_private->iconsOnDiskWithURLs removeObject:iconURLString];
     }
@@ -372,8 +305,9 @@ NSSize WebIconLargeSize = {128, 128};
     enumerator = [_private->iconsToSaveWithURLs objectEnumerator];
 
     while ((iconURLString = [enumerator nextObject]) != nil) {
-        //NSLog(@"writing %@", iconURL);
-        iconData = [[self _largestIconFromDictionary:[_private->iconURLToIcons objectForKey:iconURLString]] TIFFRepresentation];
+        NSMutableDictionary *icons = [_private->iconURLToIcons objectForKey:iconURLString];
+        NSImage *icon = [self _largestIconFromDictionary:icons];
+        NSData *iconData = [icon TIFFRepresentation];
         if(iconData){
             [fileDB setObject:iconData forKey:iconURLString];
             [_private->iconsOnDiskWithURLs addObject:iconURLString];
@@ -387,13 +321,11 @@ NSSize WebIconLargeSize = {128, 128};
     [fileDB setObject:_private->iconsOnDiskWithURLs forKey:WebIconsOnDiskKey];
     [fileDB setObject:_private->siteURLToIconURL forKey:WebSiteURLToIconURLKey];
     [fileDB setObject:_private->iconURLToSiteURLs forKey:WebIconURLToSiteURLsKey];
-    [fileDB setObject:_private->hostToSiteURLs forKey:WebHostToSiteURLsKey];
 }
 
 - (BOOL)_hasIconForSiteURL:(NSURL *)siteURL
 {
     if ([siteURL isFileURL] ||
-        [self _pathForBuiltInIconForHost:[siteURL host]] ||
         [_private->siteURLToIconURL objectForKey:[siteURL absoluteString]]){
         return YES;
     }
@@ -403,9 +335,7 @@ NSSize WebIconLargeSize = {128, 128};
 
 - (NSMutableDictionary *)_iconsForIconURLString:(NSString *)iconURLString
 {
-    if(!iconURLString){
-        return nil;
-    }
+    ASSERT(iconURLString);
     
     NSMutableDictionary *icons = [_private->iconURLToIcons objectForKey:iconURLString];
     double start, duration;
@@ -450,71 +380,24 @@ NSSize WebIconLargeSize = {128, 128};
         return [self _iconFromDictionary:_private->htmlIcons forSize:size cache:YES];
     }else{
         icon = [workspace iconForFile:[fileURL path]];
-        return [self _iconByScalingIcon:icon toSize:size];
-    }
-}
-
-- (NSString *)_pathForBuiltInIconForHost:(NSString *)host
-{
-    NSArray *hostParts = [host componentsSeparatedByString:@"."];
-    NSMutableString *truncatedHost = [NSMutableString string];
-    NSString *hostPart, *path;
-    BOOL firstPart = YES;
-
-    NSEnumerator *enumerator = [hostParts reverseObjectEnumerator];
-    while ((hostPart = [enumerator nextObject]) != nil) {
-        if(firstPart){
-            [truncatedHost insertString:hostPart atIndex:0];
-            firstPart = NO;
-        }else{
-            [truncatedHost insertString:[NSString stringWithFormat:@"%@.", hostPart] atIndex:0];
-            path = [_private->hostToBuiltInIconPath objectForKey:truncatedHost];
-            if(path){
-                return path;
-            }
-        }
+        [self _scaleIcon:icon toSize:size];
+        return icon;
     }
-    
-    return nil;
-}
-
-- (NSMutableDictionary *)_builtInIconsForHost:(NSString *)host
-{
-    NSString *path = [self _pathForBuiltInIconForHost:host];
-    NSMutableDictionary *icons = nil;
-    
-    if(path){
-        icons = [_private->pathToBuiltInIcons objectForKey:path];    
-        if(!icons){
-            NSImage *icon = [[NSImage alloc] initWithContentsOfFile:path];
-            if(icon){
-                icons = [self _iconsBySplittingRepresentationsOfIcon:icon];
-                [_private->pathToBuiltInIcons setObject:icons forKey:path];
-                [icon release];
-            }
-        }
-    }
-    
-    return icons;
 }
 
 - (void)_setIcon:(NSImage *)icon forIconURL:(NSURL *)iconURL
 {
-    if(!icon || !iconURL){
-        return;
-    }
+    ASSERT(icon);
+    ASSERT(iconURL);
     
-    NSString *iconURLString = [iconURL absoluteString];
-
-    NSMutableDictionary *icons = [_private->iconURLToIcons objectForKey:iconURLString];
-    [icons removeAllObjects];
-
-    icons = [self _iconsBySplittingRepresentationsOfIcon:icon];
+    NSMutableDictionary *icons = [self _iconsBySplittingRepresentationsOfIcon:icon];
 
     if(!icons){
         return;
     }
-    
+
+    NSString *iconURLString = [iconURL absoluteString];
+    [_private->iconURLToIcons removeObjectForKey:iconURLString];
     [_private->iconURLToIcons setObject:icons forKey:iconURLString];
 
     [self _retainIconForIconURLString:iconURLString];
@@ -525,12 +408,10 @@ NSSize WebIconLargeSize = {128, 128};
     [self performSelector:@selector(_releaseIconForIconURLString:) withObject:iconURLString afterDelay:0];
 }
 
-// FIXME: fix custom icons
 - (void)_setIconURL:(NSURL *)iconURL forSiteURL:(NSURL *)siteURL
 {
-    if(!iconURL || !siteURL){
-        return;
-    }
+    ASSERT(iconURL);
+    ASSERT(siteURL);
     
     NSString *siteURLString = [siteURL absoluteString];
     NSString *iconURLString = [iconURL absoluteString];
@@ -538,20 +419,14 @@ NSSize WebIconLargeSize = {128, 128};
     [_private->siteURLToIconURL setObject:iconURLString forKey:siteURLString];
     
     [self _addObject:siteURLString toSetForKey:iconURLString inDictionary:_private->iconURLToSiteURLs];
-
-    [self _addObject:siteURLString toSetForKey:[siteURL host] inDictionary:_private->hostToSiteURLs];
     
-    NSNumber *predeterminedRetainCount = [_private->futureSiteURLToRetainCount objectForKey:siteURLString];
+    NSNumber *futureRetainCount = [_private->futureSiteURLToRetainCount objectForKey:siteURLString];
 
-    if(predeterminedRetainCount){
+    if(futureRetainCount){
         NSNumber *retainCount = [_private->iconURLToRetainCount objectForKey:iconURLString];
+        ASSERT(retainCount);
 
-        if(!retainCount){
-            //NSLog(@"_setIconURL: forKey: no retainCount for iconURL");
-            return;
-        }
-
-        int newRetainCount = [retainCount intValue] + [predeterminedRetainCount intValue];
+        int newRetainCount = [retainCount intValue] + [futureRetainCount intValue];
         [_private->iconURLToRetainCount setObject:[NSNumber numberWithInt:newRetainCount] forKey:iconURLString];
         [_private->futureSiteURLToRetainCount removeObjectForKey:siteURLString];
     }
@@ -560,32 +435,17 @@ NSSize WebIconLargeSize = {128, 128};
     [self _updateFileDatabase];
 }
 
-- (void)_setBuiltInIconAtPath:(NSString *)path forHost:(NSString *)host
-{
-    if(!path || !host){
-        return;
-    }
-
-    [_private->hostToBuiltInIconPath setObject:path forKey:host];
-    
-    NSMutableSet *siteURLStrings = [_private->hostToSiteURLs objectForKey:host];
-    NSString *siteURLString;
-
-    NSEnumerator *enumerator = [siteURLStrings objectEnumerator];
-    while ((siteURLString = [enumerator nextObject]) != nil) {
-        [self _sendNotificationForSiteURL:[NSURL _web_URLWithString:siteURLString]];
-    }
-}
-
 - (void)_retainIconForIconURLString:(NSString *)iconURLString
 {
+    ASSERT(iconURLString);
+    
     NSNumber *retainCount = [_private->iconURLToRetainCount objectForKey:iconURLString];
     int newRetainCount;
     
-    if(!retainCount){
-        newRetainCount = 1;
-    }else{
+    if(retainCount){
         newRetainCount = [retainCount intValue] + 1;
+    }else{
+        newRetainCount = 1;        
     }
 
     [_private->iconURLToRetainCount setObject:[NSNumber numberWithInt:newRetainCount] forKey:iconURLString];
@@ -594,16 +454,16 @@ NSSize WebIconLargeSize = {128, 128};
         [_private->iconsToSaveWithURLs addObject:iconURLString];
         [_private->iconsToEraseWithURLs removeObject:iconURLString];
     }
-
-    //NSLog(@"_retainIconForIconURLString: %@ %d", iconURLString, newRetainCount);
 }
 
 - (void)_releaseIconForIconURLString:(NSString *)iconURLString
 {
+    ASSERT(iconURLString);
+    
     NSNumber *retainCount = [_private->iconURLToRetainCount objectForKey:iconURLString];
 
     if (!retainCount) {
-        ERROR("retain count is zero for %@", iconURLString);
+        ERROR("Tried release a non-retained icon: %@", iconURLString);
         return;
     }
     
@@ -611,46 +471,29 @@ NSSize WebIconLargeSize = {128, 128};
     [_private->iconURLToRetainCount setObject:[NSNumber numberWithInt:newRetainCount] forKey:iconURLString];
 
     if(newRetainCount == 0){
-
+        
         if([_private->iconsOnDiskWithURLs containsObject:iconURLString]){
             [_private->iconsToEraseWithURLs addObject:iconURLString];
             [_private->iconsToSaveWithURLs removeObject:iconURLString];
         }
 
         // Remove the icon's images
-        NSMutableDictionary *icons = [_private->iconURLToIcons objectForKey:iconURLString];
-        [icons removeAllObjects];
         [_private->iconURLToIcons removeObjectForKey:iconURLString];
-
+        
         // Remove the icon's retain count
         [_private->iconURLToRetainCount removeObjectForKey:iconURLString];
 
         // Remove the icon's associated site URLs
-        NSMutableSet *siteURLStringsForHost, *siteURLStrings;
-        NSEnumerator *enumerator;
-        NSString *siteURLString;
-        
-        siteURLStrings = [_private->iconURLToSiteURLs objectForKey:iconURLString];
+        NSSet *siteURLStrings = [_private->iconURLToSiteURLs objectForKey:iconURLString];
         [_private->siteURLToIconURL removeObjectsForKeys:[siteURLStrings allObjects]];
-
-        enumerator = [siteURLStrings objectEnumerator];
-        while ((siteURLString = [enumerator nextObject]) != nil) {
-            NSURL *siteURL = [NSURL _web_URLWithString:siteURLString];
-            siteURLStringsForHost = [_private->hostToSiteURLs objectForKey:[siteURL host]];
-            [siteURLStringsForHost removeObject:siteURLString];
-            if([siteURLStringsForHost count] == 0){
-                [_private->hostToSiteURLs removeObjectForKey:[siteURL host]];
-            }
-        }
-        
         [_private->iconURLToSiteURLs removeObjectForKey:iconURLString];
     }
-
-    //NSLog(@"_releaseIconForIconURLString: %@ %d", iconURLString, newRetainCount);
 }
 
 - (void)_retainFutureIconForSiteURL:(NSURL *)siteURL
 {
+    ASSERT(siteURL);
+    
     NSString *siteURLString = [siteURL absoluteString];
     
     NSNumber *retainCount = [_private->futureSiteURLToRetainCount objectForKey:siteURLString];
@@ -663,12 +506,12 @@ NSSize WebIconLargeSize = {128, 128};
     }
 
     [_private->futureSiteURLToRetainCount setObject:[NSNumber numberWithInt:newRetainCount] forKey:siteURLString];
-
-    ////NSLog(@"_setFutureIconRetainToDictionary: %@ %d", key, newRetainCount);
 }
 
 - (void)_releaseFutureIconForSiteURL:(NSURL *)siteURL
 {
+    ASSERT(siteURL);
+    
     NSString *siteURLString = [siteURL absoluteString];
     
     NSNumber *retainCount = [_private->futureSiteURLToRetainCount objectForKey:siteURLString];
@@ -685,8 +528,6 @@ NSSize WebIconLargeSize = {128, 128};
     }else{
         [_private->futureSiteURLToRetainCount setObject:[NSNumber numberWithInt:newRetainCount] forKey:siteURLString];
     }
-
-    ////NSLog(@"_setFutureIconReleaseToDictionary: %@ %d", key, newRetainCount);
 }
 
 - (void)_retainOriginalIconsOnDisk
@@ -694,7 +535,6 @@ NSSize WebIconLargeSize = {128, 128};
     NSEnumerator *enumerator;
     NSString *iconURLString;
 
-    //NSLog(@"_retainOriginalOnDiskIcons");
     enumerator = [_private->iconsOnDiskWithURLs objectEnumerator];
 
     while ((iconURLString = [enumerator nextObject]) != nil) {
@@ -708,7 +548,7 @@ NSSize WebIconLargeSize = {128, 128};
         _private->waitingToCleanup = YES;
         return;
     }
-    //NSLog(@"_releaseOriginalOnDiskIcons, %@", _private->iconsOnDiskWithURLs);
+
     NSEnumerator *enumerator = [_private->iconsOnDiskWithURLs objectEnumerator];
     NSString *iconURLString;
 
@@ -721,14 +561,20 @@ NSSize WebIconLargeSize = {128, 128};
 
 - (void)_sendNotificationForSiteURL:(NSURL *)siteURL
 {
+    ASSERT(siteURL);
+    
     NSDictionary *userInfo = [NSDictionary dictionaryWithObject:siteURL forKey:WebIconNotificationUserInfoSiteURLKey];
-    [[NSNotificationCenter defaultCenter] postNotificationName:WebIconDidChangeNotification
+    [[NSNotificationCenter defaultCenter] postNotificationName:WebIconDatabaseDidAddIconNotification
                                                         object:self
                                                       userInfo:userInfo];
 }
 
 - (void)_addObject:(id)object toSetForKey:(id)key inDictionary:(NSMutableDictionary *)dictionary
 {
+    ASSERT(key);
+    ASSERT(object);
+    ASSERT(dictionary);
+    
     NSMutableSet *set = [dictionary objectForKey:key];
 
     if(!set){
@@ -739,28 +585,16 @@ NSSize WebIconLargeSize = {128, 128};
     [dictionary setObject:set forKey:key];
 }
 
-- (NSURL *)_uniqueIconURL
-{
-    CFUUIDRef uid = CFUUIDCreate(NULL);
-    NSString *string = (NSString *)CFUUIDCreateString(NULL, uid);
-    NSURL *uniqueURL = [NSURL _web_URLWithString:[NSString stringWithFormat:@"icon:%@", string]];
-
-    CFRelease(uid);
-    CFRelease(string);
-
-    return uniqueURL;
-}
-
 - (NSImage *)_largestIconFromDictionary:(NSMutableDictionary *)icons
 {
+    ASSERT(icons);
     NSEnumerator *enumerator = [icons keyEnumerator];
     NSValue *currentSize, *largestSize=nil;
-    float currentSizeArea, largestSizeArea=0;
-    NSSize currentSizeSize;
+    float largestSizeArea=0;
 
     while ((currentSize = [enumerator nextObject]) != nil) {
-        currentSizeSize = [currentSize sizeValue];
-        currentSizeArea = currentSizeSize.width * currentSizeSize.height;
+        NSSize currentSizeSize = [currentSize sizeValue];
+        float currentSizeArea = currentSizeSize.width * currentSizeSize.height;
         if(!largestSizeArea || (currentSizeArea > largestSizeArea)){
             largestSize = currentSize;
             largestSizeArea = currentSizeArea;
@@ -772,19 +606,15 @@ NSSize WebIconLargeSize = {128, 128};
 
 - (NSMutableDictionary *)_iconsBySplittingRepresentationsOfIcon:(NSImage *)icon
 {
-    if(!icon){
-        return nil;
-    }
+    ASSERT(icon);
 
     NSMutableDictionary *icons = [NSMutableDictionary dictionary];
     NSEnumerator *enumerator = [[icon representations] objectEnumerator];
     NSImageRep *rep;
-    NSImage *subIcon;
-    NSSize size;
 
     while ((rep = [enumerator nextObject]) != nil) {
-        size = [rep size];
-        subIcon = [[NSImage alloc] initWithSize:size];
+        NSSize size = [rep size];
+        NSImage *subIcon = [[NSImage alloc] initWithSize:size];
         [subIcon addRepresentation:rep];
         [icons setObject:subIcon forKey:[NSValue valueWithSize:size]];
         [subIcon release];
@@ -794,6 +624,8 @@ NSSize WebIconLargeSize = {128, 128};
         return icons;
     }
 
+    ERROR("icon has no representations");
+    
     return nil;
 }
 
@@ -806,7 +638,7 @@ NSSize WebIconLargeSize = {128, 128};
 
     if(!icon){
         icon = [[[self _largestIconFromDictionary:icons] copy] autorelease];
-        icon = [self _iconByScalingIcon:icon toSize:size];
+        [self _scaleIcon:icon toSize:size];
 
         if(cache){
             [icons setObject:icon forKey:[NSValue valueWithSize:size]];
@@ -816,41 +648,18 @@ NSSize WebIconLargeSize = {128, 128};
     return icon;
 }
 
-- (NSImage *)_iconByScalingIcon:(NSImage *)icon toSize:(NSSize)size
+- (void)_scaleIcon:(NSImage *)icon toSize:(NSSize)size
 {
     ASSERT(size.width);
     ASSERT(size.height);
-    
-    double start, duration;
-    NSImage *scaledIcon;
         
-    start = CFAbsoluteTimeGetCurrent();
+    double start = CFAbsoluteTimeGetCurrent();
 
-    if([[NSUserDefaults standardUserDefaults] boolForKey:@"Experiments"]){
-        // Note: This doesn't seem to make a difference for scaling up.
-        
-        NSSize originalSize = [icon size];
-        scaledIcon = [[[NSImage alloc] initWithSize:size] autorelease];
-
-        [scaledIcon lockFocus];
-        NSGraphicsContext *currentContent = [NSGraphicsContext currentContext];
-        [currentContent setImageInterpolation:NSImageInterpolationHigh];
-        [icon drawInRect:NSMakeRect(0, 0, size.width, size.height)
-                fromRect:NSMakeRect(0, 0, originalSize.width, originalSize.height)
-               operation:NSCompositeSourceOver	// Renders transparency correctly
-                fraction:1.0];
-        [scaledIcon unlockFocus];
-        
-    }else{
-        scaledIcon = icon;
-        [scaledIcon setScalesWhenResized:YES];
-        [scaledIcon setSize:size];
-    }
+    [icon setScalesWhenResized:YES];
+    [icon setSize:size];
     
-    duration = CFAbsoluteTimeGetCurrent() - start;
+    double duration = CFAbsoluteTimeGetCurrent() - start;
     LOG(Timing, "scaling icon took %f seconds.", duration);
-
-    return scaledIcon;
 }
 
 @end
diff --git a/WebKit/Misc.subproj/WebIconDatabasePrivate.h b/WebKit/Misc.subproj/WebIconDatabasePrivate.h
index 179953d..87b5d3c 100644
--- a/WebKit/Misc.subproj/WebIconDatabasePrivate.h
+++ b/WebKit/Misc.subproj/WebIconDatabasePrivate.h
@@ -21,9 +21,6 @@
     NSMutableDictionary *iconURLToSiteURLs;
     NSMutableDictionary *siteURLToIconURL;    
     NSMutableDictionary *futureSiteURLToRetainCount;
-    NSMutableDictionary *hostToSiteURLs;
-    NSMutableDictionary *pathToBuiltInIcons;
-    NSMutableDictionary *hostToBuiltInIconPath;
     
     NSMutableSet *iconsOnDiskWithURLs;
     NSMutableSet *iconsToEraseWithURLs;
@@ -48,8 +45,6 @@
 // Called by WebDataSource to bind a web site URL to a icon URL and icon image.
 - (void)_setIconURL:(NSURL *)iconURL forSiteURL:(NSURL *)siteURL;
 
-- (void)_setBuiltInIconAtPath:(NSString *)path forHost:(NSString *)host;
-
 - (BOOL)_hasIconForSiteURL:(NSURL *)siteURL;
 
 @end
\ No newline at end of file
diff --git a/WebKit/WebKit.exp b/WebKit/WebKit.exp
index d3765ab..b715fba 100644
--- a/WebKit/WebKit.exp
+++ b/WebKit/WebKit.exp
@@ -36,7 +36,7 @@ _WebHistoryEntriesAddedNotification
 _WebHistoryEntriesRemovedNotification
 _WebHistoryAllEntriesRemovedNotification
 _WebHistoryLoadedNotification
-_WebIconDidChangeNotification
+_WebIconDatabaseDidAddIconNotification
 _WebIconLargeSize
 _WebIconMediumSize
 _WebIconNotificationUserInfoSiteURLKey
diff --git a/WebKit/WebView.subproj/WebDataSourcePrivate.m b/WebKit/WebView.subproj/WebDataSourcePrivate.m
index 3cb2bbf..4ca2904 100644
--- a/WebKit/WebView.subproj/WebDataSourcePrivate.m
+++ b/WebKit/WebView.subproj/WebDataSourcePrivate.m
@@ -480,7 +480,17 @@
 
 - (void)iconLoader:(WebIconLoader *)iconLoader receivedPageIcon:(NSImage *)icon;
 {
-    [[WebIconDatabase sharedIconDatabase] _setIconURL:[iconLoader URL] forSiteURL:[self URL]];
+    WebIconDatabase *iconDB = [WebIconDatabase sharedIconDatabase];
+    NSURL *originalURL = [[self _originalRequest] URL];
+    NSURL *iconURL = [iconLoader URL];
+    NSURL *URL = [self URL];
+    
+    // Bind the URL of the original request and the final URL to the icon URL.
+    [iconDB _setIconURL:iconURL forSiteURL:URL];
+    if(![originalURL isEqualTo:URL]){
+        [iconDB _setIconURL:iconURL forSiteURL:originalURL];
+    }
+    
     [[_private->controller locationChangeDelegate] receivedPageIcon:nil forDataSource:self];
 }
 
@@ -489,18 +499,20 @@
     ASSERT(!_private->iconLoader);
 
     if([self webFrame] == [[self controller] mainFrame] && !_private->mainDocumentError){
-        
-        NSURL *dataSourceURL = [self URL];
+
+        // Use the original URL because thats what history items.
+        NSURL *URL = [self URL];
         WebIconDatabase *iconDB = [WebIconDatabase sharedIconDatabase];
         
-        if([iconDB _hasIconForSiteURL:dataSourceURL]){
+        if([iconDB _hasIconForSiteURL:URL]){
             // Tell about the icon immediately if the db already has it
             [[_private->controller locationChangeDelegate] receivedPageIcon:nil forDataSource:self];
         }else{
             
             if(!_private->iconURL){
                 // No icon URL from the LINK tag so try the server's root
-                _private->iconURL = [[[NSURL _web_URLWithString:@"/favicon.ico" relativeToURL:dataSourceURL] absoluteURL] retain];
+                _private->iconURL = [[[NSURL _web_URLWithString:@"/favicon.ico"
+                                                  relativeToURL:URL] absoluteURL] retain];
             }
 
             if(_private->iconURL != nil){

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list