aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
authorChristian Persch <chpe@cvs.gnome.org>2005-08-18 01:31:23 +0800
committerChristian Persch <chpe@src.gnome.org>2005-08-18 01:31:23 +0800
commit3200b1592abd9f4ff0a020b3048bf6abf2cfb437 (patch)
treec3279ebeecc5cfdb545926155bb0a658f62aa826 /embed
parent9dc72322ce56b9e377a1d889ea5bd4453f69ea47 (diff)
downloadgsoc2013-epiphany-3200b1592abd9f4ff0a020b3048bf6abf2cfb437.tar
gsoc2013-epiphany-3200b1592abd9f4ff0a020b3048bf6abf2cfb437.tar.gz
gsoc2013-epiphany-3200b1592abd9f4ff0a020b3048bf6abf2cfb437.tar.bz2
gsoc2013-epiphany-3200b1592abd9f4ff0a020b3048bf6abf2cfb437.tar.lz
gsoc2013-epiphany-3200b1592abd9f4ff0a020b3048bf6abf2cfb437.tar.xz
gsoc2013-epiphany-3200b1592abd9f4ff0a020b3048bf6abf2cfb437.tar.zst
gsoc2013-epiphany-3200b1592abd9f4ff0a020b3048bf6abf2cfb437.zip
Add EPHY_EMBED_PERSIST_FROM_CACHE, and try harder to get a cache
2005-08-17 Christian Persch <chpe@cvs.gnome.org> * embed/ephy-embed-persist.h: * embed/mozilla/mozilla-embed-persist.cpp: Add EPHY_EMBED_PERSIST_FROM_CACHE, and try harder to get a cache descriptor for the source URL. * src/popup-commands.c: (save_property_url), (popup_cmd_set_image_as_background), (save_temp_source): Use EPHY_EMBED_PERSIST_FROM_CACHE to try to get the content from cache when saving background, images or links. Part of bug #168554.
Diffstat (limited to 'embed')
-rw-r--r--embed/ephy-embed-persist.h3
-rw-r--r--embed/mozilla/mozilla-embed-persist.cpp61
2 files changed, 58 insertions, 6 deletions
diff --git a/embed/ephy-embed-persist.h b/embed/ephy-embed-persist.h
index dfccaa719..005327b1c 100644
--- a/embed/ephy-embed-persist.h
+++ b/embed/ephy-embed-persist.h
@@ -48,7 +48,8 @@ typedef enum
EPHY_EMBED_PERSIST_MAINDOC = 1 << 1,
EPHY_EMBED_PERSIST_NO_VIEW = 1 << 2,
EPHY_EMBED_PERSIST_ASK_DESTINATION = 1 << 3,
- EPHY_EMBED_PERSIST_DO_CONVERSION = 1 << 4
+ EPHY_EMBED_PERSIST_DO_CONVERSION = 1 << 4,
+ EPHY_EMBED_PERSIST_FROM_CACHE = 1 << 5
} EphyEmbedPersistFlags;
struct _EphyEmbedPersist
diff --git a/embed/mozilla/mozilla-embed-persist.cpp b/embed/mozilla/mozilla-embed-persist.cpp
index 7c20d2f81..990ed0fbd 100644
--- a/embed/mozilla/mozilla-embed-persist.cpp
+++ b/embed/mozilla/mozilla-embed-persist.cpp
@@ -30,6 +30,7 @@
#include "EphyHeaderSniffer.h"
#include "MozDownload.h"
#include "EphyUtils.h"
+#include "ephy-debug.h"
#include <stddef.h>
@@ -41,6 +42,9 @@
#include <nsIIOService.h>
#include <nsNetCID.h>
#include <nsNetError.h>
+#include <nsICacheEntryDescriptor.h>
+#include <nsICacheService.h>
+#include <nsICacheSession.h>
static void
mozilla_embed_persist_class_init (MozillaEmbedPersistClass *klass);
@@ -193,6 +197,7 @@ impl_save (EphyEmbedPersist *persist)
/* Get post data */
nsCOMPtr<nsIInputStream> postData;
+ /* FIXME: don't do this on COPY_PAGE to ensure we don't end up reposting? */
if (browser)
{
PRInt32 sindex;
@@ -227,17 +232,63 @@ impl_save (EphyEmbedPersist *persist)
/* Get the current page descriptor */
- nsCOMPtr<nsISupports> pageDescriptor;
+ nsCOMPtr<nsISupports> cacheDescriptor;
if (browser)
{
- browser->GetPageDescriptor(getter_AddRefs(pageDescriptor));
+ browser->GetPageDescriptor(getter_AddRefs (cacheDescriptor));
}
+ /* Try to get a descriptor from the cache session */
+ /* FIXME: what about https?? */
+ PRBool isHttp = PR_FALSE, isHttps = PR_FALSE;
+ if (!cacheDescriptor &&
+ (flags & EPHY_EMBED_PERSIST_FROM_CACHE) &&
+ inURI &&
+ ((NS_SUCCEEDED (inURI->SchemeIs ("http", &isHttp)) && isHttp) ||
+ (NS_SUCCEEDED (inURI->SchemeIs ("https", &isHttps)) && isHttps )))
+ {
+ nsCOMPtr<nsICacheService> cacheService
+ (do_GetService(NS_CACHESERVICE_CONTRACTID));
+ if (cacheService)
+ {
+ nsCOMPtr<nsICacheSession> cacheSession;
+ rv = cacheService->CreateSession ("HTTP",
+ nsICache::STORE_ANYWHERE,
+ PR_TRUE,
+ getter_AddRefs (cacheSession));
+ if (NS_SUCCEEDED (rv) && cacheSession)
+ {
+ nsCOMPtr<nsICacheEntryDescriptor> descriptor;
+
+ nsEmbedCString spec;
+ inURI->GetSpec (spec);
+
+#ifdef HAVE_GECKO_1_8
+ rv = cacheSession->OpenCacheEntry
+ (spec,
+ nsICache::ACCESS_READ,
+ PR_FALSE, getter_AddRefs (descriptor));
+#else
+ rv = cacheSession->OpenCacheEntry
+ (spec.get(),
+ nsICache::ACCESS_READ,
+ PR_FALSE, getter_AddRefs (descriptor));
+#endif
+
+ cacheDescriptor = do_QueryInterface (descriptor);
+
+ LOG ("Getting cache descriptor for '%s' rv=%x", spec.get(), rv);
+ }
+ }
+ }
+
+ LOG ("Cache descriptor %p", cacheDescriptor.get());
+
/* if we have COPY_PAGE, we *need* to have a page descriptor, else we'll re-fetch
* the page, which will possibly give a different page than the original which we
* need for view source
*/
- NS_ENSURE_TRUE (!(flags & EPHY_EMBED_PERSIST_COPY_PAGE) || pageDescriptor, FALSE);
+ NS_ENSURE_TRUE (!(flags & EPHY_EMBED_PERSIST_COPY_PAGE) || cacheDescriptor, FALSE);
if (filename == NULL || filename[0] == '\0')
{
@@ -265,7 +316,7 @@ impl_save (EphyEmbedPersist *persist)
if (!sniffer) return FALSE;
webPersist->SetProgressListener(sniffer);
- rv = webPersist->SaveURI(inURI, pageDescriptor, nsnull, nsnull, nsnull, tmpFile);
+ rv = webPersist->SaveURI(inURI, cacheDescriptor, nsnull /* FIXME: Referrer */, nsnull, nsnull, tmpFile);
if (NS_FAILED (rv)) return FALSE;
}
else
@@ -278,7 +329,7 @@ impl_save (EphyEmbedPersist *persist)
rv = InitiateMozillaDownload (DOMDocument, inURI, destFile,
nsnull, inURI, MOZILLA_EMBED_PERSIST (persist),
- postData, pageDescriptor, max_size);
+ postData, cacheDescriptor, max_size);
if (NS_FAILED (rv)) return FALSE;
}