diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index ee92806f0f..7d4d00ac61 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -468,6 +468,7 @@ typedef struct {
nsISupports *owner;
nsLoadFlags load_flags;
nsIURI *original_uri;
+ nsIURI *referrer;
char *content_type;
char *charset;
PRUint32 response_status;
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index d288a6b690..46988f667a 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -491,6 +491,8 @@ static nsrefcnt NSAPI nsChannel_Release(nsIHttpChannel *iface)
nsIInterfaceRequestor_Release(This->notif_callback);
if(This->original_uri)
nsIURI_Release(This->original_uri);
+ if(This->referrer)
+ nsIURI_Release(This->referrer);
free_http_headers(&This->response_headers);
free_http_headers(&This->request_headers);
@@ -1072,17 +1074,25 @@ static nsresult NSAPI nsChannel_GetReferrer(nsIHttpChannel *iface, nsIURI **aRef
{
nsChannel *This = NSCHANNEL_THIS(iface);
- FIXME("(%p)->(%p)\n", This, aReferrer);
+ TRACE("(%p)->(%p)\n", This, aReferrer);
- return NS_ERROR_NOT_IMPLEMENTED;
+ if(This->referrer)
+ nsIURI_AddRef(This->referrer);
+ *aReferrer = This->referrer;
+ return NS_OK;
}
static nsresult NSAPI nsChannel_SetReferrer(nsIHttpChannel *iface, nsIURI *aReferrer)
{
nsChannel *This = NSCHANNEL_THIS(iface);
- FIXME("(%p)->(%p)\n", This, aReferrer);
+ TRACE("(%p)->(%p)\n", This, aReferrer);
+ if(aReferrer)
+ nsIURI_AddRef(aReferrer);
+ if(This->referrer)
+ nsIURI_Release(This->referrer);
+ This->referrer = aReferrer;
return NS_OK;
}