diff --git a/content/html/document/src/nsImageDocument.cpp b/content/html/document/src/nsImageDocument.cpp
index fb699e620b3a..0db5159a8f26 100644
--- a/content/html/document/src/nsImageDocument.cpp
+++ b/content/html/document/src/nsImageDocument.cpp
@@ -224,12 +224,17 @@ nsImageDocument::StartImageLoad(nsIURI* aURL, nsIStreamListener*& aListener)
nsIImageGroup* group = nsnull;
cx->GetImageGroup(&group);
if (nsnull != group) {
+
char* spec;
(void)aURL->GetSpec(&spec);
nsIStreamListener* listener = nsnull;
rv = group->GetImageFromStream(spec, nsnull, nsnull,
0, 0, 0,
mImageRequest, listener);
+
+ //set flag to indicate view-image needs to use imgcache
+ group->SetImgLoadAttributes(nsImageLoadFlags_kSticky);
+
nsCRT::free(spec);
aListener = listener;
NS_RELEASE(group);
@@ -238,6 +243,7 @@ nsImageDocument::StartImageLoad(nsIURI* aURL, nsIStreamListener*& aListener)
NS_RELEASE(shell);
}
+
// Finally, start the layout going
StartLayout();
diff --git a/gfx/public/nsIImageGroup.h b/gfx/public/nsIImageGroup.h
index 7a2558c268b4..d07842fce9fe 100644
--- a/gfx/public/nsIImageGroup.h
+++ b/gfx/public/nsIImageGroup.h
@@ -44,6 +44,7 @@ class nsILoadGroup;
/** Don't load if image cache misses. */
#define nsImageLoadFlags_kOnlyFromCache 0x08
+
// IID for the nsIImageGroup interface
#define NS_IIMAGEGROUP_IID \
{ 0xbe927e40, 0xaeaa, 0x11d1, \
@@ -131,6 +132,10 @@ public:
* are interrupted.
*/
virtual void Interrupt(void) = 0;
+
+ NS_IMETHOD SetImgLoadAttributes(PRUint32 a_grouploading_attribs)=0;
+ NS_IMETHOD GetImgLoadAttributes(PRUint32 *a_grouploading_attribs)=0;
+
};
/// Factory method for creating an image group
diff --git a/gfx/src/nsImageGroup.cpp b/gfx/src/nsImageGroup.cpp
index a56433cb3ca9..116afeb21c05 100644
--- a/gfx/src/nsImageGroup.cpp
+++ b/gfx/src/nsImageGroup.cpp
@@ -73,12 +73,19 @@ public:
IL_GroupContext *GetGroupContext() { return mGroupContext; }
nsVoidArray *GetObservers() { return mObservers; }
+ NS_IMETHOD SetImgLoadAttributes(PRUint32 a_grouploading_attribs);
+ NS_IMETHOD GetImgLoadAttributes(PRUint32 *a_grouploading_attribs);
+
nsIImageManager *mManager;
IL_GroupContext *mGroupContext;
nsVoidArray *mObservers;
nsIDeviceContext *mDeviceContext;
ilINetContext* mNetContext;
nsIStreamListener** mListenerRequest;
+
+ //ptn
+ PRUint32 m_grouploading_attribs;
+
};
ImageGroupImpl::ImageGroupImpl(nsIImageManager *aManager)
@@ -152,6 +159,9 @@ static void ns_observer_proc (XP_Observable aSource,
}
}
+
+
+
static PRBool
ReconnectHack(void* arg, nsIStreamListener* aListener)
{
@@ -260,7 +270,14 @@ ImageGroupImpl::GetImage(const char* aUrl,
if (nsnull != image_req) {
nsresult result;
- // Ask the image request object to get the image.
+ // Ask the image request object to get the image.
+
+ PRUint32 groupload_attrib = 0;
+ GetImgLoadAttributes(&groupload_attrib);
+
+ if(!aFlags)
+ aFlags = groupload_attrib;
+
mListenerRequest = nsnull;
result = image_req->Init(mGroupContext, aUrl, aObserver, aBackgroundColor,
aWidth, aHeight, aFlags, mNetContext);
@@ -296,6 +313,14 @@ ImageGroupImpl::GetImageFromStream(const char* aUrl,
// Ask the image request object to get the image.
nsIStreamListener* listener = nsnull;
mListenerRequest = &listener;
+
+
+ PRUint32 groupload_attrib = 0;
+ GetImgLoadAttributes(&groupload_attrib);
+
+ if(!aFlags)
+ aFlags = groupload_attrib;
+
result = image_req->Init(mGroupContext, aUrl, aObserver, aBackgroundColor,
aWidth, aHeight, aFlags, mNetContext);
aListenerResult = listener;
@@ -320,6 +345,19 @@ ImageGroupImpl::Interrupt(void)
}
}
+NS_IMETHODIMP
+ImageGroupImpl::SetImgLoadAttributes(PRUint32 a_grouploading_attribs){
+ m_grouploading_attribs = a_grouploading_attribs;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+ImageGroupImpl::GetImgLoadAttributes(PRUint32 *a_grouploading_attribs){
+ *a_grouploading_attribs = m_grouploading_attribs;
+ return NS_OK;
+}
+
+
extern "C" NS_GFX_(nsresult)
NS_NewImageGroup(nsIImageGroup **aInstancePtrResult)
{
diff --git a/gfx/src/nsImageNetContextAsync.cpp b/gfx/src/nsImageNetContextAsync.cpp
index 0d254bd84625..07af6b1dd4e2 100644
--- a/gfx/src/nsImageNetContextAsync.cpp
+++ b/gfx/src/nsImageNetContextAsync.cpp
@@ -59,7 +59,7 @@ class ImageConsumer;
class ImageNetContextImpl : public ilINetContext {
public:
- ImageNetContextImpl(NET_ReloadMethod aReloadPolicy,
+ ImageNetContextImpl(ImgCachePolicy aReloadPolicy,
nsISupports * aLoadContext,
nsReconnectCB aReconnectCallback,
void* aReconnectArg);
@@ -69,8 +69,8 @@ public:
virtual ilINetContext* Clone();
- virtual NET_ReloadMethod GetReloadPolicy();
- virtual NET_ReloadMethod SetReloadPolicy(NET_ReloadMethod ReloadPolicy);
+ virtual ImgCachePolicy GetReloadPolicy();
+ virtual ImgCachePolicy SetReloadPolicy(ImgCachePolicy ReloadPolicy);
virtual void AddReferer(ilIURL *aUrl);
@@ -78,7 +78,7 @@ public:
virtual void Interrupt();
virtual ilIURL* CreateURL(const char *aUrl,
- NET_ReloadMethod aReloadMethod);
+ ImgCachePolicy aReloadMethod);
virtual PRBool IsLocalFileURL(char *aAddress);
#ifdef NU_CACHE
@@ -89,14 +89,14 @@ public:
virtual PRBool IsURLInDiskCache(ilIURL *aUrl);
#endif
- virtual int GetURL (ilIURL * aUrl, NET_ReloadMethod aLoadMethod,
+ virtual int GetURL (ilIURL * aUrl, ImgCachePolicy aLoadMethod,
ilINetReader *aReader);
nsresult RequestDone(ImageConsumer *aConsumer, nsIChannel* channel,
nsISupports* ctxt, nsresult status, const PRUnichar* aMsg);
nsVoidArray *mRequests;
- NET_ReloadMethod mReloadPolicy;
+ ImgCachePolicy mReloadPolicy;
nsWeakPtr mLoadContext;
nsReconnectCB mReconnectCallback;
void* mReconnectArg;
@@ -565,7 +565,7 @@ ImageConsumer::~ImageConsumer()
NS_IF_RELEASE(mUserContext);
}
-ImageNetContextImpl::ImageNetContextImpl(NET_ReloadMethod aReloadPolicy,
+ImageNetContextImpl::ImageNetContextImpl(ImgCachePolicy aReloadPolicy,
nsISupports * aLoadContext,
nsReconnectCB aReconnectCallback,
void* aReconnectArg)
@@ -613,14 +613,14 @@ ImageNetContextImpl::Clone()
}
}
-NET_ReloadMethod
+ImgCachePolicy
ImageNetContextImpl::GetReloadPolicy()
{
return mReloadPolicy;
}
-NET_ReloadMethod
-ImageNetContextImpl::SetReloadPolicy(NET_ReloadMethod reloadpolicy)
+ImgCachePolicy
+ImageNetContextImpl::SetReloadPolicy(ImgCachePolicy reloadpolicy)
{
mReloadPolicy=reloadpolicy;
return mReloadPolicy;
@@ -645,7 +645,7 @@ ImageNetContextImpl::Interrupt()
ilIURL*
ImageNetContextImpl::CreateURL(const char *aURL,
- NET_ReloadMethod aReloadMethod)
+ ImgCachePolicy aReloadMethod)
{
ilIURL *url;
@@ -693,7 +693,7 @@ ImageNetContextImpl::IsURLInDiskCache(ilIURL *aUrl)
int
ImageNetContextImpl::GetURL (ilIURL * aURL,
- NET_ReloadMethod aLoadMethod,
+ ImgCachePolicy aLoadMethod,
ilINetReader *aReader)
{
NS_PRECONDITION(nsnull != aURL, "null URL");
@@ -754,34 +754,30 @@ ImageNetContextImpl::GetURL (ilIURL * aURL,
}
}
- if (aURL->GetBackgroundLoad()) {
- (void)channel->SetLoadAttributes(nsIChannel::LOAD_BACKGROUND);
- }
-
nsLoadFlags flags;
rv = channel->GetLoadAttributes(&flags);
if (NS_FAILED(rv)) return rv;
+ if (aURL->GetBackgroundLoad()) {
+ (void)channel->SetLoadAttributes(nsIChannel::LOAD_BACKGROUND | flags);
+ }
+
switch(aLoadMethod){
- case IMG_CACHE_ONLY:
- /* shouldn't get here, but don't fail if you do. Just fall to the next case. */
- case IMG_NTWK_SERVER:
+ case USE_IMG_CACHE:
(void)channel->SetLoadAttributes((nsIChannel::VALIDATE_NEVER) | flags);
break;
- case TV_IMG_NTWK_SERVER:
- case TV_NTWK_SERVER_ONLY:
+ case DONT_USE_IMG_CACHE:
(void)channel->SetLoadAttributes((nsIChannel::FORCE_VALIDATION) | flags);
break;
- case SERVER_ONLY:
- (void)channel->SetLoadAttributes((nsIChannel::FORCE_RELOAD) | flags);
+ case SYNTH_IMGDOC_NEEDS_IMG_CACHE:
break;
-
+
default:
break;
}
-
+
nsCOMPtr window (do_QueryInterface(NS_STATIC_CAST(nsIStreamListener *, ic)));
// let's try uri dispatching...
@@ -828,12 +824,38 @@ NS_NewImageNetContext(ilINetContext **aInstancePtrResult,
nsReconnectCB aReconnectCallback,
void* aReconnectArg)
{
+
+ PRUint32 necko_attribs;
+ ImgCachePolicy imglib_attribs = USE_IMG_CACHE;
+
NS_PRECONDITION(nsnull != aInstancePtrResult, "null ptr");
if (nsnull == aInstancePtrResult) {
return NS_ERROR_NULL_POINTER;
}
-
- ilINetContext *cx = new ImageNetContextImpl(IMG_NTWK_SERVER,
+
+ if(aLoadContext){
+ nsCOMPtr loadContext (do_QueryReferent(NS_GetWeakReference(aLoadContext)));
+ nsCOMPtr group (do_GetInterface(loadContext));
+ nsresult rv = group->GetDefaultLoadAttributes(&necko_attribs);
+/*
+Need code to check freshness of necko cache.
+
+ nsCOMPtr defLoadChannel;
+ if (NS_SUCCEEDED(group->GetDefaultLoadChannel(
+ getter_AddRefs(defLoadChannel))) && defLoadChannel)
+ defLoadChannel->CheckCacheFresh(&isFresh);
+
+Modify code below to work w/r to freshness of necko cache.
+
+*/
+ if((nsIChannel::FORCE_VALIDATION & necko_attribs)||
+ (nsIChannel::VALIDATE_ALWAYS & necko_attribs) ||
+ (nsIChannel::INHIBIT_PERSISTENT_CACHING & necko_attribs)||
+ (nsIChannel::FORCE_RELOAD & necko_attribs))
+ imglib_attribs = DONT_USE_IMG_CACHE;
+ }
+
+ ilINetContext *cx = new ImageNetContextImpl( imglib_attribs,
aLoadContext,
aReconnectCallback,
aReconnectArg);
@@ -842,4 +864,6 @@ NS_NewImageNetContext(ilINetContext **aInstancePtrResult,
}
return cx->QueryInterface(kIImageNetContextIID, (void **) aInstancePtrResult);
+
}
+
diff --git a/gfx/src/nsImageNetContextSync.cpp b/gfx/src/nsImageNetContextSync.cpp
index 32d013fc522b..17e52ccbdc17 100644
--- a/gfx/src/nsImageNetContextSync.cpp
+++ b/gfx/src/nsImageNetContextSync.cpp
@@ -46,21 +46,21 @@ static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
class ImageNetContextSyncImpl : public ilINetContext {
public:
- ImageNetContextSyncImpl(NET_ReloadMethod aReloadPolicy);
+ ImageNetContextSyncImpl(ImgCachePolicy aReloadPolicy);
virtual ~ImageNetContextSyncImpl();
NS_DECL_ISUPPORTS
virtual ilINetContext* Clone();
- virtual NET_ReloadMethod GetReloadPolicy();
+ virtual ImgCachePolicy GetReloadPolicy();
virtual void AddReferer(ilIURL* aUrl);
virtual void Interrupt();
virtual ilIURL* CreateURL(const char* aUrl,
- NET_ReloadMethod aReloadMethod);
+ ImgCachePolicy aReloadMethod);
virtual PRBool IsLocalFileURL(char* aAddress);
#ifdef NU_CACHE
@@ -72,13 +72,13 @@ public:
#endif /* NU_CACHE */
virtual int GetURL(ilIURL* aUrl,
- NET_ReloadMethod aLoadMethod,
+ ImgCachePolicy aLoadMethod,
ilINetReader* aReader);
- NET_ReloadMethod mReloadPolicy;
+ ImgCachePolicy mReloadPolicy;
};
-ImageNetContextSyncImpl::ImageNetContextSyncImpl(NET_ReloadMethod aReloadPolicy)
+ImageNetContextSyncImpl::ImageNetContextSyncImpl(ImgCachePolicy aReloadPolicy)
{
NS_INIT_REFCNT();
mReloadPolicy = aReloadPolicy;
@@ -102,7 +102,7 @@ ImageNetContextSyncImpl::Clone()
return nsnull;
}
-NET_ReloadMethod
+ImgCachePolicy
ImageNetContextSyncImpl::GetReloadPolicy()
{
return mReloadPolicy;
@@ -120,7 +120,7 @@ ImageNetContextSyncImpl::Interrupt()
ilIURL*
ImageNetContextSyncImpl::CreateURL(const char* aURL,
- NET_ReloadMethod aReloadMethod)
+ ImgCachePolicy aReloadMethod)
{
ilIURL *url;
@@ -164,7 +164,7 @@ ImageNetContextSyncImpl::IsURLInDiskCache(ilIURL *aUrl)
int
ImageNetContextSyncImpl::GetURL(ilIURL* aURL,
- NET_ReloadMethod aLoadMethod,
+ ImgCachePolicy aLoadMethod,
ilINetReader* aReader)
{
NS_PRECONDITION(nsnull != aURL, "null URL");
@@ -294,7 +294,8 @@ nsresult NS_NewImageNetContextSync(ilINetContext **aInstancePtrResult)
return NS_ERROR_NULL_POINTER;
}
- ilINetContext *cx = new ImageNetContextSyncImpl(IMG_NTWK_SERVER);
+ //Note default of USE_IMG_CACHE used.
+ ilINetContext *cx = new ImageNetContextSyncImpl(USE_IMG_CACHE);
if (cx == nsnull) {
return NS_ERROR_OUT_OF_MEMORY;
}
diff --git a/layout/html/document/src/nsImageDocument.cpp b/layout/html/document/src/nsImageDocument.cpp
index fb699e620b3a..0db5159a8f26 100644
--- a/layout/html/document/src/nsImageDocument.cpp
+++ b/layout/html/document/src/nsImageDocument.cpp
@@ -224,12 +224,17 @@ nsImageDocument::StartImageLoad(nsIURI* aURL, nsIStreamListener*& aListener)
nsIImageGroup* group = nsnull;
cx->GetImageGroup(&group);
if (nsnull != group) {
+
char* spec;
(void)aURL->GetSpec(&spec);
nsIStreamListener* listener = nsnull;
rv = group->GetImageFromStream(spec, nsnull, nsnull,
0, 0, 0,
mImageRequest, listener);
+
+ //set flag to indicate view-image needs to use imgcache
+ group->SetImgLoadAttributes(nsImageLoadFlags_kSticky);
+
nsCRT::free(spec);
aListener = listener;
NS_RELEASE(group);
@@ -238,6 +243,7 @@ nsImageDocument::StartImageLoad(nsIURI* aURL, nsIStreamListener*& aListener)
NS_RELEASE(shell);
}
+
// Finally, start the layout going
StartLayout();
diff --git a/modules/libimg/public/dummy_nc.h b/modules/libimg/public/dummy_nc.h
index 975aaed0a674..51111cd025a0 100644
--- a/modules/libimg/public/dummy_nc.h
+++ b/modules/libimg/public/dummy_nc.h
@@ -28,7 +28,6 @@
#define _DUMMY_NC_H
#include "prtypes.h"
-#include "net.h"
typedef void* IL_NetContext;
diff --git a/modules/libimg/public/ilINetContext.h b/modules/libimg/public/ilINetContext.h
index f08abe384bbe..bd896a2b987a 100644
--- a/modules/libimg/public/ilINetContext.h
+++ b/modules/libimg/public/ilINetContext.h
@@ -25,7 +25,6 @@
#include
#include "nsISupports.h"
-#include "ntypes.h"
// IID for the ilINetContext interface
#define IL_INETCONTEXT_IID \
@@ -42,14 +41,14 @@ public:
virtual ilINetContext* Clone()=0;
- virtual NET_ReloadMethod GetReloadPolicy()=0;
+ virtual ImgCachePolicy GetReloadPolicy()=0;
virtual void AddReferer(ilIURL *aUrl)=0;
virtual void Interrupt()=0;
virtual ilIURL* CreateURL(const char *aUrl,
- NET_ReloadMethod aReloadMethod)=0;
+ ImgCachePolicy aReloadMethod)=0;
virtual PRBool IsLocalFileURL(char *aAddress)=0;
@@ -61,7 +60,7 @@ public:
virtual PRBool IsURLInDiskCache(ilIURL *aUrl)=0;
#endif /* NU_CACHE */
- virtual int GetURL (ilIURL * aUrl, NET_ReloadMethod aLoadMethod,
+ virtual int GetURL (ilIURL * aUrl, ImgCachePolicy aLoadMethod,
ilINetReader *aReader)=0;
};
diff --git a/modules/libimg/public/ilINetReader.h b/modules/libimg/public/ilINetReader.h
index 78c427abfdb2..82fbfa2906c8 100644
--- a/modules/libimg/public/ilINetReader.h
+++ b/modules/libimg/public/ilINetReader.h
@@ -25,7 +25,7 @@
#include
#include "nsISupports.h"
-#include "ntypes.h"
+
// IID for the ilINetReader interface
#define IL_INETREADER_IID \
diff --git a/modules/libimg/public/ilIURL.h b/modules/libimg/public/ilIURL.h
index 1617f9aa38f7..13c20fb25a3f 100644
--- a/modules/libimg/public/ilIURL.h
+++ b/modules/libimg/public/ilIURL.h
@@ -25,7 +25,7 @@
#include
#include "nsISupports.h"
-#include "ntypes.h"
+
// IID for the ilIURL interface
#define IL_IURL_IID \
diff --git a/modules/libimg/public/il_types.h b/modules/libimg/public/il_types.h
index 9fff370bbe46..9057fabcac08 100644
--- a/modules/libimg/public/il_types.h
+++ b/modules/libimg/public/il_types.h
@@ -22,7 +22,7 @@
/* -*- Mode: C; tab-width: 4 -*-
* il_types.h --- Image library data types and structures.
- * $Id: il_types.h,v 3.5 1999/11/13 22:37:34 cls%seawood.org Exp $
+ * $Id: il_types.h,v 3.6 2000/07/20 01:49:58 pnunn%netscape.com Exp $
*/
@@ -52,6 +52,16 @@
#define IL_BYPASS_CACHE 0x04 /* Don't get image out of image cache. */
#define IL_ONLY_FROM_CACHE 0x08 /* Don't load if image cache misses. */
+typedef enum
+{
+ USE_IMG_CACHE, /* use imgcache */
+ DONT_USE_IMG_CACHE, /* dont use imgcache AND if found in imgcache delete entry */
+ SYNTH_IMGDOC_NEEDS_IMG_CACHE /* needed for view-image/image doc */
+
+} ImgCachePolicy;
+
+
+
/* A rectangle structure. */
typedef struct _IL_Rect {
PRUint16 x_origin;
diff --git a/modules/libimg/public_com/if_struct.h b/modules/libimg/public_com/if_struct.h
index 1d40dd4dafa6..759e595d505d 100644
--- a/modules/libimg/public_com/if_struct.h
+++ b/modules/libimg/public_com/if_struct.h
@@ -22,7 +22,7 @@
/* if.h --- Top-level image library internal routines
*
- * $Id: if_struct.h,v 1.10 2000/05/18 22:17:48 pnunn%netscape.com Exp $
+ * $Id: if_struct.h,v 1.11 2000/07/20 01:51:00 pnunn%netscape.com Exp $
*/
#ifndef _if_h
@@ -43,9 +43,6 @@
#include "nsIImgDecoder.h"
-#include "ntypes.h" /* typedefs for commonly used Netscape data
- structures */
-
typedef struct _IL_GroupContext IL_GroupContext;
typedef struct _IL_ImageReq IL_ImageReq;
typedef struct il_context_list il_context_list;
@@ -153,7 +150,7 @@ enum icstate {
/* Force memory cache to be flushed ? */
#define FORCE_RELOAD(reload_method) \
- (((reload_method)==NET_NORMAL_RELOAD) || ((reload_method)==NET_SUPER_RELOAD))
+ (reload_method = DONT_USE_IMG_CACHE)
/* Simple list of image contexts. */
struct il_context_list {
diff --git a/modules/libimg/public_com/il.h b/modules/libimg/public_com/il.h
index eafc598667de..251e88dcc0c3 100644
--- a/modules/libimg/public_com/il.h
+++ b/modules/libimg/public_com/il.h
@@ -23,7 +23,7 @@
/* -*- Mode: C; tab-width: 4 -*-
* il.h --- Exported image library interface
*
- * $Id: il.h,v 1.3 1999/11/06 03:31:23 dmose%mozilla.org Exp $
+ * $Id: il.h,v 1.4 2000/07/20 01:51:20 pnunn%netscape.com Exp $
*/
@@ -34,7 +34,6 @@
#ifndef _IL_H
#define _IL_H
-#include "ntypes.h"
/* attr values */
#define IL_ATTR_RDONLY 0
diff --git a/modules/libimg/src/if.cpp b/modules/libimg/src/if.cpp
index 1213a2a3c778..151e0140a64a 100644
--- a/modules/libimg/src/if.cpp
+++ b/modules/libimg/src/if.cpp
@@ -1043,11 +1043,6 @@ IL_StreamFirstWrite(il_container *ic, const unsigned char *str, int32 len)
}
}
- /* Grab the URL's expiration date */
-
- if (ic->url)
- ic->expires = ic->url->GetExpires();
-
/* if our mime sniffer can recognize what's in the
data stream and it is one of our std vanilla types.
Check to see if it matches the mimetype sent by creator.
@@ -1494,8 +1489,8 @@ il_image_complete(il_container *ic)
ILTRACE(1,("il: loop %s", ic->url_address));
- if(ic->net_cx){ //ptn test
- netRequest = ic->net_cx->CreateURL(ic->fetch_url, IMG_NTWK_SERVER);
+ if(ic->net_cx){
+ netRequest = ic->net_cx->CreateURL(ic->fetch_url, USE_IMG_CACHE);
if (!netRequest) { /* OOM */
il_container_complete(ic);
break;
@@ -1558,7 +1553,7 @@ il_image_complete(il_container *ic)
/* using lclient insures we are using an active image request */
- (void) ic->lclient->net_cx->GetURL(ic->url, IMG_NTWK_SERVER, reader);
+ (void) ic->lclient->net_cx->GetURL(ic->url, USE_IMG_CACHE, reader);
/* Release reader, GetURL will keep a ref to it. */
NS_RELEASE(reader);
@@ -1688,10 +1683,11 @@ il_hash(const char *ubuf)
}
return h;
}
-
+#if 0
#define IL_LAST_ICON 62
/* Extra factor of 7 is to account for duplications between
mc-icons and ns-icons */
+
static PRUint32 il_icon_table[(IL_LAST_ICON + 7) * 2];
static void
@@ -1876,6 +1872,7 @@ il_internal_image(const char *image_url)
}
return 0;
}
+#endif
/* block certain hosts from loading images */
PRBool il_PermitLoad(const char * image_url, nsIImageRequestObserver * aObserver) {
@@ -1995,16 +1992,20 @@ IL_GetImage(const char* image_url,
}
ilINetContext *net_cx = (ilINetContext *)opaque_cx;
- NET_ReloadMethod cache_reload_policy = net_cx->GetReloadPolicy();
+ ImgCachePolicy cache_reload_policy = net_cx->GetReloadPolicy();
+
ilIURL *url = NULL;
IL_ImageReq *image_req;
- ilINetReader *reader;
- il_container *ic = NULL;
+ ilINetReader *reader;
+ il_container *ic = NULL;
int req_depth = img_cx->color_space->pixmap_depth;
- int err;
- int is_view_image;
+ int err;
+ int is_view_image = PR_FALSE;
+
+ if(flags == IL_STICKY)
+ is_view_image = PR_TRUE;
/* Create a new instance for this image request. */
image_req = PR_NEWZAP(IL_ImageReq);
@@ -2020,7 +2021,7 @@ IL_GetImage(const char* image_url,
* handle on this backup net context.
*/
image_req->net_cx = net_cx->Clone();
- if (!image_req->net_cx) {
+ if (!image_req->net_cx) {
PR_FREEIF(image_req);
return NULL;
}
@@ -2037,27 +2038,9 @@ IL_GetImage(const char* image_url,
return image_req;
}
- /* Check for any special internal-use URLs */
- if (*image_url == 'i' ||
- !PL_strncmp(image_url, "/mc-", 4) ||
- !PL_strncmp(image_url, "/ns-", 4))
- {
- PRUint32 icon;
- /* A built-in icon ? */
- icon = il_internal_image(image_url);
- if (icon)
- {
- ILTRACE(4,("il: internal icon %d", icon));
-
- /* XXXM12N In response to this notification, layout should set
- lo_image->image_attr->attrmask |= LO_ATTR_INTERNAL_IMAGE; */
- il_icon_notify(image_req, icon, IL_INTERNAL_IMAGE);
-
- return image_req;
- }
-
- }
+ if(is_view_image)
+ cache_reload_policy = SYNTH_IMGDOC_NEEDS_IMG_CACHE;
ic = il_get_container(img_cx, cache_reload_policy, image_url,
background_color, img_cx->dither_mode, req_depth,
@@ -2075,7 +2058,8 @@ IL_GetImage(const char* image_url,
/* Give the client a handle into the imagelib world. */
image_req->ic = ic;
- is_view_image = PR_FALSE;
+
+
if (!il_add_client(img_cx, ic, image_req, is_view_image))
{
diff --git a/modules/libimg/src/if.h b/modules/libimg/src/if.h
index f0e7c922306d..e300affb9f23 100644
--- a/modules/libimg/src/if.h
+++ b/modules/libimg/src/if.h
@@ -22,7 +22,7 @@
/* if.h --- Top-level image library internal routines
*
- * $Id: if.h,v 3.20 2000/05/18 22:17:02 pnunn%netscape.com Exp $
+ * $Id: if.h,v 3.21 2000/07/20 01:51:46 pnunn%netscape.com Exp $
*/
#ifndef _if_h
@@ -41,9 +41,6 @@
#include "prlong.h"
#include "nsIPresContext.h"
-#include "ntypes.h" /* typedefs for commonly used Netscape data
- structures */
-
typedef struct _IL_GroupContext IL_GroupContext;
typedef struct _IL_ImageReq IL_ImageReq;
typedef struct il_context_list il_context_list;
@@ -115,7 +112,7 @@ extern PRLogModuleInfo *il_log_module;
#endif
#define MIN(x, y) ((x) < (y) ? (x) : (y))
-//ptn test
+
/* Conversion of imglib errors to XPCOM errors */
#define NS_CONVERT_ERROR_CODE(e) \
(NS_ERROR_GENERATE((e) ? NS_ERROR_SEVERITY_ERROR : NS_ERROR_SEVERITY_SUCCESS, NS_ERROR_MODULE_IMGLIB, (e) & 0xFFFF))
@@ -163,7 +160,7 @@ enum icstate {
/* Force memory cache to be flushed ? */
#define FORCE_RELOAD(reload_method) \
- (reload_method > IMG_NTWK_SERVER)
+ (reload_method = DONT_USE_IMG_CACHE)
/* Simple list of image contexts. */
struct il_context_list {
@@ -432,7 +429,7 @@ extern void il_abort_reconnect(void);
then create and return a new container. */
extern il_container
*il_get_container(IL_GroupContext *image_context,
- NET_ReloadMethod reload_cache_policy,
+ ImgCachePolicy reload_cache_policy,
const char *image_url,
IL_IRGB *background_color,
IL_DitherMode dither_mode,
diff --git a/modules/libimg/src/il_util.cpp b/modules/libimg/src/il_util.cpp
index 921c67677ad0..418a2e645cad 100644
--- a/modules/libimg/src/il_util.cpp
+++ b/modules/libimg/src/il_util.cpp
@@ -23,13 +23,12 @@
/* -*- Mode: C; tab-width: 4 -*-
* il_util.c Colormap and colorspace utilities.
*
- * $Id: il_util.cpp,v 3.7 1999/11/13 22:37:41 cls%seawood.org Exp $
+ * $Id: il_util.cpp,v 3.8 2000/07/20 01:52:02 pnunn%netscape.com Exp $
*/
#include "nsCRT.h"
-#include "ntypes.h" /* typedefs for commonly used Netscape data
- structures. */
+
#include "prtypes.h"
#include "prmem.h"
diff --git a/modules/libimg/src/ilclient.cpp b/modules/libimg/src/ilclient.cpp
index 3fd3c4861445..d11050221902 100644
--- a/modules/libimg/src/ilclient.cpp
+++ b/modules/libimg/src/ilclient.cpp
@@ -35,6 +35,9 @@
#include "nsCRT.h"
#include "xpcompat.h" //temporary, for timers
+/* Note that default cache size is set in
+ src/gfx/nsImageManager.cpp, ~line 62.
+*/
static PRUint32 image_cache_size;
static PRUint32 max_cache_items = 192;
@@ -84,6 +87,7 @@ ImgDCallbk::CreateInstance(const nsCID &aClass,
if (NS_FAILED(res)) {
*ppv = NULL;
delete imgdcb;
+ ic->imgdcb = NULL;
}
return res;
}
@@ -407,7 +411,7 @@ il_addtocache(il_container *ic);
il_container *
il_get_container(IL_GroupContext *img_cx,
- NET_ReloadMethod cache_reload_policy,
+ ImgCachePolicy cache_reload_policy,
const char *image_url,
IL_IRGB *background_color,
IL_DitherMode dither_mode,
@@ -416,7 +420,7 @@ il_get_container(IL_GroupContext *img_cx,
int req_height) /* Target height requested by client. */
{
PRUint32 urlhash, hash;
- il_container *ic;
+ il_container *ic=NULL;
urlhash = hash = il_hash(image_url);
@@ -429,7 +433,8 @@ il_get_container(IL_GroupContext *img_cx,
/* Check the cache */
ic = il_find_in_cache(img_cx->display_type, hash, image_url,
background_color, req_depth, req_width, req_height);
-
+
+
if (ic) {
/* This ic is being destroyed. Need a new one */
@@ -444,7 +449,7 @@ il_get_container(IL_GroupContext *img_cx,
/* 2) Their namespace crosses document boundaries, so caching */
/* could result in incorrect behavior. */
- else if(cache_reload_policy > IMG_NTWK_SERVER){
+ else if(cache_reload_policy == DONT_USE_IMG_CACHE){
/* Don't use old copy and purge it from cache.*/
if (!ic->is_in_use) {
il_removefromcache(ic);
@@ -565,8 +570,9 @@ il_get_container(IL_GroupContext *img_cx,
imgdcb->SetContainer(ic);
ic->imgdcb = imgdcb;
}
-
+
il_addtocache(ic);
+
ic->is_in_use = PR_TRUE;
return ic;
@@ -715,7 +721,9 @@ il_removefromcache(il_container *ic)
il_cache.items--;
PR_ASSERT(il_cache.items >= 0);
}
+
return ic;
+
}
void
@@ -982,7 +990,7 @@ il_delete_client(il_container *ic, IL_ImageReq *image_req)
ic->img_cx = ic->clients->img_cx;
/* The container's net context may be about to become invalid, so
give the container a different one which is known to be valid. */
- if ((ic->net_cx )&&(ic->net_cx == net_cx)) //ptn test
+ if ((ic->net_cx )&&(ic->net_cx == net_cx))
{
NS_RELEASE(ic->net_cx);
ic->net_cx = ic->clients->net_cx->Clone();
@@ -1063,7 +1071,7 @@ IL_DestroyImage(IL_ImageReq *image_req)
{
IL_GroupContext *img_cx;
PRBool client_deleted;
- il_container *ic, *ic2, *ic2_next;
+ il_container *ic, *ic2 = NULL, *ic2_next = NULL;
il_container_list *ic_list;
/* Check for a NULL request. */
diff --git a/netwerk/base/src/nsLoadGroup.cpp b/netwerk/base/src/nsLoadGroup.cpp
index 8e264d0b800a..cc5d38035403 100644
--- a/netwerk/base/src/nsLoadGroup.cpp
+++ b/netwerk/base/src/nsLoadGroup.cpp
@@ -431,6 +431,8 @@ nsLoadGroup::AddChannel(nsIChannel *channel, nsISupports* ctxt)
rv = channel->GetLoadAttributes(&flags);
if (NS_FAILED(rv)) return rv;
+ SetDefaultLoadAttributes(flags);
+
//
// Add the channel to the list of active channels...
//