From d53b13a300a70feaf2ad661f0d145fc4a49bca01 Mon Sep 17 00:00:00 2001 From: "morse%netscape.com" Date: Wed, 28 Aug 2002 00:30:06 +0000 Subject: [PATCH] bug 162129 (leak in cookie module) & bug 158216 (cookies written out too often), r=sgehani, sr=jag git-svn-id: svn://10.0.0.236/trunk@128315 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/extensions/cookie/nsCookieManager.cpp | 2 +- mozilla/extensions/cookie/nsCookieService.cpp | 4 ++-- mozilla/extensions/cookie/nsCookies.cpp | 22 +++++++++++-------- mozilla/extensions/cookie/nsCookies.h | 3 ++- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/mozilla/extensions/cookie/nsCookieManager.cpp b/mozilla/extensions/cookie/nsCookieManager.cpp index 07a3855be29..ea731e2740a 100644 --- a/mozilla/extensions/cookie/nsCookieManager.cpp +++ b/mozilla/extensions/cookie/nsCookieManager.cpp @@ -123,7 +123,7 @@ nsresult nsCookieManager::Init() NS_IMETHODIMP nsCookieManager::RemoveAll(void) { ::COOKIE_RemoveAll(); - ::COOKIE_Write(PR_FALSE); + ::COOKIE_Write(); return NS_OK; } diff --git a/mozilla/extensions/cookie/nsCookieService.cpp b/mozilla/extensions/cookie/nsCookieService.cpp index 5e4c1d759e8..9dbcae5030b 100644 --- a/mozilla/extensions/cookie/nsCookieService.cpp +++ b/mozilla/extensions/cookie/nsCookieService.cpp @@ -72,7 +72,7 @@ nsCookieService::nsCookieService() nsCookieService::~nsCookieService(void) { - COOKIE_Write(PR_FALSE); /* in case any deleted cookies didn't get removed from file yet */ + COOKIE_Write(); COOKIE_RemoveAll(); } @@ -127,7 +127,7 @@ nsCookieService::OnStateChange(nsIWebProgress* aWebProgress, { if (progressStateFlags & STATE_IS_DOCUMENT) if (progressStateFlags & STATE_STOP) - COOKIE_Write(PR_TRUE); + COOKIE_Notify(); return NS_OK; } diff --git a/mozilla/extensions/cookie/nsCookies.cpp b/mozilla/extensions/cookie/nsCookies.cpp index a91703c9f60..76161220132 100644 --- a/mozilla/extensions/cookie/nsCookies.cpp +++ b/mozilla/extensions/cookie/nsCookies.cpp @@ -1578,7 +1578,7 @@ COOKIE_SetCookieStringFromHttp(nsIURI * curURL, nsIURI * firstURL, nsIPrompt *aP /* saves out the HTTP cookies to disk */ PUBLIC nsresult -COOKIE_Write(PRBool notify = PR_TRUE) { +COOKIE_Write() { if (!cookie_changed) { return NS_OK; } @@ -1654,14 +1654,16 @@ COOKIE_Write(PRBool notify = PR_TRUE) { strm.flush(); strm.close(); - /* Notify cookie manager dialog to update its display */ - if (notify) { - nsCOMPtr os(do_GetService("@mozilla.org/observer-service;1")); - if (os) { - os->NotifyObservers(nsnull, "cookieChanged", NS_LITERAL_STRING("cookies").get()); - } - } + return NS_OK; +} +/* Notify cookie manager dialog to update its display */ +PUBLIC nsresult +COOKIE_Notify() { + nsCOMPtr os(do_GetService("@mozilla.org/observer-service;1")); + if (os) { + os->NotifyObservers(nsnull, "cookieChanged", NS_LITERAL_STRING("cookies").get()); + } return NS_OK; } @@ -1756,6 +1758,7 @@ COOKIE_Read() { /* check for bad legacy cookies (domain not starting with a dot) */ if (new_cookie->isDomain && *new_cookie->host != '.') { /* bad cookie, discard it */ + deleteCookie((void*)new_cookie, nsnull); continue; } @@ -1763,6 +1766,7 @@ COOKIE_Read() { if (!cookie_list) { cookie_list = new nsVoidArray(); if (!cookie_list) { + deleteCookie((void*)new_cookie, nsnull); strm.close(); return NS_ERROR_OUT_OF_MEMORY; } @@ -1930,7 +1934,7 @@ COOKIE_Remove cookie_list->RemoveElementAt(count); deleteCookie((void*)cookie, nsnull); cookie_changed = PR_TRUE; - COOKIE_Write(PR_FALSE); // don't update cookie-manager display + COOKIE_Write(); break; } } diff --git a/mozilla/extensions/cookie/nsCookies.h b/mozilla/extensions/cookie/nsCookies.h index b0ebdc76c5b..24376c38a66 100644 --- a/mozilla/extensions/cookie/nsCookies.h +++ b/mozilla/extensions/cookie/nsCookies.h @@ -49,7 +49,8 @@ class nsIPrompt; class nsIHttpChannel; extern nsresult COOKIE_Read(); -extern nsresult COOKIE_Write(PRBool notify); +extern nsresult COOKIE_Write(); +extern nsresult COOKIE_Notify(); //XXX these should operate on |const char*| extern char * COOKIE_GetCookie(nsIURI * address); extern char * COOKIE_GetCookieFromHttp(nsIURI * address, nsIURI * firstAddress);