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;