diff --git a/content/html/document/src/nsHTMLDocument.cpp b/content/html/document/src/nsHTMLDocument.cpp index c56dba83093..5435502173d 100644 --- a/content/html/document/src/nsHTMLDocument.cpp +++ b/content/html/document/src/nsHTMLDocument.cpp @@ -50,6 +50,11 @@ #include "nsParserCIID.h" #include "nsIDOMHTMLElement.h" +#ifdef PCB_USE_PROTOCOL_CONNECTION +// beard: how else would we get the referrer to a URL? +#include "nsIProtocolConnection.h" +#include "net.h" +#endif // Find/Serach Includes #if XP_NEW_SELECTION @@ -83,7 +88,6 @@ static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID); static NS_DEFINE_IID(kIHTMLContentContainerIID, NS_IHTMLCONTENTCONTAINER_IID); static NS_DEFINE_IID(kIDOMHTMLElementIID, NS_IDOMHTMLELEMENT_IID); - NS_LAYOUT nsresult NS_NewHTMLDocument(nsIDocument** aInstancePtrResult) { @@ -576,6 +580,9 @@ nsHTMLDocument::GetDoctype(nsIDOMDocumentType** aDocumentType) // // nsIDOMHTMLDocument interface implementation // +// see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-html.html#ID-1006298752 +// for full specification. +// NS_IMETHODIMP nsHTMLDocument::GetTitle(nsString& aTitle) { @@ -589,14 +596,37 @@ NS_IMETHODIMP nsHTMLDocument::GetReferrer(nsString& aReferrer) { //XXX TBI - return NS_ERROR_NOT_IMPLEMENTED; + // PCB: How do we know what link was traversed to get here? Until we do, it's legal to + // return an empty string. Would we have to look in history to get this? Find out. + aReferrer.SetLength(0); +#ifdef PCB_USE_PROTOCOL_CONNECTION + if (nsnull != mDocumentURL) { + nsIProtocolConnection* protocolConnection = NULL; + static NS_DEFINE_IID(kIProtocolConnectionIID, NS_IPROTOCOLCONNECTION_IID); + if (mDocumentURL->QueryInterface(kIProtocolConnectionIID, &protocolConnection) == NS_OK) { + URL_Struct_* urlInfo = NULL; + if (protocolConnection->GetURLInfo(&urlInfo) == NS_OK) + aReferrer.SetString(urlInfo->referer); + NS_RELEASE(protocolConnection); + } + } +#endif + return NS_OK; } NS_IMETHODIMP nsHTMLDocument::GetDomain(nsString& aDomain) { //XXX TBI - return NS_ERROR_NOT_IMPLEMENTED; + // PCB: This is the domain name of the server that produced this document. Can we just + // extract it from the URL? What about proxy servers, etc.? + if (nsnull != mDocumentURL) { + const char* hostName = mDocumentURL->GetHost(); + aDomain.SetString(hostName); + } else { + aDomain.SetLength(0); + } + return NS_OK; } NS_IMETHODIMP diff --git a/layout/html/document/src/nsHTMLDocument.cpp b/layout/html/document/src/nsHTMLDocument.cpp index c56dba83093..5435502173d 100644 --- a/layout/html/document/src/nsHTMLDocument.cpp +++ b/layout/html/document/src/nsHTMLDocument.cpp @@ -50,6 +50,11 @@ #include "nsParserCIID.h" #include "nsIDOMHTMLElement.h" +#ifdef PCB_USE_PROTOCOL_CONNECTION +// beard: how else would we get the referrer to a URL? +#include "nsIProtocolConnection.h" +#include "net.h" +#endif // Find/Serach Includes #if XP_NEW_SELECTION @@ -83,7 +88,6 @@ static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID); static NS_DEFINE_IID(kIHTMLContentContainerIID, NS_IHTMLCONTENTCONTAINER_IID); static NS_DEFINE_IID(kIDOMHTMLElementIID, NS_IDOMHTMLELEMENT_IID); - NS_LAYOUT nsresult NS_NewHTMLDocument(nsIDocument** aInstancePtrResult) { @@ -576,6 +580,9 @@ nsHTMLDocument::GetDoctype(nsIDOMDocumentType** aDocumentType) // // nsIDOMHTMLDocument interface implementation // +// see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-html.html#ID-1006298752 +// for full specification. +// NS_IMETHODIMP nsHTMLDocument::GetTitle(nsString& aTitle) { @@ -589,14 +596,37 @@ NS_IMETHODIMP nsHTMLDocument::GetReferrer(nsString& aReferrer) { //XXX TBI - return NS_ERROR_NOT_IMPLEMENTED; + // PCB: How do we know what link was traversed to get here? Until we do, it's legal to + // return an empty string. Would we have to look in history to get this? Find out. + aReferrer.SetLength(0); +#ifdef PCB_USE_PROTOCOL_CONNECTION + if (nsnull != mDocumentURL) { + nsIProtocolConnection* protocolConnection = NULL; + static NS_DEFINE_IID(kIProtocolConnectionIID, NS_IPROTOCOLCONNECTION_IID); + if (mDocumentURL->QueryInterface(kIProtocolConnectionIID, &protocolConnection) == NS_OK) { + URL_Struct_* urlInfo = NULL; + if (protocolConnection->GetURLInfo(&urlInfo) == NS_OK) + aReferrer.SetString(urlInfo->referer); + NS_RELEASE(protocolConnection); + } + } +#endif + return NS_OK; } NS_IMETHODIMP nsHTMLDocument::GetDomain(nsString& aDomain) { //XXX TBI - return NS_ERROR_NOT_IMPLEMENTED; + // PCB: This is the domain name of the server that produced this document. Can we just + // extract it from the URL? What about proxy servers, etc.? + if (nsnull != mDocumentURL) { + const char* hostName = mDocumentURL->GetHost(); + aDomain.SetString(hostName); + } else { + aDomain.SetLength(0); + } + return NS_OK; } NS_IMETHODIMP