diff --git a/camino/PreferencePanes/Privacy/English.lproj/Localizable.strings b/camino/PreferencePanes/Privacy/English.lproj/Localizable.strings index b66f0b405efb..361e7744e879 100644 Binary files a/camino/PreferencePanes/Privacy/English.lproj/Localizable.strings and b/camino/PreferencePanes/Privacy/English.lproj/Localizable.strings differ diff --git a/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/info.nib b/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/info.nib index d32af8b4af44..8bf9637c1b16 100644 --- a/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/info.nib +++ b/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/info.nib @@ -3,7 +3,7 @@ IBDocumentLocation - 67 25 406 307 0 0 1600 1002 + 37 15 406 307 0 0 1024 746 IBEditorPositions 622 @@ -16,8 +16,9 @@ IBOpenObjects 5 + 401 IBSystem Version - 8L2127 + 8J135 diff --git a/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/keyedobjects.nib b/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/keyedobjects.nib index 120e49fa9012..9c74b0d56a8a 100644 Binary files a/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/keyedobjects.nib and b/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/keyedobjects.nib differ diff --git a/camino/PreferencePanes/Privacy/PrivacyPane.h b/camino/PreferencePanes/Privacy/PrivacyPane.h index 966c8c161b49..d2e3a002d18d 100644 --- a/camino/PreferencePanes/Privacy/PrivacyPane.h +++ b/camino/PreferencePanes/Privacy/PrivacyPane.h @@ -137,3 +137,9 @@ typedef enum ECookiePolicyPopupIndex - (void) filterCookiesPermissionsWithString: (NSString*) inFilterString; - (void) filterCookiesWithString: (NSString*) inFilterString; @end + +// custom formatter for cookies list to handle session cookie expiration sanely +@interface CookieDateFormatter : NSDateFormatter +{ +} +@end diff --git a/camino/PreferencePanes/Privacy/PrivacyPane.mm b/camino/PreferencePanes/Privacy/PrivacyPane.mm index 5cedd7bb3dc8..f12e1bd59a8b 100644 --- a/camino/PreferencePanes/Privacy/PrivacyPane.mm +++ b/camino/PreferencePanes/Privacy/PrivacyPane.mm @@ -327,6 +327,10 @@ PR_STATIC_CALLBACK(int) compareValues(nsICookie* aCookie1, nsICookie* aCookie2, [mCookiesTable setDeleteAction:@selector(removeCookies:)]; [mCookiesTable setTarget:self]; + + CookieDateFormatter* cookieDateFormatter = [[CookieDateFormatter alloc] initWithDateFormat:@"%b %d, %Y" allowNaturalLanguage:NO]; + [[[mCookiesTable tableColumnWithIdentifier:@"Expires"] dataCell] setFormatter:cookieDateFormatter]; + [cookieDateFormatter release]; // start sorted by host mCachedCookies->Sort(compareCookieHosts, nsnull); @@ -726,15 +730,10 @@ PR_STATIC_CALLBACK(int) compareValues(nsICookie* aCookie1, nsICookie* aCookie2, } else if ([[aTableColumn identifier] isEqualToString: @"Expires"]) { PRUint64 expires = 0; mCachedCookies->ObjectAt(rowIndex)->GetExpires(&expires); - if (expires == 0) { - // if expires is 0, it's a session cookie; display as expiring on the current date. - // It's not perfect, but it's better than showing the epoch. - NSDate *date = [NSDate date]; - return date; // special case return - } else { - NSDate *date = [NSDate dateWithTimeIntervalSince1970: (NSTimeInterval)expires]; - return date; // special case return - } + // If expires is 0, it's a session cookie. + // We use a custom formatter to display a localised string in this case. + NSDate *date = [NSDate dateWithTimeIntervalSince1970:(NSTimeInterval)expires]; + return date; // special case return } else if ([[aTableColumn identifier] isEqualToString: @"Value"]) { mCachedCookies->ObjectAt(rowIndex)->GetValue(cookieVal); } @@ -1147,3 +1146,17 @@ PR_STATIC_CALLBACK(int) compareValues(nsICookie* aCookie1, nsICookie* aCookie2, } @end + +#pragma mark - + +@implementation CookieDateFormatter + +- (NSString*)stringForObjectValue:(id)anObject +{ + if ([(NSDate*)anObject timeIntervalSince1970] == 0) + return NSLocalizedString(@"CookieExpiresOnQuit", nil); + else + return [super stringForObjectValue:anObject]; +} + +@end