From d82e69afa820d080be2c922b3ca6e81c0e8e8dae Mon Sep 17 00:00:00 2001 From: "morse%netscape.com" Date: Fri, 16 Nov 2001 15:05:53 +0000 Subject: [PATCH] bug 104894, parsing p3p compact policies, r=harishd, sr=alecf git-svn-id: svn://10.0.0.236/trunk@108304 18797224-902f-48f8-a5cc-f745e15eee43 --- .../html/document/src/nsHTMLContentSink.cpp | 11 +++- .../html/document/src/nsHTMLDocument.cpp | 2 +- .../extensions/cookie/nsCookieHTTPNotify.cpp | 2 +- mozilla/extensions/cookie/nsCookieService.cpp | 8 +-- mozilla/extensions/cookie/nsCookies.cpp | 50 ++++++++++++------- mozilla/extensions/cookie/nsCookies.h | 5 +- .../extensions/cookie/nsICookieService.idl | 6 ++- .../extensions/cookie/tests/TestCookie.cpp | 2 +- .../plugin/base/src/nsPluginHostImpl.cpp | 2 +- 9 files changed, 57 insertions(+), 31 deletions(-) diff --git a/mozilla/content/html/document/src/nsHTMLContentSink.cpp b/mozilla/content/html/document/src/nsHTMLContentSink.cpp index 93973e9aa65..416b25ab291 100644 --- a/mozilla/content/html/document/src/nsHTMLContentSink.cpp +++ b/mozilla/content/html/document/src/nsHTMLContentSink.cpp @@ -4725,7 +4725,16 @@ HTMLContentSink::ProcessHeaderData(nsIAtom* aHeader,const nsAReadableString& aVa window->GetPrompter(getter_AddRefs(prompt)); } } - rv = cookieServ->SetCookieString(baseURI, prompt, cookie); + + nsCOMPtr httpChannel; + if (mParser) { + nsCOMPtr channel; + if (NS_SUCCEEDED(mParser->GetChannel(getter_AddRefs(channel)))) { + httpChannel = do_QueryInterface(channel); + } + } + + rv = cookieServ->SetCookieString(baseURI, prompt, cookie, httpChannel); nsCRT::free(cookie); if (NS_FAILED(rv)) return rv; } // END set-cookie diff --git a/mozilla/content/html/document/src/nsHTMLDocument.cpp b/mozilla/content/html/document/src/nsHTMLDocument.cpp index cf9e2de2103..03ca88225b8 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/content/html/document/src/nsHTMLDocument.cpp @@ -2006,7 +2006,7 @@ nsHTMLDocument::SetCookie(const nsAReadableString& aCookie) result = NS_ERROR_OUT_OF_MEMORY; char* cookie = ToNewCString(aCookie); if (cookie) { - result = service->SetCookieString(mDocumentURL, prompt, cookie); + result = service->SetCookieString(mDocumentURL, prompt, cookie, 0); nsCRT::free(cookie); } } diff --git a/mozilla/extensions/cookie/nsCookieHTTPNotify.cpp b/mozilla/extensions/cookie/nsCookieHTTPNotify.cpp index 2919f52a32b..ca98c22c6c6 100644 --- a/mozilla/extensions/cookie/nsCookieHTTPNotify.cpp +++ b/mozilla/extensions/cookie/nsCookieHTTPNotify.cpp @@ -264,7 +264,7 @@ nsCookieHTTPNotify::OnExamineResponse(nsIHttpChannel *aHttpChannel) if (NS_FAILED(rv)) return rv; // Save the cookie - rv = mCookieService->SetCookieStringFromHttp(pURL, pFirstURL, pPrompter, cookieHeader, dateHeader); + rv = mCookieService->SetCookieStringFromHttp(pURL, pFirstURL, pPrompter, cookieHeader, dateHeader, aHttpChannel); return rv; } diff --git a/mozilla/extensions/cookie/nsCookieService.cpp b/mozilla/extensions/cookie/nsCookieService.cpp index 1177ed2f148..33777911007 100644 --- a/mozilla/extensions/cookie/nsCookieService.cpp +++ b/mozilla/extensions/cookie/nsCookieService.cpp @@ -183,18 +183,18 @@ nsCookieService::GetCookieStringFromHttp(nsIURI *aURL, nsIURI *aFirstURL, char * } NS_IMETHODIMP -nsCookieService::SetCookieString(nsIURI *aURL, nsIPrompt* aPrompt, const char * aCookie) { +nsCookieService::SetCookieString(nsIURI *aURL, nsIPrompt* aPrompt, const char * aCookie, nsIHttpChannel* aHttpChannel) { char *spec = NULL; nsresult result = aURL->GetSpec(&spec); NS_ASSERTION(result == NS_OK, "deal with this"); - COOKIE_SetCookieString(spec, aPrompt, aCookie, mIOService); + COOKIE_SetCookieString(spec, aPrompt, aCookie, mIOService, aHttpChannel); nsCRT::free(spec); return NS_OK; } NS_IMETHODIMP -nsCookieService::SetCookieStringFromHttp(nsIURI *aURL, nsIURI *aFirstURL, nsIPrompt *aPrompter, const char *aCookie, const char *aExpires) +nsCookieService::SetCookieStringFromHttp(nsIURI *aURL, nsIURI *aFirstURL, nsIPrompt *aPrompter, const char *aCookie, const char *aExpires, nsIHttpChannel* aHttpChannel) { char *spec = NULL; nsresult rv = aURL->GetSpec(&spec); @@ -204,7 +204,7 @@ nsCookieService::SetCookieStringFromHttp(nsIURI *aURL, nsIURI *aFirstURL, nsIPro char *firstSpec = NULL; rv = aFirstURL->GetSpec(&firstSpec); if (NS_FAILED(rv)) return rv; - COOKIE_SetCookieStringFromHttp(spec, firstSpec, aPrompter, aCookie, (char *)aExpires, mIOService); + COOKIE_SetCookieStringFromHttp(spec, firstSpec, aPrompter, aCookie, (char *)aExpires, mIOService, aHttpChannel); nsCRT::free(firstSpec); } nsCRT::free(spec); diff --git a/mozilla/extensions/cookie/nsCookies.cpp b/mozilla/extensions/cookie/nsCookies.cpp index a7f09500817..c32f71f142f 100644 --- a/mozilla/extensions/cookie/nsCookies.cpp +++ b/mozilla/extensions/cookie/nsCookies.cpp @@ -51,6 +51,7 @@ #include "nsIPref.h" #include "nsTextFormatter.h" #include "nsAppDirectoryServiceDefs.h" +//!!!!!#include "nsIP3PService.h" #define MAX_NUMBER_OF_COOKIES 300 #define MAX_COOKIES_PER_SERVER 20 @@ -386,6 +387,13 @@ cookie_BehaviorPrefChanged(const char * newpref, void * data) { if (!prefs || NS_FAILED(prefs->GetIntPref(cookie_behaviorPref, &n))) { n = PERMISSION_Accept; } + + if (n == PERMISSION_P3P) { + // load p3p dll +//!!!!! nsCOMPtr p3p(do_GetService(NS_P3PSERVICE_CONTRACTID)); +//!!!!! if (!p3p) return 0; + } + cookie_SetBehaviorPref((PERMISSION_BehaviorEnum)n); return 0; } @@ -491,6 +499,13 @@ COOKIE_RegisterPrefCallbacks(void) { if (NS_FAILED(prefs->GetIntPref(cookie_behaviorPref, &n))) { n = PERMISSION_Accept; } + + if (n == PERMISSION_P3P) { + // load p3p dll +//!!!!! nsCOMPtr p3p(do_GetService(NS_P3PSERVICE_CONTRACTID)); +//!!!!! if (!p3p) return; + } + cookie_SetBehaviorPref((PERMISSION_BehaviorEnum)n); prefs->RegisterCallback(cookie_behaviorPref, cookie_BehaviorPrefChanged, nsnull); @@ -788,9 +803,13 @@ cookie_isForeign (char * curURL, char * firstURL, nsIIOService* ioService) { * P3P_ExplicitConsent, or P3P_NoIdentInfo based on site */ int -P3P_SitePolicy(char * curURL) { - // to be replaced with harishd's routine when available - return P3P_ImplicitConsent; +P3P_SitePolicy(char * curURL, nsIHttpChannel* aHttpChannel) { + int consent = P3P_NoPolicy; +//!!!!! nsCOMPtr p3p(do_GetService(NS_P3PSERVICE_CONTRACTID)); +//!!!!! if (p3p) { +//!!!!! p3p->GetConsent(curURL,aHttpChannel,&consent); +//!!!!! } + return consent; } /* @@ -820,8 +839,8 @@ cookie_P3PUserPref(PRInt32 policy, PRBool foreign) { * returns P3P_Accept, P3P_Downgrade, or P3P_Reject based on user's preferences */ int -cookie_P3PDecision (char * curURL, char * firstURL, nsIIOService* ioService) { - return cookie_P3PUserPref(P3P_SitePolicy(curURL), +cookie_P3PDecision (char * curURL, char * firstURL, nsIIOService* ioService, nsIHttpChannel* aHttpChannel) { + return cookie_P3PUserPref(P3P_SitePolicy(curURL, aHttpChannel), cookie_isForeign(curURL, firstURL, ioService)); } @@ -835,11 +854,6 @@ PUBLIC char * COOKIE_GetCookieFromHttp(char * address, char * firstAddress, nsIIOService* ioService) { - if ((cookie_GetBehaviorPref() == PERMISSION_P3P) && - (cookie_P3PDecision(address, firstAddress, ioService) == P3P_Reject)) { - return nsnull; - } - if ((cookie_GetBehaviorPref() == PERMISSION_DontAcceptForeign) && (!firstAddress || cookie_isForeign(address, firstAddress, ioService))) { @@ -902,7 +916,7 @@ cookie_Count(char * host) { * this via COOKIE_SetCookieStringFromHttp. */ PRIVATE void -cookie_SetCookieString(char * curURL, nsIPrompt *aPrompter, const char * setCookieHeader, time_t timeToExpire, nsIIOService* ioService) { +cookie_SetCookieString(char * curURL, nsIPrompt *aPrompter, const char * setCookieHeader, time_t timeToExpire, nsIIOService* ioService, nsIHttpChannel* aHttpChannel) { cookie_CookieStruct * prev_cookie; char *path_from_header=nsnull, *host_from_header=nsnull; char *name_from_header=nsnull, *cookie_from_header=nsnull; @@ -1273,8 +1287,8 @@ cookie_SetCookieString(char * curURL, nsIPrompt *aPrompter, const char * setCook } PUBLIC void -COOKIE_SetCookieString(char * curURL, nsIPrompt *aPrompter, const char * setCookieHeader, nsIIOService* ioService) { - COOKIE_SetCookieStringFromHttp(curURL, nsnull, aPrompter, setCookieHeader, 0, ioService); +COOKIE_SetCookieString(char * curURL, nsIPrompt *aPrompter, const char * setCookieHeader, nsIIOService* ioService, nsIHttpChannel* aHttpChannel) { + COOKIE_SetCookieStringFromHttp(curURL, nsnull, aPrompter, setCookieHeader, 0, ioService, aHttpChannel); } /* This function wrapper wraps COOKIE_SetCookieString for the purposes of @@ -1286,15 +1300,15 @@ COOKIE_SetCookieString(char * curURL, nsIPrompt *aPrompter, const char * setCook */ PUBLIC void -COOKIE_SetCookieStringFromHttp(char * curURL, char * firstURL, nsIPrompt *aPrompter, const char * setCookieHeader, char * server_date, nsIIOService* ioService) { +COOKIE_SetCookieStringFromHttp(char * curURL, char * firstURL, nsIPrompt *aPrompter, const char * setCookieHeader, char * server_date, nsIIOService* ioService, nsIHttpChannel* aHttpChannel) { /* allow for multiple cookies separated by newlines */ char *newline = PL_strchr(setCookieHeader, '\n'); if(newline) { *newline = '\0'; - COOKIE_SetCookieStringFromHttp(curURL, firstURL, aPrompter, setCookieHeader, server_date, ioService); + COOKIE_SetCookieStringFromHttp(curURL, firstURL, aPrompter, setCookieHeader, server_date, ioService, aHttpChannel); *newline = '\n'; - COOKIE_SetCookieStringFromHttp(curURL, firstURL, aPrompter, newline+1, server_date, ioService); + COOKIE_SetCookieStringFromHttp(curURL, firstURL, aPrompter, newline+1, server_date, ioService, aHttpChannel); return; } @@ -1311,7 +1325,7 @@ COOKIE_SetCookieStringFromHttp(char * curURL, char * firstURL, nsIPrompt *aPromp /* check to see if P3P pref is satisfied */ if (cookie_GetBehaviorPref() == PERMISSION_P3P) { - PRInt32 decision = cookie_P3PDecision(curURL, firstURL, ioService); + PRInt32 decision = cookie_P3PDecision(curURL, firstURL, ioService, aHttpChannel); if (decision == P3P_Reject) { return; } @@ -1374,7 +1388,7 @@ COOKIE_SetCookieStringFromHttp(char * curURL, char * firstURL, nsIPrompt *aPromp gmtCookieExpires = get_current_time() + atoi(ptr); } - cookie_SetCookieString(curURL, aPrompter, setCookieHeader, gmtCookieExpires, ioService); + cookie_SetCookieString(curURL, aPrompter, setCookieHeader, gmtCookieExpires, ioService, aHttpChannel); } /* saves out the HTTP cookies to disk */ diff --git a/mozilla/extensions/cookie/nsCookies.h b/mozilla/extensions/cookie/nsCookies.h index 1b0b28408ba..59701f25472 100644 --- a/mozilla/extensions/cookie/nsCookies.h +++ b/mozilla/extensions/cookie/nsCookies.h @@ -50,13 +50,14 @@ #include "nsIIOService.h" class nsIPrompt; +class nsIHttpChannel; extern nsresult COOKIE_Read(); extern nsresult COOKIE_Write(); extern char * COOKIE_GetCookie(char * address, nsIIOService* ioService); extern char * COOKIE_GetCookieFromHttp(char * address, char * firstAddress, nsIIOService* ioService); -extern void COOKIE_SetCookieString(char * cur_url, nsIPrompt *aPrompter, const char * set_cookie_header, nsIIOService* ioService); -extern void COOKIE_SetCookieStringFromHttp(char * cur_url, char * first_url, nsIPrompt *aPRompter, const char * set_cookie_header, char * server_date, nsIIOService* ioService); +extern void COOKIE_SetCookieString(char * cur_url, nsIPrompt *aPrompter, const char * set_cookie_header, nsIIOService* ioService, nsIHttpChannel* aHttpChannel); +extern void COOKIE_SetCookieStringFromHttp(char * cur_url, char * first_url, nsIPrompt *aPRompter, const char * set_cookie_header, char * server_date, nsIIOService* ioService, nsIHttpChannel* aHttpChannel); extern void COOKIE_RegisterPrefCallbacks(void); extern void COOKIE_RemoveAll(void); diff --git a/mozilla/extensions/cookie/nsICookieService.idl b/mozilla/extensions/cookie/nsICookieService.idl index b293f83fdc4..f339a944f84 100644 --- a/mozilla/extensions/cookie/nsICookieService.idl +++ b/mozilla/extensions/cookie/nsICookieService.idl @@ -46,6 +46,8 @@ #include "nsIURI.idl" #include "nsIPrompt.idl" +interface nsIHttpChannel; + [scriptable, uuid(AB397774-12D3-11d3-8AD1-00105A1B8860)] interface nsICookieService : nsISupports { @@ -75,7 +77,7 @@ interface nsICookieService : nsISupports * @param aCookie The string to set * @return Returns NS_OK if successful, or NS_FALSE if an error occurred. */ - void setCookieString(in nsIURI aURL, in nsIPrompt aPrompt, in string aCookie); + void setCookieString(in nsIURI aURL, in nsIPrompt aPrompt, in string aCookie, in nsIHttpChannel aHttpChannel); /* * Set the cookie string and expires associated with the URL @@ -88,7 +90,7 @@ interface nsICookieService : nsISupports * @param aExpires The expiry information of the cookie * @return Returns NS_OK if successful, or NS_FALSE if an error occurred. */ - void setCookieStringFromHttp(in nsIURI aURL, in nsIURI aFirstURL, in nsIPrompt aPrompter, in string aCookie, in string aExpires); + void setCookieStringFromHttp(in nsIURI aURL, in nsIURI aFirstURL, in nsIPrompt aPrompter, in string aCookie, in string aExpires, in nsIHttpChannel aHttpChannel); }; diff --git a/mozilla/extensions/cookie/tests/TestCookie.cpp b/mozilla/extensions/cookie/tests/TestCookie.cpp index 75d08b766e4..e841a8584ef 100644 --- a/mozilla/extensions/cookie/tests/TestCookie.cpp +++ b/mozilla/extensions/cookie/tests/TestCookie.cpp @@ -57,7 +57,7 @@ void SetACookie(nsICookieService *cookieService, const char* aSpec, const char* NS_ASSERTION(uri, "malformed uri"); printf("setting cookie for \"%s\" : ", aSpec); - nsresult rv = cookieService->SetCookieString(uri, nsnull, (char *)aCookieString); + nsresult rv = cookieService->SetCookieString(uri, nsnull, (char *)aCookieString,0); if (NS_FAILED(rv)) { printf("NOT-SET\n"); } else { diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp index a19257881fb..f34e9e6ea6d 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp @@ -5728,7 +5728,7 @@ NS_IMETHODIMP nsPluginHostImpl::SetCookie(const char* inCookieURL, const void* i char * cookie = (char *)inCookieBuffer; char c = cookie[inCookieSize]; cookie[inCookieSize] = '\0'; - rv = cookieService->SetCookieString(uriIn, nsnull, cookie); // needs an nsIPrompt parameter + rv = cookieService->SetCookieString(uriIn, nsnull, cookie,0); // needs an nsIPrompt parameter cookie[inCookieSize] = c; return rv;