better base url and target support

Checkin during red tree approved by sar
This commit is contained in:
peterl%netscape.com 1999-01-15 02:01:36 +00:00
Родитель bd2008b38c
Коммит 1ccd2192a7
6 изменённых файлов: 174 добавлений и 2 удалений

Просмотреть файл

@ -92,7 +92,9 @@ NS_NewHTMLDocument(nsIDocument** aInstancePtrResult)
nsHTMLDocument::nsHTMLDocument()
: nsMarkupDocument(),
mAttrStyleSheet(nsnull),
mStyleAttrStyleSheet(nsnull)
mStyleAttrStyleSheet(nsnull),
mBaseURL(nsnull),
mBaseTarget(nsnull)
{
mImages = nsnull;
mApplets = nsnull;
@ -140,6 +142,11 @@ nsHTMLDocument::~nsHTMLDocument()
mStyleAttrStyleSheet->SetOwningDocument(nsnull);
NS_RELEASE(mStyleAttrStyleSheet);
}
NS_IF_RELEASE(mBaseURL);
if (nsnull != mBaseTarget) {
delete mBaseTarget;
mBaseTarget = nsnull;
}
NS_IF_RELEASE(mParser);
for (i = 0; i < mImageMaps.Count(); i++) {
nsIDOMHTMLMapElement* map = (nsIDOMHTMLMapElement*)mImageMaps.ElementAt(i);
@ -430,6 +437,73 @@ void nsHTMLDocument::AddStyleSheetToSet(nsIStyleSheet* aSheet, nsIStyleSet* aSet
}
}
NS_IMETHODIMP
nsHTMLDocument::GetBaseURL(nsIURL*& aURL) const
{
if (nsnull != mBaseURL) {
NS_ADDREF(mBaseURL);
aURL = mBaseURL;
}
else {
aURL = GetDocumentURL();
}
return NS_OK;
}
NS_IMETHODIMP
nsHTMLDocument:: SetBaseURL(const nsString& aURLSpec)
{
nsresult result = NS_OK;
NS_IF_RELEASE(mBaseURL);
if (0 < aURLSpec.Length()) {
nsIURLGroup* urlGroup = nsnull;
(void)mDocumentURL->GetURLGroup(&urlGroup);
if (urlGroup) {
result = urlGroup->CreateURL(&mBaseURL, mDocumentURL, aURLSpec, nsnull);
NS_RELEASE(urlGroup);
}
else {
result = NS_NewURL(&mBaseURL, aURLSpec, mDocumentURL);
}
}
return result;
}
NS_IMETHODIMP
nsHTMLDocument:: GetBaseTarget(nsString& aTarget) const
{
if (nsnull != mBaseTarget) {
aTarget = *mBaseTarget;
}
else {
aTarget.Truncate();
}
return NS_OK;
}
NS_IMETHODIMP
nsHTMLDocument:: SetBaseTarget(const nsString& aTarget)
{
if (0 < aTarget.Length()) {
if (nsnull != mBaseTarget) {
*mBaseTarget = aTarget;
}
else {
mBaseTarget = aTarget.ToNewString();
}
}
else {
if (nsnull != mBaseTarget) {
delete mBaseTarget;
mBaseTarget = nsnull;
}
}
return NS_OK;
}
NS_IMETHODIMP
nsHTMLDocument::GetDTDMode(nsDTDMode& aMode)
{

Просмотреть файл

@ -64,6 +64,11 @@ public:
NS_IMETHOD GetAttributeStyleSheet(nsIHTMLStyleSheet** aStyleSheet);
NS_IMETHOD GetInlineStyleSheet(nsIHTMLCSSStyleSheet** aStyleSheet);
NS_IMETHOD GetBaseURL(nsIURL*& aURL) const;
NS_IMETHOD SetBaseURL(const nsString& aURLSpec);
NS_IMETHOD GetBaseTarget(nsString& aTarget) const;
NS_IMETHOD SetBaseTarget(const nsString& aTarget);
NS_IMETHOD GetDTDMode(nsDTDMode& aMode);
NS_IMETHOD SetDTDMode(nsDTDMode aMode);
@ -184,6 +189,8 @@ protected:
nsIHTMLStyleSheet* mAttrStyleSheet;
nsIHTMLCSSStyleSheet* mStyleAttrStyleSheet;
nsIURL* mBaseURL;
nsString* mBaseTarget;
nsDTDMode mDTDMode;
nsVoidArray mImageMaps;

Просмотреть файл

@ -52,6 +52,11 @@ public:
NS_IMETHOD GetForms(nsIDOMHTMLCollection** aForms) = 0;
NS_IMETHOD SetBaseURL(const nsString& aURLSpec) = 0;
NS_IMETHOD GetBaseTarget(nsString& aTarget) const = 0;
NS_IMETHOD SetBaseTarget(const nsString& aTarget) = 0;
/**
* Access DTD compatibility mode for this document
*/

Просмотреть файл

@ -92,7 +92,9 @@ NS_NewHTMLDocument(nsIDocument** aInstancePtrResult)
nsHTMLDocument::nsHTMLDocument()
: nsMarkupDocument(),
mAttrStyleSheet(nsnull),
mStyleAttrStyleSheet(nsnull)
mStyleAttrStyleSheet(nsnull),
mBaseURL(nsnull),
mBaseTarget(nsnull)
{
mImages = nsnull;
mApplets = nsnull;
@ -140,6 +142,11 @@ nsHTMLDocument::~nsHTMLDocument()
mStyleAttrStyleSheet->SetOwningDocument(nsnull);
NS_RELEASE(mStyleAttrStyleSheet);
}
NS_IF_RELEASE(mBaseURL);
if (nsnull != mBaseTarget) {
delete mBaseTarget;
mBaseTarget = nsnull;
}
NS_IF_RELEASE(mParser);
for (i = 0; i < mImageMaps.Count(); i++) {
nsIDOMHTMLMapElement* map = (nsIDOMHTMLMapElement*)mImageMaps.ElementAt(i);
@ -430,6 +437,73 @@ void nsHTMLDocument::AddStyleSheetToSet(nsIStyleSheet* aSheet, nsIStyleSet* aSet
}
}
NS_IMETHODIMP
nsHTMLDocument::GetBaseURL(nsIURL*& aURL) const
{
if (nsnull != mBaseURL) {
NS_ADDREF(mBaseURL);
aURL = mBaseURL;
}
else {
aURL = GetDocumentURL();
}
return NS_OK;
}
NS_IMETHODIMP
nsHTMLDocument:: SetBaseURL(const nsString& aURLSpec)
{
nsresult result = NS_OK;
NS_IF_RELEASE(mBaseURL);
if (0 < aURLSpec.Length()) {
nsIURLGroup* urlGroup = nsnull;
(void)mDocumentURL->GetURLGroup(&urlGroup);
if (urlGroup) {
result = urlGroup->CreateURL(&mBaseURL, mDocumentURL, aURLSpec, nsnull);
NS_RELEASE(urlGroup);
}
else {
result = NS_NewURL(&mBaseURL, aURLSpec, mDocumentURL);
}
}
return result;
}
NS_IMETHODIMP
nsHTMLDocument:: GetBaseTarget(nsString& aTarget) const
{
if (nsnull != mBaseTarget) {
aTarget = *mBaseTarget;
}
else {
aTarget.Truncate();
}
return NS_OK;
}
NS_IMETHODIMP
nsHTMLDocument:: SetBaseTarget(const nsString& aTarget)
{
if (0 < aTarget.Length()) {
if (nsnull != mBaseTarget) {
*mBaseTarget = aTarget;
}
else {
mBaseTarget = aTarget.ToNewString();
}
}
else {
if (nsnull != mBaseTarget) {
delete mBaseTarget;
mBaseTarget = nsnull;
}
}
return NS_OK;
}
NS_IMETHODIMP
nsHTMLDocument::GetDTDMode(nsDTDMode& aMode)
{

Просмотреть файл

@ -64,6 +64,11 @@ public:
NS_IMETHOD GetAttributeStyleSheet(nsIHTMLStyleSheet** aStyleSheet);
NS_IMETHOD GetInlineStyleSheet(nsIHTMLCSSStyleSheet** aStyleSheet);
NS_IMETHOD GetBaseURL(nsIURL*& aURL) const;
NS_IMETHOD SetBaseURL(const nsString& aURLSpec);
NS_IMETHOD GetBaseTarget(nsString& aTarget) const;
NS_IMETHOD SetBaseTarget(const nsString& aTarget);
NS_IMETHOD GetDTDMode(nsDTDMode& aMode);
NS_IMETHOD SetDTDMode(nsDTDMode aMode);
@ -184,6 +189,8 @@ protected:
nsIHTMLStyleSheet* mAttrStyleSheet;
nsIHTMLCSSStyleSheet* mStyleAttrStyleSheet;
nsIURL* mBaseURL;
nsString* mBaseTarget;
nsDTDMode mDTDMode;
nsVoidArray mImageMaps;

Просмотреть файл

@ -52,6 +52,11 @@ public:
NS_IMETHOD GetForms(nsIDOMHTMLCollection** aForms) = 0;
NS_IMETHOD SetBaseURL(const nsString& aURLSpec) = 0;
NS_IMETHOD GetBaseTarget(nsString& aTarget) const = 0;
NS_IMETHOD SetBaseTarget(const nsString& aTarget) = 0;
/**
* Access DTD compatibility mode for this document
*/