diff --git a/mozilla/camino/src/browser/BrowserWindowController.mm b/mozilla/camino/src/browser/BrowserWindowController.mm index 2b718ac1959..bee1e541e9e 100644 --- a/mozilla/camino/src/browser/BrowserWindowController.mm +++ b/mozilla/camino/src/browser/BrowserWindowController.mm @@ -552,6 +552,8 @@ enum BWCOpenDest { - (IBAction)backMenu:(id)inSender; - (IBAction)forwardMenu:(id)inSender; +- (void)reloadBrowserWrapper:(BrowserWrapper *)inWrapper sender:(id)sender; + // run a modal according to the users pref on opening a feed - (BOOL)shouldWarnBeforeOpeningFeed; - (void)buildFeedsDetectedListMenu:(NSNotification*)notifer; @@ -3062,18 +3064,41 @@ enum BWCOpenDest { - (IBAction)reload:(id)aSender { - unsigned int reloadFlags = NSLoadFlagsNone; + [self reloadBrowserWrapper:mBrowserView sender:aSender]; +} - if ([aSender respondsToSelector:@selector(keyEquivalent)]) { +- (IBAction)reloadSendersTab:(id)sender +{ + if ([sender isMemberOfClass:[NSMenuItem class]]) { + BrowserTabViewItem* tabViewItem = [mTabBrowser itemWithTag:[sender tag]]; + if (tabViewItem) + [self reloadBrowserWrapper:[tabViewItem view] sender:sender]; + } +} + +- (IBAction)reloadAllTabs:(id)sender +{ + NSEnumerator* tabsEnum = [[mTabBrowser tabViewItems] objectEnumerator]; + BrowserTabViewItem* curTabItem; + while ((curTabItem = [tabsEnum nextObject])) { + if ([curTabItem isKindOfClass:[BrowserTabViewItem class]]) + [self reloadBrowserWrapper:[curTabItem view] sender:sender]; + } +} + +- (void)reloadBrowserWrapper:(BrowserWrapper *)inWrapper sender:(id)sender +{ + unsigned int reloadFlags = NSLoadFlagsNone; + if ([sender respondsToSelector:@selector(keyEquivalent)]) { // Capital R tests for shift when there's a keyEquivalent, keyEquivalentModifierMask tests when there isn't - if ([[aSender keyEquivalent] isEqualToString:@"R"] || ([aSender keyEquivalentModifierMask] & NSShiftKeyMask)) + if ([[sender keyEquivalent] isEqualToString:@"R"] || ([sender keyEquivalentModifierMask] & NSShiftKeyMask)) reloadFlags = NSLoadFlagsBypassCacheAndProxy; } // It's a toolbar button, so we test for shift using modifierFlags else if ([[NSApp currentEvent] modifierFlags] & NSShiftKeyMask) reloadFlags = NSLoadFlagsBypassCacheAndProxy; - [[mBrowserView getBrowserView] reload:reloadFlags]; + [inWrapper reload:reloadFlags]; } - (IBAction)stop:(id)aSender @@ -3470,42 +3495,6 @@ enum BWCOpenDest { [[NSApp delegate] delayedAdjustBookmarksMenuItemsEnabling]; } -- (IBAction)reloadSendersTab:(id)sender -{ - if ([sender isMemberOfClass:[NSMenuItem class]]) { - BrowserTabViewItem* tabViewItem = [mTabBrowser itemWithTag:[sender tag]]; - if (tabViewItem) { - unsigned int reloadFlags = NSLoadFlagsNone; - // Capital R tests for shift when there's a keyEquivalent, keyEquivalentModifierMask tests when there isn't - if ([[sender keyEquivalent] isEqualToString:@"R"] || ([sender keyEquivalentModifierMask] & NSShiftKeyMask)) - reloadFlags = NSLoadFlagsBypassCacheAndProxy; - - [[[tabViewItem view] getBrowserView] reload:reloadFlags]; - } - } -} - -- (IBAction)reloadAllTabs:(id)sender -{ - unsigned int reloadFlags = NSLoadFlagsNone; - - if ([sender respondsToSelector:@selector(keyEquivalent)]) { - // Capital R tests for shift when there's a keyEquivalent, keyEquivalentModifierMask tests when there isn't - if ([[sender keyEquivalent] isEqualToString:@"R"] || ([sender keyEquivalentModifierMask] & NSShiftKeyMask)) - reloadFlags = NSLoadFlagsBypassCacheAndProxy; - } - // It's a toolbar button, so we test for shift using modifierFlags - else if ([[NSApp currentEvent] modifierFlags] & NSShiftKeyMask) - reloadFlags = NSLoadFlagsBypassCacheAndProxy; - - NSEnumerator* tabsEnum = [[mTabBrowser tabViewItems] objectEnumerator]; - BrowserTabViewItem* curTabItem; - while ((curTabItem = [tabsEnum nextObject])) { - if ([curTabItem isKindOfClass:[BrowserTabViewItem class]]) - [[[curTabItem view] getBrowserView] reload:reloadFlags]; - } -} - - (IBAction)moveTabToNewWindow:(id)sender { if ([sender isMemberOfClass:[NSMenuItem class]]) { diff --git a/mozilla/camino/src/browser/BrowserWrapper.h b/mozilla/camino/src/browser/BrowserWrapper.h index 09bb658ab75..ccee676698d 100644 --- a/mozilla/camino/src/browser/BrowserWrapper.h +++ b/mozilla/camino/src/browser/BrowserWrapper.h @@ -214,6 +214,7 @@ class nsIArray; - (void)setTab:(NSTabViewItem*)tab; - (NSTabViewItem*) tab; +- (void)reload:(unsigned int)reloadFlags; - (IBAction)reloadWithNewCharset:(NSString*)charset; - (NSString*)currentCharset; diff --git a/mozilla/camino/src/browser/BrowserWrapper.mm b/mozilla/camino/src/browser/BrowserWrapper.mm index 9113e7385e1..6d685f3415f 100644 --- a/mozilla/camino/src/browser/BrowserWrapper.mm +++ b/mozilla/camino/src/browser/BrowserWrapper.mm @@ -1079,6 +1079,14 @@ enum { [curURI isEqualToString:@"about:config"])); } +- (void)reload:(unsigned int)reloadFlags +{ + // Toss the favicon when force reloading + if (reloadFlags == NSLoadFlagsBypassCacheAndProxy) + [[SiteIconProvider sharedFavoriteIconProvider] removeImageForPageURL:[self getCurrentURI]]; + + [mBrowserView reload:reloadFlags]; +} - (IBAction)reloadWithNewCharset:(NSString*)charset { diff --git a/mozilla/camino/src/browser/SiteIconCache.h b/mozilla/camino/src/browser/SiteIconCache.h index f579f612803..3694037c69a 100644 --- a/mozilla/camino/src/browser/SiteIconCache.h +++ b/mozilla/camino/src/browser/SiteIconCache.h @@ -62,4 +62,7 @@ - (NSImage*)siteIconForURL:(NSString*)inURL; - (void)setSiteIcon:(NSImage*)inImage forURL:(NSString*)inURL withExpiration:(NSDate*)inExpirationDate memoryOnly:(BOOL)inMemoryOnly; +// Purge our cached image of the favicon located at inURL +- (void)removeImageForURL:(NSString*)inURL; + @end diff --git a/mozilla/camino/src/browser/SiteIconCache.mm b/mozilla/camino/src/browser/SiteIconCache.mm index d49fd79112e..81dfe21eb87 100644 --- a/mozilla/camino/src/browser/SiteIconCache.mm +++ b/mozilla/camino/src/browser/SiteIconCache.mm @@ -54,7 +54,7 @@ static NSString* const kCacheEntryExpirationDateKey = @"exp_date"; - (void)setUUID:(NSString*)inUUID expiration:(NSDate*)inExpirationDate forURL:(NSString*)inURL; - (NSString*)UUIDForURL:(NSString*)inURL expired:(BOOL*)outExpired; -// uuid arg is optional (for speed) +// Note also the public method without the uuid arg (same functionality, but slower) - (void)removeImageForURL:(NSString*)inURL uuid:(NSString*)inUUID; - (void)loadCache; @@ -195,6 +195,12 @@ static NSString* const kCacheEntryExpirationDateKey = @"exp_date"; return [entryDict objectForKey:kCacheEntryUUIDStringKey]; } +// Simplified public call of |removeImageForURL| without the uuid arg +- (void)removeImageForURL:(NSString*)inURL +{ + [self removeImageForURL:inURL uuid:nil]; +} + - (void)removeImageForURL:(NSString*)inURL uuid:(NSString*)inUUID { // remove from memory cache diff --git a/mozilla/camino/src/browser/SiteIconProvider.h b/mozilla/camino/src/browser/SiteIconProvider.h index b454b43bd33..e11d082747c 100644 --- a/mozilla/camino/src/browser/SiteIconProvider.h +++ b/mozilla/camino/src/browser/SiteIconProvider.h @@ -89,4 +89,7 @@ class NeckoCacheHelper; // will attempt to look for any cached image urls. - (NSString*)favoriteIconURLFromPageURL:(NSString*)inPageURL; +// removes the favicon image associated with the page URL from cache. +- (void)removeImageForPageURL:(NSString*)inURI; + @end diff --git a/mozilla/camino/src/browser/SiteIconProvider.mm b/mozilla/camino/src/browser/SiteIconProvider.mm index 858971eec42..103afe88cf3 100644 --- a/mozilla/camino/src/browser/SiteIconProvider.mm +++ b/mozilla/camino/src/browser/SiteIconProvider.mm @@ -328,6 +328,15 @@ NeckoCacheHelper::ClearCache() return faviconURL; } +// -removeImageForPageURL: +// +// Public method to remove the favicon image associated with a webpage's URL inURI from cache. +// +- (void)removeImageForPageURL:(NSString*)inURI +{ + [[SiteIconCache sharedSiteIconCache] removeImageForURL:[self favoriteIconURLFromPageURL:inURI]]; +} + - (void)addToMissedIconsCache:(NSString*)inURI withExpirationSeconds:(unsigned int)inExpSeconds { if (mIconsCacheHelper)