diff --git a/mozilla/content/html/content/src/nsGenericHTMLElement.cpp b/mozilla/content/html/content/src/nsGenericHTMLElement.cpp index 9587cfc167b..e0f85e440b4 100644 --- a/mozilla/content/html/content/src/nsGenericHTMLElement.cpp +++ b/mozilla/content/html/content/src/nsGenericHTMLElement.cpp @@ -44,11 +44,10 @@ #include "nsISupportsArray.h" #include "nsIURL.h" #ifdef NECKO -#include "nsIIOService.h" -#include "nsIURL.h" -static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); -#endif // NECKO +#include "nsNeckoUtil.h" +#else #include "nsIURLGroup.h" +#endif // NECKO #include "nsStyleConsts.h" #include "nsXIFConverter.h" #include "nsFrame.h" @@ -995,29 +994,20 @@ nsGenericHTMLElement::GetBaseURL(nsIHTMLAttributes* aAttributes, value.GetStringValue(baseHref); nsIURI* url = nsnull; +#ifndef NECKO nsIURLGroup* urlGroup = nsnull; docBaseURL->GetURLGroup(&urlGroup); if (urlGroup) { result = urlGroup->CreateURL(&url, docBaseURL, baseHref, nsnull); NS_RELEASE(urlGroup); } - else { + else +#endif + { #ifndef NECKO result = NS_NewURL(&url, baseHref, docBaseURL); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &result); - if (NS_FAILED(result)) return result; - - nsIURI *uri = nsnull, *baseUri = nsnull; - result = docBaseURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(result)) return result; - - const char *uriStr = baseHref.GetBuffer(); - result = service->NewURI(uriStr, baseUri, &uri); - NS_RELEASE(baseUri); - if (NS_FAILED(result)) return result; - - result = uri->QueryInterface(nsIURI::GetIID(), (void**)&url); + result = NS_NewURI(&url, baseHref, docBaseURL); #endif // NECKO } *aBaseURL = url; @@ -1962,19 +1952,7 @@ nsGenericHTMLElement::MapBackgroundAttributesInto(nsIHTMLAttributes* aAttributes #ifndef NECKO rv = NS_MakeAbsoluteURL(docURL, "", spec, absURLSpec); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &rv); - if (NS_FAILED(rv)) return; - - nsIURI *baseUri = nsnull; - rv = docURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(rv)) return; - - char *absUrlStr = nsnull; - const char *urlSpec = spec.GetBuffer(); - rv = service->MakeAbsolute(urlSpec, baseUri, &absUrlStr); - NS_RELEASE(baseUri); - absURLSpec = absUrlStr; - delete [] absUrlStr; + rv = NS_MakeAbsoluteURI(spec, docURL, absURLSpec); #endif // NECKO if (NS_SUCCEEDED(rv)) { nsStyleColor* color = (nsStyleColor*) diff --git a/mozilla/content/html/document/src/nsHTMLContentSink.cpp b/mozilla/content/html/document/src/nsHTMLContentSink.cpp index 9f45508dfef..83e473cb25f 100644 --- a/mozilla/content/html/document/src/nsHTMLContentSink.cpp +++ b/mozilla/content/html/document/src/nsHTMLContentSink.cpp @@ -21,18 +21,17 @@ #include "nsICSSStyleSheet.h" #include "nsICSSLoader.h" #include "nsIUnicharInputStream.h" -#include "nsIUnicharStreamLoader.h" #include "nsIHTMLContent.h" #include "nsIHTMLContentContainer.h" #include "nsIURL.h" #ifdef NECKO -#include "nsIIOService.h" -#include "nsIURL.h" -#include "nsIServiceManager.h" -static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); -#endif // NECKO +#include "nsNeckoUtil.h" +class nsIUnicharStreamLoader : public nsISupports {}; // XXX what? +#else +#include "nsIUnicharStreamLoader.h" #include "nsIURLGroup.h" #include "nsIHttpURL.h" +#endif // NECKO #include "nsIPresShell.h" #include "nsIPresContext.h" #include "nsIViewManager.h" @@ -90,7 +89,9 @@ static NS_DEFINE_IID(kIDOMHTMLTextAreaElementIID, NS_IDOMHTMLTEXTAREAELEMENT_IID static NS_DEFINE_IID(kIDOMHTMLOptionElementIID, NS_IDOMHTMLOPTIONELEMENT_IID); static NS_DEFINE_IID(kIFormControlIID, NS_IFORMCONTROL_IID); static NS_DEFINE_IID(kIHTMLContentSinkIID, NS_IHTML_CONTENT_SINK_IID); +#ifndef NECKO static NS_DEFINE_IID(kIHTTPURLIID, NS_IHTTPURL_IID); +#endif static NS_DEFINE_IID(kIScrollableViewIID, NS_ISCROLLABLEVIEW_IID); static NS_DEFINE_IID(kIHTMLDocumentIID, NS_IHTMLDOCUMENT_IID); static NS_DEFINE_IID(kIHTMLContentContainerIID, NS_IHTMLCONTENTCONTAINER_IID); @@ -1503,12 +1504,18 @@ HTMLContentSink::Init(nsIDocument* aDoc, mCurrentContext->Begin(eHTMLTag_html, mRoot); mContextStack.AppendElement(mCurrentContext); +#ifdef NECKO + char* spec; +#else const char* spec; +#endif (void)aURL->GetSpec(&spec); SINK_TRACE(SINK_TRACE_CALLS, ("HTMLContentSink::Init: this=%p url='%s'", this, spec)); - +#ifdef NECKO + nsCRT::free(spec); +#endif return NS_OK; } @@ -2032,10 +2039,23 @@ HTMLContentSink::StartLayout() // If the document we are loading has a reference or it is a // frameset document, disable the scroll bars on the views. +#ifdef NECKO + char* ref; + nsIURL* url; + nsresult rv = mDocumentURL->QueryInterface(nsIURL::GetIID(), (void**)&url); + if (NS_SUCCEEDED(rv)) { + rv = url->GetRef(&ref); + NS_RELEASE(url); + } +#else const char* ref; nsresult rv = mDocumentURL->GetRef(&ref); +#endif if (rv == NS_OK) { mRef = new nsString(ref); +#ifdef NECKO + nsCRT::free(ref); +#endif } if ((nsnull != ref) || mFrameset) { @@ -2469,31 +2489,20 @@ HTMLContentSink::ProcessStyleLink(nsIHTMLContent* aElement, if ((0 == mimeType.Length()) || mimeType.EqualsIgnoreCase("text/css")) { nsIURI* url = nsnull; +#ifndef NECKO nsIURLGroup* urlGroup = nsnull; mDocumentBaseURL->GetURLGroup(&urlGroup); if (urlGroup) { result = urlGroup->CreateURL(&url, mDocumentBaseURL, aHref, nsnull); NS_RELEASE(urlGroup); } - else { + else +#endif + { #ifndef NECKO result = NS_NewURL(&url, aHref, mDocumentBaseURL); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &result); - if (NS_FAILED(result)) return result; - - nsIURI *uri = nsnull, *baseUri = nsnull; - - result = mDocumentBaseURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(result)) return result; - - const char *uriStr = aHref.GetBuffer(); - result = service->NewURI(uriStr, baseUri, &uri); - NS_RELEASE(baseUri); - if (NS_FAILED(result)) return result; - - result = uri->QueryInterface(nsIURI::GetIID(), (void**)&url); - NS_RELEASE(uri); + result = NS_NewURI(&url, aHref, mDocumentBaseURL); #endif // NECKO } if (NS_OK != result) { @@ -2658,10 +2667,12 @@ HTMLContentSink::ProcessMETATag(const nsIParserNode& aNode) } mHead->AppendChildTo(it, PR_FALSE); +#ifndef NECKO // If we are processing an HTTP url, handle meta http-equiv cases nsIHttpURL* httpUrl = nsnull; rv = mDocumentURL->QueryInterface(kIHTTPURLIID, (void **)&httpUrl); - +#endif + // set any HTTP-EQUIV data into document's header data as well as url nsAutoString header; it->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::httpEquiv, header); @@ -2669,6 +2680,9 @@ HTMLContentSink::ProcessMETATag(const nsIParserNode& aNode) nsAutoString result; it->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::content, result); if (result.Length() > 0) { +#ifdef NECKO + NS_ASSERTION(0, "how does necko add mime headers?"); +#else if (nsnull != httpUrl) { char* value = result.ToNewCString(), *csHeader; if (!value) { @@ -2685,6 +2699,7 @@ HTMLContentSink::ProcessMETATag(const nsIParserNode& aNode) delete[] csHeader; delete[] value; } +#endif header.ToLowerCase(); nsIAtom* fieldAtom = NS_NewAtom(header); @@ -2706,7 +2721,9 @@ HTMLContentSink::ProcessMETATag(const nsIParserNode& aNode) NS_IF_RELEASE(fieldAtom); } } +#ifndef NECKO NS_IF_RELEASE(httpUrl); +#endif NS_RELEASE(it); } @@ -2822,7 +2839,11 @@ HTMLContentSink::EvaluateScript(nsString& aScript, nsAutoString ret; nsIURI* docURL = mDocument->GetDocumentURL(); +#ifdef NECKO + char* url; +#else const char* url; +#endif if (docURL) { (void)docURL->GetSpec(&url); } @@ -2911,31 +2932,20 @@ HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode& aNode) if (src.Length() > 0) { // Use the SRC attribute value to load the URL nsIURI* url = nsnull; +#ifndef NECKO nsIURLGroup* urlGroup = nsnull; mDocumentBaseURL->GetURLGroup(&urlGroup); if (urlGroup) { rv = urlGroup->CreateURL(&url, mDocumentBaseURL, src, nsnull); NS_RELEASE(urlGroup); } - else { + else +#endif + { #ifndef NECKO rv = NS_NewURL(&url, src, mDocumentBaseURL); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &rv); - if (NS_FAILED(rv)) return rv; - - nsIURI *uri = nsnull, *baseUri = nsnull; - - rv = mDocumentBaseURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(rv)) return rv; - - const char *uriStr = src.GetBuffer(); - rv = service->NewURI(uriStr, baseUri, &uri); - NS_RELEASE(baseUri); - if (NS_FAILED(rv)) return rv; - - rv = uri->QueryInterface(nsIURI::GetIID(), (void**)&url); - NS_RELEASE(uri); + rv = NS_NewURI(&url, src, mDocumentBaseURL); #endif // NECKO } if (NS_OK != rv) { @@ -2946,11 +2956,15 @@ HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode& aNode) // onto it as opaque data. NS_ADDREF(this); +#ifdef NECKO + NS_ASSERTION(0, "fix me"); +#else nsIUnicharStreamLoader* loader; rv = NS_NewUnicharStreamLoader(&loader, url, (nsStreamCompleteFunc)nsDoneLoadingScript, (void *)this); +#endif NS_RELEASE(url); if (NS_OK == rv) { rv = NS_ERROR_HTMLPARSER_BLOCK; @@ -3079,31 +3093,20 @@ HTMLContentSink::ProcessSTYLETag(const nsIParserNode& aNode) // XXX what does nav do? // Use the SRC attribute value to load the URL nsIURI* url = nsnull; +#ifndef NECKO nsIURLGroup* urlGroup = nsnull; mDocumentBaseURL->GetURLGroup(&urlGroup); if (urlGroup) { rv = urlGroup->CreateURL(&url, mDocumentBaseURL, src, nsnull); NS_RELEASE(urlGroup); } - else { + else +#endif + { #ifndef NECKO rv = NS_NewURL(&url, src, mDocumentBaseURL); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &rv); - if (NS_FAILED(rv)) return rv; - - nsIURI *uri = nsnull, *baseUri = nsnull; - - rv = mDocumentBaseURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(rv)) return rv; - - const char *uriStr = src.GetBuffer(); - rv = service->NewURI(uriStr, baseUri, &uri); - NS_RELEASE(baseUri); - if (NS_FAILED(rv)) return rv; - - rv = uri->QueryInterface(nsIURI::GetIID(), (void**)&url); - NS_RELEASE(uri); + rv = NS_NewURI(&url, src, mDocumentBaseURL); #endif // NECKO } if (NS_OK != rv) { diff --git a/mozilla/content/html/document/src/nsHTMLDocument.cpp b/mozilla/content/html/document/src/nsHTMLDocument.cpp index 4955c09c0f8..947a1e601f2 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/content/html/document/src/nsHTMLDocument.cpp @@ -34,14 +34,15 @@ #include "nsIDOMComment.h" #include "nsIDOMWindow.h" #include "nsIDOMHTMLFormElement.h" -#include "nsIPostToServer.h" #include "nsIStreamListener.h" #include "nsIURL.h" #ifdef NECKO #include "nsIIOService.h" #include "nsIURL.h" -#endif // NECKO +#else +#include "nsIPostToServer.h" #include "nsIURLGroup.h" +#endif // NECKO #include "nsIContentViewerContainer.h" #include "nsIWebShell.h" #include "nsIDocumentLoader.h" @@ -570,31 +571,20 @@ nsHTMLDocument:: SetBaseURL(const nsString& aURLSpec) NS_IF_RELEASE(mBaseURL); if (0 < aURLSpec.Length()) { +#ifndef NECKO nsIURLGroup* urlGroup = nsnull; (void)mDocumentURL->GetURLGroup(&urlGroup); if (urlGroup) { result = urlGroup->CreateURL(&mBaseURL, mDocumentURL, aURLSpec, nsnull); NS_RELEASE(urlGroup); } - else { + else +#endif + { #ifndef NECKO result = NS_NewURL(&mBaseURL, aURLSpec, mDocumentURL); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &result); - if (NS_FAILED(result)) return result; - - nsIURI *uri = nsnull, *baseUri = nsnull; - - result = mDocumentURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(result)) return result; - - const char *uriStr = aURLSpec.GetBuffer(); - result = service->NewURI(uriStr, baseUri, &uri); - NS_RELEASE(baseUri); - if (NS_FAILED(result)) return result; - - result = uri->QueryInterface(nsIURI::GetIID(), (void**)&mBaseURL); - NS_RELEASE(uri); + result = NS_NewURI(&mBaseURL, aURLSpec, mDocumentURL); #endif // NECKO } } @@ -1202,8 +1192,8 @@ nsHTMLDocument::GetCookie(nsString& aCookie) #ifndef NECKO nsINetService *service; nsresult res = nsServiceManager::GetService(kNetServiceCID, - kINetServiceIID, - (nsISupports **)&service); + kINetServiceIID, + (nsISupports **)&service); if ((NS_OK == res) && (nsnull != service) && (nsnull != mDocumentURL)) { res = service->GetCookieString(mDocumentURL, aCookie); @@ -1274,16 +1264,7 @@ nsHTMLDocument::GetSourceDocumentURL(JSContext* cx, #ifndef NECKO result = NS_NewURL(sourceURL, url); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &result); - if (NS_FAILED(result)) return result; - - nsIURI *uri = nsnull; - const char *uriStr = url.GetBuffer(); - result = service->NewURI(uriStr, nsnull, &uri); - if (NS_FAILED(result)) return result; - - result = uri->QueryInterface(nsIURI::GetIID(), (void**)sourceURL); - NS_RELEASE(uri); + result = NS_NewURI(sourceURL, url); #endif // NECKO } } @@ -1359,15 +1340,7 @@ nsHTMLDocument::Open() #ifndef NECKO result = NS_NewURL(&sourceURL, "about:blank"); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &result); - if (NS_FAILED(result)) return result; - - nsIURI *uri = nsnull; - result = service->NewURI("about:blank", nsnull, &uri); - if (NS_FAILED(result)) return result; - - result = uri->QueryInterface(nsIURI::GetIID(), (void**)&sourceURL); - NS_RELEASE(uri); + result = NS_NewURL(&sourceURL, "about:blank"); #endif // NECKO if (NS_SUCCEEDED(result)) { @@ -1392,15 +1365,7 @@ nsHTMLDocument::Open(JSContext *cx, jsval *argv, PRUint32 argc) #ifndef NECKO result = NS_NewURL(&sourceURL, "about:blank"); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &result); - if (NS_FAILED(result)) return result; - - nsIURI *uri = nsnull; - result = service->NewURI("about:blank", nsnull, &uri); - if (NS_FAILED(result)) return result; - - result = uri->QueryInterface(nsIURI::GetIID(), (void**)&sourceURL); - NS_RELEASE(uri); + result = NS_NewURI(&sourceURL, "about:blank"); #endif // NECKO } diff --git a/mozilla/dom/src/jsurl/jsurl.cpp b/mozilla/dom/src/jsurl/jsurl.cpp index 56d6467cd68..66b7875c8c6 100644 --- a/mozilla/dom/src/jsurl/jsurl.cpp +++ b/mozilla/dom/src/jsurl/jsurl.cpp @@ -21,10 +21,12 @@ #include "xp.h" #include "plstr.h" #include "prmem.h" +#ifndef NECKO #include "netutils.h" #include "mkselect.h" #include "mktcp.h" #include "mkgeturl.h" +#endif #include #include @@ -32,7 +34,9 @@ #include "net.h" #include "jsurl.h" #include "nsIURL.h" +#ifndef NECKO #include "nsIConnectionInfo.h" +#endif #include "nsIStreamListener.h" #include "nsIScriptContextOwner.h" #include "nsIScriptContext.h" @@ -434,7 +438,7 @@ PR_IMPLEMENT(void) NET_InitJavaScriptProtocol(void) { #ifdef NECKO - NS_WARNING(0, "Brendan said he would implement the javascript: protocol."); + NS_WARNING("Brendan said he would implement the javascript: protocol."); #else static NET_ProtoImpl mocha_proto_impl; diff --git a/mozilla/layout/generic/nsObjectFrame.cpp b/mozilla/layout/generic/nsObjectFrame.cpp index de4dd074833..05de45a486f 100644 --- a/mozilla/layout/generic/nsObjectFrame.cpp +++ b/mozilla/layout/generic/nsObjectFrame.cpp @@ -111,7 +111,7 @@ public: NS_IMETHOD GetParameter(const char* name, const char* *result); - NS_IMETHOD GetDocumentBase(const char* *result); + NS_IMETHOD GetDocumentBase(char* *result); NS_IMETHOD GetDocumentEncoding(const char* *result); @@ -225,11 +225,7 @@ protected: nsHTMLReflowMetrics& aDesiredSize); -#ifdef NECKO nsresult SetFullURL(nsIURI* aURL); -#else - nsresult SetFullURL(nsIURI* aURL); -#endif nsresult InstantiateWidget(nsIPresContext& aPresContext, nsHTMLReflowMetrics& aMetrics, @@ -241,12 +237,7 @@ protected: const nsHTMLReflowState& aReflowState, nsIPluginHost* aPluginHost, const char* aMimetype, -#ifdef NECKO - nsIURI* aURL -#else - nsIURI* aURL -#endif - ); + nsIURI* aURL); nsresult HandleImage(nsIPresContext& aPresContext, nsHTMLReflowMetrics& aMetrics, @@ -254,19 +245,11 @@ protected: nsReflowStatus& aStatus, nsIFrame* child); -#ifdef NECKO nsresult GetBaseURL(nsIURI* &aURL); -#else - nsresult GetBaseURL(nsIURI* &aURL); -#endif private: nsPluginInstanceOwner *mInstanceOwner; -#ifdef NECKO nsIURI *mFullURL; -#else - nsIURI *mFullURL; -#endif nsIFrame *mFirstChild; nsIWidget *mWidget; }; @@ -585,13 +568,8 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, nsISupports *container = nsnull; nsIPluginHost *pluginHost = nsnull; nsIContentViewerContainer *cv = nsnull; -#ifdef NECKO nsIURI* baseURL = nsnull; nsIURI* fullURL = nsnull; -#else - nsIURI* baseURL = nsnull; - nsIURI* fullURL = nsnull; -#endif nsAutoString classid; PRInt32 nameSpaceID; @@ -625,14 +603,10 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, if(NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::codebase, codeBase) && classid != JAVA_CLASS_ID) { + nsIURI* codeBaseURL = nsnull; #ifdef NECKO - nsIURI* codeBaseURL = nsnull; - char* codeBaseStr = codeBase.ToNewCString(); - NS_ASSERTION(codeBaseStr, "out of memory"); - rv = NS_NewURI(&codeBaseURL, codeBaseStr, baseURL); - nsCRT::free(codeBaseStr); + rv = NS_NewURI(&codeBaseURL, codeBase, baseURL); #else - nsIURI* codeBaseURL = nsnull; rv = NS_NewURL(&codeBaseURL, codeBase, baseURL, nsnull, group); #endif if(rv == NS_OK) @@ -652,10 +626,7 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, // Create an absolute URL if(classid != JAVA_CLASS_ID) { #ifdef NECKO - char* classidStr = classid.ToNewCString(); - NS_ASSERTION(classidStr, "out of memory"); - rv = NS_NewURI(&fullURL, classidStr, baseURL); - nsCRT::free(classidStr); + rv = NS_NewURI(&fullURL, classid, baseURL); #else rv = NS_NewURL(&fullURL, classid, baseURL, nsnull, group); #endif @@ -715,10 +686,7 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, { nsIURI* codeBaseURL = nsnull; #ifdef NECKO - char* codeBaseStr = codeBase.ToNewCString(); - NS_ASSERTION(codeBaseStr, "out of memory"); - rv = NS_NewURI(&fullURL, codeBaseStr, baseURL); - nsCRT::free(codeBaseStr); + rv = NS_NewURI(&fullURL, codeBase, baseURL); #else rv = NS_NewURL(&fullURL, codeBase, baseURL, nsnull, group); #endif @@ -826,14 +794,10 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, nsAutoString codeBase; if (NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::codebase, codeBase)) { + nsIURI* codeBaseURL = nsnull; #ifdef NECKO - nsIURI* codeBaseURL = nsnull; - char* codeBaseStr = codeBase.ToNewCString(); - NS_ASSERTION(codeBasestr, "out of memory"); - rv = NS_NewURI(&codeBaseURL, codeBaseStr, baseURL); - nsCRT::free(codeBaseStr); + rv = NS_NewURI(&codeBaseURL, codeBase, baseURL); #else - nsIURI* codeBaseURL = nsnull; rv = NS_NewURL(&codeBaseURL, codeBase, baseURL, nsnull, group); #endif if(rv == NS_OK) @@ -845,10 +809,7 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, // Create an absolute URL #ifdef NECKO - char* srcStr = src.ToNewCString(); - NS_ASSERTION(srcStr, "out of memory"); - rv = NS_NewURI(&fullURL, srcStr, baseURL); - nsCRT::free(srcStr); + rv = NS_NewURI(&fullURL, src, baseURL); #else rv = NS_NewURL(&fullURL, src, baseURL, nsnull, group); NS_IF_RELEASE(group); @@ -875,10 +836,7 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, { #ifdef NECKO // Create an absolute URL - char* srcStr = src.ToNewCString(); - NS_ASSERTION(srcStr, "out of memory"); - rv = NS_NewURL(&fullURL, srcStr, baseURL); - nsCRT::free(srcStr); + rv = NS_NewURI(&fullURL, src, baseURL); #else nsIURLGroup* group = nsnull; if (nsnull != baseURL) @@ -893,10 +851,7 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, { #ifdef NECKO // Create an absolute URL - char* srcStr = src.ToNewCString(); - NS_ASSERTION(srcStr, "out of memory"); - rv = NS_NewURI(&fullURL, srcStr, baseURL); - nsCRT::free(srcStr); + rv = NS_NewURI(&fullURL, src, baseURL); #else nsIURLGroup* group = nsnull; if (nsnull != baseURL) @@ -992,12 +947,7 @@ nsObjectFrame::InstantiatePlugin(nsIPresContext& aPresContext, const nsHTMLReflowState& aReflowState, nsIPluginHost* aPluginHost, const char* aMimetype, -#ifdef NECKO - nsIURI* aURL -#else - nsIURI* aURL -#endif - ) + nsIURI* aURL) { nsIView *parentWithView; nsPoint origin; @@ -1109,20 +1059,12 @@ nsObjectFrame::HandleImage(nsIPresContext& aPresContext, nsresult -#ifdef NECKO nsObjectFrame::GetBaseURL(nsIURI* &aURL) -#else -nsObjectFrame::GetBaseURL(nsIURI* &aURL) -#endif { nsIHTMLContent* htmlContent; if (NS_SUCCEEDED(mContent->QueryInterface(kIHTMLContentIID, (void**)&htmlContent))) { -#ifdef NECKO - htmlContent->GetBaseURI(aURL); -#else htmlContent->GetBaseURL(aURL); -#endif NS_RELEASE(htmlContent); } else @@ -1367,11 +1309,7 @@ nsObjectFrame::Scrolled(nsIView *aView) } nsresult -#ifdef NECKO nsObjectFrame::SetFullURL(nsIURI* aURL) -#else -nsObjectFrame::SetFullURL(nsIURI* aURL) -#endif { NS_IF_RELEASE(mFullURL); mFullURL = aURL; @@ -1746,19 +1684,7 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL, const char *aTarge #ifndef NECKO rv = NS_MakeAbsoluteURL(baseURL, nsString(), uniurl, fullurl); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &rv); - if (NS_FAILED(rv)) return rv; - - nsIURI *baseUri = nsnull; - rv = baseURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(rv)) return rv; - - char *absUrlStr = nsnull; - const char *urlSpec = uniurl.GetBuffer(); - rv = service->MakeAbsolute(urlSpec, baseUri, &absUrlStr); - NS_RELEASE(baseUri); - fullurl = absUrlStr; - delete [] absUrlStr; + rv = NS_MakeAbsoluteURI(uniurl, baseURL, fullurl); #endif // NECKO NS_IF_RELEASE(baseURL); @@ -2053,7 +1979,7 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetParameter(const char* name, const char* return NS_OK; } -NS_IMETHODIMP nsPluginInstanceOwner::GetDocumentBase(const char* *result) +NS_IMETHODIMP nsPluginInstanceOwner::GetDocumentBase(char* *result) { if (nsnull != mContext) { @@ -2065,7 +1991,16 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetDocumentBase(const char* *result) nsCOMPtr docURL( dont_AddRef(doc->GetDocumentURL()) ); +#ifdef NECKO nsresult rv = docURL->GetSpec(result); +#else + const char* spec; + nsresult rv = docURL->GetSpec(&spec); + if (NS_FAILED(rv)) return rv; + *result = nsCRT::strdup(spec); + if (*result == nsnull) + return NS_ERROR_OUT_OF_MEMORY; +#endif return rv; } diff --git a/mozilla/layout/html/base/src/nsFrameTraversal.cpp b/mozilla/layout/html/base/src/nsFrameTraversal.cpp new file mode 100644 index 00000000000..ce9e3af871b --- /dev/null +++ b/mozilla/layout/html/base/src/nsFrameTraversal.cpp @@ -0,0 +1,287 @@ +#include "nsFrameTraversal.h" +#include "nsFrameList.h" + + +static NS_DEFINE_IID(kIEnumeratorIID, NS_IENUMERATOR_IID); +static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); + + +class nsFrameIterator: public nsIEnumerator +{ +public: + NS_DECL_ISUPPORTS + + NS_IMETHOD First(); + + NS_IMETHOD Last(); + + NS_IMETHOD Next()=0; + + NS_IMETHOD Prev()=0; + + NS_IMETHOD CurrentItem(nsISupports **aItem); + + NS_IMETHOD IsDone();//what does this mean??off edge? yes + + nsFrameIterator(); +protected: + void setCurrent(nsIFrame *aFrame){mCurrent = aFrame;} + nsIFrame *getCurrent(){return mCurrent;} + void setStart(nsIFrame *aFrame){mStart = aFrame;} + nsIFrame *getStart(){return mStart;} + nsIFrame *getLast(){return mLast;} + void setLast(nsIFrame *aFrame){mLast = aFrame;} + PRInt8 getOffEdge(){return mOffEdge;} + void setOffEdge(PRInt8 aOffEdge){mOffEdge = aOffEdge;} +private: + nsIFrame *mStart; + nsIFrame *mCurrent; + nsIFrame *mLast; //the last one that was in current; + PRInt8 mOffEdge; //0= no -1 to far prev, 1 to far next; +}; + + +/* +class nsFastFrameIterator: public nsFrameIterator +{ + nsFastFrameIterator(nsIFrame *start); +private : + + NS_IMETHOD Next(); + + NS_IMETHOD Prev(); + +} +*/ + +class nsLeafIterator: public nsFrameIterator +{ +public: + nsLeafIterator(nsIFrame *start); +private : + + NS_IMETHOD Next(); + + NS_IMETHOD Prev(); + +}; + +/************IMPLEMENTATIONS**************/ + +nsresult +NS_NewFrameTraversal(nsIEnumerator **aEnumerator, nsTraversalType aType, nsIFrame *aStart) +{ + if (!aEnumerator || !aStart) + return NS_ERROR_NULL_POINTER; + switch(aType) + { + case LEAF: { + nsLeafIterator *trav = new nsLeafIterator(aStart); + if (!trav) + return NS_ERROR_OUT_OF_MEMORY; + *aEnumerator = (nsIEnumerator *)trav; + NS_ADDREF(trav); + } + break; +#if 0 + case EXTENSIVE:{ + nsExtensiveTraversal *trav = new nsExtensiveTraversal(aStart); + if (!trav) + return NS_ERROR_NOMEMORY; + *aEnumerator = (nsIEnumerator *)trav; + NS_ADDREF(trav); + } + break; + case FASTEST:{ + nsFastestTraversal *trav = new nsFastestTraversal(aStart); + if (!trav) + return NS_ERROR_NOMEMORY; + *aEnumerator = (nsIEnumerator *)trav; + NS_ADDREF(trav); + } +#endif + default: + return NS_ERROR_NOT_IMPLEMENTED; + break; + } + return NS_OK; +} + + + +/*********nsFrameIterator************/ +NS_IMPL_ADDREF(nsFrameIterator) + +NS_IMPL_RELEASE(nsFrameIterator) + + + +nsFrameIterator::nsFrameIterator() +{ + mOffEdge = 0; + mLast = nsnull; + mCurrent = nsnull; + mStart = nsnull; + NS_INIT_REFCNT(); +} + + + +nsresult +nsFrameIterator::QueryInterface(REFNSIID aIID, void** aInstancePtr) +{ + if (NULL == aInstancePtr) { + return NS_ERROR_NULL_POINTER; + } + if (aIID.Equals(kISupportsIID)) { + *aInstancePtr = (void *)(nsISupports *)this; + NS_ADDREF_THIS(); + return NS_OK; + } + if (aIID.Equals(kIEnumeratorIID)) { + *aInstancePtr = (void*)(nsIEnumerator*)this; + NS_ADDREF_THIS(); + return NS_OK; + } + return NS_NOINTERFACE; +} + + + +nsresult +nsFrameIterator::CurrentItem(nsISupports **aItem) +{ + if (!aItem) + return NS_ERROR_NULL_POINTER; + *aItem = mCurrent; + return NS_OK; +} + + + +nsresult +nsFrameIterator::IsDone()//what does this mean??off edge? yes +{ + if (mOffEdge != 0) + return NS_OK; + return NS_COMFALSE; +} + + + +nsresult +nsFrameIterator::First() +{ + mCurrent = mStart; + return NS_OK; +} + + + +nsresult +nsFrameIterator::Last() +{ + return NS_ERROR_FAILURE; +} + + + +/*********LEAFITERATOR**********/ + + +nsLeafIterator::nsLeafIterator(nsIFrame *aStart) +{ + setStart(aStart); + setCurrent(aStart); + setLast(aStart); +} + + + +nsresult +nsLeafIterator::Next() +{ +//recursive-oid method to get next frame + nsIFrame *result; + nsIFrame *parent = getCurrent(); + if (!parent) + parent = getLast(); + while(NS_SUCCEEDED(parent->FirstChild(nsnull,&result)) && result) + { + parent = result; + } + if (parent != getCurrent()) + { + result = parent; + } + else { + while(parent){ + if (NS_SUCCEEDED(parent->GetNextSibling(&result)) && result){ + parent = result; + while(NS_SUCCEEDED(parent->FirstChild(nsnull,&result)) && result) + { + parent = result; + } + result = parent; + break; + } + else + if (NS_FAILED(parent->GetParent(&result)) || !result){ + result = nsnull; + break; + } + else + parent = result; + } + } + setCurrent(result); + if (!result) + setOffEdge(1); + return nsnull; +} + + + + +nsresult +nsLeafIterator::Prev() +{ +//recursive-oid method to get prev frame + nsIFrame *result; + nsIFrame *parent = getCurrent(); + if (!parent) + return NS_ERROR_FAILURE; + + parent = getLast(); + while(parent){ + nsIFrame *grandParent; + if (NS_SUCCEEDED(parent->GetParent(&grandParent)) && grandParent){ + nsIFrame * grandFchild; + if (NS_SUCCEEDED(grandParent->FirstChild(nsnull,&grandFchild)) && grandFchild){ + nsFrameList list(grandFchild); + if (result = list.GetPrevSiblingFor(parent) ){ + parent = result; + while(NS_SUCCEEDED(parent->FirstChild(nsnull,&result)) && result){ + parent = result; + while(NS_SUCCEEDED(parent->GetNextSibling(&result)) && result){ + parent = result; + } + } + result = parent; + break; + } + else + if (NS_FAILED(parent->GetParent(&result)) || !result){ + result = nsnull; + break; + } + else + parent = result; + } + } + } + setCurrent(result); + if (!result) + setOffEdge(-1); + return nsnull; +} diff --git a/mozilla/layout/html/base/src/nsObjectFrame.cpp b/mozilla/layout/html/base/src/nsObjectFrame.cpp index de4dd074833..05de45a486f 100644 --- a/mozilla/layout/html/base/src/nsObjectFrame.cpp +++ b/mozilla/layout/html/base/src/nsObjectFrame.cpp @@ -111,7 +111,7 @@ public: NS_IMETHOD GetParameter(const char* name, const char* *result); - NS_IMETHOD GetDocumentBase(const char* *result); + NS_IMETHOD GetDocumentBase(char* *result); NS_IMETHOD GetDocumentEncoding(const char* *result); @@ -225,11 +225,7 @@ protected: nsHTMLReflowMetrics& aDesiredSize); -#ifdef NECKO nsresult SetFullURL(nsIURI* aURL); -#else - nsresult SetFullURL(nsIURI* aURL); -#endif nsresult InstantiateWidget(nsIPresContext& aPresContext, nsHTMLReflowMetrics& aMetrics, @@ -241,12 +237,7 @@ protected: const nsHTMLReflowState& aReflowState, nsIPluginHost* aPluginHost, const char* aMimetype, -#ifdef NECKO - nsIURI* aURL -#else - nsIURI* aURL -#endif - ); + nsIURI* aURL); nsresult HandleImage(nsIPresContext& aPresContext, nsHTMLReflowMetrics& aMetrics, @@ -254,19 +245,11 @@ protected: nsReflowStatus& aStatus, nsIFrame* child); -#ifdef NECKO nsresult GetBaseURL(nsIURI* &aURL); -#else - nsresult GetBaseURL(nsIURI* &aURL); -#endif private: nsPluginInstanceOwner *mInstanceOwner; -#ifdef NECKO nsIURI *mFullURL; -#else - nsIURI *mFullURL; -#endif nsIFrame *mFirstChild; nsIWidget *mWidget; }; @@ -585,13 +568,8 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, nsISupports *container = nsnull; nsIPluginHost *pluginHost = nsnull; nsIContentViewerContainer *cv = nsnull; -#ifdef NECKO nsIURI* baseURL = nsnull; nsIURI* fullURL = nsnull; -#else - nsIURI* baseURL = nsnull; - nsIURI* fullURL = nsnull; -#endif nsAutoString classid; PRInt32 nameSpaceID; @@ -625,14 +603,10 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, if(NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::codebase, codeBase) && classid != JAVA_CLASS_ID) { + nsIURI* codeBaseURL = nsnull; #ifdef NECKO - nsIURI* codeBaseURL = nsnull; - char* codeBaseStr = codeBase.ToNewCString(); - NS_ASSERTION(codeBaseStr, "out of memory"); - rv = NS_NewURI(&codeBaseURL, codeBaseStr, baseURL); - nsCRT::free(codeBaseStr); + rv = NS_NewURI(&codeBaseURL, codeBase, baseURL); #else - nsIURI* codeBaseURL = nsnull; rv = NS_NewURL(&codeBaseURL, codeBase, baseURL, nsnull, group); #endif if(rv == NS_OK) @@ -652,10 +626,7 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, // Create an absolute URL if(classid != JAVA_CLASS_ID) { #ifdef NECKO - char* classidStr = classid.ToNewCString(); - NS_ASSERTION(classidStr, "out of memory"); - rv = NS_NewURI(&fullURL, classidStr, baseURL); - nsCRT::free(classidStr); + rv = NS_NewURI(&fullURL, classid, baseURL); #else rv = NS_NewURL(&fullURL, classid, baseURL, nsnull, group); #endif @@ -715,10 +686,7 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, { nsIURI* codeBaseURL = nsnull; #ifdef NECKO - char* codeBaseStr = codeBase.ToNewCString(); - NS_ASSERTION(codeBaseStr, "out of memory"); - rv = NS_NewURI(&fullURL, codeBaseStr, baseURL); - nsCRT::free(codeBaseStr); + rv = NS_NewURI(&fullURL, codeBase, baseURL); #else rv = NS_NewURL(&fullURL, codeBase, baseURL, nsnull, group); #endif @@ -826,14 +794,10 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, nsAutoString codeBase; if (NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::codebase, codeBase)) { + nsIURI* codeBaseURL = nsnull; #ifdef NECKO - nsIURI* codeBaseURL = nsnull; - char* codeBaseStr = codeBase.ToNewCString(); - NS_ASSERTION(codeBasestr, "out of memory"); - rv = NS_NewURI(&codeBaseURL, codeBaseStr, baseURL); - nsCRT::free(codeBaseStr); + rv = NS_NewURI(&codeBaseURL, codeBase, baseURL); #else - nsIURI* codeBaseURL = nsnull; rv = NS_NewURL(&codeBaseURL, codeBase, baseURL, nsnull, group); #endif if(rv == NS_OK) @@ -845,10 +809,7 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, // Create an absolute URL #ifdef NECKO - char* srcStr = src.ToNewCString(); - NS_ASSERTION(srcStr, "out of memory"); - rv = NS_NewURI(&fullURL, srcStr, baseURL); - nsCRT::free(srcStr); + rv = NS_NewURI(&fullURL, src, baseURL); #else rv = NS_NewURL(&fullURL, src, baseURL, nsnull, group); NS_IF_RELEASE(group); @@ -875,10 +836,7 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, { #ifdef NECKO // Create an absolute URL - char* srcStr = src.ToNewCString(); - NS_ASSERTION(srcStr, "out of memory"); - rv = NS_NewURL(&fullURL, srcStr, baseURL); - nsCRT::free(srcStr); + rv = NS_NewURI(&fullURL, src, baseURL); #else nsIURLGroup* group = nsnull; if (nsnull != baseURL) @@ -893,10 +851,7 @@ nsObjectFrame::Reflow(nsIPresContext& aPresContext, { #ifdef NECKO // Create an absolute URL - char* srcStr = src.ToNewCString(); - NS_ASSERTION(srcStr, "out of memory"); - rv = NS_NewURI(&fullURL, srcStr, baseURL); - nsCRT::free(srcStr); + rv = NS_NewURI(&fullURL, src, baseURL); #else nsIURLGroup* group = nsnull; if (nsnull != baseURL) @@ -992,12 +947,7 @@ nsObjectFrame::InstantiatePlugin(nsIPresContext& aPresContext, const nsHTMLReflowState& aReflowState, nsIPluginHost* aPluginHost, const char* aMimetype, -#ifdef NECKO - nsIURI* aURL -#else - nsIURI* aURL -#endif - ) + nsIURI* aURL) { nsIView *parentWithView; nsPoint origin; @@ -1109,20 +1059,12 @@ nsObjectFrame::HandleImage(nsIPresContext& aPresContext, nsresult -#ifdef NECKO nsObjectFrame::GetBaseURL(nsIURI* &aURL) -#else -nsObjectFrame::GetBaseURL(nsIURI* &aURL) -#endif { nsIHTMLContent* htmlContent; if (NS_SUCCEEDED(mContent->QueryInterface(kIHTMLContentIID, (void**)&htmlContent))) { -#ifdef NECKO - htmlContent->GetBaseURI(aURL); -#else htmlContent->GetBaseURL(aURL); -#endif NS_RELEASE(htmlContent); } else @@ -1367,11 +1309,7 @@ nsObjectFrame::Scrolled(nsIView *aView) } nsresult -#ifdef NECKO nsObjectFrame::SetFullURL(nsIURI* aURL) -#else -nsObjectFrame::SetFullURL(nsIURI* aURL) -#endif { NS_IF_RELEASE(mFullURL); mFullURL = aURL; @@ -1746,19 +1684,7 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL, const char *aTarge #ifndef NECKO rv = NS_MakeAbsoluteURL(baseURL, nsString(), uniurl, fullurl); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &rv); - if (NS_FAILED(rv)) return rv; - - nsIURI *baseUri = nsnull; - rv = baseURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(rv)) return rv; - - char *absUrlStr = nsnull; - const char *urlSpec = uniurl.GetBuffer(); - rv = service->MakeAbsolute(urlSpec, baseUri, &absUrlStr); - NS_RELEASE(baseUri); - fullurl = absUrlStr; - delete [] absUrlStr; + rv = NS_MakeAbsoluteURI(uniurl, baseURL, fullurl); #endif // NECKO NS_IF_RELEASE(baseURL); @@ -2053,7 +1979,7 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetParameter(const char* name, const char* return NS_OK; } -NS_IMETHODIMP nsPluginInstanceOwner::GetDocumentBase(const char* *result) +NS_IMETHODIMP nsPluginInstanceOwner::GetDocumentBase(char* *result) { if (nsnull != mContext) { @@ -2065,7 +1991,16 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetDocumentBase(const char* *result) nsCOMPtr docURL( dont_AddRef(doc->GetDocumentURL()) ); +#ifdef NECKO nsresult rv = docURL->GetSpec(result); +#else + const char* spec; + nsresult rv = docURL->GetSpec(&spec); + if (NS_FAILED(rv)) return rv; + *result = nsCRT::strdup(spec); + if (*result == nsnull) + return NS_ERROR_OUT_OF_MEMORY; +#endif return rv; } diff --git a/mozilla/layout/html/content/src/nsGenericHTMLElement.cpp b/mozilla/layout/html/content/src/nsGenericHTMLElement.cpp index 9587cfc167b..e0f85e440b4 100644 --- a/mozilla/layout/html/content/src/nsGenericHTMLElement.cpp +++ b/mozilla/layout/html/content/src/nsGenericHTMLElement.cpp @@ -44,11 +44,10 @@ #include "nsISupportsArray.h" #include "nsIURL.h" #ifdef NECKO -#include "nsIIOService.h" -#include "nsIURL.h" -static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); -#endif // NECKO +#include "nsNeckoUtil.h" +#else #include "nsIURLGroup.h" +#endif // NECKO #include "nsStyleConsts.h" #include "nsXIFConverter.h" #include "nsFrame.h" @@ -995,29 +994,20 @@ nsGenericHTMLElement::GetBaseURL(nsIHTMLAttributes* aAttributes, value.GetStringValue(baseHref); nsIURI* url = nsnull; +#ifndef NECKO nsIURLGroup* urlGroup = nsnull; docBaseURL->GetURLGroup(&urlGroup); if (urlGroup) { result = urlGroup->CreateURL(&url, docBaseURL, baseHref, nsnull); NS_RELEASE(urlGroup); } - else { + else +#endif + { #ifndef NECKO result = NS_NewURL(&url, baseHref, docBaseURL); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &result); - if (NS_FAILED(result)) return result; - - nsIURI *uri = nsnull, *baseUri = nsnull; - result = docBaseURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(result)) return result; - - const char *uriStr = baseHref.GetBuffer(); - result = service->NewURI(uriStr, baseUri, &uri); - NS_RELEASE(baseUri); - if (NS_FAILED(result)) return result; - - result = uri->QueryInterface(nsIURI::GetIID(), (void**)&url); + result = NS_NewURI(&url, baseHref, docBaseURL); #endif // NECKO } *aBaseURL = url; @@ -1962,19 +1952,7 @@ nsGenericHTMLElement::MapBackgroundAttributesInto(nsIHTMLAttributes* aAttributes #ifndef NECKO rv = NS_MakeAbsoluteURL(docURL, "", spec, absURLSpec); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &rv); - if (NS_FAILED(rv)) return; - - nsIURI *baseUri = nsnull; - rv = docURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(rv)) return; - - char *absUrlStr = nsnull; - const char *urlSpec = spec.GetBuffer(); - rv = service->MakeAbsolute(urlSpec, baseUri, &absUrlStr); - NS_RELEASE(baseUri); - absURLSpec = absUrlStr; - delete [] absUrlStr; + rv = NS_MakeAbsoluteURI(spec, docURL, absURLSpec); #endif // NECKO if (NS_SUCCEEDED(rv)) { nsStyleColor* color = (nsStyleColor*) diff --git a/mozilla/layout/html/document/src/nsHTMLContentSink.cpp b/mozilla/layout/html/document/src/nsHTMLContentSink.cpp index 9f45508dfef..83e473cb25f 100644 --- a/mozilla/layout/html/document/src/nsHTMLContentSink.cpp +++ b/mozilla/layout/html/document/src/nsHTMLContentSink.cpp @@ -21,18 +21,17 @@ #include "nsICSSStyleSheet.h" #include "nsICSSLoader.h" #include "nsIUnicharInputStream.h" -#include "nsIUnicharStreamLoader.h" #include "nsIHTMLContent.h" #include "nsIHTMLContentContainer.h" #include "nsIURL.h" #ifdef NECKO -#include "nsIIOService.h" -#include "nsIURL.h" -#include "nsIServiceManager.h" -static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); -#endif // NECKO +#include "nsNeckoUtil.h" +class nsIUnicharStreamLoader : public nsISupports {}; // XXX what? +#else +#include "nsIUnicharStreamLoader.h" #include "nsIURLGroup.h" #include "nsIHttpURL.h" +#endif // NECKO #include "nsIPresShell.h" #include "nsIPresContext.h" #include "nsIViewManager.h" @@ -90,7 +89,9 @@ static NS_DEFINE_IID(kIDOMHTMLTextAreaElementIID, NS_IDOMHTMLTEXTAREAELEMENT_IID static NS_DEFINE_IID(kIDOMHTMLOptionElementIID, NS_IDOMHTMLOPTIONELEMENT_IID); static NS_DEFINE_IID(kIFormControlIID, NS_IFORMCONTROL_IID); static NS_DEFINE_IID(kIHTMLContentSinkIID, NS_IHTML_CONTENT_SINK_IID); +#ifndef NECKO static NS_DEFINE_IID(kIHTTPURLIID, NS_IHTTPURL_IID); +#endif static NS_DEFINE_IID(kIScrollableViewIID, NS_ISCROLLABLEVIEW_IID); static NS_DEFINE_IID(kIHTMLDocumentIID, NS_IHTMLDOCUMENT_IID); static NS_DEFINE_IID(kIHTMLContentContainerIID, NS_IHTMLCONTENTCONTAINER_IID); @@ -1503,12 +1504,18 @@ HTMLContentSink::Init(nsIDocument* aDoc, mCurrentContext->Begin(eHTMLTag_html, mRoot); mContextStack.AppendElement(mCurrentContext); +#ifdef NECKO + char* spec; +#else const char* spec; +#endif (void)aURL->GetSpec(&spec); SINK_TRACE(SINK_TRACE_CALLS, ("HTMLContentSink::Init: this=%p url='%s'", this, spec)); - +#ifdef NECKO + nsCRT::free(spec); +#endif return NS_OK; } @@ -2032,10 +2039,23 @@ HTMLContentSink::StartLayout() // If the document we are loading has a reference or it is a // frameset document, disable the scroll bars on the views. +#ifdef NECKO + char* ref; + nsIURL* url; + nsresult rv = mDocumentURL->QueryInterface(nsIURL::GetIID(), (void**)&url); + if (NS_SUCCEEDED(rv)) { + rv = url->GetRef(&ref); + NS_RELEASE(url); + } +#else const char* ref; nsresult rv = mDocumentURL->GetRef(&ref); +#endif if (rv == NS_OK) { mRef = new nsString(ref); +#ifdef NECKO + nsCRT::free(ref); +#endif } if ((nsnull != ref) || mFrameset) { @@ -2469,31 +2489,20 @@ HTMLContentSink::ProcessStyleLink(nsIHTMLContent* aElement, if ((0 == mimeType.Length()) || mimeType.EqualsIgnoreCase("text/css")) { nsIURI* url = nsnull; +#ifndef NECKO nsIURLGroup* urlGroup = nsnull; mDocumentBaseURL->GetURLGroup(&urlGroup); if (urlGroup) { result = urlGroup->CreateURL(&url, mDocumentBaseURL, aHref, nsnull); NS_RELEASE(urlGroup); } - else { + else +#endif + { #ifndef NECKO result = NS_NewURL(&url, aHref, mDocumentBaseURL); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &result); - if (NS_FAILED(result)) return result; - - nsIURI *uri = nsnull, *baseUri = nsnull; - - result = mDocumentBaseURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(result)) return result; - - const char *uriStr = aHref.GetBuffer(); - result = service->NewURI(uriStr, baseUri, &uri); - NS_RELEASE(baseUri); - if (NS_FAILED(result)) return result; - - result = uri->QueryInterface(nsIURI::GetIID(), (void**)&url); - NS_RELEASE(uri); + result = NS_NewURI(&url, aHref, mDocumentBaseURL); #endif // NECKO } if (NS_OK != result) { @@ -2658,10 +2667,12 @@ HTMLContentSink::ProcessMETATag(const nsIParserNode& aNode) } mHead->AppendChildTo(it, PR_FALSE); +#ifndef NECKO // If we are processing an HTTP url, handle meta http-equiv cases nsIHttpURL* httpUrl = nsnull; rv = mDocumentURL->QueryInterface(kIHTTPURLIID, (void **)&httpUrl); - +#endif + // set any HTTP-EQUIV data into document's header data as well as url nsAutoString header; it->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::httpEquiv, header); @@ -2669,6 +2680,9 @@ HTMLContentSink::ProcessMETATag(const nsIParserNode& aNode) nsAutoString result; it->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::content, result); if (result.Length() > 0) { +#ifdef NECKO + NS_ASSERTION(0, "how does necko add mime headers?"); +#else if (nsnull != httpUrl) { char* value = result.ToNewCString(), *csHeader; if (!value) { @@ -2685,6 +2699,7 @@ HTMLContentSink::ProcessMETATag(const nsIParserNode& aNode) delete[] csHeader; delete[] value; } +#endif header.ToLowerCase(); nsIAtom* fieldAtom = NS_NewAtom(header); @@ -2706,7 +2721,9 @@ HTMLContentSink::ProcessMETATag(const nsIParserNode& aNode) NS_IF_RELEASE(fieldAtom); } } +#ifndef NECKO NS_IF_RELEASE(httpUrl); +#endif NS_RELEASE(it); } @@ -2822,7 +2839,11 @@ HTMLContentSink::EvaluateScript(nsString& aScript, nsAutoString ret; nsIURI* docURL = mDocument->GetDocumentURL(); +#ifdef NECKO + char* url; +#else const char* url; +#endif if (docURL) { (void)docURL->GetSpec(&url); } @@ -2911,31 +2932,20 @@ HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode& aNode) if (src.Length() > 0) { // Use the SRC attribute value to load the URL nsIURI* url = nsnull; +#ifndef NECKO nsIURLGroup* urlGroup = nsnull; mDocumentBaseURL->GetURLGroup(&urlGroup); if (urlGroup) { rv = urlGroup->CreateURL(&url, mDocumentBaseURL, src, nsnull); NS_RELEASE(urlGroup); } - else { + else +#endif + { #ifndef NECKO rv = NS_NewURL(&url, src, mDocumentBaseURL); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &rv); - if (NS_FAILED(rv)) return rv; - - nsIURI *uri = nsnull, *baseUri = nsnull; - - rv = mDocumentBaseURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(rv)) return rv; - - const char *uriStr = src.GetBuffer(); - rv = service->NewURI(uriStr, baseUri, &uri); - NS_RELEASE(baseUri); - if (NS_FAILED(rv)) return rv; - - rv = uri->QueryInterface(nsIURI::GetIID(), (void**)&url); - NS_RELEASE(uri); + rv = NS_NewURI(&url, src, mDocumentBaseURL); #endif // NECKO } if (NS_OK != rv) { @@ -2946,11 +2956,15 @@ HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode& aNode) // onto it as opaque data. NS_ADDREF(this); +#ifdef NECKO + NS_ASSERTION(0, "fix me"); +#else nsIUnicharStreamLoader* loader; rv = NS_NewUnicharStreamLoader(&loader, url, (nsStreamCompleteFunc)nsDoneLoadingScript, (void *)this); +#endif NS_RELEASE(url); if (NS_OK == rv) { rv = NS_ERROR_HTMLPARSER_BLOCK; @@ -3079,31 +3093,20 @@ HTMLContentSink::ProcessSTYLETag(const nsIParserNode& aNode) // XXX what does nav do? // Use the SRC attribute value to load the URL nsIURI* url = nsnull; +#ifndef NECKO nsIURLGroup* urlGroup = nsnull; mDocumentBaseURL->GetURLGroup(&urlGroup); if (urlGroup) { rv = urlGroup->CreateURL(&url, mDocumentBaseURL, src, nsnull); NS_RELEASE(urlGroup); } - else { + else +#endif + { #ifndef NECKO rv = NS_NewURL(&url, src, mDocumentBaseURL); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &rv); - if (NS_FAILED(rv)) return rv; - - nsIURI *uri = nsnull, *baseUri = nsnull; - - rv = mDocumentBaseURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(rv)) return rv; - - const char *uriStr = src.GetBuffer(); - rv = service->NewURI(uriStr, baseUri, &uri); - NS_RELEASE(baseUri); - if (NS_FAILED(rv)) return rv; - - rv = uri->QueryInterface(nsIURI::GetIID(), (void**)&url); - NS_RELEASE(uri); + rv = NS_NewURI(&url, src, mDocumentBaseURL); #endif // NECKO } if (NS_OK != rv) { diff --git a/mozilla/layout/html/document/src/nsHTMLDocument.cpp b/mozilla/layout/html/document/src/nsHTMLDocument.cpp index 4955c09c0f8..947a1e601f2 100644 --- a/mozilla/layout/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/layout/html/document/src/nsHTMLDocument.cpp @@ -34,14 +34,15 @@ #include "nsIDOMComment.h" #include "nsIDOMWindow.h" #include "nsIDOMHTMLFormElement.h" -#include "nsIPostToServer.h" #include "nsIStreamListener.h" #include "nsIURL.h" #ifdef NECKO #include "nsIIOService.h" #include "nsIURL.h" -#endif // NECKO +#else +#include "nsIPostToServer.h" #include "nsIURLGroup.h" +#endif // NECKO #include "nsIContentViewerContainer.h" #include "nsIWebShell.h" #include "nsIDocumentLoader.h" @@ -570,31 +571,20 @@ nsHTMLDocument:: SetBaseURL(const nsString& aURLSpec) NS_IF_RELEASE(mBaseURL); if (0 < aURLSpec.Length()) { +#ifndef NECKO nsIURLGroup* urlGroup = nsnull; (void)mDocumentURL->GetURLGroup(&urlGroup); if (urlGroup) { result = urlGroup->CreateURL(&mBaseURL, mDocumentURL, aURLSpec, nsnull); NS_RELEASE(urlGroup); } - else { + else +#endif + { #ifndef NECKO result = NS_NewURL(&mBaseURL, aURLSpec, mDocumentURL); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &result); - if (NS_FAILED(result)) return result; - - nsIURI *uri = nsnull, *baseUri = nsnull; - - result = mDocumentURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(result)) return result; - - const char *uriStr = aURLSpec.GetBuffer(); - result = service->NewURI(uriStr, baseUri, &uri); - NS_RELEASE(baseUri); - if (NS_FAILED(result)) return result; - - result = uri->QueryInterface(nsIURI::GetIID(), (void**)&mBaseURL); - NS_RELEASE(uri); + result = NS_NewURI(&mBaseURL, aURLSpec, mDocumentURL); #endif // NECKO } } @@ -1202,8 +1192,8 @@ nsHTMLDocument::GetCookie(nsString& aCookie) #ifndef NECKO nsINetService *service; nsresult res = nsServiceManager::GetService(kNetServiceCID, - kINetServiceIID, - (nsISupports **)&service); + kINetServiceIID, + (nsISupports **)&service); if ((NS_OK == res) && (nsnull != service) && (nsnull != mDocumentURL)) { res = service->GetCookieString(mDocumentURL, aCookie); @@ -1274,16 +1264,7 @@ nsHTMLDocument::GetSourceDocumentURL(JSContext* cx, #ifndef NECKO result = NS_NewURL(sourceURL, url); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &result); - if (NS_FAILED(result)) return result; - - nsIURI *uri = nsnull; - const char *uriStr = url.GetBuffer(); - result = service->NewURI(uriStr, nsnull, &uri); - if (NS_FAILED(result)) return result; - - result = uri->QueryInterface(nsIURI::GetIID(), (void**)sourceURL); - NS_RELEASE(uri); + result = NS_NewURI(sourceURL, url); #endif // NECKO } } @@ -1359,15 +1340,7 @@ nsHTMLDocument::Open() #ifndef NECKO result = NS_NewURL(&sourceURL, "about:blank"); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &result); - if (NS_FAILED(result)) return result; - - nsIURI *uri = nsnull; - result = service->NewURI("about:blank", nsnull, &uri); - if (NS_FAILED(result)) return result; - - result = uri->QueryInterface(nsIURI::GetIID(), (void**)&sourceURL); - NS_RELEASE(uri); + result = NS_NewURL(&sourceURL, "about:blank"); #endif // NECKO if (NS_SUCCEEDED(result)) { @@ -1392,15 +1365,7 @@ nsHTMLDocument::Open(JSContext *cx, jsval *argv, PRUint32 argc) #ifndef NECKO result = NS_NewURL(&sourceURL, "about:blank"); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &result); - if (NS_FAILED(result)) return result; - - nsIURI *uri = nsnull; - result = service->NewURI("about:blank", nsnull, &uri); - if (NS_FAILED(result)) return result; - - result = uri->QueryInterface(nsIURI::GetIID(), (void**)&sourceURL); - NS_RELEASE(uri); + result = NS_NewURI(&sourceURL, "about:blank"); #endif // NECKO } diff --git a/mozilla/modules/oji/src/nsJVMPluginTagInfo.cpp b/mozilla/modules/oji/src/nsJVMPluginTagInfo.cpp index 7ad3ab7618b..5cadca3de33 100644 --- a/mozilla/modules/oji/src/nsJVMPluginTagInfo.cpp +++ b/mozilla/modules/oji/src/nsJVMPluginTagInfo.cpp @@ -19,6 +19,7 @@ #include "nsJVMPluginTagInfo.h" #include "nsIPluginTagInfo2.h" #include "plstr.h" +#include "nsCRT.h" // mixing metaphors with plstr.h! #ifdef XP_UNIX #undef Bool #endif @@ -130,7 +131,7 @@ nsJVMPluginTagInfo::GetCodeBase(const char* *result) } // Okay, we'll need to simulate it from the layout tag's base URL. - const char* docBase; + char* docBase; err = fPluginTagInfo->GetDocumentBase(&docBase); if (err != NS_OK) return err; PA_LOCK(codebase, const char*, docBase); @@ -145,6 +146,7 @@ nsJVMPluginTagInfo::GetCodeBase(const char* *result) } PA_UNLOCK(docBase); + nsCRT::free(docBase); *result = fSimulatedCodebase; return NS_OK; } diff --git a/mozilla/modules/plugin/base/public/nsIPluginTagInfo2.h b/mozilla/modules/plugin/base/public/nsIPluginTagInfo2.h index a9324ffd32d..0e0cdbba7f3 100644 --- a/mozilla/modules/plugin/base/public/nsIPluginTagInfo2.h +++ b/mozilla/modules/plugin/base/public/nsIPluginTagInfo2.h @@ -87,7 +87,7 @@ public: GetParameter(const char* name, const char* *result) = 0; NS_IMETHOD - GetDocumentBase(const char* *result) = 0; + GetDocumentBase(char* *result) = 0; // Return an encoding whose name is specified in: // http://java.sun.com/products/jdk/1.1/docs/guide/intl/intl.doc.html#25303 diff --git a/mozilla/modules/plugin/base/src/nsPluginInstancePeer.cpp b/mozilla/modules/plugin/base/src/nsPluginInstancePeer.cpp index 10d08448089..c894d5aac94 100644 --- a/mozilla/modules/plugin/base/src/nsPluginInstancePeer.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginInstancePeer.cpp @@ -452,7 +452,7 @@ NS_IMETHODIMP nsPluginInstancePeerImpl::GetParameter(const char* name, const cha } } -NS_IMETHODIMP nsPluginInstancePeerImpl::GetDocumentBase(const char* *result) +NS_IMETHODIMP nsPluginInstancePeerImpl::GetDocumentBase(char* *result) { if (nsnull != mOwner) { diff --git a/mozilla/modules/plugin/base/src/nsPluginInstancePeer.h b/mozilla/modules/plugin/base/src/nsPluginInstancePeer.h index 31852d3eacf..6fef6df9e30 100644 --- a/mozilla/modules/plugin/base/src/nsPluginInstancePeer.h +++ b/mozilla/modules/plugin/base/src/nsPluginInstancePeer.h @@ -109,7 +109,7 @@ public: GetParameter(const char* name, const char* *result); NS_IMETHOD - GetDocumentBase(const char* *result); + GetDocumentBase(char* *result); NS_IMETHOD GetDocumentEncoding(const char* *result); diff --git a/mozilla/modules/plugin/nglsrc/nsPluginInstancePeer.cpp b/mozilla/modules/plugin/nglsrc/nsPluginInstancePeer.cpp index 10d08448089..c894d5aac94 100644 --- a/mozilla/modules/plugin/nglsrc/nsPluginInstancePeer.cpp +++ b/mozilla/modules/plugin/nglsrc/nsPluginInstancePeer.cpp @@ -452,7 +452,7 @@ NS_IMETHODIMP nsPluginInstancePeerImpl::GetParameter(const char* name, const cha } } -NS_IMETHODIMP nsPluginInstancePeerImpl::GetDocumentBase(const char* *result) +NS_IMETHODIMP nsPluginInstancePeerImpl::GetDocumentBase(char* *result) { if (nsnull != mOwner) { diff --git a/mozilla/modules/plugin/nglsrc/nsPluginInstancePeer.h b/mozilla/modules/plugin/nglsrc/nsPluginInstancePeer.h index 31852d3eacf..6fef6df9e30 100644 --- a/mozilla/modules/plugin/nglsrc/nsPluginInstancePeer.h +++ b/mozilla/modules/plugin/nglsrc/nsPluginInstancePeer.h @@ -109,7 +109,7 @@ public: GetParameter(const char* name, const char* *result); NS_IMETHOD - GetDocumentBase(const char* *result); + GetDocumentBase(char* *result); NS_IMETHOD GetDocumentEncoding(const char* *result); diff --git a/mozilla/modules/plugin/public/nsIPluginTagInfo2.h b/mozilla/modules/plugin/public/nsIPluginTagInfo2.h index a9324ffd32d..0e0cdbba7f3 100644 --- a/mozilla/modules/plugin/public/nsIPluginTagInfo2.h +++ b/mozilla/modules/plugin/public/nsIPluginTagInfo2.h @@ -87,7 +87,7 @@ public: GetParameter(const char* name, const char* *result) = 0; NS_IMETHOD - GetDocumentBase(const char* *result) = 0; + GetDocumentBase(char* *result) = 0; // Return an encoding whose name is specified in: // http://java.sun.com/products/jdk/1.1/docs/guide/intl/intl.doc.html#25303 diff --git a/mozilla/modules/plugin/src/npglue.h b/mozilla/modules/plugin/src/npglue.h index f65a001b63c..49ad83303eb 100644 --- a/mozilla/modules/plugin/src/npglue.h +++ b/mozilla/modules/plugin/src/npglue.h @@ -602,7 +602,7 @@ public: GetParameter(const char* name, const char* *result); NS_IMETHOD - GetDocumentBase(const char* *result); + GetDocumentBase(char* *result); // Return an encoding whose name is specified in: // http://java.sun.com/products/jdk/1.1/docs/guide/intl/intl.doc.html#25303 diff --git a/mozilla/modules/plugin/src/nsPluginTagInfo.cpp b/mozilla/modules/plugin/src/nsPluginTagInfo.cpp index a9db4cef5c0..8666f34a48c 100644 --- a/mozilla/modules/plugin/src/nsPluginTagInfo.cpp +++ b/mozilla/modules/plugin/src/nsPluginTagInfo.cpp @@ -232,10 +232,10 @@ nsPluginTagInfo::GetParameter(const char* name, const char* *result) } NS_METHOD -nsPluginTagInfo::GetDocumentBase(const char* *result) +nsPluginTagInfo::GetDocumentBase(char* *result) { - *result = (const char*)GetLayoutElement()->base_url; - return NS_OK; + *result = nsCRT::strdup(GetLayoutElement()->base_url); + return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } NS_METHOD diff --git a/mozilla/modules/plugin/src/nsPluginTagInfo.h b/mozilla/modules/plugin/src/nsPluginTagInfo.h index 906696a263c..56aa5fae158 100644 --- a/mozilla/modules/plugin/src/nsPluginTagInfo.h +++ b/mozilla/modules/plugin/src/nsPluginTagInfo.h @@ -68,7 +68,7 @@ public: GetParameter(const char* name, const char* *result); NS_IMETHOD - GetDocumentBase(const char* *result); + GetDocumentBase(char* *result); // Return an encoding whose name is specified in: // http://java.sun.com/products/jdk/1.1/docs/guide/intl/intl.doc.html#25303 diff --git a/mozilla/modules/plugin/src/nsplugin.cpp b/mozilla/modules/plugin/src/nsplugin.cpp index 4d195ae77b6..1246877f982 100644 --- a/mozilla/modules/plugin/src/nsplugin.cpp +++ b/mozilla/modules/plugin/src/nsplugin.cpp @@ -1503,10 +1503,10 @@ nsPluginTagInfo::GetParameter(const char* name, const char* *result) } NS_METHOD -nsPluginTagInfo::GetDocumentBase(const char* *result) +nsPluginTagInfo::GetDocumentBase(char* *result) { - *result = (const char*)GetLayoutElement()->base_url; - return NS_OK; + *result = nsCRT::strdup(GetLayoutElement()->base_url); + return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } NS_METHOD diff --git a/mozilla/rdf/datasource/src/nsMailDataSource.h b/mozilla/rdf/datasource/src/nsMailDataSource.h new file mode 100644 index 00000000000..7a1a1d82a05 --- /dev/null +++ b/mozilla/rdf/datasource/src/nsMailDataSource.h @@ -0,0 +1,363 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ + + +/* + + Class declarations for mail data source resource types. + + XXX Should these be factored out into their own implementation files, etc.? + +*/ + +#ifndef nsMailDataSource_h__ +#define nsMailDataSource_h__ + +//////////////////////////////////////////////////////////////////////// +// NS_DECL_IRDFRESOURCE, NS_IMPL_IRDFRESOURCE +// +// Convenience macros for implementing the RDF resource interface. +// +// XXX It might make sense to move these macros to nsIRDFResource.h? + +#define NS_DECL_IRDFRESOURCE \ + NS_IMETHOD EqualsNode(nsIRDFNode* node, PRBool* result) const;\ + NS_IMETHOD GetValue(const char* *uri) const;\ + NS_IMETHOD EqualsResource(const nsIRDFResource* resource, PRBool* result) const;\ + NS_IMETHOD EqualsString(const char* uri, PRBool* result) const; + + +#define NS_IMPL_IRDFRESOURCE(__class) \ +NS_IMETHODIMP \ +__class::EqualsNode(nsIRDFNode* node, PRBool* result) const {\ + nsresult rv;\ + nsIRDFResource* resource;\ + if (NS_SUCCEEDED(node->QueryInterface(kIRDFResourceIID, (void**) &resource))) {\ + rv = EqualsResource(resource, result);\ + NS_RELEASE(resource);\ + }\ + else {\ + *result = PR_FALSE;\ + rv = NS_OK;\ + }\ + return rv;\ +}\ +NS_IMETHODIMP \ +__class::GetValue(const char* *uri) const{\ + if (!uri)\ + return NS_ERROR_NULL_POINTER;\ + *uri = mURI;\ + return NS_OK;\ +}\ +NS_IMETHODIMP \ +__class::EqualsResource(const nsIRDFResource* resource, PRBool* result) const {\ + if (!resource || !result) return NS_ERROR_NULL_POINTER;\ + *result = (resource == (nsIRDFResource*) this);\ + return NS_OK;\ +}\ +NS_IMETHODIMP \ +__class::EqualsString(const char* uri, PRBool* result) const {\ + if (!uri || !result) return NS_ERROR_NULL_POINTER;\ + *result = (PL_strcmp(uri, mURI) == 0);\ + return NS_OK;\ +} + +//////////////////////////////////////////////////////////////////////// + +/** + * The mail data source. + */ +class MailDataSource : public nsIRDFMailDataSource +{ +private: + char* mURI; + nsVoidArray* mObservers; + + // internal methods + nsresult InitAccountList (void); + nsresult AddColumns (void); + +public: + + NS_DECL_ISUPPORTS + + MailDataSource(void); + virtual ~MailDataSource (void); + + // nsIRDFMailDataSource methods + NS_IMETHOD AddAccount (nsIRDFMailAccount* folder); + NS_IMETHOD RemoveAccount (nsIRDFMailAccount* folder); + + // nsIRDFDataSource methods + NS_IMETHOD Init(const char* uri); + + NS_IMETHOD GetURI(const char* *uri) const; + + NS_IMETHOD GetSource(nsIRDFResource* property, + nsIRDFNode* target, + PRBool tv, + nsIRDFResource** source /* out */); + + NS_IMETHOD GetTarget(nsIRDFResource* source, + nsIRDFResource* property, + PRBool tv, + nsIRDFNode** target); + + NS_IMETHOD GetSources(nsIRDFResource* property, + nsIRDFNode* target, + PRBool tv, + nsIRDFAssertionCursor** sources); + + NS_IMETHOD GetTargets(nsIRDFResource* source, + nsIRDFResource* property, + PRBool tv, + nsIRDFAssertionCursor** targets); + + NS_IMETHOD Assert(nsIRDFResource* source, + nsIRDFResource* property, + nsIRDFNode* target, + PRBool tv); + + NS_IMETHOD Unassert(nsIRDFResource* source, + nsIRDFResource* property, + nsIRDFNode* target); + + NS_IMETHOD HasAssertion(nsIRDFResource* source, + nsIRDFResource* property, + nsIRDFNode* target, + PRBool tv, + PRBool* hasAssertion); + + NS_IMETHOD AddObserver(nsIRDFObserver* n); + + NS_IMETHOD RemoveObserver(nsIRDFObserver* n); + + NS_IMETHOD ArcLabelsIn(nsIRDFNode* node, + nsIRDFArcsInCursor** labels); + + NS_IMETHOD ArcLabelsOut(nsIRDFResource* source, + nsIRDFArcsOutCursor** labels); + + NS_IMETHOD GetAllResources(nsIRDFResourceCursor** aCursor); + + NS_IMETHOD Flush(); + + NS_IMETHOD IsCommandEnabled(const char* aCommand, + nsIRDFResource* aCommandTarget, + PRBool* aResult); + + NS_IMETHOD DoCommand(const char* aCommand, + nsIRDFResource* aCommandTarget); + + // caching frequently used resources + static nsIRDFResource* kNC_Child; + static nsIRDFResource* kNC_Folder; + static nsIRDFResource* kNC_From; + static nsIRDFResource* kNC_subject; + static nsIRDFResource* kNC_date; + static nsIRDFResource* kNC_user; + static nsIRDFResource* kNC_host; + static nsIRDFResource* kNC_account; + static nsIRDFResource* kNC_Name; + static nsIRDFResource* kNC_Columns; + static nsIRDFResource* kNC_MailRoot; + + nsIRDFDataSource* mMiscMailData; +}; + +//////////////////////////////////////////////////////////////////////// + +class MailAccount : public nsIRDFMailAccount +{ +private: + char* mURI; + nsresult InitMailAccount (const char* uri); + +public: + MailAccount (const char* uri); + MailAccount (char* uri, nsIRDFLiteral* user, nsIRDFLiteral* host); + virtual ~MailAccount (void); + + NS_DECL_ISUPPORTS + NS_DECL_IRDFRESOURCE + + NS_IMETHOD GetUser(nsIRDFLiteral** result) const; + NS_IMETHOD GetName(nsIRDFLiteral** result) const; + NS_IMETHOD GetHost(nsIRDFLiteral** result) const; + NS_IMETHOD AddFolder (nsIRDFMailFolder* folder); + NS_IMETHOD RemoveFolder (nsIRDFMailFolder* folder); +}; + +//////////////////////////////////////////////////////////////////////// + +class MailFolder : public nsIRDFMailFolder +{ +private: + enum MailFolderStatus { + eMailFolder_Uninitialized, + eMailFolder_InitInProgress, + eMailFolder_WriteInProgress, + eMailFolder_OK + }; + + nsVoidArray mMessages; + FILE* mSummaryFile; + MailFolderStatus mStatus; + char* mURI; + +public: + MailFolder (const char* uri); + virtual ~MailFolder (void); + + NS_DECL_ISUPPORTS + NS_DECL_IRDFRESOURCE + + NS_IMETHOD GetAccount(nsIRDFMailAccount** account); + NS_IMETHOD GetName(nsIRDFLiteral** result) const; + NS_IMETHOD GetMessageList (nsVoidArray** result); + NS_IMETHOD AddMessage (nsIRDFMailMessage* msg); + NS_IMETHOD RemoveMessage (nsIRDFMailMessage* msg); + + nsresult AddMessage(PRUnichar* uri, + MailFolder* folder, + nsIRDFResource* from, + nsIRDFLiteral* subject, + nsIRDFLiteral* date, + int summaryFileOffset, + int mailFileOffset, + char* flags, + nsIRDFLiteral* messageID); + + nsresult AddMessage(PRUnichar* uri, + MailFolder* folder, + nsIRDFResource* from, + nsIRDFLiteral* subject, + nsIRDFLiteral* date, + int mailFileOffset, + char* flags, + nsIRDFLiteral* messageID); + + nsresult ReadSummaryFile(char* uri); +}; + +//////////////////////////////////////////////////////////////////////// + +class MailMessage : public nsIRDFMailMessage +{ +private: + MailFolder* mFolder; + nsIRDFResource* mFrom; + nsIRDFLiteral* mSubject; + int mSummaryFileOffset; + int mMailFileOffset; + nsIRDFLiteral* mDate; + nsIRDFLiteral* mMessageID; + char mFlags[4]; + char* mURI; + +public: + MailMessage (const char* uri); + virtual ~MailMessage (void); + + NS_DECL_ISUPPORTS + NS_DECL_IRDFRESOURCE + + NS_IMETHOD GetFolder(nsIRDFMailFolder** result); + NS_IMETHOD GetSubject(nsIRDFLiteral** result); + NS_IMETHOD GetSender(nsIRDFResource** result); + NS_IMETHOD GetDate(nsIRDFLiteral** result); + NS_IMETHOD GetContent(const char* result); + NS_IMETHOD GetMessageID(nsIRDFLiteral** id); + NS_IMETHOD GetFlags(char** result); + NS_IMETHOD SetFlags(const char* result); + + nsresult SetupMessage (MailFolder* folder, + nsIRDFResource* from, + nsIRDFLiteral* subject, + nsIRDFLiteral* date, + int summaryFileOffset, + int mailFileOffset, + char* flags, + nsIRDFLiteral* messageID); +}; + +//////////////////////////////////////////////////////////////////////// + +class SingletonMailCursor : public nsIRDFAssertionCursor +{ +private: + nsIRDFNode* mValue; + nsIRDFResource* mSource; + nsIRDFResource* mProperty; + nsIRDFNode* mTarget; + PRBool mValueReturnedp; + PRBool mInversep; + +public: + SingletonMailCursor(nsIRDFNode* u, + nsIRDFResource* s, + PRBool inversep); + virtual ~SingletonMailCursor(void); + + // nsISupports interface + NS_DECL_ISUPPORTS + + // nsIRDFCursor interface + NS_IMETHOD Advance(void); + NS_IMETHOD GetValue(nsIRDFNode** aValue); + + // nsIRDFAssertionCursor interface + NS_IMETHOD GetDataSource(nsIRDFDataSource** aDataSource); + NS_IMETHOD GetSubject(nsIRDFResource** aResource); + NS_IMETHOD GetPredicate(nsIRDFResource** aPredicate); + NS_IMETHOD GetObject(nsIRDFNode** aObject); + NS_IMETHOD GetTruthValue(PRBool* aTruthValue); +}; + +//////////////////////////////////////////////////////////////////////// + +class ArrayMailCursor : public nsIRDFAssertionCursor , + public nsIRDFArcsOutCursor +{ +private: + nsIRDFNode* mValue; + nsIRDFResource* mSource; + nsIRDFResource* mProperty; + nsIRDFNode* mTarget; + PRUint32 mCount; + nsVoidArray* mArray; + +public: + ArrayMailCursor(nsIRDFResource* u, nsIRDFResource* s, nsVoidArray* array); + virtual ~ArrayMailCursor(void); + // nsISupports interface + NS_DECL_ISUPPORTS + + // nsIRDFCursor interface + NS_IMETHOD Advance(void); + NS_IMETHOD GetValue(nsIRDFNode** aValue); + // nsIRDFAssertionCursor interface + NS_IMETHOD GetDataSource(nsIRDFDataSource** aDataSource); + NS_IMETHOD GetSubject(nsIRDFResource** aResource); + NS_IMETHOD GetPredicate(nsIRDFResource** aPredicate); + NS_IMETHOD GetObject(nsIRDFNode** aObject); + NS_IMETHOD GetTruthValue(PRBool* aTruthValue); +}; + + +#endif // nsMailDataSource_h__