From da7d030b83fa96e1da9af966bac057c700ed29ee Mon Sep 17 00:00:00 2001 From: "benjamin%smedbergs.us" Date: Tue, 18 Jul 2006 14:56:15 +0000 Subject: [PATCH] Bug 320974: Resolve relative URLs in Places Atom Live Bookmarks (port of bug 262222), patch by Phil Ringnalda , r=annie.sullivan Original committer: gavin%gavinsharp.com Original revision: 1.3 Original date: 2005/12/22 01:46:43 git-svn-id: svn://10.0.0.236/trunk@202416 18797224-902f-48f8-a5cc-f745e15eee43 --- .../places/src/nsBookmarksFeedHandler.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/mozilla/toolkit/components/places/src/nsBookmarksFeedHandler.cpp b/mozilla/toolkit/components/places/src/nsBookmarksFeedHandler.cpp index b9d3077fe1b..e580858e25f 100644 --- a/mozilla/toolkit/components/places/src/nsBookmarksFeedHandler.cpp +++ b/mozilla/toolkit/components/places/src/nsBookmarksFeedHandler.cpp @@ -69,6 +69,7 @@ #include "nsIDOMElement.h" #include "nsIDOMCharacterData.h" #include "nsIDOMNodeList.h" +#include "nsIDOM3Node.h" // These are defined in nsLivemarkService.cpp extern nsIRDFResource *kLMRDF_type; @@ -512,6 +513,7 @@ nsLivemarkLoadListener::TryParseAsSimpleRSS () if (NS_FAILED(rv)) return rv; nsCOMPtr xmldoc; + parser->SetBaseURI(mLivemark->feedURI); rv = parser->ParseFromBuffer ((const PRUint8*) mBody.get(), mBody.Length(), "text/xml", getter_AddRefs(xmldoc)); if (NS_FAILED(rv)) return rv; @@ -649,6 +651,23 @@ nsLivemarkLoadListener::TryParseAsSimpleRSS () { rv = linkElem->GetAttribute(NS_LITERAL_STRING("href"), linkStr); if (NS_FAILED(rv)) break; // out of while(childNode) loop + + nsCOMPtr linkElem3 = do_QueryInterface(childNode); + if (linkElem3) { + // get the BaseURI (as string) + nsAutoString base; + rv = linkElem3->GetBaseURI(base); + if (NS_SUCCEEDED(rv) && !base.IsEmpty()) { + // convert a baseURI (string) to a nsIURI + nsCOMPtr baseURI; + rv = NS_NewURI(getter_AddRefs(baseURI), base); + if (baseURI) { + nsString absLinkStr; + if (NS_SUCCEEDED(NS_MakeAbsoluteURI(absLinkStr, linkStr, baseURI))) + linkStr = absLinkStr; + } + } + } } } else if (linkStr.IsEmpty()) { // in node's TEXT