summaryrefslogtreecommitdiff
path: root/embed/mozilla
diff options
context:
space:
mode:
authorJean-François Rameau <jframeau@cvs.gnome.org>2006-06-01 19:35:32 +0000
committerJean-François Rameau <jframeau@src.gnome.org>2006-06-01 19:35:32 +0000
commitae4e4736818f442abd435274cb3b75f8da02ad33 (patch)
treee552affa908143effd9f1fba8993eaa8ecf4e5f6 /embed/mozilla
parent5d471eec3390f8f188037ac6a3c87a59aa77ec8e (diff)
downloadepiphany-ae4e4736818f442abd435274cb3b75f8da02ad33.tar.gz
Don't set cookies from favicon downloads. Bug #337835.
2006-06-01 Jean-François Rameau <jframeau@cvs.gnome.org> * embed/ephy-embed-persist.h: * embed/ephy-favicon-cache.c: (ephy_favicon_cache_download): * embed/mozilla/EphySingle.cpp: (Init, Detach, ExamineCookies, ExamineResponse, ExamineRequest, Observe): * embed/mozilla/EphySingle.h: * embed/mozilla/MozDownload.cpp: (InitiateMozillaDownload): Don't set cookies from favicon downloads. Bug #337835.
Diffstat (limited to 'embed/mozilla')
-rw-r--r--embed/mozilla/EphySingle.cpp51
-rw-r--r--embed/mozilla/EphySingle.h5
-rw-r--r--embed/mozilla/MozDownload.cpp19
3 files changed, 71 insertions, 4 deletions
diff --git a/embed/mozilla/EphySingle.cpp b/embed/mozilla/EphySingle.cpp
index e6e82a4f6..ec8eb0b84 100644
--- a/embed/mozilla/EphySingle.cpp
+++ b/embed/mozilla/EphySingle.cpp
@@ -27,9 +27,12 @@
#include <nsICookie.h>
#include <nsICookie2.h>
#include <nsICookieManager.h>
+#include <nsIHttpChannel.h>
#include <nsIObserverService.h>
#include <nsIPermission.h>
#include <nsIPermissionManager.h>
+#include <nsIPropertyBag2.h>
+#include <nsIServiceManager.h>
#include <nsIURI.h>
#include <nsServiceManagerUtils.h>
#include <nsWeakReference.h>
@@ -63,6 +66,8 @@ EphySingle::Init (EphyEmbedSingle *aOwner)
rv |= mObserverService->AddObserver (this, "perm-changed", PR_FALSE);
rv |= mObserverService->AddObserver (this, "network:offline-status-changed", PR_FALSE);
rv |= mObserverService->AddObserver (this, "signonChanged", PR_FALSE);
+ rv |= mObserverService->AddObserver (this, "http-on-examine-response", PR_FALSE);
+ rv |= mObserverService->AddObserver (this, "http-on-modify-request", PR_FALSE);
NS_ENSURE_SUCCESS (rv, NS_ERROR_FAILURE);
mOwner = aOwner;
@@ -84,6 +89,8 @@ EphySingle::Detach ()
mObserverService->RemoveObserver (this, "perm-changed");
mObserverService->RemoveObserver (this, "signonChanged");
mObserverService->RemoveObserver (this, "network:offline-status-changed");
+ mObserverService->RemoveObserver (this, "http-on-examine-response");
+ mObserverService->RemoveObserver (this, "http-on-modify-request");
#if 1
/* HACK: Work around https://bugzilla.mozilla.org/show_bug.cgi?id=292699 */
@@ -138,6 +145,40 @@ EphySingle::EmitPermissionNotification (const char *name,
return NS_OK;
}
+nsresult
+EphySingle::ExamineCookies (nsISupports *aSubject)
+{
+ nsCOMPtr<nsIPropertyBag2> props = do_QueryInterface(aSubject);
+ NS_ENSURE_TRUE (props, NS_ERROR_FAILURE);
+
+ PRBool isBlockingCookiesChannel = PR_FALSE;
+ props->GetPropertyAsBool(
+ NS_LITERAL_STRING("epiphany-blocking-cookies"),
+ &isBlockingCookiesChannel);
+ if (isBlockingCookiesChannel)
+ {
+ nsCOMPtr<nsIHttpChannel> channel = do_QueryInterface(aSubject);
+ NS_ENSURE_TRUE (channel, NS_ERROR_FAILURE);
+
+ channel->SetRequestHeader(NS_LITERAL_CSTRING("Cookie"),
+ EmptyCString(), PR_FALSE);
+ }
+
+ return NS_OK;
+}
+
+nsresult
+EphySingle::ExamineResponse (nsISupports *aSubject)
+{
+ return ExamineCookies (aSubject);
+}
+
+nsresult
+EphySingle::ExamineRequest (nsISupports *aSubject)
+{
+ return ExamineCookies (aSubject);
+}
+
/* void observe (in nsISupports aSubject, in string aTopic, in wstring aData); */
NS_IMETHODIMP EphySingle::Observe(nsISupports *aSubject,
const char *aTopic,
@@ -147,7 +188,15 @@ NS_IMETHODIMP EphySingle::Observe(nsISupports *aSubject,
LOG ("EphySingle::Observe topic %s", aTopic);
- if (strcmp (aTopic, "cookie-changed") == 0)
+ if (strcmp (aTopic, "http-on-examine-response") == 0)
+ {
+ rv = ExamineResponse (aSubject);
+ }
+ else if (strcmp (aTopic, "http-on-modify-request") == 0)
+ {
+ rv = ExamineRequest (aSubject);
+ }
+ else if (strcmp (aTopic, "cookie-changed") == 0)
{
/* "added" */
if (aData[0] == 'a')
diff --git a/embed/mozilla/EphySingle.h b/embed/mozilla/EphySingle.h
index c5dcaca53..c2a199e1c 100644
--- a/embed/mozilla/EphySingle.h
+++ b/embed/mozilla/EphySingle.h
@@ -50,7 +50,10 @@ public:
protected:
nsresult EmitCookieNotification (const char *name, nsISupports *aSubject);
nsresult EmitPermissionNotification (const char *name, nsISupports *aSubject);
-
+ nsresult ExamineResponse (nsISupports *aSubject);
+ nsresult ExamineRequest (nsISupports *aSubject);
+ nsresult ExamineCookies (nsISupports *aSubject);
+
private:
nsCOMPtr<nsIObserverService> mObserverService;
EphyEmbedSingle *mOwner;
diff --git a/embed/mozilla/MozDownload.cpp b/embed/mozilla/MozDownload.cpp
index 39fd8ee22..5c8ee71ec 100644
--- a/embed/mozilla/MozDownload.cpp
+++ b/embed/mozilla/MozDownload.cpp
@@ -52,6 +52,7 @@
#include <nsComponentManagerUtils.h>
#include <nsICancelable.h>
+#include <nsIChannel.h>
#include <nsIDOMDocument.h>
#include <nsIFileURL.h>
#include <nsIIOService.h>
@@ -60,8 +61,9 @@
#include <nsIObserver.h>
#include <nsIRequest.h>
#include <nsIURI.h>
-#include <nsIURI.h>
+#include <nsIWritablePropertyBag2.h>
#include <nsIWebBrowserPersist.h>
+
#include <nsMemory.h>
#include <nsNetError.h>
#include <nsServiceManagerUtils.h>
@@ -558,7 +560,20 @@ nsresult InitiateMozillaDownload (nsIDOMDocument *domDocument, nsIURI *sourceURI
}
webPersist->SetPersistFlags(flags);
- if (!domDocument || !isHTML || ephy_flags & EPHY_EMBED_PERSIST_COPY_PAGE)
+ /* Create a new tagged channel if we need to block cookies from server */
+ if (ephy_flags & EPHY_EMBED_PERSIST_NO_COOKIES)
+ {
+ nsCOMPtr<nsIChannel> tmpChannel;
+ rv = ioService->NewChannelFromURI (sourceURI, getter_AddRefs (tmpChannel));
+ NS_ENSURE_SUCCESS (rv, rv);
+
+ nsCOMPtr<nsIWritablePropertyBag2> props = do_QueryInterface(tmpChannel);
+ rv = props->SetPropertyAsBool (NS_LITERAL_STRING("epiphany-blocking-cookies"), PR_TRUE);
+ NS_ENSURE_SUCCESS (rv, rv);
+
+ rv = webPersist->SaveChannel (tmpChannel, inDestFile);
+ }
+ else if (!domDocument || !isHTML || ephy_flags & EPHY_EMBED_PERSIST_COPY_PAGE)
{
rv = webPersist->SaveURI (sourceURI, aCacheKey, nsnull,
postData, nsnull, inDestFile);