diff --git a/mozilla/chrome/src/nsChromeProtocolHandler.cpp b/mozilla/chrome/src/nsChromeProtocolHandler.cpp index 39a63133fb6..0df7c09c126 100644 --- a/mozilla/chrome/src/nsChromeProtocolHandler.cpp +++ b/mozilla/chrome/src/nsChromeProtocolHandler.cpp @@ -104,7 +104,6 @@ nsChromeProtocolHandler::MakeAbsolute(const char* aSpec, url->GetSpec(result); NS_RELEASE(url); return rv; - } NS_IMETHODIMP diff --git a/mozilla/content/base/public/nsIDocument.h b/mozilla/content/base/public/nsIDocument.h index 4d303da860d..1453038d71b 100644 --- a/mozilla/content/base/public/nsIDocument.h +++ b/mozilla/content/base/public/nsIDocument.h @@ -52,6 +52,7 @@ class nsIDOMDocumentFragment; class nsILineBreaker; class nsIWordBreaker; class nsIDOMSelection; +class nsIChannel; // IID for the nsIDocument interface #define NS_IDOCUMENT_IID \ @@ -85,10 +86,14 @@ public: // returns the arena associated with this document. virtual nsIArena* GetArena() = 0; - NS_IMETHOD StartDocumentLoad(nsIURI *aUrl, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand) = 0; + nsIStreamListener **aDocListener) = 0; /** * Return the title of the document. May return null. diff --git a/mozilla/content/base/src/nsDocument.cpp b/mozilla/content/base/src/nsDocument.cpp index 9e79f1eaa9d..064ebfab3d5 100644 --- a/mozilla/content/base/src/nsDocument.cpp +++ b/mozilla/content/base/src/nsDocument.cpp @@ -23,6 +23,7 @@ #include "nsIURL.h" #ifdef NECKO #include "nsILoadGroup.h" +#include "nsIChannel.h" #else #include "nsIURLGroup.h" #endif @@ -829,7 +830,11 @@ nsIArena* nsDocument::GetArena() } nsresult +#ifdef NECKO +nsDocument::Reset(nsIChannel* aChannel) +#else nsDocument::Reset(nsIURI *aURL) +#endif { nsresult rv = NS_OK; @@ -883,14 +888,16 @@ nsDocument::Reset(nsIURI *aURL) NS_IF_RELEASE(mNameSpaceManager); +#ifdef NECKO + (void)aChannel->GetURI(&mDocumentURL); + (void)aChannel->GetLoadGroup(&mDocumentLoadGroup); +#else mDocumentURL = aURL; if (nsnull != aURL) { NS_ADDREF(aURL); - -#ifndef NECKO rv = aURL->GetLoadGroup(&mDocumentLoadGroup); -#endif } +#endif if (NS_OK == rv) { rv = NS_NewNameSpaceManager(&mNameSpaceManager); @@ -900,12 +907,20 @@ nsDocument::Reset(nsIURI *aURL) } nsresult -nsDocument::StartDocumentLoad(nsIURI *aURL, +nsDocument::StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aURL, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand) + nsIStreamListener **aDocListener) { +#ifdef NECKO + return Reset(aChannel); +#else return Reset(aURL); +#endif } const nsString* nsDocument::GetDocumentTitle() const diff --git a/mozilla/content/base/src/nsDocument.h b/mozilla/content/base/src/nsDocument.h index c74c8646d4a..507de23bfd5 100644 --- a/mozilla/content/base/src/nsDocument.h +++ b/mozilla/content/base/src/nsDocument.h @@ -110,10 +110,14 @@ public: virtual nsIArena* GetArena(); - NS_IMETHOD StartDocumentLoad(nsIURI *aUrl, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand); + nsIStreamListener **aDocListener); /** * Return the title of the document. May return null. @@ -414,7 +418,11 @@ protected: nsIContent* FindContent(const nsIContent* aStartNode, const nsIContent* aTest1, const nsIContent* aTest2) const; +#ifdef NECKO + virtual nsresult Reset(nsIChannel* aChannel); +#else virtual nsresult Reset(nsIURI* aURL); +#endif // this enum is temporary; there should be no knowledge of HTML in // nsDocument. That will be fixed when content sink stream factories diff --git a/mozilla/content/base/src/nsDocumentViewer.cpp b/mozilla/content/base/src/nsDocumentViewer.cpp index c4073c674ab..c9d0c5cbbe0 100644 --- a/mozilla/content/base/src/nsDocumentViewer.cpp +++ b/mozilla/content/base/src/nsDocumentViewer.cpp @@ -100,7 +100,7 @@ public: nsIDocumentViewer*& aResult); // nsIDocumentLoaderObserver interface - NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aCommand){return NS_OK;} + NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aCommand) {return NS_OK;} #ifndef NECKO NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, nsIURI *aUrl, PRInt32 aStatus,nsIDocumentLoaderObserver * aObserver){return NS_OK;} @@ -111,7 +111,7 @@ public: #ifndef NECKO NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aContentType,nsIContentViewer* aViewer); #else - NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, const char* aContentType,nsIContentViewer* aViewer){return NS_OK;} + NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer); #endif // NECKO #ifndef NECKO @@ -129,7 +129,7 @@ public: #ifndef NECKO NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, PRInt32 aStatus); #else - NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus){return NS_OK;} + NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus); #endif // NECKO #ifndef NECKO @@ -734,9 +734,12 @@ nsIContentViewer *viewer; * See documentation above in the DocumentViewerImpl class definition * @update 07/09/99 dwc */ -#ifndef NECKO NS_IMETHODIMP +#ifdef NECKO +DocumentViewerImpl::OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer) +#else DocumentViewerImpl::OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aContentType,nsIContentViewer* aViewer) +#endif { mNumURLStarts++; return NS_OK; @@ -747,11 +750,15 @@ DocumentViewerImpl::OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, cons * @update 07/09/99 dwc */ NS_IMETHODIMP +#ifdef NECKO +DocumentViewerImpl::OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus) +#else DocumentViewerImpl::OnEndURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, PRInt32 aStatus) +#endif // NECKO { -nsIContentViewerContainer *containerResult; -nsIWebShell *webContainer; -nsresult rv; + nsIContentViewerContainer *containerResult; + nsIWebShell *webContainer; + nsresult rv; mNumURLStarts--; @@ -775,7 +782,6 @@ nsresult rv; return NS_OK; } -#endif // NECKO NS_IMETHODIMP diff --git a/mozilla/content/html/document/src/nsHTMLDocument.cpp b/mozilla/content/html/document/src/nsHTMLDocument.cpp index 79e28f51205..cb5ddb5083f 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/content/html/document/src/nsHTMLDocument.cpp @@ -258,9 +258,20 @@ nsrefcnt nsHTMLDocument::Release() } nsresult +#ifdef NECKO +nsHTMLDocument::Reset(nsIChannel* aChannel) +#else nsHTMLDocument::Reset(nsIURI *aURL) +#endif { +#ifdef NECKO + nsresult result = nsDocument::Reset(aChannel); + nsCOMPtr aURL; + result = aChannel->GetURI(getter_AddRefs(aURL)); + if (NS_FAILED(result)) return result; +#else nsresult result = nsDocument::Reset(aURL); +#endif if (NS_FAILED(result)) { return result; } @@ -331,21 +342,35 @@ nsHTMLDocument::CreateShell(nsIPresContext* aContext, } NS_IMETHODIMP -nsHTMLDocument::StartDocumentLoad(nsIURI *aURL, +nsHTMLDocument::StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aURL, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand) + nsIStreamListener **aDocListener) { - nsresult rv = nsDocument::StartDocumentLoad(aURL, + nsresult rv = nsDocument::StartDocumentLoad(aCommand, +#ifdef NECKO + aChannel, +#else + aURL, +#endif aContainer, - aDocListener, - aCommand); + aDocListener); if (NS_FAILED(rv)) { return rv; } nsIWebShell* webShell; +#ifdef NECKO + nsCOMPtr aURL; + rv = aChannel->GetURI(getter_AddRefs(aURL)); + if (NS_FAILED(rv)) return rv; +#endif + static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID); static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID); @@ -1413,7 +1438,11 @@ nsHTMLDocument::OpenCommon(nsIURI* aSourceURL) // The open occurred after the document finished loading. // So we reset the document and create a new one. if (nsnull == mParser) { +#ifdef NECKO + // XXX help! +#else result = Reset(aSourceURL); +#endif if (NS_OK == result) { static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID); static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID); diff --git a/mozilla/content/html/document/src/nsHTMLDocument.h b/mozilla/content/html/document/src/nsHTMLDocument.h index a3aaa4eff2b..d3ca9ab3043 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.h +++ b/mozilla/content/html/document/src/nsHTMLDocument.h @@ -59,10 +59,14 @@ public: nsIStyleSet* aStyleSet, nsIPresShell** aInstancePtrResult); - NS_IMETHOD StartDocumentLoad(nsIURI* aUrl, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener** aDocListener, - const char* aCommand); + nsIStreamListener **aDocListener); NS_IMETHOD EndLoad(); @@ -182,7 +186,11 @@ protected: PRBool GetBodyContent(); nsresult GetBodyElement(nsIDOMHTMLBodyElement** aBody); +#ifdef NECKO + virtual nsresult Reset(nsIChannel* aChannel); +#else virtual nsresult Reset(nsIURI *aURL); +#endif nsresult WriteCommon(const nsString& aText, PRBool aNewlineTerminate); nsresult ScriptWriteCommon(JSContext *cx, diff --git a/mozilla/content/html/document/src/nsImageDocument.cpp b/mozilla/content/html/document/src/nsImageDocument.cpp index b8d1bc82015..35c39826c9f 100644 --- a/mozilla/content/html/document/src/nsImageDocument.cpp +++ b/mozilla/content/html/document/src/nsImageDocument.cpp @@ -57,10 +57,14 @@ public: nsImageDocument(); virtual ~nsImageDocument(); - NS_IMETHOD StartDocumentLoad(nsIURI* aURL, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener** aDocListener, - const char* aCommand); + nsIStreamListener **aDocListener); nsresult CreateSyntheticDocument(); @@ -247,15 +251,23 @@ nsImageDocument::~nsImageDocument() } NS_IMETHODIMP -nsImageDocument::StartDocumentLoad(nsIURI* aURL, +nsImageDocument::StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aURL, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener** aDocListener, - const char* aCommand) + nsIStreamListener **aDocListener) { - nsresult rv = nsDocument::StartDocumentLoad(aURL, + nsresult rv = nsDocument::StartDocumentLoad(aCommand, +#ifdef NECKO + aChannel, +#else + aURL, +#endif aContainer, - aDocListener, - aCommand); + aDocListener); if (NS_FAILED(rv)) { return rv; } diff --git a/mozilla/content/html/style/src/nsCSSLoader.cpp b/mozilla/content/html/style/src/nsCSSLoader.cpp index 4afab3aa15d..4fa26e02f3c 100644 --- a/mozilla/content/html/style/src/nsCSSLoader.cpp +++ b/mozilla/content/html/style/src/nsCSSLoader.cpp @@ -1282,11 +1282,13 @@ CSSLoaderImpl::LoadAgentSheet(nsIURI* aURL, if (urlClone) { #endif #ifdef NECKO +#if 0 nsILoadGroup* loadGroup = nsnull; if (mDocument) { loadGroup = mDocument->GetDocumentLoadGroup(); } - result = NS_OpenURI(&in, urlClone, loadGroup); +#endif + result = NS_OpenURI(&in, urlClone/*, loadGroup*/); #else result = NS_OpenURL(urlClone, &in); #endif diff --git a/mozilla/content/xml/document/src/nsXMLDocument.cpp b/mozilla/content/xml/document/src/nsXMLDocument.cpp index 879b544d01d..5893276aa23 100644 --- a/mozilla/content/xml/document/src/nsXMLDocument.cpp +++ b/mozilla/content/xml/document/src/nsXMLDocument.cpp @@ -43,6 +43,10 @@ #include "nsExpatDTD.h" #include "nsINameSpaceManager.h" #include "nsICSSLoader.h" +#ifdef NECKO +#include "nsCOMPtr.h" +#include "nsIURI.h" +#endif // XXX The XML world depends on the html atoms #include "nsHTMLAtoms.h" @@ -150,9 +154,20 @@ nsrefcnt nsXMLDocument::Release() } nsresult +#ifdef NECKO +nsXMLDocument::Reset(nsIChannel* aChannel) +#else nsXMLDocument::Reset(nsIURI* aURL) +#endif { +#ifdef NECKO + nsresult result = nsDocument::Reset(aChannel); + nsCOMPtr aURL; + result = aChannel->GetURI(getter_AddRefs(aURL)); + if (NS_FAILED(result)) return result; +#else nsresult result = nsDocument::Reset(aURL); +#endif if (NS_FAILED(result)) { return result; } @@ -188,21 +203,35 @@ nsXMLDocument::GetContentType(nsString& aContentType) const } NS_IMETHODIMP -nsXMLDocument::StartDocumentLoad(nsIURI *aUrl, - nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand) +nsXMLDocument::StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif + nsIContentViewerContainer* aContainer, + nsIStreamListener **aDocListener) { - nsresult rv = nsDocument::StartDocumentLoad(aUrl, + nsresult rv = nsDocument::StartDocumentLoad(aCommand, +#ifdef NECKO + aChannel, +#else + aUrl, +#endif aContainer, - aDocListener, - aCommand); + aDocListener); if (NS_FAILED(rv)) { return rv; } nsIWebShell* webShell; +#ifdef NECKO + nsCOMPtr aUrl; + rv = aChannel->GetURI(getter_AddRefs(aUrl)); + if (NS_FAILED(rv)) return rv; +#endif + static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID); static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID); diff --git a/mozilla/content/xml/document/src/nsXMLDocument.h b/mozilla/content/xml/document/src/nsXMLDocument.h index 943d572b57d..e1d8df1f2ad 100644 --- a/mozilla/content/xml/document/src/nsXMLDocument.h +++ b/mozilla/content/xml/document/src/nsXMLDocument.h @@ -47,10 +47,14 @@ public: NS_IMETHOD GetContentType(nsString& aContentType) const; - NS_IMETHOD StartDocumentLoad(nsIURI *aUrl, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand); + nsIStreamListener **aDocListener); NS_IMETHOD EndLoad(); @@ -79,7 +83,11 @@ public: protected: virtual void InternalAddStyleSheet(nsIStyleSheet* aSheet); // subclass hook for sheet ordering virtual void InternalInsertStyleSheetAt(nsIStyleSheet* aSheet, PRInt32 aIndex); +#ifdef NECKO + virtual nsresult Reset(nsIChannel* aChannel); +#else virtual nsresult Reset(nsIURI* aUrl); +#endif // For HTML elements in our content model nsIHTMLStyleSheet* mAttrStyleSheet; diff --git a/mozilla/content/xul/document/src/nsXULDocument.cpp b/mozilla/content/xul/document/src/nsXULDocument.cpp index fb85e8a0bf7..ec0fb141610 100644 --- a/mozilla/content/xul/document/src/nsXULDocument.cpp +++ b/mozilla/content/xul/document/src/nsXULDocument.cpp @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "License"); you may not use this file except in @@ -423,10 +423,14 @@ public: NS_IMETHOD GetContentType(nsString& aContentType) const; - NS_IMETHOD StartDocumentLoad(nsIURI *aUrl, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand); + nsIStreamListener **aDocListener); NS_IMETHOD LoadFromStream(nsIInputStream& xulStream, nsIContentViewerContainer* aContainer, @@ -726,7 +730,12 @@ protected: nsresult PrepareToLoad( nsCOMPtr* created_parser, nsIContentViewerContainer* aContainer, const char* aCommand, - nsIURI* aOptionalURL = 0 ); +#ifdef NECKO + nsIChannel* aChannel +#else + nsIURI* aOptionalURL = 0 +#endif + ); protected: // pseudo constants @@ -757,7 +766,7 @@ protected: nsVoidArray mObservers; nsAutoString mDocumentTitle; nsCOMPtr mDocumentURL; // [OWNER] ??? compare with loader - nsCOMPtr mDocumentLoadGroup; // [OWNER] leads to loader + nsCOMPtr mDocumentLoadGroup; // [OWNER] leads to loader nsCOMPtr mRootResource; // [OWNER] nsCOMPtr mRootContent; // [OWNER] nsIDocument* mParentDocument; // [WEAK] @@ -1083,11 +1092,21 @@ nsresult XULDocumentImpl::PrepareToLoad( nsCOMPtr* created_parser, nsIContentViewerContainer* aContainer, const char* aCommand, - nsIURI* aOptionalURL ) +#ifdef NECKO + nsIChannel* aChannel +#else + nsIURI* aOptionalURL +#endif + ) { nsCOMPtr syntheticURL; +#ifdef NECKO + if ( aChannel ) + (void)aChannel->GetURI(getter_AddRefs(syntheticURL)); +#else if ( aOptionalURL ) syntheticURL = dont_QueryInterface(aOptionalURL); +#endif else { nsAutoString seedString; @@ -1114,7 +1133,7 @@ XULDocumentImpl::PrepareToLoad( nsCOMPtr* created_parser, mDocumentURL = syntheticURL; #ifdef NECKO - // XXX help + (void)aChannel->GetLoadGroup(getter_AddRefs(mDocumentLoadGroup)); #else syntheticURL->GetLoadGroup(getter_AddRefs(mDocumentLoadGroup)); #endif @@ -1250,17 +1269,31 @@ XULDocumentImpl::SetDocumentURLAndGroup(nsIURI* anURL) } NS_IMETHODIMP -XULDocumentImpl::StartDocumentLoad(nsIURI *aURL, +XULDocumentImpl::StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aURL, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand) + nsIStreamListener **aDocListener) { nsresult status; nsCOMPtr parser; +#ifdef NECKO + nsCOMPtr aURL; + status = aChannel->GetURI(getter_AddRefs(aURL)); + if (NS_FAILED(status)) return status; +#endif do { - if ( NS_FAILED(status = PrepareToLoad(&parser, aContainer, aCommand, aURL)) ) +#ifdef NECKO + status = PrepareToLoad(&parser, aContainer, aCommand, aChannel); +#else + status = PrepareToLoad(&parser, aContainer, aCommand, aURL); +#endif + if ( NS_FAILED(status) ) break; { @@ -1289,7 +1322,7 @@ XULDocumentImpl::LoadFromStream( nsIInputStream& xulStream, { nsresult status; nsCOMPtr parser; - if ( NS_SUCCEEDED(status = PrepareToLoad(&parser, aContainer, aCommand)) ) + if ( NS_SUCCEEDED(status = PrepareToLoad(&parser, aContainer, aCommand, nsnull)) ) parser->Parse(xulStream); return status; diff --git a/mozilla/docshell/base/nsWebShell.cpp b/mozilla/docshell/base/nsWebShell.cpp index 335dac6d21d..21cf8d39fce 100644 --- a/mozilla/docshell/base/nsWebShell.cpp +++ b/mozilla/docshell/base/nsWebShell.cpp @@ -26,6 +26,7 @@ #include "nsIStreamListener.h" #ifdef NECKO #include "nsIPrompt.h" +#include "nsNeckoUtil.h" #else #include "nsINetSupport.h" #include "nsIRefreshUrl.h" @@ -310,9 +311,9 @@ public: NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus, - nsIDocumentLoaderObserver * ); + nsIDocumentLoaderObserver * ); NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, - nsIChannel* channel, const char* aContentType, + nsIChannel* channel, nsIContentViewer* aViewer); NS_IMETHOD OnProgressURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRUint32 aProgress, @@ -1861,18 +1862,8 @@ nsWebShell::DoLoadURL(const nsString& aUrlSpec, nsCOMPtr url; #ifndef NECKO rv = NS_NewURL(getter_AddRefs(url), aUrlSpec); -#else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &rv); - if (NS_FAILED(rv)) return rv; - - nsIURI *uri = nsnull; - char *uriSpec = aUrlSpec.ToNewCString(); - rv = service->NewURI(uriSpec, nsnull, &uri); - nsCRT::free(uriSpec); - if (NS_FAILED(rv)) return rv; - - rv = uri->QueryInterface(nsIURI::GetIID(), (void**)&url); - NS_RELEASE(uri); +#else + rv = NS_NewURI(getter_AddRefs(url), aUrlSpec); #endif // NECKO if (NS_FAILED(rv)) return rv; if (url && docURL && EqualBaseURLs(docURL, url)) { @@ -1960,13 +1951,16 @@ nsWebShell::LoadURL(const PRUnichar *aURLSpec, #endif const PRUint32 aLocalIP) { - nsresult rv; - PRInt32 colon, fSlash; - PRUnichar port; nsAutoString urlSpec; convertFileToURL(nsString(aURLSpec), urlSpec); - +//#ifdef NECKO +// nsCOMPtr url; +// rv = NS_NewURI(getter_AddRefs(url), urlSpec); +// if (NS_FAILED(rv)) return rv; +//#else + PRInt32 colon, fSlash; + PRUnichar port; fSlash=urlSpec.Find('/'); // if no scheme (protocol) is found, assume http. @@ -2102,6 +2096,7 @@ nsWebShell::LoadURL(const PRUnichar *aURLSpec, nsAutoString newURL(urlString); return DoLoadURL(newURL, aCommand, aPostData, aType, aLocalIP); +//#endif } NS_IMETHODIMP nsWebShell::Stop(void) @@ -3037,8 +3032,8 @@ nsWebShell::OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, #else nsIURI* aURL, -#endif const char* aContentType, +#endif nsIContentViewer* aViewer) { nsresult rv; @@ -3078,7 +3073,7 @@ nsWebShell::OnStartURLLoad(nsIDocumentLoader* loader, if ((nsnull != mContainer) && (nsnull != mDocLoaderObserver)) { #ifdef NECKO - mDocLoaderObserver->OnStartURLLoad(mDocLoader, channel, aContentType, aViewer); + mDocLoaderObserver->OnStartURLLoad(mDocLoader, channel, aViewer); #else mDocLoaderObserver->OnStartURLLoad(mDocLoader, aURL, aContentType, aViewer); #endif @@ -3772,8 +3767,8 @@ PRBool nsWebShellFactory::mStartedServices = PR_FALSE; void nsWebShellFactory::StartServices() { - // XXX TEMPORARY Till we have real pluggable protocol handlers #ifndef NECKO + // XXX TEMPORARY Till we have real pluggable protocol handlers NET_InitJavaScriptProtocol(); #endif // NECKO mStartedServices = PR_TRUE; diff --git a/mozilla/editor/base/nsEditorShell.cpp b/mozilla/editor/base/nsEditorShell.cpp index 73f0963e0aa..8493505f9d4 100644 --- a/mozilla/editor/base/nsEditorShell.cpp +++ b/mozilla/editor/base/nsEditorShell.cpp @@ -2452,8 +2452,8 @@ nsEditorShell::OnStartURLLoad(nsIDocumentLoader* loader, nsIContentViewer* aViewer) #else nsEditorShell::OnStartURLLoad(nsIDocumentLoader* loader, - nsIChannel* channel, const char* aContentType, - nsIContentViewer* aViewer) + nsIChannel* channel, + nsIContentViewer* aViewer) #endif // NECKO { diff --git a/mozilla/editor/base/nsEditorShell.h b/mozilla/editor/base/nsEditorShell.h index b6ee11b59f6..519ba64d3de 100644 --- a/mozilla/editor/base/nsEditorShell.h +++ b/mozilla/editor/base/nsEditorShell.h @@ -212,7 +212,7 @@ class nsEditorShell : public nsIEditorShell, NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aContentType, nsIContentViewer* aViewer); #else - NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, const char* aContentType, + NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer); #endif // NECKO diff --git a/mozilla/editor/composer/src/nsEditorShell.cpp b/mozilla/editor/composer/src/nsEditorShell.cpp index 73f0963e0aa..8493505f9d4 100644 --- a/mozilla/editor/composer/src/nsEditorShell.cpp +++ b/mozilla/editor/composer/src/nsEditorShell.cpp @@ -2452,8 +2452,8 @@ nsEditorShell::OnStartURLLoad(nsIDocumentLoader* loader, nsIContentViewer* aViewer) #else nsEditorShell::OnStartURLLoad(nsIDocumentLoader* loader, - nsIChannel* channel, const char* aContentType, - nsIContentViewer* aViewer) + nsIChannel* channel, + nsIContentViewer* aViewer) #endif // NECKO { diff --git a/mozilla/editor/composer/src/nsEditorShell.h b/mozilla/editor/composer/src/nsEditorShell.h index b6ee11b59f6..519ba64d3de 100644 --- a/mozilla/editor/composer/src/nsEditorShell.h +++ b/mozilla/editor/composer/src/nsEditorShell.h @@ -212,7 +212,7 @@ class nsEditorShell : public nsIEditorShell, NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aContentType, nsIContentViewer* aViewer); #else - NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, const char* aContentType, + NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer); #endif // NECKO diff --git a/mozilla/extensions/pics/src/nsPICS.cpp b/mozilla/extensions/pics/src/nsPICS.cpp index c1a6d3a9aee..3f685b0d300 100644 --- a/mozilla/extensions/pics/src/nsPICS.cpp +++ b/mozilla/extensions/pics/src/nsPICS.cpp @@ -147,7 +147,7 @@ public: #ifdef NECKO NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aCommand); NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus, nsIDocumentLoaderObserver* aObserver); - NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, const char* aContentType, nsIContentViewer* aViewer); + NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer); NS_IMETHOD OnProgressURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRUint32 aProgress, PRUint32 aProgressMax); NS_IMETHOD OnStatusURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsString& aMsg); NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus); @@ -753,8 +753,8 @@ nsPICS::ParsePICSLabel(char * label) NS_IMETHODIMP nsPICS::OnStartDocumentLoad(nsIDocumentLoader* loader, - nsIURI* aURL, - const char* aCommand) + nsIURI* aURL, + const char* aCommand) { nsresult rv = NS_ERROR_FAILURE; @@ -806,7 +806,6 @@ NS_IMETHODIMP #ifdef NECKO nsPICS::OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, - const char* aContentType, nsIContentViewer* aViewer) #else nsPICS::OnStartURLLoad(nsIDocumentLoader* loader, @@ -815,18 +814,22 @@ nsPICS::OnStartURLLoad(nsIDocumentLoader* loader, nsIContentViewer* aViewer) #endif { - nsresult rv; + nsresult rv = NS_OK; #ifdef NECKO nsCOMPtr aURL; rv = channel->GetURI(getter_AddRefs(aURL)); if (NS_FAILED(rv)) return rv; + + char* aContentType; + rv = channel->GetContentType(&aContentType); + if (NS_FAILED(rv)) return rv; #endif nsIContentViewerContainer *cont; if(!mPICSRatingsEnabled) - return NS_OK; + goto done; PICS_URLData* urlData; nsVoidArray* currentURLList; @@ -858,8 +861,10 @@ nsPICS::OnStartURLLoad(nsIDocumentLoader* loader, if(mWebShellServicesURLTable == nsnull) { mWebShellServicesURLTable = new nsHashtable(256, PR_TRUE); - if (mWebShellServicesURLTable == nsnull) - return NS_ERROR_OUT_OF_MEMORY; + if (mWebShellServicesURLTable == nsnull) { + rv = NS_ERROR_OUT_OF_MEMORY; + goto done; + } } if(mWebShellServicesURLTable->Exists(&key)) { @@ -869,19 +874,27 @@ nsPICS::OnStartURLLoad(nsIDocumentLoader* loader, mWebShellServicesURLTable->Put(&key, currentURLList); } else { currentURLList = new nsVoidArray(); - if(!currentURLList) - return NS_ERROR_OUT_OF_MEMORY; + if(!currentURLList) { + rv = NS_ERROR_OUT_OF_MEMORY; + goto done; + } mWebShellServicesURLTable->Put(&key, currentURLList); } } else { currentURLList = new nsVoidArray(); - if(!currentURLList) - return NS_ERROR_OUT_OF_MEMORY; + if (!currentURLList) { + rv = NS_ERROR_OUT_OF_MEMORY; + goto done; + } mWebShellServicesURLTable->Put(&key, currentURLList); } } - return NS_OK; + done: +#ifdef NECKO + nsCRT::free(aContentType); +#endif + return rv; } NS_IMETHODIMP diff --git a/mozilla/gfx/src/nsImageNetContextAsync.cpp b/mozilla/gfx/src/nsImageNetContextAsync.cpp index 89b787cfab0..a59748e5026 100644 --- a/mozilla/gfx/src/nsImageNetContextAsync.cpp +++ b/mozilla/gfx/src/nsImageNetContextAsync.cpp @@ -264,6 +264,10 @@ ImageConsumer::OnDataAvailable(nsIURI* aURL, nsIInputStream *pIStream, PRUint32 err = pIStream->Read(mBuffer, max_read, &nb); + if (err == NS_BASE_STREAM_WOULD_BLOCK) { + err = NS_OK; + break; + } if (err != NS_OK) { break; } diff --git a/mozilla/gfx/src/nsImageURL.cpp b/mozilla/gfx/src/nsImageURL.cpp index b4171852efc..2694aa096a7 100644 --- a/mozilla/gfx/src/nsImageURL.cpp +++ b/mozilla/gfx/src/nsImageURL.cpp @@ -26,11 +26,8 @@ #include "nsIURLGroup.h" #include "nsILoadAttribs.h" #else -#include "nsIServiceManager.h" -#include "nsIIOService.h" #include "nsIURL.h" #include "nsNeckoUtil.h" -static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); #endif // NECKO #include "nsString.h" #include "il_strm.h" diff --git a/mozilla/htmlparser/src/nsExpatTokenizer.cpp b/mozilla/htmlparser/src/nsExpatTokenizer.cpp index 72856db66ee..e42fecc45c6 100644 --- a/mozilla/htmlparser/src/nsExpatTokenizer.cpp +++ b/mozilla/htmlparser/src/nsExpatTokenizer.cpp @@ -522,7 +522,7 @@ nsExpatTokenizer::OpenInputStream(nsString2& aURLStr, nsIInputStream*& in) ret = NS_NewURI(&uri, aURLStr); if (NS_FAILED(ret)) return ret; - ret = NS_OpenURI(&in, uri, nsnull); // XXX need to pass the document's nsILoadGroup here! + ret = NS_OpenURI(&in, uri); NS_RELEASE(uri); #endif // NECKO return ret; diff --git a/mozilla/intl/chardet/src/nsObserverBase.cpp b/mozilla/intl/chardet/src/nsObserverBase.cpp index 21cca83a060..5edb9270b3b 100644 --- a/mozilla/intl/chardet/src/nsObserverBase.cpp +++ b/mozilla/intl/chardet/src/nsObserverBase.cpp @@ -36,14 +36,14 @@ NS_IMETHODIMP nsObserverBase::NotifyWebShell( { nsresult res = NS_OK; nsresult rv = NS_OK; - // shoudl docLoader a memeber to increase performance ??? + // should docLoader a member to increase performance ??? nsIDocumentLoader * docLoader = nsnull; nsIContentViewerContainer * cvc = nsnull; nsIWebShellServices* wss = nsnull; if(NS_FAILED(rv =nsServiceManager::GetService(kDocLoaderServiceCID, - kIDocumentLoaderIID, - (nsISupports**)&docLoader))) + kIDocumentLoaderIID, + (nsISupports**)&docLoader))) goto done; if(NS_FAILED(rv =docLoader->GetContentViewerContainer(aDocumentID, &cvc))) diff --git a/mozilla/intl/strres/src/nsStringBundle.cpp b/mozilla/intl/strres/src/nsStringBundle.cpp index 3b58c4df34d..f78b059231f 100644 --- a/mozilla/intl/strres/src/nsStringBundle.cpp +++ b/mozilla/intl/strres/src/nsStringBundle.cpp @@ -141,7 +141,7 @@ nsStringBundle::nsStringBundle(nsIURI* aURL, nsILocale* aLocale, #else // NECKO nsresult rv; - rv = NS_OpenURI(&in, aURL, nsnull); // XXX need to pass the document's nsILoadGroup here! + rv = NS_OpenURI(&in, aURL); if (NS_FAILED(rv)) { #ifdef NS_DEBUG printf("cannot open uri\n"); @@ -309,7 +309,7 @@ nsStringBundle::OpenInputStream(nsString2& aURLStr, nsIInputStream*& in) ret = NS_NewURI(&uri, aURLStr); if (NS_FAILED(ret)) return ret; - ret = NS_OpenURI(&in, uri, nsnull); // XXX need to pass the document's nsILoadGroup here! + ret = NS_OpenURI(&in, uri); NS_RELEASE(uri); #endif // NECKO return ret; diff --git a/mozilla/intl/uconv/src/nsURLProperties.cpp b/mozilla/intl/uconv/src/nsURLProperties.cpp index c6abf65f95c..81356084b66 100644 --- a/mozilla/intl/uconv/src/nsURLProperties.cpp +++ b/mozilla/intl/uconv/src/nsURLProperties.cpp @@ -57,7 +57,7 @@ nsURLProperties::nsURLProperties(nsString& aUrl) res = NS_NewURI(&url, aUrl, nsnull); if (NS_FAILED(res)) return; - res = NS_OpenURI(&in, url, nsnull); // XXX no nsILoadGroup here, so we can't cancel this load! + res = NS_OpenURI(&in, url); NS_RELEASE(url); if (NS_FAILED(res)) return; #endif // NECKO diff --git a/mozilla/layout/base/nsDocumentViewer.cpp b/mozilla/layout/base/nsDocumentViewer.cpp index c4073c674ab..c9d0c5cbbe0 100644 --- a/mozilla/layout/base/nsDocumentViewer.cpp +++ b/mozilla/layout/base/nsDocumentViewer.cpp @@ -100,7 +100,7 @@ public: nsIDocumentViewer*& aResult); // nsIDocumentLoaderObserver interface - NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aCommand){return NS_OK;} + NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aCommand) {return NS_OK;} #ifndef NECKO NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, nsIURI *aUrl, PRInt32 aStatus,nsIDocumentLoaderObserver * aObserver){return NS_OK;} @@ -111,7 +111,7 @@ public: #ifndef NECKO NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aContentType,nsIContentViewer* aViewer); #else - NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, const char* aContentType,nsIContentViewer* aViewer){return NS_OK;} + NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer); #endif // NECKO #ifndef NECKO @@ -129,7 +129,7 @@ public: #ifndef NECKO NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, PRInt32 aStatus); #else - NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus){return NS_OK;} + NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus); #endif // NECKO #ifndef NECKO @@ -734,9 +734,12 @@ nsIContentViewer *viewer; * See documentation above in the DocumentViewerImpl class definition * @update 07/09/99 dwc */ -#ifndef NECKO NS_IMETHODIMP +#ifdef NECKO +DocumentViewerImpl::OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer) +#else DocumentViewerImpl::OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aContentType,nsIContentViewer* aViewer) +#endif { mNumURLStarts++; return NS_OK; @@ -747,11 +750,15 @@ DocumentViewerImpl::OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, cons * @update 07/09/99 dwc */ NS_IMETHODIMP +#ifdef NECKO +DocumentViewerImpl::OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus) +#else DocumentViewerImpl::OnEndURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, PRInt32 aStatus) +#endif // NECKO { -nsIContentViewerContainer *containerResult; -nsIWebShell *webContainer; -nsresult rv; + nsIContentViewerContainer *containerResult; + nsIWebShell *webContainer; + nsresult rv; mNumURLStarts--; @@ -775,7 +782,6 @@ nsresult rv; return NS_OK; } -#endif // NECKO NS_IMETHODIMP diff --git a/mozilla/layout/base/public/nsIDocument.h b/mozilla/layout/base/public/nsIDocument.h index 4d303da860d..1453038d71b 100644 --- a/mozilla/layout/base/public/nsIDocument.h +++ b/mozilla/layout/base/public/nsIDocument.h @@ -52,6 +52,7 @@ class nsIDOMDocumentFragment; class nsILineBreaker; class nsIWordBreaker; class nsIDOMSelection; +class nsIChannel; // IID for the nsIDocument interface #define NS_IDOCUMENT_IID \ @@ -85,10 +86,14 @@ public: // returns the arena associated with this document. virtual nsIArena* GetArena() = 0; - NS_IMETHOD StartDocumentLoad(nsIURI *aUrl, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand) = 0; + nsIStreamListener **aDocListener) = 0; /** * Return the title of the document. May return null. diff --git a/mozilla/layout/base/src/nsDocument.cpp b/mozilla/layout/base/src/nsDocument.cpp index 9e79f1eaa9d..064ebfab3d5 100644 --- a/mozilla/layout/base/src/nsDocument.cpp +++ b/mozilla/layout/base/src/nsDocument.cpp @@ -23,6 +23,7 @@ #include "nsIURL.h" #ifdef NECKO #include "nsILoadGroup.h" +#include "nsIChannel.h" #else #include "nsIURLGroup.h" #endif @@ -829,7 +830,11 @@ nsIArena* nsDocument::GetArena() } nsresult +#ifdef NECKO +nsDocument::Reset(nsIChannel* aChannel) +#else nsDocument::Reset(nsIURI *aURL) +#endif { nsresult rv = NS_OK; @@ -883,14 +888,16 @@ nsDocument::Reset(nsIURI *aURL) NS_IF_RELEASE(mNameSpaceManager); +#ifdef NECKO + (void)aChannel->GetURI(&mDocumentURL); + (void)aChannel->GetLoadGroup(&mDocumentLoadGroup); +#else mDocumentURL = aURL; if (nsnull != aURL) { NS_ADDREF(aURL); - -#ifndef NECKO rv = aURL->GetLoadGroup(&mDocumentLoadGroup); -#endif } +#endif if (NS_OK == rv) { rv = NS_NewNameSpaceManager(&mNameSpaceManager); @@ -900,12 +907,20 @@ nsDocument::Reset(nsIURI *aURL) } nsresult -nsDocument::StartDocumentLoad(nsIURI *aURL, +nsDocument::StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aURL, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand) + nsIStreamListener **aDocListener) { +#ifdef NECKO + return Reset(aChannel); +#else return Reset(aURL); +#endif } const nsString* nsDocument::GetDocumentTitle() const diff --git a/mozilla/layout/base/src/nsDocument.h b/mozilla/layout/base/src/nsDocument.h index c74c8646d4a..507de23bfd5 100644 --- a/mozilla/layout/base/src/nsDocument.h +++ b/mozilla/layout/base/src/nsDocument.h @@ -110,10 +110,14 @@ public: virtual nsIArena* GetArena(); - NS_IMETHOD StartDocumentLoad(nsIURI *aUrl, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand); + nsIStreamListener **aDocListener); /** * Return the title of the document. May return null. @@ -414,7 +418,11 @@ protected: nsIContent* FindContent(const nsIContent* aStartNode, const nsIContent* aTest1, const nsIContent* aTest2) const; +#ifdef NECKO + virtual nsresult Reset(nsIChannel* aChannel); +#else virtual nsresult Reset(nsIURI* aURL); +#endif // this enum is temporary; there should be no knowledge of HTML in // nsDocument. That will be fixed when content sink stream factories diff --git a/mozilla/layout/base/src/nsDocumentViewer.cpp b/mozilla/layout/base/src/nsDocumentViewer.cpp index c4073c674ab..c9d0c5cbbe0 100644 --- a/mozilla/layout/base/src/nsDocumentViewer.cpp +++ b/mozilla/layout/base/src/nsDocumentViewer.cpp @@ -100,7 +100,7 @@ public: nsIDocumentViewer*& aResult); // nsIDocumentLoaderObserver interface - NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aCommand){return NS_OK;} + NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aCommand) {return NS_OK;} #ifndef NECKO NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, nsIURI *aUrl, PRInt32 aStatus,nsIDocumentLoaderObserver * aObserver){return NS_OK;} @@ -111,7 +111,7 @@ public: #ifndef NECKO NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aContentType,nsIContentViewer* aViewer); #else - NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, const char* aContentType,nsIContentViewer* aViewer){return NS_OK;} + NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer); #endif // NECKO #ifndef NECKO @@ -129,7 +129,7 @@ public: #ifndef NECKO NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, PRInt32 aStatus); #else - NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus){return NS_OK;} + NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus); #endif // NECKO #ifndef NECKO @@ -734,9 +734,12 @@ nsIContentViewer *viewer; * See documentation above in the DocumentViewerImpl class definition * @update 07/09/99 dwc */ -#ifndef NECKO NS_IMETHODIMP +#ifdef NECKO +DocumentViewerImpl::OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer) +#else DocumentViewerImpl::OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aContentType,nsIContentViewer* aViewer) +#endif { mNumURLStarts++; return NS_OK; @@ -747,11 +750,15 @@ DocumentViewerImpl::OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, cons * @update 07/09/99 dwc */ NS_IMETHODIMP +#ifdef NECKO +DocumentViewerImpl::OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus) +#else DocumentViewerImpl::OnEndURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, PRInt32 aStatus) +#endif // NECKO { -nsIContentViewerContainer *containerResult; -nsIWebShell *webContainer; -nsresult rv; + nsIContentViewerContainer *containerResult; + nsIWebShell *webContainer; + nsresult rv; mNumURLStarts--; @@ -775,7 +782,6 @@ nsresult rv; return NS_OK; } -#endif // NECKO NS_IMETHODIMP diff --git a/mozilla/layout/build/nsLayoutDLF.cpp b/mozilla/layout/build/nsLayoutDLF.cpp index 49d98507a77..b6dc72da008 100644 --- a/mozilla/layout/build/nsLayoutDLF.cpp +++ b/mozilla/layout/build/nsLayoutDLF.cpp @@ -22,10 +22,7 @@ #include "nsIDocumentViewer.h" #include "nsIURL.h" #ifdef NECKO -#include "nsIIOService.h" -#include "nsIURL.h" -#include "nsIServiceManager.h" -static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); +#include "nsNeckoUtil.h" #endif // NECKO #include "nsICSSLoader.h" #include "nsICSSStyleSheet.h" @@ -125,9 +122,13 @@ public: NS_DECL_ISUPPORTS // for nsIDocumentLoaderFactory - NS_IMETHOD CreateInstance(nsIURI* aURL, + NS_IMETHOD CreateInstance(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI* aURL, +#endif const char* aContentType, - const char* aCommand, nsIContentViewerContainer* aContainer, nsISupports* aExtraInfo, nsIStreamListener** aDocListener, @@ -148,15 +149,24 @@ public: nsresult InitUAStyleSheet(); - nsresult CreateDocument(nsIURI* aURL, - const char* aCommand, + nsresult CreateDocument(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI* aURL, +#endif nsIContentViewerContainer* aContainer, const nsCID& aDocumentCID, nsIStreamListener** aDocListener, nsIContentViewer** aDocViewer); - nsresult CreateRDFDocument(const char* aContentType, nsIURI* aURL, - const char* aCommand, + nsresult CreateRDFDocument(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI* aURL, +#endif + const char* aContentType, nsIContentViewerContainer* aContainer, nsISupports* aExtraInfo, nsIStreamListener** aDocListener, @@ -230,9 +240,13 @@ nsLayoutDLF::QueryInterface(REFNSIID aIID, void** aInstancePtrResult) } NS_IMETHODIMP -nsLayoutDLF::CreateInstance(nsIURI* aURL, +nsLayoutDLF::CreateInstance(const char *aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI* aURL, +#endif const char* aContentType, - const char *aCommand, nsIContentViewerContainer* aContainer, nsISupports* aExtraInfo, nsIStreamListener** aDocListener, @@ -240,7 +254,6 @@ nsLayoutDLF::CreateInstance(nsIURI* aURL, { nsresult rv = NS_ERROR_FAILURE; - // XXX vile hack if(0==PL_strcmp(aCommand,"view-source")) { if((0==PL_strcmp(gXMLTypes[0],aContentType)) || @@ -254,7 +267,13 @@ nsLayoutDLF::CreateInstance(nsIURI* aURL, int typeIndex=0; while(gHTMLTypes[typeIndex]) { if (0== PL_strcmp(gHTMLTypes[typeIndex++], aContentType)) { - return CreateDocument(aURL, aCommand, aContainer, kHTMLDocumentCID, + return CreateDocument(aCommand, +#ifdef NECKO + aChannel, +#else + aURL, +#endif + aContainer, kHTMLDocumentCID, aDocListener, aDocViewer); } } @@ -263,7 +282,13 @@ nsLayoutDLF::CreateInstance(nsIURI* aURL, typeIndex = 0; while(gXMLTypes[typeIndex]) { if (0== PL_strcmp(gXMLTypes[typeIndex++], aContentType)) { - return CreateDocument(aURL, aCommand, aContainer, kXMLDocumentCID, + return CreateDocument(aCommand, +#ifdef NECKO + aChannel, +#else + aURL, +#endif + aContainer, kXMLDocumentCID, aDocListener, aDocViewer); } } @@ -272,7 +297,13 @@ nsLayoutDLF::CreateInstance(nsIURI* aURL, typeIndex = 0; while (gRDFTypes[typeIndex]) { if (0 == PL_strcmp(gRDFTypes[typeIndex++], aContentType)) { - return CreateRDFDocument(aContentType, aURL, aCommand, aContainer, + return CreateRDFDocument(aCommand, +#ifdef NECKO + aChannel, +#else + aURL, +#endif + aContentType, aContainer, aExtraInfo, aDocListener, aDocViewer); } } @@ -281,7 +312,13 @@ nsLayoutDLF::CreateInstance(nsIURI* aURL, typeIndex = 0; while(gImageTypes[typeIndex]) { if (0== PL_strcmp(gImageTypes[typeIndex++], aContentType)) { - return CreateDocument(aURL, aCommand, aContainer, kImageDocumentCID, + return CreateDocument(aCommand, +#ifdef NECKO + aChannel, +#else + aURL, +#endif + aContainer, kImageDocumentCID, aDocListener, aDocViewer); } } @@ -329,8 +366,12 @@ nsLayoutDLF::CreateInstanceForDocument(nsIContentViewerContainer* aContainer, } nsresult -nsLayoutDLF::CreateDocument(nsIURI* aURL, - const char* aCommand, +nsLayoutDLF::CreateDocument(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI* aURL, +#endif nsIContentViewerContainer* aContainer, const nsCID& aDocumentCID, nsIStreamListener** aDocListener, @@ -338,6 +379,12 @@ nsLayoutDLF::CreateDocument(nsIURI* aURL, { nsresult rv = NS_ERROR_FAILURE; +#ifdef NECKO + nsCOMPtr aURL; + rv = aChannel->GetURI(getter_AddRefs(aURL)); + if (NS_FAILED(rv)) return rv; +#endif + #ifdef NOISY_CREATE_DOC if (nsnull != aURL) { nsAutoString tmp; @@ -371,7 +418,11 @@ nsLayoutDLF::CreateDocument(nsIURI* aURL, // Initialize the document to begin loading the data. An // nsIStreamListener connected to the parser is returned in // aDocListener. - rv = doc->StartDocumentLoad(aURL, aContainer, aDocListener, aCommand); +#ifdef NECKO + rv = doc->StartDocumentLoad(aCommand, aChannel, aContainer, aDocListener); +#else + rv = doc->StartDocumentLoad(aCommand, aURL, aContainer, aDocListener); +#endif if (NS_FAILED(rv)) break; @@ -476,9 +527,13 @@ nsLayoutDLF::CreateRDFDocument(nsISupports* aExtraInfo, // ...note, this RDF document _may_ be XUL :-) nsresult -nsLayoutDLF::CreateRDFDocument(const char* aContentType, +nsLayoutDLF::CreateRDFDocument(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else nsIURI* aURL, - const char* aCommand, +#endif + const char* aContentType, nsIContentViewerContainer* aContainer, nsISupports* aExtraInfo, nsIStreamListener** aDocListener, @@ -491,13 +546,23 @@ nsLayoutDLF::CreateRDFDocument(const char* aContentType, return rv; } +#ifdef NECKO + nsCOMPtr aURL; + rv = aChannel->GetURI(getter_AddRefs(aURL)); + if (NS_FAILED(rv)) return rv; +#endif + /* * Initialize the document to begin loading the data... * * An nsIStreamListener connected to the parser is returned in * aDocListener. */ - rv = doc->StartDocumentLoad(aURL, aContainer, aDocListener, aCommand); +#ifdef NECKO + rv = doc->StartDocumentLoad(aCommand, aChannel, aContainer, aDocListener); +#else + rv = doc->StartDocumentLoad(aCommand, aURL, aContainer, aDocListener); +#endif if (NS_SUCCEEDED(rv)) { /* * Bind the document to the Content Viewer... @@ -554,15 +619,7 @@ nsLayoutDLF::InitUAStyleSheet() #ifndef NECKO rv = NS_NewURL(&uaURL, nsString(UA_CSS_URL)); // XXX this bites, fix it #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &rv); - if (NS_FAILED(rv)) return rv; - - nsIURI *uri = nsnull; - rv = service->NewURI(UA_CSS_URL, nsnull, &uri); - if (NS_FAILED(rv)) return rv; - - rv = uri->QueryInterface(nsIURI::GetIID(), (void**)&uaURL); - NS_RELEASE(uri); + rv = NS_NewURI(&uaURL, UA_CSS_URL); // XXX this bites, fix it #endif // NECKO if (NS_SUCCEEDED(rv)) { nsICSSLoader* cssLoader; diff --git a/mozilla/layout/html/document/src/nsHTMLDocument.cpp b/mozilla/layout/html/document/src/nsHTMLDocument.cpp index 79e28f51205..cb5ddb5083f 100644 --- a/mozilla/layout/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/layout/html/document/src/nsHTMLDocument.cpp @@ -258,9 +258,20 @@ nsrefcnt nsHTMLDocument::Release() } nsresult +#ifdef NECKO +nsHTMLDocument::Reset(nsIChannel* aChannel) +#else nsHTMLDocument::Reset(nsIURI *aURL) +#endif { +#ifdef NECKO + nsresult result = nsDocument::Reset(aChannel); + nsCOMPtr aURL; + result = aChannel->GetURI(getter_AddRefs(aURL)); + if (NS_FAILED(result)) return result; +#else nsresult result = nsDocument::Reset(aURL); +#endif if (NS_FAILED(result)) { return result; } @@ -331,21 +342,35 @@ nsHTMLDocument::CreateShell(nsIPresContext* aContext, } NS_IMETHODIMP -nsHTMLDocument::StartDocumentLoad(nsIURI *aURL, +nsHTMLDocument::StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aURL, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand) + nsIStreamListener **aDocListener) { - nsresult rv = nsDocument::StartDocumentLoad(aURL, + nsresult rv = nsDocument::StartDocumentLoad(aCommand, +#ifdef NECKO + aChannel, +#else + aURL, +#endif aContainer, - aDocListener, - aCommand); + aDocListener); if (NS_FAILED(rv)) { return rv; } nsIWebShell* webShell; +#ifdef NECKO + nsCOMPtr aURL; + rv = aChannel->GetURI(getter_AddRefs(aURL)); + if (NS_FAILED(rv)) return rv; +#endif + static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID); static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID); @@ -1413,7 +1438,11 @@ nsHTMLDocument::OpenCommon(nsIURI* aSourceURL) // The open occurred after the document finished loading. // So we reset the document and create a new one. if (nsnull == mParser) { +#ifdef NECKO + // XXX help! +#else result = Reset(aSourceURL); +#endif if (NS_OK == result) { static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID); static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID); diff --git a/mozilla/layout/html/document/src/nsHTMLDocument.h b/mozilla/layout/html/document/src/nsHTMLDocument.h index a3aaa4eff2b..d3ca9ab3043 100644 --- a/mozilla/layout/html/document/src/nsHTMLDocument.h +++ b/mozilla/layout/html/document/src/nsHTMLDocument.h @@ -59,10 +59,14 @@ public: nsIStyleSet* aStyleSet, nsIPresShell** aInstancePtrResult); - NS_IMETHOD StartDocumentLoad(nsIURI* aUrl, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener** aDocListener, - const char* aCommand); + nsIStreamListener **aDocListener); NS_IMETHOD EndLoad(); @@ -182,7 +186,11 @@ protected: PRBool GetBodyContent(); nsresult GetBodyElement(nsIDOMHTMLBodyElement** aBody); +#ifdef NECKO + virtual nsresult Reset(nsIChannel* aChannel); +#else virtual nsresult Reset(nsIURI *aURL); +#endif nsresult WriteCommon(const nsString& aText, PRBool aNewlineTerminate); nsresult ScriptWriteCommon(JSContext *cx, diff --git a/mozilla/layout/html/document/src/nsImageDocument.cpp b/mozilla/layout/html/document/src/nsImageDocument.cpp index b8d1bc82015..35c39826c9f 100644 --- a/mozilla/layout/html/document/src/nsImageDocument.cpp +++ b/mozilla/layout/html/document/src/nsImageDocument.cpp @@ -57,10 +57,14 @@ public: nsImageDocument(); virtual ~nsImageDocument(); - NS_IMETHOD StartDocumentLoad(nsIURI* aURL, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener** aDocListener, - const char* aCommand); + nsIStreamListener **aDocListener); nsresult CreateSyntheticDocument(); @@ -247,15 +251,23 @@ nsImageDocument::~nsImageDocument() } NS_IMETHODIMP -nsImageDocument::StartDocumentLoad(nsIURI* aURL, +nsImageDocument::StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aURL, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener** aDocListener, - const char* aCommand) + nsIStreamListener **aDocListener) { - nsresult rv = nsDocument::StartDocumentLoad(aURL, + nsresult rv = nsDocument::StartDocumentLoad(aCommand, +#ifdef NECKO + aChannel, +#else + aURL, +#endif aContainer, - aDocListener, - aCommand); + aDocListener); if (NS_FAILED(rv)) { return rv; } diff --git a/mozilla/layout/html/forms/src/nsFormFrame.cpp b/mozilla/layout/html/forms/src/nsFormFrame.cpp index 4171676871e..acd79635068 100644 --- a/mozilla/layout/html/forms/src/nsFormFrame.cpp +++ b/mozilla/layout/html/forms/src/nsFormFrame.cpp @@ -537,20 +537,14 @@ nsFormFrame::OnSubmit(nsIPresContext* aPresContext, nsIFrame* aFrame) href.Append(data); } nsAutoString absURLSpec; - nsAutoString base; #ifndef NECKO - NS_MakeAbsoluteURL(docURL, base, href, absURLSpec); + nsAutoString base; + result = NS_MakeAbsoluteURL(docURL, base, href, absURLSpec); #else - - nsIURI *baseUri = nsnull; - result = docURL->QueryInterface(nsIURI::GetIID(), (void**)&baseUri); - if (NS_FAILED(result)) return result; - - NS_MakeAbsoluteURI(href, baseUri, absURLSpec); - - NS_RELEASE(baseUri); + result = NS_MakeAbsoluteURI(href, docURL, absURLSpec); #endif // NECKO NS_IF_RELEASE(docURL); + if (NS_FAILED(result)) return result; // Now pass on absolute url to the click handler nsIPostData* postData = nsnull; diff --git a/mozilla/layout/html/style/src/nsCSSLoader.cpp b/mozilla/layout/html/style/src/nsCSSLoader.cpp index 4afab3aa15d..4fa26e02f3c 100644 --- a/mozilla/layout/html/style/src/nsCSSLoader.cpp +++ b/mozilla/layout/html/style/src/nsCSSLoader.cpp @@ -1282,11 +1282,13 @@ CSSLoaderImpl::LoadAgentSheet(nsIURI* aURL, if (urlClone) { #endif #ifdef NECKO +#if 0 nsILoadGroup* loadGroup = nsnull; if (mDocument) { loadGroup = mDocument->GetDocumentLoadGroup(); } - result = NS_OpenURI(&in, urlClone, loadGroup); +#endif + result = NS_OpenURI(&in, urlClone/*, loadGroup*/); #else result = NS_OpenURL(urlClone, &in); #endif diff --git a/mozilla/layout/html/tests/TestAttributes.cpp b/mozilla/layout/html/tests/TestAttributes.cpp index ec1b4805dc9..06640e84964 100644 --- a/mozilla/layout/html/tests/TestAttributes.cpp +++ b/mozilla/layout/html/tests/TestAttributes.cpp @@ -171,10 +171,14 @@ void testStrings(nsIDocument* aDoc) { class MyDocument : public nsMarkupDocument { public: MyDocument(); - NS_IMETHOD StartDocumentLoad(nsIURI *aUrl, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand) + nsIStreamListener **aDocListener) { return NS_OK; } diff --git a/mozilla/layout/html/tests/TestCSSParser.cpp b/mozilla/layout/html/tests/TestCSSParser.cpp index 9b23f570a20..7752513d4f6 100644 --- a/mozilla/layout/html/tests/TestCSSParser.cpp +++ b/mozilla/layout/html/tests/TestCSSParser.cpp @@ -174,7 +174,7 @@ int main(int argc, char** argv) #ifndef NECKO rv = NS_OpenURL(url, &in); #else - rv = NS_OpenURI(&in, url, nsnull); + rv = NS_OpenURI(&in, url); #endif // NECKO if (rv != NS_OK) { printf("open of url('%s') failed: error=%x\n", urlName, rv); diff --git a/mozilla/layout/html/tests/TestCSSScanner.cpp b/mozilla/layout/html/tests/TestCSSScanner.cpp index 8a5a91b7961..3d361bea3d0 100644 --- a/mozilla/layout/html/tests/TestCSSScanner.cpp +++ b/mozilla/layout/html/tests/TestCSSScanner.cpp @@ -63,7 +63,7 @@ int main(int argc, char** argv) #ifndef NECKO rv = NS_OpenURL(url, &in); #else - rv = NS_OpenURI(&in, url, nsnull); + rv = NS_OpenURI(&in, url); #endif // NECKO if (rv != NS_OK) { printf("open of url('%s') failed: error=%x\n", urlName, rv); diff --git a/mozilla/layout/html/tests/TestInlineFrame.cpp b/mozilla/layout/html/tests/TestInlineFrame.cpp index 2a2190eda6f..4404d5f4733 100644 --- a/mozilla/layout/html/tests/TestInlineFrame.cpp +++ b/mozilla/layout/html/tests/TestInlineFrame.cpp @@ -39,10 +39,14 @@ static NS_DEFINE_IID(kIContentDelegateIID, NS_ICONTENTDELEGATE_IID); class MyDocument : public nsDocument { public: MyDocument(); - NS_IMETHOD StartDocumentLoad(nsIURI *aUrl, - nsIWebShell* aShell, - nsIStreamListener **aDocListener, - const char* aCommand) + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif + nsIContentViewerContainer* aContainer, + nsIStreamListener **aDocListener) { return NS_OK; } diff --git a/mozilla/layout/style/nsCSSLoader.cpp b/mozilla/layout/style/nsCSSLoader.cpp index 4afab3aa15d..4fa26e02f3c 100644 --- a/mozilla/layout/style/nsCSSLoader.cpp +++ b/mozilla/layout/style/nsCSSLoader.cpp @@ -1282,11 +1282,13 @@ CSSLoaderImpl::LoadAgentSheet(nsIURI* aURL, if (urlClone) { #endif #ifdef NECKO +#if 0 nsILoadGroup* loadGroup = nsnull; if (mDocument) { loadGroup = mDocument->GetDocumentLoadGroup(); } - result = NS_OpenURI(&in, urlClone, loadGroup); +#endif + result = NS_OpenURI(&in, urlClone/*, loadGroup*/); #else result = NS_OpenURL(urlClone, &in); #endif diff --git a/mozilla/layout/xml/document/src/nsXMLDocument.cpp b/mozilla/layout/xml/document/src/nsXMLDocument.cpp index 879b544d01d..5893276aa23 100644 --- a/mozilla/layout/xml/document/src/nsXMLDocument.cpp +++ b/mozilla/layout/xml/document/src/nsXMLDocument.cpp @@ -43,6 +43,10 @@ #include "nsExpatDTD.h" #include "nsINameSpaceManager.h" #include "nsICSSLoader.h" +#ifdef NECKO +#include "nsCOMPtr.h" +#include "nsIURI.h" +#endif // XXX The XML world depends on the html atoms #include "nsHTMLAtoms.h" @@ -150,9 +154,20 @@ nsrefcnt nsXMLDocument::Release() } nsresult +#ifdef NECKO +nsXMLDocument::Reset(nsIChannel* aChannel) +#else nsXMLDocument::Reset(nsIURI* aURL) +#endif { +#ifdef NECKO + nsresult result = nsDocument::Reset(aChannel); + nsCOMPtr aURL; + result = aChannel->GetURI(getter_AddRefs(aURL)); + if (NS_FAILED(result)) return result; +#else nsresult result = nsDocument::Reset(aURL); +#endif if (NS_FAILED(result)) { return result; } @@ -188,21 +203,35 @@ nsXMLDocument::GetContentType(nsString& aContentType) const } NS_IMETHODIMP -nsXMLDocument::StartDocumentLoad(nsIURI *aUrl, - nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand) +nsXMLDocument::StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif + nsIContentViewerContainer* aContainer, + nsIStreamListener **aDocListener) { - nsresult rv = nsDocument::StartDocumentLoad(aUrl, + nsresult rv = nsDocument::StartDocumentLoad(aCommand, +#ifdef NECKO + aChannel, +#else + aUrl, +#endif aContainer, - aDocListener, - aCommand); + aDocListener); if (NS_FAILED(rv)) { return rv; } nsIWebShell* webShell; +#ifdef NECKO + nsCOMPtr aUrl; + rv = aChannel->GetURI(getter_AddRefs(aUrl)); + if (NS_FAILED(rv)) return rv; +#endif + static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID); static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID); diff --git a/mozilla/layout/xml/document/src/nsXMLDocument.h b/mozilla/layout/xml/document/src/nsXMLDocument.h index 943d572b57d..e1d8df1f2ad 100644 --- a/mozilla/layout/xml/document/src/nsXMLDocument.h +++ b/mozilla/layout/xml/document/src/nsXMLDocument.h @@ -47,10 +47,14 @@ public: NS_IMETHOD GetContentType(nsString& aContentType) const; - NS_IMETHOD StartDocumentLoad(nsIURI *aUrl, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand); + nsIStreamListener **aDocListener); NS_IMETHOD EndLoad(); @@ -79,7 +83,11 @@ public: protected: virtual void InternalAddStyleSheet(nsIStyleSheet* aSheet); // subclass hook for sheet ordering virtual void InternalInsertStyleSheetAt(nsIStyleSheet* aSheet, PRInt32 aIndex); +#ifdef NECKO + virtual nsresult Reset(nsIChannel* aChannel); +#else virtual nsresult Reset(nsIURI* aUrl); +#endif // For HTML elements in our content model nsIHTMLStyleSheet* mAttrStyleSheet; diff --git a/mozilla/netwerk/base/public/nsIChannel.idl b/mozilla/netwerk/base/public/nsIChannel.idl index 6b07c1d026e..82430242368 100644 --- a/mozilla/netwerk/base/public/nsIChannel.idl +++ b/mozilla/netwerk/base/public/nsIChannel.idl @@ -23,6 +23,7 @@ interface nsIInputStream; interface nsIOutputStream; interface nsIStreamObserver; interface nsIStreamListener; +interface nsILoadGroup; typedef unsigned long nsLoadFlags; @@ -69,7 +70,8 @@ interface nsIChannel : nsIRequest void AsyncRead(in unsigned long startPosition, in long readCount, in nsISupports ctxt, - in nsIStreamListener listener); + in nsIStreamListener listener, + in nsILoadGroup group); /** * Writes asynchronously to the URL's specified destination. Notifications @@ -84,7 +86,8 @@ interface nsIChannel : nsIRequest in unsigned long startPosition, in long writeCount, in nsISupports ctxt, - in nsIStreamObserver observer); + in nsIStreamObserver observer, + in nsILoadGroup group); /** * Load attribute flags. These may be or'd together. @@ -94,13 +97,17 @@ interface nsIChannel : nsIRequest * overlap. Otherwise, users won't be able to create a single flag word * of load attributes that applies to a number of different channel types. */ - const unsigned long LOAD_NORMAL = 0; /* no special load attributes -- use defaults */ - const unsigned long LOAD_QUIET = 1 << 0; /* don't deliver status notifications to the nsIProgressEventSink */ + const unsigned long LOAD_NORMAL = 0; /* no special load attributes -- use defaults */ + const unsigned long LOAD_BACKGROUND = 1 << 0; /* don't deliver status notifications to the + * nsIProgressEventSink, or keep this load from + * completing the nsILoadGroup it may belong to */ /** * Accesses the load attributes for the channel. E.g. setting the load * attributes with the LOAD_QUIET bit set causes the loading process to - * not deliver status notifications to the program performing the load. + * not deliver status notifications to the program performing the load, + * and to not contribute to keeping any nsILoadGroup it may be contained + * in from firing its OnLoadComplete notification. */ attribute nsLoadFlags LoadAttributes; @@ -111,5 +118,11 @@ interface nsIChannel : nsIRequest * most likely wants to verify with the actual data. */ readonly attribute string ContentType; + + /** + * Returns the load group in which the channel is a currently a member. + */ + readonly attribute nsILoadGroup LoadGroup; + }; diff --git a/mozilla/netwerk/base/public/nsIIOService.idl b/mozilla/netwerk/base/public/nsIIOService.idl index b01f52dbcde..4e5ec14a0fd 100644 --- a/mozilla/netwerk/base/public/nsIIOService.idl +++ b/mozilla/netwerk/base/public/nsIIOService.idl @@ -139,8 +139,9 @@ interface nsIIOService : nsISupports * their use is not required by other parts of the system, they are primarily * a convenience for the caller. The outer parameter can be used for aggregation. */ - nsILoadGroup NewLoadGroup(in nsILoadGroup parent, - in nsISupports outer); + nsILoadGroup NewLoadGroup(in nsISupports outer, + in nsIStreamObserver observer, + in nsILoadGroup parent); /** * Returns a simple channel implementation that uses the given input diff --git a/mozilla/netwerk/base/public/nsILoadGroup.idl b/mozilla/netwerk/base/public/nsILoadGroup.idl index ea430d77c7d..4868afbe385 100644 --- a/mozilla/netwerk/base/public/nsILoadGroup.idl +++ b/mozilla/netwerk/base/public/nsILoadGroup.idl @@ -30,6 +30,9 @@ interface nsIInputStream; [scriptable, uuid(19845248-29ab-11d3-8cce-0060b0fc14a3)] interface nsILoadGroup : nsIRequest { + void Init(in nsIStreamObserver observer, + in nsILoadGroup parent); + /** * Accesses the default load attributes for the group, returned as * a flag word. Setting the default load attributes will cause them @@ -38,27 +41,23 @@ interface nsILoadGroup : nsIRequest attribute unsigned long DefaultLoadAttributes; /** - * Adds the channel to the group, and performs and AsyncRead on the - * channel (see nsIChannel for details). The channel is automatically - * removed from the group when the async operation completes. + * Adds a new channel to the group. This will cause the default load + * attributes to be applied to that channel. If the channel added is + * the first channel in the group, the group's observer's OnStartRequest + * method is called. */ - void AsyncRead(in nsIChannel channel, - in unsigned long startPosition, - in long readCount, - in nsISupports ctxt, - in nsIStreamListener listener); + void AddChannel(in nsIChannel channel, + in nsISupports ctxt); /** - * Adds the channel to the group, and performs and AsyncWrite on the - * channel (see nsIChannel for details). The channel is automatically - * removed from the group when the async operation completes. + * Removes a channel from the group. If the channel removed is + * the last channel in the group, the group's observer's OnStopRequest + * method is called. */ - void AsyncWrite(in nsIChannel channel, - in nsIInputStream fromStream, - in unsigned long startPosition, - in long writeCount, - in nsISupports ctxt, - in nsIStreamObserver observer); + void RemoveChannel(in nsIChannel channel, + in nsISupports ctxt, + in nsresult status, + in wstring errorMsg); /** * Returns the channels contained directly in this group. @@ -66,23 +65,6 @@ interface nsILoadGroup : nsIRequest */ readonly attribute nsISimpleEnumerator Channels; - /** - * Adds an observer to the group. The observer's methods will be - * called for each channel in the group. - */ - void AddObserver(in nsIStreamObserver observer); - - /** - * Removes an observer from the group. - */ - void RemoveObserver(in nsIStreamObserver observer); - - /** - * Returns the observers contained directly in this group. - * Enumerator element type: nsIStreamObserver. - */ - readonly attribute nsISimpleEnumerator Observers; - /** * Adds a new sub-group to the group. */ diff --git a/mozilla/netwerk/base/public/nsIURI.idl b/mozilla/netwerk/base/public/nsIURI.idl index 95a14a40a78..acd039d20b7 100644 --- a/mozilla/netwerk/base/public/nsIURI.idl +++ b/mozilla/netwerk/base/public/nsIURI.idl @@ -38,6 +38,10 @@ * | PreHost * Scheme * + * The subclass nsIURL provides a means to open an input or output + * stream to a URI as a source/destination, as well as providing additional + * accessors to destructure the path, query and reference portions typically + * associated with URLs. */ %{C++ @@ -135,9 +139,9 @@ interface nsIURI : nsISupports * *** What you most likely will want is NS_STANDARDURL_CID which is much more * full featured. Look at nsIURL.idl for more details. */ - -#define NS_SIMPLEURI_CID \ -{ /* e0da1d70-2f7b-11d3-8cd0-0060b0fc14a3 */ \ + +#define NS_SIMPLEURI_CID \ +{ /* e0da1d70-2f7b-11d3-8cd0-0060b0fc14a3 */ \ 0xe0da1d70, \ 0x2f7b, \ 0x11d3, \ diff --git a/mozilla/netwerk/base/src/nsAsyncStreamListener.cpp b/mozilla/netwerk/base/src/nsAsyncStreamListener.cpp index ea82f7e7ab4..40d1b883673 100644 --- a/mozilla/netwerk/base/src/nsAsyncStreamListener.cpp +++ b/mozilla/netwerk/base/src/nsAsyncStreamListener.cpp @@ -180,7 +180,8 @@ nsAsyncStreamObserver::~nsAsyncStreamObserver() NS_IF_RELEASE(mEventQueue); } -NS_IMPL_ISUPPORTS(nsAsyncStreamObserver, nsCOMTypeInfo::GetIID()); +NS_IMPL_THREADSAFE_ISUPPORTS(nsAsyncStreamObserver, + nsCOMTypeInfo::GetIID()); NS_IMPL_ISUPPORTS_INHERITED(nsAsyncStreamListener, nsAsyncStreamObserver, diff --git a/mozilla/netwerk/base/src/nsIOService.cpp b/mozilla/netwerk/base/src/nsIOService.cpp index cf9841db6c5..bbe63355a68 100644 --- a/mozilla/netwerk/base/src/nsIOService.cpp +++ b/mozilla/netwerk/base/src/nsIOService.cpp @@ -328,8 +328,8 @@ nsIOService::NewChannelFromNativePath(const char *nativePath, nsIFileChannel **r } NS_IMETHODIMP -nsIOService::NewLoadGroup(nsILoadGroup* parent, nsISupports* outer, - nsILoadGroup **result) +nsIOService::NewLoadGroup(nsISupports* outer, nsIStreamObserver* observer, + nsILoadGroup* parent, nsILoadGroup **result) { nsresult rv; nsILoadGroup* group; @@ -337,12 +337,10 @@ nsIOService::NewLoadGroup(nsILoadGroup* parent, nsISupports* outer, (void**)&group); if (NS_FAILED(rv)) return rv; - if (parent) { - rv = parent->AddSubGroup(group); - if (NS_FAILED(rv)) { - NS_RELEASE(group); - return rv; - } + rv = group->Init(observer, parent); + if (NS_FAILED(rv)) { + NS_RELEASE(group); + return rv; } *result = group; diff --git a/mozilla/netwerk/base/src/nsIOService.h b/mozilla/netwerk/base/src/nsIOService.h index cb3b5935297..5b4ae45f04c 100644 --- a/mozilla/netwerk/base/src/nsIOService.h +++ b/mozilla/netwerk/base/src/nsIOService.h @@ -52,7 +52,7 @@ public: NS_IMETHOD NewAsyncStreamListener(nsIStreamListener *receiver, nsIEventQueue *eventQueue, nsIStreamListener **_retval); NS_IMETHOD NewSyncStreamListener(nsIInputStream **inStream, nsIBufferOutputStream **outStream, nsIStreamListener **_retval); NS_IMETHOD NewChannelFromNativePath(const char *nativePath, nsIFileChannel **_retval); - NS_IMETHOD NewLoadGroup(nsILoadGroup* parent, nsISupports* outer, nsILoadGroup **result); + NS_IMETHOD NewLoadGroup(nsISupports* outer, nsIStreamObserver* observer, nsILoadGroup* parent, nsILoadGroup **result); NS_IMETHOD NewInputStreamChannel(nsIURI* uri, const char *contentType, nsIInputStream *inStr, nsIChannel **result); // nsIOService methods: diff --git a/mozilla/netwerk/base/src/nsInputStreamChannel.cpp b/mozilla/netwerk/base/src/nsInputStreamChannel.cpp index 4d17ee2e54a..09a5c1b6a15 100644 --- a/mozilla/netwerk/base/src/nsInputStreamChannel.cpp +++ b/mozilla/netwerk/base/src/nsInputStreamChannel.cpp @@ -18,13 +18,14 @@ #include "nsInputStreamChannel.h" #include "nsIStreamListener.h" +#include "nsILoadGroup.h" #include "nsCOMPtr.h" //////////////////////////////////////////////////////////////////////////////// // nsInputStreamChannel methods: nsInputStreamChannel::nsInputStreamChannel() - : mURI(nsnull), mContentType(nsnull), mInputStream(nsnull) + : mURI(nsnull), mContentType(nsnull), mInputStream(nsnull), mLoadGroup(nsnull) { NS_INIT_REFCNT(); } @@ -123,7 +124,8 @@ nsInputStreamChannel::OpenOutputStream(PRUint32 startPosition, nsIOutputStream * NS_IMETHODIMP nsInputStreamChannel::AsyncRead(PRUint32 startPosition, PRInt32 readCount, - nsISupports *ctxt, nsIStreamListener *listener) + nsISupports *ctxt, nsIStreamListener *listener, + nsILoadGroup* group) { // currently this happens before AsyncRead returns -- hope that's ok nsresult rv; @@ -132,6 +134,14 @@ nsInputStreamChannel::AsyncRead(PRUint32 startPosition, PRInt32 readCount, // the listener prematurely. nsCOMPtr l(listener); + NS_ASSERTION(mLoadGroup == nsnull, "recursively entered AsyncRead?"); + mLoadGroup = group; + NS_ADDREF(mLoadGroup); + + if (group) { + (void)group->AddChannel(this, ctxt); + } + rv = listener->OnStartRequest(this, ctxt); if (NS_FAILED(rv)) return rv; @@ -151,16 +161,20 @@ nsInputStreamChannel::AsyncRead(PRUint32 startPosition, PRInt32 readCount, if (NS_FAILED(rv)) break; } - rv = listener->OnStopRequest(this, ctxt, rv, nsnull); // XXX error message - if (NS_FAILED(rv)) return rv; + rv = listener->OnStopRequest(this, ctxt, rv, nsnull); // XXX error message + + if (group) { + (void)group->RemoveChannel(this, ctxt, rv, nsnull); // XXX error message + } + NS_RELEASE(mLoadGroup); - return NS_OK; + return rv; } NS_IMETHODIMP nsInputStreamChannel::AsyncWrite(nsIInputStream *fromStream, PRUint32 startPosition, PRInt32 writeCount, nsISupports *ctxt, - nsIStreamObserver *observer) + nsIStreamObserver *observer, nsILoadGroup* group) { // we don't do output return NS_ERROR_FAILURE; @@ -187,4 +201,12 @@ nsInputStreamChannel::GetContentType(char * *aContentType) return *aContentType ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } +NS_IMETHODIMP +nsInputStreamChannel::GetLoadGroup(nsILoadGroup * *aLoadGroup) +{ + *aLoadGroup = mLoadGroup; + NS_ADDREF(*aLoadGroup); + return NS_OK; +} + //////////////////////////////////////////////////////////////////////////////// diff --git a/mozilla/netwerk/base/src/nsInputStreamChannel.h b/mozilla/netwerk/base/src/nsInputStreamChannel.h index fc7636c7d9d..5fe1c4c7dd5 100644 --- a/mozilla/netwerk/base/src/nsInputStreamChannel.h +++ b/mozilla/netwerk/base/src/nsInputStreamChannel.h @@ -41,13 +41,15 @@ public: nsIInputStream **_retval); NS_IMETHOD OpenOutputStream(PRUint32 startPosition, nsIOutputStream **_retval); NS_IMETHOD AsyncRead(PRUint32 startPosition, PRInt32 readCount, - nsISupports *ctxt, nsIStreamListener *listener); + nsISupports *ctxt, nsIStreamListener *listener, + nsILoadGroup* group); NS_IMETHOD AsyncWrite(nsIInputStream *fromStream, PRUint32 startPosition, PRInt32 writeCount, nsISupports *ctxt, - nsIStreamObserver *observer); + nsIStreamObserver *observer, nsILoadGroup* group); NS_IMETHOD GetLoadAttributes(nsLoadFlags *aLoadAttributes); NS_IMETHOD SetLoadAttributes(nsLoadFlags aLoadAttributes); NS_IMETHOD GetContentType(char * *aContentType); + NS_IMETHOD GetLoadGroup(nsILoadGroup * *aLoadGroup); // nsInputStreamChannel methods: nsInputStreamChannel(); @@ -62,6 +64,7 @@ protected: nsIURI* mURI; char* mContentType; nsIInputStream* mInputStream; + nsILoadGroup* mLoadGroup; }; #define NS_INPUTSTREAMCHANNEL_CID \ diff --git a/mozilla/netwerk/base/src/nsLoadGroup.cpp b/mozilla/netwerk/base/src/nsLoadGroup.cpp index f96b22023c9..d9708713d9f 100644 --- a/mozilla/netwerk/base/src/nsLoadGroup.cpp +++ b/mozilla/netwerk/base/src/nsLoadGroup.cpp @@ -17,150 +17,23 @@ */ #include "nsLoadGroup.h" -#include "nsIIOService.h" +#include "nsIStreamObserver.h" #include "nsIChannel.h" -#include "nsIServiceManager.h" #include "nsISupportsArray.h" #include "nsEnumeratorUtils.h" +#include "nsIServiceManager.h" +#include "nsIEventQueueService.h" #include "nsCOMPtr.h" static NS_DEFINE_CID(kLoadGroupCID, NS_LOADGROUP_CID); -static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); -static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); - -//////////////////////////////////////////////////////////////////////////////// - -class nsLoadGroupEntry : public nsIStreamListener -{ -protected: - typedef nsresult (*PropagateUpFun)(nsIStreamObserver* obs, void* closure); - - nsresult PropagateUp(PropagateUpFun fun, void* closure) { - nsresult rv; - PRUint32 i; - - for (nsLoadGroup* group = mGroup; group != nsnull; group = group->mParent) { - PRUint32 count = 0; - if (group->mObservers) { - rv = group->mObservers->Count(&count); - if (NS_FAILED(rv)) return rv; - } - for (i = 0; i < count; i++) { - nsIStreamObserver* obs = - NS_STATIC_CAST(nsIStreamObserver*, group->mObservers->ElementAt(i)); - if (obs == nsnull) - return NS_ERROR_FAILURE; - rv = fun(obs, closure); - NS_RELEASE(obs); - if (NS_FAILED(rv)) return rv; - } - } - return NS_OK; - } - - struct OnStartRequestArgs { - nsIChannel* channel; - nsISupports* context; - }; - - static nsresult - OnStartRequestFun(nsIStreamObserver* obs, void* closure) { - OnStartRequestArgs* args = (OnStartRequestArgs*)closure; - return obs->OnStartRequest(args->channel, args->context); - } - - struct OnStopRequestArgs { - nsIChannel* channel; - nsISupports* ctxt; - nsresult status; - const PRUnichar* errorMsg; - }; - - static nsresult - OnStopRequestFun(nsIStreamObserver* obs, void* closure) { - OnStopRequestArgs* args = (OnStopRequestArgs*)closure; - return obs->OnStopRequest(args->channel, args->ctxt, - args->status, args->errorMsg); - } - - struct OnDataAvailableArgs { - nsIChannel* channel; - nsISupports* ctxt; - nsIInputStream *inStr; - PRUint32 sourceOffset; - PRUint32 count; - }; - - static nsresult - OnDataAvailableFun(nsIStreamObserver* obs, void* closure) { - OnDataAvailableArgs* args = (OnDataAvailableArgs*)closure; - nsIStreamListener* l = NS_STATIC_CAST(nsIStreamListener*, obs); - return l->OnDataAvailable(args->channel, args->ctxt, args->inStr, - args->sourceOffset, args->count); - } - -public: - NS_DECL_ISUPPORTS - - // nsIStreamObserver methods: - NS_IMETHOD OnStartRequest(nsIChannel* channel, nsISupports *ctxt) { - OnStartRequestArgs args; - args.channel = channel; - args.context = ctxt; - return PropagateUp(OnStartRequestFun, &args); - } - - NS_IMETHOD OnStopRequest(nsIChannel* channel, nsISupports *ctxt, nsresult status, - const PRUnichar *errorMsg) { - OnStopRequestArgs args; - args.channel = channel; - args.ctxt = ctxt; - args.status = status; - args.errorMsg = errorMsg; - return PropagateUp(OnStartRequestFun, &args); - } - - // nsIStreamListener methods: - NS_IMETHOD OnDataAvailable(nsIChannel* channel, nsISupports *ctxt, nsIInputStream *inStr, - PRUint32 sourceOffset, PRUint32 count) { - OnDataAvailableArgs args; - args.channel = channel; - args.ctxt = ctxt; - args.inStr = inStr; - args.sourceOffset = sourceOffset; - args.count = count; - return PropagateUp(OnDataAvailableFun, &args); - } - - // nsLoadGroupEntry methods: - nsLoadGroupEntry(nsLoadGroup* group, nsIChannel* channel, nsISupports* ctxt) - : mGroup(group), mChannel(channel), mContext(ctxt) { - NS_INIT_REFCNT(); - NS_ADDREF(mGroup); - NS_ADDREF(mChannel); - NS_IF_ADDREF(mContext); - } - - virtual ~nsLoadGroupEntry() { - NS_RELEASE(mGroup); - NS_RELEASE(mChannel); - NS_IF_RELEASE(mContext); - } - -protected: - nsLoadGroup* mGroup; - nsIChannel* mChannel; - nsISupports* mContext; -}; - -NS_IMPL_ISUPPORTS(nsLoadGroupEntry, nsCOMTypeInfo::GetIID()); +static NS_DEFINE_CID(kEventQueueService, NS_EVENTQUEUESERVICE_CID); //////////////////////////////////////////////////////////////////////////////// nsLoadGroup::nsLoadGroup(nsISupports* outer) - : mChannels(nsnull), mSubGroups(nsnull), mObservers(nsnull), + : mChannels(nsnull), mSubGroups(nsnull), mDefaultLoadAttributes(nsIChannel::LOAD_NORMAL), - mParent(nsnull), mObserver(nsnull) + mObserver(nsnull), mParent(nsnull), mForegroundCount(0) { NS_INIT_AGGREGATED(outer); } @@ -171,7 +44,6 @@ nsLoadGroup::~nsLoadGroup() NS_ASSERTION(NS_SUCCEEDED(rv), "Cancel failed"); NS_IF_RELEASE(mChannels); NS_IF_RELEASE(mSubGroups); - NS_IF_RELEASE(mObservers); NS_IF_RELEASE(mObserver); NS_IF_RELEASE(mParent); } @@ -219,9 +91,12 @@ nsLoadGroup::PropagateDown(PropagateDownFun fun) if (NS_FAILED(rv)) return rv; } for (i = 0; i < count; i++) { - nsIRequest* req = NS_STATIC_CAST(nsIRequest*, mChannels->ElementAt(i)); + // Operate the elements from back to front so that if items get + // get removed from the list it won't affect our iteration + nsIRequest* req = + NS_STATIC_CAST(nsIRequest*, mChannels->ElementAt(count - 1 - i)); if (req == nsnull) - return NS_ERROR_FAILURE; + continue; rv = fun(req); NS_RELEASE(req); if (NS_FAILED(rv)) return rv; @@ -233,9 +108,12 @@ nsLoadGroup::PropagateDown(PropagateDownFun fun) if (NS_FAILED(rv)) return rv; } for (i = 0; i < count; i++) { - nsIRequest* req = NS_STATIC_CAST(nsIRequest*, mSubGroups->ElementAt(i)); + // Operate the elements from back to front so that if items get + // get removed from the list it won't affect our iteration + nsIRequest* req = + NS_STATIC_CAST(nsIRequest*, mSubGroups->ElementAt(count - 1 - i)); if (req == nsnull) - return NS_ERROR_FAILURE; + continue; rv = fun(req); NS_RELEASE(req); if (NS_FAILED(rv)) return rv; @@ -247,18 +125,14 @@ NS_IMETHODIMP nsLoadGroup::IsPending(PRBool *result) { nsresult rv; - PRUint32 count = 0; - if (mChannels) { - rv = mChannels->Count(&count); - if (NS_FAILED(rv)) return rv; - } - if (count > 0) { - *result = PR_FALSE; + if (mForegroundCount > 0) { + *result = PR_TRUE; return NS_OK; } + // else check whether any of our sub-groups are pending PRUint32 i; - count = 0; + PRUint32 count = 0; if (mSubGroups) { rv = mSubGroups->Count(&count); if (NS_FAILED(rv)) return rv; @@ -266,18 +140,18 @@ nsLoadGroup::IsPending(PRBool *result) for (i = 0; i < count; i++) { nsIRequest* req = NS_STATIC_CAST(nsIRequest*, mSubGroups->ElementAt(i)); if (req == nsnull) - return NS_ERROR_FAILURE; + continue; PRBool pending; rv = req->IsPending(&pending); NS_RELEASE(req); if (NS_FAILED(rv)) return rv; if (pending) { - *result = PR_FALSE; + *result = PR_TRUE; return NS_OK; } } - *result = PR_TRUE; + *result = PR_FALSE; return NS_OK; } @@ -320,6 +194,36 @@ nsLoadGroup::Resume() //////////////////////////////////////////////////////////////////////////////// // nsILoadGroup methods: +NS_IMETHODIMP +nsLoadGroup::Init(nsIStreamObserver *observer, nsILoadGroup *parent) +{ + nsresult rv; + + NS_IF_RELEASE(mObserver); + if (observer) { + nsCOMPtr eventQueue; + NS_WITH_SERVICE(nsIEventQueueService, eventQService, kEventQueueService, &rv); + if (NS_FAILED(rv)) return rv; + rv = eventQService->GetThreadEventQueue(PR_CurrentThread(), + getter_AddRefs(eventQueue)); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr asyncObserver; + rv = NS_NewAsyncStreamObserver(getter_AddRefs(asyncObserver), + eventQueue, observer); + if (NS_FAILED(rv)) return rv; + + mObserver = asyncObserver; + NS_ADDREF(mObserver); + } + + if (parent) { + rv = parent->AddSubGroup(this); + if (NS_FAILED(rv)) return rv; + } + return NS_OK; +} + NS_IMETHODIMP nsLoadGroup::GetDefaultLoadAttributes(PRUint32 *aDefaultLoadAttributes) { @@ -335,49 +239,61 @@ nsLoadGroup::SetDefaultLoadAttributes(PRUint32 aDefaultLoadAttributes) } NS_IMETHODIMP -nsLoadGroup::AsyncRead(nsIChannel *channel, - PRUint32 startPosition, - PRInt32 readCount, - nsISupports *ctxt, - nsIStreamListener *listener) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsLoadGroup::AsyncWrite(nsIChannel *channel, - nsIInputStream *fromStream, - PRUint32 startPosition, - PRInt32 writeCount, - nsISupports *ctxt, - nsIStreamObserver *observer) -{ - return NS_OK; -} - -#if 0 -NS_IMETHODIMP -nsLoadGroup::AddChannel(nsIChannel *channel) +nsLoadGroup::AddChannel(nsIChannel *channel, nsISupports* ctxt) { nsresult rv; if (mChannels == nsnull) { rv = NS_NewISupportsArray(&mChannels); if (NS_FAILED(rv)) return rv; } - rv = mChannels->AppendElement(channel); + rv = mChannels->AppendElement(channel) ? NS_OK : NS_ERROR_FAILURE; // XXX this method incorrectly returns a bool if (NS_FAILED(rv)) return rv; rv = channel->SetLoadAttributes(mDefaultLoadAttributes); - return NS_OK; + if (NS_FAILED(rv)) return rv; + + nsLoadFlags flags; + rv = channel->GetLoadAttributes(&flags); + if (NS_SUCCEEDED(rv)) { + if (!(flags & nsIChannel::LOAD_BACKGROUND)) { + mForegroundCount++; + if (mForegroundCount == 1 && mObserver) { + rv = mObserver->OnStartRequest(channel, ctxt); + // return with rv, below + } + } + } + + return rv; } NS_IMETHODIMP -nsLoadGroup::RemoveChannel(nsIChannel *channel) +nsLoadGroup::RemoveChannel(nsIChannel *channel, nsISupports* ctxt, + nsresult status, const PRUnichar *errorMsg) { + nsresult rv; NS_ASSERTION(mChannels, "Forgot to call AddChannel"); - return mChannels->RemoveElement(channel); + + nsLoadFlags flags; + rv = channel->GetLoadAttributes(&flags); + if (NS_SUCCEEDED(rv)) { + if (!(flags & nsIChannel::LOAD_BACKGROUND)) { + NS_ASSERTION(mForegroundCount > 0, "mForegroundCount messed up"); + --mForegroundCount; + if (mObserver) { + PRBool pending; + rv = IsPending(&pending); + if (NS_SUCCEEDED(rv) && !pending) { + rv = mObserver->OnStopRequest(channel, ctxt, status, errorMsg); + // return with rv, below + } + } + } + } + + nsresult rv2 = mChannels->RemoveElement(channel) ? NS_OK : NS_ERROR_FAILURE; // XXX this method incorrectly returns a bool + return rv || rv2; } -#endif NS_IMETHODIMP nsLoadGroup::GetChannels(nsISimpleEnumerator * *aChannels) @@ -390,35 +306,6 @@ nsLoadGroup::GetChannels(nsISimpleEnumerator * *aChannels) return NS_NewArrayEnumerator(aChannels, mChannels); } -NS_IMETHODIMP -nsLoadGroup::AddObserver(nsIStreamObserver *observer) -{ - nsresult rv; - if (mObservers == nsnull) { - rv = NS_NewISupportsArray(&mObservers); - if (NS_FAILED(rv)) return rv; - } - return mObservers->AppendElement(observer); -} - -NS_IMETHODIMP -nsLoadGroup::RemoveObserver(nsIStreamObserver *observer) -{ - NS_ASSERTION(mObservers, "Forgot to call AddObserver"); - return mObservers->RemoveElement(observer); -} - -NS_IMETHODIMP -nsLoadGroup::GetObservers(nsISimpleEnumerator * *aObservers) -{ - nsresult rv; - if (mObservers == nsnull) { - rv = NS_NewISupportsArray(&mObservers); - if (NS_FAILED(rv)) return rv; - } - return NS_NewArrayEnumerator(aObservers, mObservers); -} - NS_IMETHODIMP nsLoadGroup::AddSubGroup(nsILoadGroup *group) { @@ -435,7 +322,7 @@ nsLoadGroup::AddSubGroup(nsILoadGroup *group) rv = NS_NewISupportsArray(&mSubGroups); if (NS_FAILED(rv)) return rv; } - return mSubGroups->AppendElement(group); + return mSubGroups->AppendElement(group) ? NS_OK : NS_ERROR_FAILURE; // XXX this method incorrectly returns a bool } NS_IMETHODIMP @@ -452,7 +339,7 @@ nsLoadGroup::RemoveSubGroup(nsILoadGroup *group) subGroup->mParent = nsnull; // weak ref -- don't Release NS_RELEASE(subGroup); - return mSubGroups->RemoveElement(group); + return mSubGroups->RemoveElement(group) ? NS_OK : NS_ERROR_FAILURE; // XXX this method incorrectly returns a bool } NS_IMETHODIMP diff --git a/mozilla/netwerk/base/src/nsLoadGroup.h b/mozilla/netwerk/base/src/nsLoadGroup.h index c0a502fde4a..460cf6ca0f9 100644 --- a/mozilla/netwerk/base/src/nsLoadGroup.h +++ b/mozilla/netwerk/base/src/nsLoadGroup.h @@ -24,6 +24,7 @@ #include "nsAgg.h" class nsISupportsArray; +class nsLoadGroupEntry; class nsLoadGroup : public nsILoadGroup { @@ -48,37 +49,23 @@ public: //////////////////////////////////////////////////////////////////////////// // nsILoadGroup methods: + /* void Init (in nsIStreamObserver observer, in nsILoadGroup parent); */ + NS_IMETHOD Init(nsIStreamObserver *observer, nsILoadGroup *parent); + /* attribute unsigned long DefaultLoadAttributes; */ NS_IMETHOD GetDefaultLoadAttributes(PRUint32 *aDefaultLoadAttributes); NS_IMETHOD SetDefaultLoadAttributes(PRUint32 aDefaultLoadAttributes); - /* void AsyncRead (in nsIChannel channel, in unsigned long startPosition, in long readCount, in nsISupports ctxt, in nsIStreamListener listener); */ - NS_IMETHOD AsyncRead(nsIChannel *channel, - PRUint32 startPosition, - PRInt32 readCount, - nsISupports *ctxt, - nsIStreamListener *listener); + /* void AddChannel (in nsIChannel channel, in nsISupports ctxt); */ + NS_IMETHOD AddChannel(nsIChannel *channel, nsISupports* ctxt); - /* void AsyncWrite (in nsIChannel channel, in nsIInputStream fromStream, in unsigned long startPosition, in long writeCount, in nsISupports ctxt, in nsIStreamObserver observer); */ - NS_IMETHOD AsyncWrite(nsIChannel *channel, - nsIInputStream *fromStream, - PRUint32 startPosition, - PRInt32 writeCount, - nsISupports *ctxt, - nsIStreamObserver *observer); + /* void RemoveChannel (in nsIChannel channel, in nsISupports ctxt); */ + NS_IMETHOD RemoveChannel(nsIChannel *channel, nsISupports* ctxt, + nsresult status, const PRUnichar *errorMsg); /* readonly attribute nsISimpleEnumerator Channels; */ NS_IMETHOD GetChannels(nsISimpleEnumerator * *aChannels); - /* void AddObserver (in nsIStreamObserver observer); */ - NS_IMETHOD AddObserver(nsIStreamObserver *observer); - - /* void RemoveObserver (in nsIStreamObserver observer); */ - NS_IMETHOD RemoveObserver(nsIStreamObserver *observer); - - /* readonly attribute nsISimpleEnumerator Observers; */ - NS_IMETHOD GetObservers(nsISimpleEnumerator * *aObservers); - /* void AddSubGroup (in nsILoadGroup group); */ NS_IMETHOD AddSubGroup(nsILoadGroup *group); @@ -97,7 +84,7 @@ public: static NS_METHOD Create(nsISupports *aOuter, REFNSIID aIID, void **aResult); - friend class nsLoadGroupEntry; + friend nsLoadGroupEntry; protected: typedef nsresult (*PropagateDownFun)(nsIRequest* request); @@ -106,10 +93,10 @@ protected: protected: PRUint32 mDefaultLoadAttributes; nsISupportsArray* mChannels; - nsISupportsArray* mObservers; nsISupportsArray* mSubGroups; + nsIStreamObserver* mObserver; nsLoadGroup* mParent; // weak ref - nsIStreamObserver* mObserver; // might be an nsIStreamListener too + PRUint32 mForegroundCount; }; #endif // nsLoadGroup_h__ diff --git a/mozilla/netwerk/base/src/nsSocketTransport.cpp b/mozilla/netwerk/base/src/nsSocketTransport.cpp index 236a9e3c5df..63d6296a604 100644 --- a/mozilla/netwerk/base/src/nsSocketTransport.cpp +++ b/mozilla/netwerk/base/src/nsSocketTransport.cpp @@ -30,6 +30,7 @@ #include "nsSocketTransportService.h" #include "nsIBufferOutputStream.h" #include "nsAutoLock.h" +#include "nsILoadGroup.h" static NS_DEFINE_CID(kEventQueueService, NS_EVENTQUEUESERVICE_CID); @@ -1211,7 +1212,8 @@ nsSocketTransport::GetURI(nsIURI * *aURL) NS_IMETHODIMP nsSocketTransport::AsyncRead(PRUint32 startPosition, PRInt32 readCount, nsISupports* aContext, - nsIStreamListener* aListener) + nsIStreamListener* aListener, + nsILoadGroup* group) { // XXX deal with startPosition and readCount parameters nsresult rv = NS_OK; @@ -1266,6 +1268,8 @@ nsSocketTransport::AsyncRead(PRUint32 startPosition, PRInt32 readCount, mOperation = eSocketOperation_ReadWrite; SetReadType(eSocketRead_Async); + mLoadGroup = group; // might be null + rv = mService->AddToWorkQ(this); } @@ -1281,7 +1285,8 @@ NS_IMETHODIMP nsSocketTransport::AsyncWrite(nsIInputStream* aFromStream, PRUint32 startPosition, PRInt32 writeCount, nsISupports* aContext, - nsIStreamObserver* aObserver) + nsIStreamObserver* aObserver, + nsILoadGroup* group) { // XXX deal with startPosition and writeCount parameters nsresult rv = NS_OK; @@ -1326,6 +1331,8 @@ nsSocketTransport::AsyncWrite(nsIInputStream* aFromStream, mOperation = eSocketOperation_ReadWrite; SetWriteType(eSocketWrite_Async); + mLoadGroup = group; // might be null + rv = mService->AddToWorkQ(this); } @@ -1471,3 +1478,10 @@ nsSocketTransport::GetContentType(char * *aContentType) return NS_ERROR_FAILURE; // XXX doesn't make sense for transports } +NS_IMETHODIMP +nsSocketTransport::GetLoadGroup(nsILoadGroup * *aLoadGroup) +{ + *aLoadGroup = mLoadGroup; + NS_ADDREF(*aLoadGroup); + return NS_OK; +} diff --git a/mozilla/netwerk/base/src/nsSocketTransport.h b/mozilla/netwerk/base/src/nsSocketTransport.h index 22795df949e..665764596d8 100644 --- a/mozilla/netwerk/base/src/nsSocketTransport.h +++ b/mozilla/netwerk/base/src/nsSocketTransport.h @@ -120,14 +120,17 @@ public: NS_IMETHOD OpenOutputStream(PRUint32 startPosition, nsIOutputStream **_retval); NS_IMETHOD AsyncRead(PRUint32 startPosition, PRInt32 readCount, nsISupports *ctxt, - nsIStreamListener *listener); + nsIStreamListener *listener, + nsILoadGroup* group); NS_IMETHOD AsyncWrite(nsIInputStream *fromStream, PRUint32 startPosition, PRInt32 writeCount, nsISupports *ctxt, - nsIStreamObserver *observer); + nsIStreamObserver *observer, + nsILoadGroup* group); NS_IMETHOD GetLoadAttributes(PRUint32 *aLoadAttributes); NS_IMETHOD SetLoadAttributes(PRUint32 aLoadAttributes); NS_IMETHOD GetContentType(char * *aContentType); + NS_IMETHOD GetLoadGroup(nsILoadGroup * *aLoadGroup); // nsIBufferObserver methods: NS_IMETHOD OnFull (nsIBuffer* aBuffer); @@ -219,6 +222,7 @@ protected: nsSocketTransportService* mService; PRUint32 mLoadAttributes; + nsCOMPtr mLoadGroup; }; diff --git a/mozilla/netwerk/protocol/about/src/nsAboutBlank.cpp b/mozilla/netwerk/protocol/about/src/nsAboutBlank.cpp index 5881919cc80..b71a70ee1b1 100644 --- a/mozilla/netwerk/protocol/about/src/nsAboutBlank.cpp +++ b/mozilla/netwerk/protocol/about/src/nsAboutBlank.cpp @@ -37,6 +37,7 @@ nsAboutBlank::NewChannel(const char *verb, nsresult rv; nsIChannel* channel; NS_WITH_SERVICE(nsIIOService, serv, kIOServiceCID, &rv); + if (NS_FAILED(rv)) return rv; nsISupports* s; rv = NS_NewStringInputStream(&s, kBlankPage); diff --git a/mozilla/netwerk/protocol/file/src/nsFileChannel.cpp b/mozilla/netwerk/protocol/file/src/nsFileChannel.cpp index e74903f4e86..edaf5135297 100644 --- a/mozilla/netwerk/protocol/file/src/nsFileChannel.cpp +++ b/mozilla/netwerk/protocol/file/src/nsFileChannel.cpp @@ -90,7 +90,7 @@ nsFileChannel::Init(nsFileProtocolHandler* handler, mEventQueue = queue; NS_IF_ADDREF(mEventQueue); - + return NS_OK; } @@ -407,7 +407,8 @@ nsFileChannel::OpenOutputStream(PRUint32 startPosition, nsIOutputStream **result NS_IMETHODIMP nsFileChannel::AsyncRead(PRUint32 startPosition, PRInt32 readCount, nsISupports *ctxt, - nsIStreamListener *listener) + nsIStreamListener *listener, + nsILoadGroup* group) { nsAutoMonitor mon(mMonitor); @@ -446,6 +447,7 @@ nsFileChannel::AsyncRead(PRUint32 startPosition, PRInt32 readCount, NS_ASSERTION(mContext == nsnull, "context not released"); mContext = ctxt; NS_IF_ADDREF(mContext); + mLoadGroup = group; mState = START_READ; mSourceOffset = startPosition; @@ -461,7 +463,8 @@ NS_IMETHODIMP nsFileChannel::AsyncWrite(nsIInputStream *fromStream, PRUint32 startPosition, PRInt32 writeCount, nsISupports *ctxt, - nsIStreamObserver *observer) + nsIStreamObserver *observer, + nsILoadGroup* group) { nsAutoMonitor mon(mMonitor); @@ -524,6 +527,14 @@ nsFileChannel::GetContentType(char * *aContentType) } } +NS_IMETHODIMP +nsFileChannel::GetLoadGroup(nsILoadGroup * *aLoadGroup) +{ + *aLoadGroup = mLoadGroup; + NS_IF_ADDREF(*aLoadGroup); + return NS_OK; +} + //////////////////////////////////////////////////////////////////////////////// // nsIRunnable methods: //////////////////////////////////////////////////////////////////////////////// @@ -560,6 +571,8 @@ nsFileChannel::Process(void) NS_ASSERTION(mSourceOffset == 0, "implement seek"); if (mListener) { + if (mLoadGroup) + (void)mLoadGroup->AddChannel(this, mContext); mStatus = mListener->OnStartRequest(this, mContext); // always send the start notification if (NS_FAILED(mStatus)) goto error; } @@ -644,6 +657,11 @@ nsFileChannel::Process(void) if (mListener) { // XXX where do we get the error message? (void)mListener->OnStopRequest(this, mContext, mStatus, nsnull); + if (mLoadGroup) { + (void)mLoadGroup->RemoveChannel(this, mContext, mStatus, nsnull); + mLoadGroup = null_nsCOMPtr(); + } + NS_RELEASE(mListener); } NS_IF_RELEASE(mBufferOutputStream); diff --git a/mozilla/netwerk/protocol/file/src/nsFileChannel.h b/mozilla/netwerk/protocol/file/src/nsFileChannel.h index 845f4829c80..f857f66d6d4 100644 --- a/mozilla/netwerk/protocol/file/src/nsFileChannel.h +++ b/mozilla/netwerk/protocol/file/src/nsFileChannel.h @@ -25,6 +25,8 @@ #include "prlock.h" #include "nsIEventQueueService.h" #include "nsIBuffer.h" +#include "nsILoadGroup.h" +#include "nsCOMPtr.h" class nsIEventSinkGetter; class nsIStreamListener; @@ -69,11 +71,11 @@ public: /* nsIOutputStream OpenOutputStream (); */ NS_IMETHOD OpenOutputStream(PRUint32 startPosition, nsIOutputStream **_retval); - /* void AsyncRead (in unsigned long startPosition, in long readCount, in nsISupports ctxt, in nsIStreamListener listener); */ - NS_IMETHOD AsyncRead(PRUint32 startPosition, PRInt32 readCount, nsISupports *ctxt, nsIStreamListener *listener); + /* void AsyncRead (in unsigned long startPosition, in long readCount, in nsISupports ctxt, in nsIStreamListener listener, in nsILoadGroup group); */ + NS_IMETHOD AsyncRead(PRUint32 startPosition, PRInt32 readCount, nsISupports *ctxt, nsIStreamListener *listener, nsILoadGroup *group); - /* void AsyncWrite (in nsIInputStream fromStream, in unsigned long startPosition, in long writeCount, in nsISupports ctxt, in nsIStreamObserver observer); */ - NS_IMETHOD AsyncWrite(nsIInputStream *fromStream, PRUint32 startPosition, PRInt32 writeCount, nsISupports *ctxt, nsIStreamObserver *observer); + /* void AsyncWrite (in nsIInputStream fromStream, in unsigned long startPosition, in long writeCount, in nsISupports ctxt, in nsIStreamObserver observer, in nsILoadGroup group); */ + NS_IMETHOD AsyncWrite(nsIInputStream *fromStream, PRUint32 startPosition, PRInt32 writeCount, nsISupports *ctxt, nsIStreamObserver *observer, nsILoadGroup *group); /* attribute boolean LoadQuiet; */ NS_IMETHOD GetLoadAttributes(PRUint32 *aLoadAttributes); @@ -82,6 +84,8 @@ public: /* readonly attribute string ContentType; */ NS_IMETHOD GetContentType(char * *aContentType); + NS_IMETHOD GetLoadGroup(nsILoadGroup * *aLoadGroup); + //////////////////////////////////////////////////////////////////////////// // from nsIFileChannel: @@ -199,6 +203,7 @@ protected: PRMonitor* mMonitor; PRUint32 mLoadAttributes; + nsCOMPtr mLoadGroup; }; #define NS_FILE_TRANSPORT_SEGMENT_SIZE (4*1024) diff --git a/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.cpp b/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.cpp index 0e06e2668f0..d4edd053d68 100644 --- a/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.cpp +++ b/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.cpp @@ -26,6 +26,7 @@ #include "nsIEventQueueService.h" #include "nsIProgressEventSink.h" #include "nsIEventSinkGetter.h" +#include "nsILoadGroup.h" #include "prprf.h" // PR_sscanf @@ -176,7 +177,8 @@ nsFTPChannel::OpenOutputStream(PRUint32 startPosition, nsIOutputStream **_retval NS_IMETHODIMP nsFTPChannel::AsyncRead(PRUint32 startPosition, PRInt32 readCount, nsISupports *ctxt, - nsIStreamListener *listener) + nsIStreamListener *listener, + nsILoadGroup* group) { return NS_ERROR_NOT_IMPLEMENTED; } @@ -186,7 +188,8 @@ nsFTPChannel::AsyncWrite(nsIInputStream *fromStream, PRUint32 startPosition, PRInt32 writeCount, nsISupports *ctxt, - nsIStreamObserver *observer) + nsIStreamObserver *observer, + nsILoadGroup* group) { return NS_ERROR_NOT_IMPLEMENTED; } @@ -213,6 +216,14 @@ nsFTPChannel::GetContentType(char* *contentType) { return NS_ERROR_NOT_IMPLEMENTED; } +NS_IMETHODIMP +nsFTPChannel::GetLoadGroup(nsILoadGroup * *aLoadGroup) +{ + *aLoadGroup = mLoadGroup; + NS_ADDREF(*aLoadGroup); + return NS_OK; +} + //////////////////////////////////////////////////////////////////////////////// // nsIFTPChannel methods: diff --git a/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.h b/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.h index 70bff5291f9..e06f76122e0 100644 --- a/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.h +++ b/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.h @@ -46,17 +46,21 @@ public: NS_IMETHOD GetURI(nsIURI * *aURL); NS_IMETHOD OpenInputStream(PRUint32 startPosition, PRInt32 readCount, nsIInputStream **_retval); NS_IMETHOD OpenOutputStream(PRUint32 startPosition, nsIOutputStream **_retval); - NS_IMETHOD AsyncRead(PRUint32 startPosition, PRInt32 readCount, + NS_IMETHOD AsyncRead(PRUint32 startPosition, + PRInt32 readCount, nsISupports *ctxt, - nsIStreamListener *listener); + nsIStreamListener *listener, + nsILoadGroup *group); NS_IMETHOD AsyncWrite(nsIInputStream *fromStream, PRUint32 startPosition, PRInt32 writeCount, nsISupports *ctxt, - nsIStreamObserver *observer); + nsIStreamObserver *observer, + nsILoadGroup *group); NS_IMETHOD GetLoadAttributes(PRUint32 *aLoadAttributes); NS_IMETHOD SetLoadAttributes(PRUint32 aLoadAttributes); NS_IMETHOD GetContentType(char * *aContentType); + NS_IMETHOD GetLoadGroup(nsILoadGroup * *aLoadGroup); // nsIFTPChannel methods: NS_IMETHOD Get(void); @@ -94,6 +98,7 @@ protected: PRBool mConnected; nsIStreamListener* mListener; PRUint32 mLoadAttributes; + nsILoadGroup* mLoadGroup; }; #endif /* nsFTPChannel_h___ */ diff --git a/mozilla/netwerk/protocol/http/src/nsHTTPChannel.cpp b/mozilla/netwerk/protocol/http/src/nsHTTPChannel.cpp index 111304e3423..f9feaa64355 100644 --- a/mozilla/netwerk/protocol/http/src/nsHTTPChannel.cpp +++ b/mozilla/netwerk/protocol/http/src/nsHTTPChannel.cpp @@ -168,7 +168,8 @@ nsHTTPChannel::OpenOutputStream(PRUint32 startPosition, nsIOutputStream **_retva NS_IMETHODIMP nsHTTPChannel::AsyncRead(PRUint32 startPosition, PRInt32 readCount, nsISupports *aContext, - nsIStreamListener *listener) + nsIStreamListener *listener, + nsILoadGroup* group) { nsresult rv = NS_OK; @@ -186,6 +187,7 @@ nsHTTPChannel::AsyncRead(PRUint32 startPosition, PRInt32 readCount, NS_ADDREF(m_pResponseDataListener); mResponseContext = aContext; + mLoadGroup = group; rv = Open(); } @@ -198,7 +200,8 @@ nsHTTPChannel::AsyncWrite(nsIInputStream *fromStream, PRUint32 startPosition, PRInt32 writeCount, nsISupports *ctxt, - nsIStreamObserver *observer) + nsIStreamObserver *observer, + nsILoadGroup* group) { return NS_ERROR_NOT_IMPLEMENTED; } @@ -272,6 +275,14 @@ nsHTTPChannel::GetContentType(char * *aContentType) return rv; } +NS_IMETHODIMP +nsHTTPChannel::GetLoadGroup(nsILoadGroup * *aLoadGroup) +{ + *aLoadGroup = mLoadGroup; + NS_ADDREF(*aLoadGroup); + return NS_OK; +} + //////////////////////////////////////////////////////////////////////////////// // nsIHTTPChannel methods: @@ -528,7 +539,7 @@ nsHTTPChannel::Open(void) // Write the request to the server... rv = stream->GetLength(&count); - rv = channel->AsyncWrite(stream, 0, count, this , m_pRequest); + rv = channel->AsyncWrite(stream, 0, count, this , m_pRequest, nsnull); if (NS_FAILED(rv)) return rv; m_State = HS_WAITING_FOR_RESPONSE; diff --git a/mozilla/netwerk/protocol/http/src/nsHTTPChannel.h b/mozilla/netwerk/protocol/http/src/nsHTTPChannel.h index 809d40e100a..7d094904505 100644 --- a/mozilla/netwerk/protocol/http/src/nsHTTPChannel.h +++ b/mozilla/netwerk/protocol/http/src/nsHTTPChannel.h @@ -26,6 +26,7 @@ #include "nsHTTPHandler.h" #include "nsIEventQueue.h" #include "nsIHttpEventSink.h" +#include "nsILoadGroup.h" class nsHTTPRequest; class nsHTTPResponse; @@ -66,15 +67,18 @@ public: NS_IMETHOD OpenOutputStream(PRUint32 startPosition, nsIOutputStream **_retval); NS_IMETHOD AsyncRead(PRUint32 startPosition, PRInt32 readCount, nsISupports *ctxt, - nsIStreamListener *listener); + nsIStreamListener *listener, + nsILoadGroup* group); NS_IMETHOD AsyncWrite(nsIInputStream *fromStream, PRUint32 startPosition, PRInt32 writeCount, nsISupports *ctxt, - nsIStreamObserver *observer); + nsIStreamObserver *observer, + nsILoadGroup* group); NS_IMETHOD GetLoadAttributes(PRUint32 *aLoadAttributes); NS_IMETHOD SetLoadAttributes(PRUint32 aLoadAttributes); NS_IMETHOD GetContentType(char * *aContentType); + NS_IMETHOD GetLoadGroup(nsILoadGroup * *aLoadGroup); // nsIHTTPChannel methods: NS_IMETHOD GetRequestHeader(const char *headerName, char **_retval); @@ -91,6 +95,8 @@ public: nsresult Open(); nsresult SetResponse(nsHTTPResponse* i_pResp); nsresult GetResponseContext(nsISupports** aContext); + + nsILoadGroup* GetLoadGroup() { return mLoadGroup; } protected: nsCOMPtr m_URI; @@ -104,6 +110,7 @@ protected: PRUint32 mLoadAttributes; nsCOMPtr mResponseContext; + nsCOMPtr mLoadGroup; }; #endif /* _nsHTTPChannel_h_ */ diff --git a/mozilla/netwerk/protocol/http/src/nsHTTPRequest.cpp b/mozilla/netwerk/protocol/http/src/nsHTTPRequest.cpp index 0ce64b1cd16..01a99dffbdf 100644 --- a/mozilla/netwerk/protocol/http/src/nsHTTPRequest.cpp +++ b/mozilla/netwerk/protocol/http/src/nsHTTPRequest.cpp @@ -959,6 +959,12 @@ nsHTTPRequest::OnStartRequest(nsIChannel* channel, nsISupports* i_pContext) ("nsHTTPRequest [this=%x]. Starting to write request to server.\n", this)); + if (m_pConnection->GetLoadGroup()) { + nsCOMPtr context; + m_pConnection->GetResponseContext(getter_AddRefs(context)); + m_pConnection->GetLoadGroup()->AddChannel(m_pConnection, context); + } + return NS_OK; } @@ -983,7 +989,8 @@ nsHTTPRequest::OnStopRequest(nsIChannel* channel, nsISupports* i_pContext, NS_ADDREF(pListener); rv = m_pTransport->AsyncRead(0, -1, i_pContext, - pListener); + pListener, + nsnull); NS_RELEASE(pListener); } else { rv = NS_ERROR_OUT_OF_MEMORY; diff --git a/mozilla/netwerk/protocol/http/src/nsHTTPResponseListener.cpp b/mozilla/netwerk/protocol/http/src/nsHTTPResponseListener.cpp index 8542038785f..644cd93fa40 100644 --- a/mozilla/netwerk/protocol/http/src/nsHTTPResponseListener.cpp +++ b/mozilla/netwerk/protocol/http/src/nsHTTPResponseListener.cpp @@ -214,7 +214,10 @@ nsHTTPResponseListener::OnStopRequest(nsIChannel* channel, // Pass the notification out to the consumer... if (m_pConsumer) { rv = m_pConsumer->OnStopRequest(m_pConnection, m_ResponseContext, i_Status, i_pMsg); - } + } + + if (m_pConnection->GetLoadGroup()) + m_pConnection->GetLoadGroup()->RemoveChannel(m_pConnection, m_ResponseContext, i_Status, i_pMsg); // The Consumer is no longer needed... NS_IF_RELEASE(m_pConsumer); @@ -697,7 +700,7 @@ nsresult nsHTTPResponseListener::ProcessRedirection(PRInt32 aStatusCode) nsIChannel* channel; rv = serv->NewChannelFromURI("load", newURL, nsnull, &channel); if (NS_SUCCEEDED(rv)) { - rv = channel->AsyncRead(0, -1, m_ResponseContext, m_pConsumer); + rv = channel->AsyncRead(0, -1, m_ResponseContext, m_pConsumer, nsnull); NS_RELEASE(channel); } #endif diff --git a/mozilla/netwerk/protocol/http/src/nsHTTPResponseListener.h b/mozilla/netwerk/protocol/http/src/nsHTTPResponseListener.h index 53754adabe5..3c0a832e97f 100644 --- a/mozilla/netwerk/protocol/http/src/nsHTTPResponseListener.h +++ b/mozilla/netwerk/protocol/http/src/nsHTTPResponseListener.h @@ -26,7 +26,7 @@ class nsIBuffer; class nsHTTPResponse; -class nsIHTTPChannel; +class nsHTTPChannel; /* The nsHTTPResponseListener class is the response reader listener that @@ -85,7 +85,7 @@ protected: PRBool m_bHeadersDone; PRBool m_bFirstLineParsed; nsHTTPResponse* m_pResponse; - nsIHTTPChannel* m_pConnection; + nsHTTPChannel* m_pConnection; nsIStreamListener* m_pConsumer; PRUint32 m_ReadLength; // Already read diff --git a/mozilla/netwerk/test/TestFileInput.cpp b/mozilla/netwerk/test/TestFileInput.cpp index 1753606c6ac..285214f07a3 100644 --- a/mozilla/netwerk/test/TestFileInput.cpp +++ b/mozilla/netwerk/test/TestFileInput.cpp @@ -344,7 +344,7 @@ ParallelReadTest(char* dirName, nsIFileTransportService* fts) rv = fts->CreateTransport(spec, &trans); NS_ASSERTION(NS_SUCCEEDED(rv), "create failed"); - rv = trans->AsyncRead(0, -1, nsnull, listener); + rv = trans->AsyncRead(0, -1, nsnull, listener, nsnull); NS_ASSERTION(NS_SUCCEEDED(rv), "AsyncRead failed"); // the reader thread will hang on to these objects until it quits diff --git a/mozilla/netwerk/test/TestProtocols.cpp b/mozilla/netwerk/test/TestProtocols.cpp index 0465dbcdb75..addc592b1e4 100644 --- a/mozilla/netwerk/test/TestProtocols.cpp +++ b/mozilla/netwerk/test/TestProtocols.cpp @@ -421,7 +421,8 @@ nsresult StartLoadingURL(const char* aUrlString) rv = pChannel->AsyncRead(0, // staring position -1, // number of bytes to read info, // ISupports context - listener); // IStreamListener consumer + listener, // IStreamListener consumer + nsnull); // load group if (NS_SUCCEEDED(rv)) { gKeepRunning += 1; } diff --git a/mozilla/netwerk/test/TestSocketIO.cpp b/mozilla/netwerk/test/TestSocketIO.cpp index 37664b693fb..c6505eefd51 100644 --- a/mozilla/netwerk/test/TestSocketIO.cpp +++ b/mozilla/netwerk/test/TestSocketIO.cpp @@ -174,7 +174,7 @@ TestWriteObserver::OnStopRequest(nsIChannel* channel, nsISupports* context, printf("\n+++ TestWriteObserver::OnStopRequest (status = %x) +++\n", aStatus); if (NS_SUCCEEDED(aStatus)) { - mTransport->AsyncRead(0, -1, nsnull, new InputTestConsumer); + mTransport->AsyncRead(0, -1, nsnull, new InputTestConsumer, nsnull); } else { gKeepRunning = 0; } @@ -259,7 +259,7 @@ main(int argc, char* argv[]) TestWriteObserver* observer = new TestWriteObserver(transport); gElapsedTime = PR_Now(); - transport->AsyncWrite(stream, 0, bytesWritten, nsnull, observer); + transport->AsyncWrite(stream, 0, bytesWritten, nsnull, observer, nsnull); NS_RELEASE(transport); } diff --git a/mozilla/netwerk/test/TestSocketInput.cpp b/mozilla/netwerk/test/TestSocketInput.cpp index 3e98e15f6f8..5716fe054b3 100644 --- a/mozilla/netwerk/test/TestSocketInput.cpp +++ b/mozilla/netwerk/test/TestSocketInput.cpp @@ -158,7 +158,7 @@ main(int argc, char* argv[]) rv = sts->CreateTransport(hostName, port, &transport); if (NS_SUCCEEDED(rv)) { - transport->AsyncRead(0, -1, nsnull, new InputTestConsumer); + transport->AsyncRead(0, -1, nsnull, new InputTestConsumer, nsnull); NS_RELEASE(transport); } diff --git a/mozilla/netwerk/test/TestSocketTransport.cpp b/mozilla/netwerk/test/TestSocketTransport.cpp index d7166fa7b35..1576e0c60af 100644 --- a/mozilla/netwerk/test/TestSocketTransport.cpp +++ b/mozilla/netwerk/test/TestSocketTransport.cpp @@ -295,7 +295,7 @@ TestConnection::Run(void) // // Initiate an async read... // - rv = mTransport->AsyncRead(0, -1, mTransport, this); + rv = mTransport->AsyncRead(0, -1, mTransport, this, nsnull); if (NS_FAILED(rv)) { printf("Error: AsyncRead failed..."); @@ -358,7 +358,8 @@ nsresult TestConnection::WriteBuffer(void) // Write the buffer to the server... if (NS_SUCCEEDED(rv)) { - rv = mTransport->AsyncWrite(mStream, 0, bytesWritten, mTransport, /* mOutputObserver */ nsnull); + rv = mTransport->AsyncWrite(mStream, 0, bytesWritten, mTransport, + /* mOutputObserver */ nsnull, nsnull); } // Wait for the write to complete... if (NS_FAILED(rv)) { diff --git a/mozilla/netwerk/util/public/nsNeckoUtil.h b/mozilla/netwerk/util/public/nsNeckoUtil.h index ed12caa54fc..efbeb32eb86 100644 --- a/mozilla/netwerk/util/public/nsNeckoUtil.h +++ b/mozilla/netwerk/util/public/nsNeckoUtil.h @@ -38,10 +38,10 @@ extern nsresult NS_NewURI(nsIURI* *result, const nsString& spec, nsIURI* baseURI = nsnull); extern nsresult -NS_OpenURI(nsIChannel* *result, nsIURI* uri, nsILoadGroup* group); +NS_OpenURI(nsIChannel* *result, nsIURI* uri); extern nsresult -NS_OpenURI(nsIInputStream* *result, nsIURI* uri, nsILoadGroup* group); +NS_OpenURI(nsIInputStream* *result, nsIURI* uri); extern nsresult NS_OpenURI(nsIStreamListener* aConsumer, nsISupports* context, @@ -54,6 +54,7 @@ extern nsresult NS_MakeAbsoluteURI(const nsString& spec, nsIURI* baseURI, nsString& result); extern nsresult -NS_NewLoadGroup(nsILoadGroup* parent, nsISupports* outer, nsILoadGroup* *result); +NS_NewLoadGroup(nsISupports* outer, nsIStreamObserver* observer, + nsILoadGroup* parent, nsILoadGroup* *result); #endif // nsNeckoUtil_h__ diff --git a/mozilla/netwerk/util/src/nsNeckoUtil.cpp b/mozilla/netwerk/util/src/nsNeckoUtil.cpp index 70431f9fe71..5bfd1c31672 100644 --- a/mozilla/netwerk/util/src/nsNeckoUtil.cpp +++ b/mozilla/netwerk/util/src/nsNeckoUtil.cpp @@ -50,7 +50,7 @@ NS_NewURI(nsIURI* *result, const nsString& spec, nsIURI* baseURI) } nsresult -NS_OpenURI(nsIChannel* *result, nsIURI* uri, nsILoadGroup* group) +NS_OpenURI(nsIChannel* *result, nsIURI* uri) { nsresult rv; NS_WITH_SERVICE(nsIIOService, serv, kIOServiceCID, &rv); @@ -59,26 +59,18 @@ NS_OpenURI(nsIChannel* *result, nsIURI* uri, nsILoadGroup* group) nsIChannel* channel; rv = serv->NewChannelFromURI("load", uri, nsnull, &channel); if (NS_FAILED(rv)) return rv; -#if 0 - if (group) { - rv = group->AddChannel(channel); - if (NS_FAILED(rv)) { - NS_RELEASE(channel); - return rv; - } - } -#endif + *result = channel; return rv; } nsresult -NS_OpenURI(nsIInputStream* *result, nsIURI* uri, nsILoadGroup* group) +NS_OpenURI(nsIInputStream* *result, nsIURI* uri) { nsresult rv; nsIChannel* channel; - rv = NS_OpenURI(&channel, uri, group); + rv = NS_OpenURI(&channel, uri); if (NS_FAILED(rv)) return rv; nsIInputStream* inStr; @@ -97,10 +89,10 @@ NS_OpenURI(nsIStreamListener* aConsumer, nsISupports* context, nsresult rv; nsIChannel* channel; - rv = NS_OpenURI(&channel, uri, group); + rv = NS_OpenURI(&channel, uri); if (NS_FAILED(rv)) return rv; - rv = channel->AsyncRead(0, -1, context, aConsumer); + rv = channel->AsyncRead(0, -1, context, aConsumer, group); NS_RELEASE(channel); return rv; } @@ -132,13 +124,14 @@ NS_MakeAbsoluteURI(const nsString& spec, nsIURI* baseURI, nsString& result) } nsresult -NS_NewLoadGroup(nsILoadGroup* parent, nsISupports* outer, nsILoadGroup* *result) +NS_NewLoadGroup(nsISupports* outer, nsIStreamObserver* observer, + nsILoadGroup* parent, nsILoadGroup* *result) { nsresult rv; NS_WITH_SERVICE(nsIIOService, serv, kIOServiceCID, &rv); if (NS_FAILED(rv)) return rv; - return serv->NewLoadGroup(parent, outer, result); + return serv->NewLoadGroup(outer, observer, parent, result); } //////////////////////////////////////////////////////////////////////////////// diff --git a/mozilla/parser/htmlparser/src/nsExpatTokenizer.cpp b/mozilla/parser/htmlparser/src/nsExpatTokenizer.cpp index 72856db66ee..e42fecc45c6 100644 --- a/mozilla/parser/htmlparser/src/nsExpatTokenizer.cpp +++ b/mozilla/parser/htmlparser/src/nsExpatTokenizer.cpp @@ -522,7 +522,7 @@ nsExpatTokenizer::OpenInputStream(nsString2& aURLStr, nsIInputStream*& in) ret = NS_NewURI(&uri, aURLStr); if (NS_FAILED(ret)) return ret; - ret = NS_OpenURI(&in, uri, nsnull); // XXX need to pass the document's nsILoadGroup here! + ret = NS_OpenURI(&in, uri); NS_RELEASE(uri); #endif // NECKO return ret; diff --git a/mozilla/rdf/base/src/nsRDFXMLDataSource.cpp b/mozilla/rdf/base/src/nsRDFXMLDataSource.cpp index f06cb738edc..2513395f607 100644 --- a/mozilla/rdf/base/src/nsRDFXMLDataSource.cpp +++ b/mozilla/rdf/base/src/nsRDFXMLDataSource.cpp @@ -544,7 +544,7 @@ rdf_BlockingParse(nsIURI* aURL, nsIStreamListener* aConsumer) #ifdef NECKO nsCOMPtr channel; - rv = NS_OpenURI(getter_AddRefs(channel), aURL, nsnull); // XXX need the nsILoadGroup here! + rv = NS_OpenURI(getter_AddRefs(channel), aURL); if (NS_FAILED(rv)) { NS_ERROR("unable to open channel"); diff --git a/mozilla/rdf/chrome/src/nsChromeProtocolHandler.cpp b/mozilla/rdf/chrome/src/nsChromeProtocolHandler.cpp index 39a63133fb6..0df7c09c126 100644 --- a/mozilla/rdf/chrome/src/nsChromeProtocolHandler.cpp +++ b/mozilla/rdf/chrome/src/nsChromeProtocolHandler.cpp @@ -104,7 +104,6 @@ nsChromeProtocolHandler::MakeAbsolute(const char* aSpec, url->GetSpec(result); NS_RELEASE(url); return rv; - } NS_IMETHODIMP diff --git a/mozilla/rdf/content/src/nsXULDocument.cpp b/mozilla/rdf/content/src/nsXULDocument.cpp index fb85e8a0bf7..ec0fb141610 100644 --- a/mozilla/rdf/content/src/nsXULDocument.cpp +++ b/mozilla/rdf/content/src/nsXULDocument.cpp @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "License"); you may not use this file except in @@ -423,10 +423,14 @@ public: NS_IMETHOD GetContentType(nsString& aContentType) const; - NS_IMETHOD StartDocumentLoad(nsIURI *aUrl, + NS_IMETHOD StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand); + nsIStreamListener **aDocListener); NS_IMETHOD LoadFromStream(nsIInputStream& xulStream, nsIContentViewerContainer* aContainer, @@ -726,7 +730,12 @@ protected: nsresult PrepareToLoad( nsCOMPtr* created_parser, nsIContentViewerContainer* aContainer, const char* aCommand, - nsIURI* aOptionalURL = 0 ); +#ifdef NECKO + nsIChannel* aChannel +#else + nsIURI* aOptionalURL = 0 +#endif + ); protected: // pseudo constants @@ -757,7 +766,7 @@ protected: nsVoidArray mObservers; nsAutoString mDocumentTitle; nsCOMPtr mDocumentURL; // [OWNER] ??? compare with loader - nsCOMPtr mDocumentLoadGroup; // [OWNER] leads to loader + nsCOMPtr mDocumentLoadGroup; // [OWNER] leads to loader nsCOMPtr mRootResource; // [OWNER] nsCOMPtr mRootContent; // [OWNER] nsIDocument* mParentDocument; // [WEAK] @@ -1083,11 +1092,21 @@ nsresult XULDocumentImpl::PrepareToLoad( nsCOMPtr* created_parser, nsIContentViewerContainer* aContainer, const char* aCommand, - nsIURI* aOptionalURL ) +#ifdef NECKO + nsIChannel* aChannel +#else + nsIURI* aOptionalURL +#endif + ) { nsCOMPtr syntheticURL; +#ifdef NECKO + if ( aChannel ) + (void)aChannel->GetURI(getter_AddRefs(syntheticURL)); +#else if ( aOptionalURL ) syntheticURL = dont_QueryInterface(aOptionalURL); +#endif else { nsAutoString seedString; @@ -1114,7 +1133,7 @@ XULDocumentImpl::PrepareToLoad( nsCOMPtr* created_parser, mDocumentURL = syntheticURL; #ifdef NECKO - // XXX help + (void)aChannel->GetLoadGroup(getter_AddRefs(mDocumentLoadGroup)); #else syntheticURL->GetLoadGroup(getter_AddRefs(mDocumentLoadGroup)); #endif @@ -1250,17 +1269,31 @@ XULDocumentImpl::SetDocumentURLAndGroup(nsIURI* anURL) } NS_IMETHODIMP -XULDocumentImpl::StartDocumentLoad(nsIURI *aURL, +XULDocumentImpl::StartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aURL, +#endif nsIContentViewerContainer* aContainer, - nsIStreamListener **aDocListener, - const char* aCommand) + nsIStreamListener **aDocListener) { nsresult status; nsCOMPtr parser; +#ifdef NECKO + nsCOMPtr aURL; + status = aChannel->GetURI(getter_AddRefs(aURL)); + if (NS_FAILED(status)) return status; +#endif do { - if ( NS_FAILED(status = PrepareToLoad(&parser, aContainer, aCommand, aURL)) ) +#ifdef NECKO + status = PrepareToLoad(&parser, aContainer, aCommand, aChannel); +#else + status = PrepareToLoad(&parser, aContainer, aCommand, aURL); +#endif + if ( NS_FAILED(status) ) break; { @@ -1289,7 +1322,7 @@ XULDocumentImpl::LoadFromStream( nsIInputStream& xulStream, { nsresult status; nsCOMPtr parser; - if ( NS_SUCCEEDED(status = PrepareToLoad(&parser, aContainer, aCommand)) ) + if ( NS_SUCCEEDED(status = PrepareToLoad(&parser, aContainer, aCommand, nsnull)) ) parser->Parse(xulStream); return status; diff --git a/mozilla/uriloader/base/nsDocLoader.cpp b/mozilla/uriloader/base/nsDocLoader.cpp index 080dd579f41..925dac38cf3 100644 --- a/mozilla/uriloader/base/nsDocLoader.cpp +++ b/mozilla/uriloader/base/nsDocLoader.cpp @@ -38,6 +38,7 @@ #include "nsINetService.h" #include "nsIPostToServer.h" #else +#include "nsIIOService.h" #include "nsILoadGroup.h" #include "nsNeckoUtil.h" #include "nsIURL.h" @@ -89,6 +90,8 @@ static NS_DEFINE_IID(kRefreshURLIID, NS_IREFRESHURL_IID); static NS_DEFINE_IID(kILoadGroupIID, NS_ILOADGROUP_IID); static NS_DEFINE_IID(kINetServiceIID, NS_INETSERVICE_IID); static NS_DEFINE_IID(kNetServiceCID, NS_NETSERVICE_CID); +#else +static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); #endif // NECKO static NS_DEFINE_IID(kIContentViewerContainerIID, NS_ICONTENT_VIEWER_CONTAINER_IID); static NS_DEFINE_CID(kGenericFactoryCID, NS_GENERICFACTORY_CID); @@ -128,8 +131,6 @@ public: nsresult Bind(nsIURI* aURL, nsIStreamListener* aListener); - nsresult Stop(void); - #ifdef NECKO // nsIStreamObserver methods: NS_IMETHOD OnStartRequest(nsIChannel* channel, nsISupports *ctxt); @@ -144,6 +145,8 @@ public: NS_IMETHOD OnProgress(nsIChannel* channel, nsISupports *ctxt, PRUint32 aProgress, PRUint32 aProgressMax); NS_IMETHOD OnStatus(nsIChannel* channel, nsISupports *ctxt, const PRUnichar *aMsg); #else + nsresult Stop(void); + /* nsIStreamListener interface methods... */ NS_IMETHOD GetBindInfo(nsIURI* aURL, nsStreamBindingInfo* aInfo); NS_IMETHOD OnProgress(nsIURI* aURL, PRUint32 aProgress, PRUint32 aProgressMax); @@ -164,7 +167,9 @@ protected: protected: char* m_Command; +#ifndef NECKO nsIURI* m_Url; +#endif nsIContentViewerContainer* m_Container; nsISupports* m_ExtraInfo; nsIStreamObserver* m_Observer; @@ -183,7 +188,7 @@ protected: #ifndef NECKO class nsDocLoaderImpl : public nsIDocumentLoader, public nsILoadGroup #else -class nsDocLoaderImpl : public nsIDocumentLoader +class nsDocLoaderImpl : public nsIDocumentLoader, public nsIStreamObserver #endif // NECKO { public: @@ -267,8 +272,8 @@ public: nsIChannel* channel, #else nsIURI* aURL, -#endif const char* aContentType, +#endif nsIContentViewer* aViewer); void FireOnProgressURLLoad(nsIDocumentLoader* aLoadInitiator, @@ -309,12 +314,21 @@ public: #endif #ifdef NECKO + // nsIStreamObserver methods: (for observing the load group) + NS_IMETHOD OnStartRequest(nsIChannel *channel, nsISupports *ctxt); + NS_IMETHOD OnStopRequest(nsIChannel *channel, nsISupports *ctxt, + nsresult status, const PRUnichar *errorMsg); + nsILoadGroup* GetLoadGroup() { return mLoadGroup; } #endif - nsresult CreateContentViewer(nsIURI* aURL, + nsresult CreateContentViewer(const char *aCommand, +#ifdef NECKO + nsIChannel* channel, +#else + nsIURI* aURL, +#endif const char* aContentType, - const char *aCommand, nsIContentViewerContainer* aContainer, nsISupports* aExtraInfo, nsIStreamListener** aDocListener, @@ -327,11 +341,12 @@ protected: nsIDocumentLoader* aLoadInitiator, PRInt32 aStatus); - +#ifndef NECKO private: static PRBool StopBindInfoEnumerator (nsISupports* aElement, void* aData); static PRBool StopDocLoaderEnumerator(void* aElement, void* aData); static PRBool IsBusyEnumerator(void* aElement, void* aData); +#endif protected: @@ -345,27 +360,23 @@ protected: nsIChannel* mDocumentChannel; // [OWNER] ???compare with document #else nsIURI* mDocumentUrl; // [OWNER] ???compare with document -#endif - nsCOMPtr m_LoadingDocsList; - nsVoidArray mChildGroupList; - nsVoidArray mDocObservers; -#ifdef NECKO - nsLoadFlags m_LoadAttrib; -#else nsCOMPtr m_LoadAttrib; -#endif - nsCOMPtr mStreamObserver; // ??? unclear what to do here - nsIContentViewerContainer* mContainer; // [WEAK] it owns me! - - nsDocLoaderImpl* mParent; // [OWNER] but upside down ownership model - // needs to be fixed*** /* * The following counts are for the current document loader only. They * do not take into account URLs being loaded by child document loaders. */ PRInt32 mForegroundURLs; PRInt32 mTotalURLs; + nsCOMPtr m_LoadingDocsList; +#endif + + nsVoidArray mDocObservers; + nsCOMPtr mStreamObserver; // ??? unclear what to do here + nsIContentViewerContainer* mContainer; // [WEAK] it owns me! + + nsDocLoaderImpl* mParent; // [OWNER] but upside down ownership model + // needs to be fixed*** /* * This flag indicates that the loader is loading a document. It is set * from the call to LoadDocument(...) until the OnConnectionsComplete(...) @@ -393,17 +404,20 @@ nsDocLoaderImpl::nsDocLoaderImpl() mDocumentChannel = nsnull; #else mDocumentUrl = nsnull; + mForegroundURLs = 0; + mTotalURLs = 0; #endif mParent = nsnull; mContainer = nsnull; - mForegroundURLs = 0; - mTotalURLs = 0; mIsLoadingDocument = PR_FALSE; -#ifdef NECKO - m_LoadAttrib = nsIChannel::LOAD_NORMAL; -#endif + // XXX I wanted to pull this initialization code out of this constructor + // because it could fail... but the web shell uses this implementation + // as a service too. Since it's a service, it really can't have any + // initialization. We're sort of screwed here. + nsresult rv = Init(); + NS_ASSERTION(NS_SUCCEEDED(rv), "nsDocLoaderImpl::Init failed"); PR_LOG(gDocLoaderLog, PR_LOG_DEBUG, ("DocLoader:%p: created.\n", this)); @@ -414,12 +428,12 @@ nsDocLoaderImpl::Init() { nsresult rv; - rv = NS_NewISupportsArray(getter_AddRefs(m_LoadingDocsList)); - if (NS_FAILED(rv)) return rv; #ifdef NECKO - rv = NS_NewLoadGroup(nsnull, nsnull, getter_AddRefs(mLoadGroup)); + rv = NS_NewLoadGroup(nsnull, this, nsnull, getter_AddRefs(mLoadGroup)); if (NS_FAILED(rv)) return rv; #else + rv = NS_NewISupportsArray(getter_AddRefs(m_LoadingDocsList)); + if (NS_FAILED(rv)) return rv; rv = NS_NewLoadAttribs(getter_AddRefs(m_LoadAttrib)); if (NS_FAILED(rv)) return rv; #endif @@ -446,8 +460,9 @@ nsDocLoaderImpl::~nsDocLoaderImpl() PR_LOG(gDocLoaderLog, PR_LOG_DEBUG, ("DocLoader:%p: deleted.\n", this)); - +#ifndef NECKO NS_PRECONDITION((0 == mChildGroupList.Count()), "Document loader has children..."); +#endif } /* @@ -473,6 +488,12 @@ nsDocLoaderImpl::QueryInterface(REFNSIID aIID, void** aInstancePtr) NS_ADDREF_THIS(); return NS_OK; } +#else + if (aIID.Equals(kIStreamObserverIID)) { + *aInstancePtr = (void*)(nsIStreamObserver*)this; + NS_ADDREF_THIS(); + return NS_OK; + } #endif // NECKO return NS_NOINTERFACE; } @@ -495,8 +516,6 @@ nsDocLoaderImpl::CreateDocumentLoader(nsIDocumentLoader** anInstance) rv = NS_ERROR_OUT_OF_MEMORY; goto done; } - rv = newLoader->Init(); - if (NS_FAILED(rv)) return rv; rv = newLoader->QueryInterface(kIDocumentLoaderIID, (void**)anInstance); if (NS_SUCCEEDED(rv)) { @@ -513,9 +532,13 @@ nsDocLoaderImpl::CreateDocumentLoader(nsIDocumentLoader** anInstance) } nsresult -nsDocLoaderImpl::CreateContentViewer(nsIURI* aURL, +nsDocLoaderImpl::CreateContentViewer(const char *aCommand, +#ifdef NECKO + nsIChannel* channel, +#else + nsIURI* aURL, +#endif const char* aContentType, - const char *aCommand, nsIContentViewerContainer* aContainer, nsISupports* aExtraInfo, nsIStreamListener** aDocListenerResult, @@ -543,7 +566,14 @@ nsDocLoaderImpl::CreateContentViewer(nsIURI* aURL, } // Now create an instance of the content viewer - rv = factory->CreateInstance(aURL, aContentType, aCommand, aContainer, + rv = factory->CreateInstance(aCommand, +#ifdef NECKO + channel, +#else + aURL, +#endif + aContentType, + aContainer, aExtraInfo, aDocListenerResult, aDocViewerResult); NS_RELEASE(factory); @@ -590,18 +620,19 @@ nsDocLoaderImpl::LoadDocument(const nsString& aURLSpec, rv = NS_ERROR_OUT_OF_MEMORY; goto done; } + NS_ADDREF(loader); loader->Init(this, // DocLoader aCommand, // Command aContainer, // Viewer Container aExtraInfo, // Extra Info anObserver); // Observer +#ifndef NECKO /* The DocumentBindInfo reference is only held by the Array... */ m_LoadingDocsList->AppendElement((nsIStreamListener *)loader); /* Initialize the URL counters... */ - NS_PRECONDITION(((mTotalURLs == 0) && (mForegroundURLs == 0)), "DocuemntLoader is busy..."); -#ifndef NECKO + NS_PRECONDITION(((mTotalURLs == 0) && (mForegroundURLs == 0)), "DocumentLoader is busy..."); rv = m_LoadAttrib->GetLoadType(&loadType); if (NS_FAILED(rv)) { loadType = nsURLLoadNormal; @@ -609,8 +640,8 @@ nsDocLoaderImpl::LoadDocument(const nsString& aURLSpec, if (nsURLLoadBackground != loadType) { mForegroundURLs = 1; } -#endif mTotalURLs = 1; +#endif /* * Set the flag indicating that the document loader is in the process of * loading a document. This flag will remain set until the @@ -618,9 +649,7 @@ nsDocLoaderImpl::LoadDocument(const nsString& aURLSpec, */ mIsLoadingDocument = PR_TRUE; -#ifdef NECKO - m_LoadAttrib = aType; -#else +#ifndef NECKO m_LoadAttrib->SetReloadType(aType); // If we've got special loading instructions, mind them. if ((aType == nsURLReloadBypassProxy) || @@ -637,6 +666,7 @@ nsDocLoaderImpl::LoadDocument(const nsString& aURLSpec, rv = loader->Bind(aURLSpec, aPostData, nsnull); done: + NS_RELEASE(loader); return rv; } @@ -667,21 +697,24 @@ nsDocLoaderImpl::LoadSubDocument(const nsString& aURLSpec, rv = NS_ERROR_OUT_OF_MEMORY; return rv; } + NS_ADDREF(loader); loader->Init(this, // DocLoader nsnull, // Command nsnull, // Viewer Container aExtraInfo, // Extra Info mStreamObserver); // Observer +#ifndef NECKO /* The DocumentBindInfo reference is only held by the Array... */ m_LoadingDocsList->AppendElement((nsIStreamListener *)loader); /* Increment the URL counters... */ mForegroundURLs++; mTotalURLs++; - - rv = loader->Bind(aURLSpec, nsnull, nsnull); +#endif + rv = loader->Bind(aURLSpec, nsnull, nsnull); + NS_RELEASE(loader); return rv; } @@ -710,10 +743,10 @@ nsDocLoaderImpl::Stop(void) */ mChildGroupList.EnumerateForwards(nsDocLoaderImpl::StopDocLoaderEnumerator, nsnull); -#endif /* Reset the URL counters... */ mForegroundURLs = 0; mTotalURLs = 0; +#endif /* * Release the Stream Observer... @@ -728,6 +761,9 @@ nsDocLoaderImpl::Stop(void) NS_IMETHODIMP nsDocLoaderImpl::IsBusy(PRBool& aResult) { +#ifdef NECKO + return mLoadGroup->IsPending(&aResult); +#else aResult = PR_FALSE; /* If this document loader is busy? */ @@ -741,6 +777,7 @@ nsDocLoaderImpl::IsBusy(PRBool& aResult) } return NS_OK; +#endif } @@ -838,15 +875,13 @@ nsDocLoaderImpl::CreateURL(nsIURI** aInstancePtrResult, rv = NS_NewURI(&url, aURLSpec, aBaseURL); #else rv = NS_NewURL(&url, aURLSpec, aBaseURL, aContainer, this); -#endif if (NS_SUCCEEDED(rv)) { -#ifndef NECKO // set later after we open the channel nsCOMPtr loadAttributes; rv = url->GetLoadAttribs(getter_AddRefs(loadAttributes)); if (loadAttributes) loadAttributes->Clone(m_LoadAttrib); -#endif } +#endif *aInstancePtrResult = url; } @@ -884,17 +919,18 @@ nsDocLoaderImpl::OpenStream(nsIURI *aUrl, nsIStreamListener *aConsumer) rv = NS_ERROR_OUT_OF_MEMORY; goto done; } + NS_ADDREF(loader); loader->Init(this, // DocLoader nsnull, // Command mContainer, // Viewer Container nsnull, // Extra Info mStreamObserver); // Observer +#ifndef NECKO // done in the load group now /* The DocumentBindInfo reference is only held by the Array... */ m_LoadingDocsList->AppendElement(((nsISupports*)(nsIStreamObserver*)loader)); /* Update the URL counters... */ -#ifndef NECKO // do later after we call NS_OpenURI nsILoadAttribs* loadAttributes; rv = aUrl->GetLoadAttribs(&loadAttributes); @@ -909,11 +945,12 @@ nsDocLoaderImpl::OpenStream(nsIURI *aUrl, nsIStreamListener *aConsumer) if (nsURLLoadBackground != loadType) { mForegroundURLs += 1; } -#endif mTotalURLs += 1; +#endif rv = loader->Bind(aUrl, aConsumer); done: + NS_RELEASE(loader); return rv; } @@ -926,7 +963,7 @@ nsDocLoaderImpl::GetDefaultLoadAttributes(nsILoadAttribs*& aLoadAttribs) #endif { #ifdef NECKO - *aLoadAttribs = m_LoadAttrib; + return mLoadGroup->GetDefaultLoadAttributes(aLoadAttribs); #else aLoadAttribs = m_LoadAttrib; NS_IF_ADDREF(aLoadAttribs); @@ -944,10 +981,9 @@ nsDocLoaderImpl::SetDefaultLoadAttributes(nsILoadAttribs* aLoadAttribs) #endif { #ifdef NECKO - m_LoadAttrib = aLoadAttribs; + return mLoadGroup->SetDefaultLoadAttributes(aLoadAttribs); #else m_LoadAttrib->Clone(aLoadAttribs); -#endif /* * Now set the default attributes for all child DocumentLoaders... @@ -959,28 +995,57 @@ nsDocLoaderImpl::SetDefaultLoadAttributes(nsILoadAttribs* aLoadAttribs) nsILoadGroup* child = (nsILoadGroup*)mChildGroupList.ElementAt(index); child->SetDefaultLoadAttributes(m_LoadAttrib); } +#endif return NS_OK; } +#ifdef NECKO +NS_IMETHODIMP +nsDocLoaderImpl::OnStartRequest(nsIChannel *channel, nsISupports *ctxt) +{ + nsresult rv; + nsCOMPtr uri; + rv = channel->GetURI(getter_AddRefs(uri)); + if (NS_FAILED(rv)) return rv; +// FireOnStartDocumentLoad(this, uri, "load"); // XXX fix command + return NS_OK; +} + +NS_IMETHODIMP +nsDocLoaderImpl::OnStopRequest(nsIChannel *channel, nsISupports *ctxt, + nsresult status, const PRUnichar *errorMsg) +{ + FireOnEndDocumentLoad(this, status); + return NS_OK; +} +#endif NS_IMETHODIMP nsDocLoaderImpl::AddChildGroup(nsILoadGroup* aGroup) { +#ifdef NECKO + return mLoadGroup->AddSubGroup(aGroup); +#else mChildGroupList.AppendElement(aGroup); return NS_OK; +#endif } NS_IMETHODIMP nsDocLoaderImpl::RemoveChildGroup(nsILoadGroup* aGroup) { +#ifdef NECKO + return mLoadGroup->RemoveSubGroup(aGroup); +#else nsresult rv = NS_OK; if (PR_FALSE == mChildGroupList.RemoveElement(aGroup)) { rv = NS_ERROR_FAILURE; } return rv; +#endif } @@ -1057,8 +1122,8 @@ void nsDocLoaderImpl::FireOnStartURLLoad(nsIDocumentLoader* aLoadInitiator, nsIChannel* channel, #else nsIURI* aURL, -#endif const char* aContentType, +#endif nsIContentViewer* aViewer) { PRInt32 count = mDocObservers.Count(); @@ -1070,7 +1135,7 @@ void nsDocLoaderImpl::FireOnStartURLLoad(nsIDocumentLoader* aLoadInitiator, for (index = 0; index < count; index++) { nsIDocumentLoaderObserver* observer = (nsIDocumentLoaderObserver*)mDocObservers.ElementAt(index); #ifdef NECKO - observer->OnStartURLLoad(aLoadInitiator, channel, aContentType, aViewer); + observer->OnStartURLLoad(aLoadInitiator, channel, aViewer); #else observer->OnStartURLLoad(aLoadInitiator, aURL, aContentType, aViewer); #endif @@ -1081,7 +1146,7 @@ void nsDocLoaderImpl::FireOnStartURLLoad(nsIDocumentLoader* aLoadInitiator, */ if (nsnull != mParent) { #ifdef NECKO - mParent->FireOnStartURLLoad(aLoadInitiator, channel, aContentType, aViewer); + mParent->FireOnStartURLLoad(aLoadInitiator, channel, aViewer); #else mParent->FireOnStartURLLoad(aLoadInitiator, aURL, aContentType, aViewer); #endif @@ -1208,19 +1273,24 @@ void nsDocLoaderImpl::LoadURLComplete(nsIURI* aURL, nsISupports* aBindInfo, PRIn * If the entry is not found in the list, then it must have been cancelled * via Stop(...). So ignore just it... */ +#ifdef NECKO +#if defined(DEBUG) + nsCOMPtr uri; + nsresult rv = channel->GetURI(getter_AddRefs(uri)); + if (NS_SUCCEEDED(rv)) { + char* buffer; + rv = uri->GetSpec(&buffer); + if (NS_SUCCEEDED(rv)) { + PR_LOG(gDocLoaderLog, PR_LOG_DEBUG, + ("DocLoader:%p: LoadURLComplete(...) called for %s\n", + this, buffer)); + nsCRT::free(buffer); + } + } +#endif /* DEBUG */ +#else PRBool removed = m_LoadingDocsList->RemoveElement(aBindInfo); if (removed) { -#ifdef NECKO - PRUint32 loadAttribs; - nsresult rv; - rv = channel->GetLoadAttributes(&loadAttribs); - if (NS_SUCCEEDED(rv)) { - if (loadAttribs & nsIChannel::LOAD_QUIET) { - mForegroundURLs--; - isForegroundURL = PR_TRUE; - } - } -#else nsILoadAttribs* loadAttributes; nsURLLoadType loadType = nsURLLoadNormal; @@ -1236,36 +1306,21 @@ void nsDocLoaderImpl::LoadURLComplete(nsIURI* aURL, nsISupports* aBindInfo, PRIn mForegroundURLs--; isForegroundURL = PR_TRUE; } -#endif mTotalURLs -= 1; NS_ASSERTION(mTotalURLs >= mForegroundURLs, "Foreground URL count is wrong."); #if defined(DEBUG) -#ifdef NECKO - nsCOMPtr uri; - rv = channel->GetURI(getter_AddRefs(uri)); - if (NS_SUCCEEDED(rv)) { - char* buffer; - rv = uri->GetSpec(&buffer); - if (NS_SUCCEEDED(rv)) { - PR_LOG(gDocLoaderLog, PR_LOG_DEBUG, - ("DocLoader:%p: LoadURLComplete(...) called for %s; Foreground URLs: %d; Total URLs: %d\n", - this, buffer, mForegroundURLs, mTotalURLs)); - nsCRT::free(buffer); - } - } -#else const char* buffer; aURL->GetSpec(&buffer); PR_LOG(gDocLoaderLog, PR_LOG_DEBUG, ("DocLoader:%p: LoadURLComplete(...) called for %s; Foreground URLs: %d; Total URLs: %d\n", this, buffer, mForegroundURLs, mTotalURLs)); -#endif #endif /* DEBUG */ } +#endif /* * Fire the OnEndURLLoad notification to any observers... @@ -1328,6 +1383,7 @@ void nsDocLoaderImpl::SetDocumentUrl(nsIURI* aUrl) } #endif +#ifndef NECKO PRBool nsDocLoaderImpl::StopBindInfoEnumerator(nsISupports* aElement, void* aData) { nsresult rv; @@ -1372,6 +1428,7 @@ PRBool nsDocLoaderImpl::IsBusyEnumerator(void* aElement, void* aData) return !(*result); } +#endif /**************************************************************************** * nsDocumentBindInfo implementation... @@ -1382,7 +1439,9 @@ nsDocumentBindInfo::nsDocumentBindInfo() NS_INIT_REFCNT(); m_Command = nsnull; +#ifndef NECKO m_Url = nsnull; +#endif m_Container = nsnull; m_ExtraInfo = nsnull; m_Observer = nsnull; @@ -1398,8 +1457,9 @@ nsDocumentBindInfo::Init(nsDocLoaderImpl* aDocLoader, nsISupports* aExtraInfo, nsIStreamObserver* anObserver) { - +#ifndef NECKO m_Url = nsnull; +#endif m_NextStream = nsnull; m_Command = (nsnull != aCommand) ? PL_strdup(aCommand) : nsnull; @@ -1427,7 +1487,9 @@ nsDocumentBindInfo::~nsDocumentBindInfo() m_Command = nsnull; NS_RELEASE (m_DocLoader); +#ifndef NECKO NS_IF_RELEASE(m_Url); +#endif NS_IF_RELEASE(m_NextStream); NS_IF_RELEASE(m_Container); NS_IF_RELEASE(m_Observer); @@ -1519,10 +1581,7 @@ nsresult nsDocumentBindInfo::Bind(const nsString& aURLSpec, /* * Set the URL has the current "document" being loaded... */ -#ifdef NECKO -// m_DocLoader->SetDocumentChannel(channel); - //NS_ASSERTION(0, "help"); -#else +#ifndef NECKO m_DocLoader->SetDocumentUrl(url); #endif /* @@ -1544,8 +1603,10 @@ nsresult nsDocumentBindInfo::Bind(nsIURI* aURL, nsIStreamListener* aListener) { nsresult rv = NS_OK; +#ifndef NECKO m_Url = aURL; NS_ADDREF(m_Url); +#endif #if defined(DEBUG) #ifdef NECKO @@ -1586,13 +1647,21 @@ nsresult nsDocumentBindInfo::Bind(nsIURI* aURL, nsIStreamListener* aListener) if (m_DocLoader) { loadGroup = m_DocLoader->GetLoadGroup(); } - rv = NS_OpenURI(this, nsnull, m_Url, loadGroup); + + nsCOMPtr channel; + rv = NS_OpenURI(getter_AddRefs(channel), aURL); + if (NS_FAILED(rv)) return rv; + + m_DocLoader->SetDocumentChannel(channel); + + rv = channel->AsyncRead(0, -1, nsnull, this, loadGroup); + if (NS_FAILED(rv)) return rv; #endif // NECKO return rv; } - +#ifndef NECKO nsresult nsDocumentBindInfo::Stop(void) { nsresult rv; @@ -1638,7 +1707,6 @@ nsresult nsDocumentBindInfo::Stop(void) return rv; } -#ifndef NECKO NS_METHOD nsDocumentBindInfo::GetBindInfo(nsIURI* aURL, nsStreamBindingInfo* aInfo) { nsresult rv = NS_OK; @@ -1808,9 +1876,13 @@ nsDocumentBindInfo::OnStartRequest(nsIURI* aURL, const char *aContentType) * (and viewer) of the appropriate type... */ if (m_DocLoader) { - rv = m_DocLoader->CreateContentViewer(m_Url, + rv = m_DocLoader->CreateContentViewer(m_Command, +#ifdef NECKO + channel, +#else + m_Url, +#endif aContentType, - m_Command, m_Container, m_ExtraInfo, &m_NextStream, @@ -1867,7 +1939,7 @@ nsDocumentBindInfo::OnStartRequest(nsIURI* aURL, const char *aContentType) m_Container->GetContentViewer(&viewer); } #ifdef NECKO - m_DocLoader->FireOnStartURLLoad((nsIDocumentLoader *)m_DocLoader, channel, aContentType, viewer); + m_DocLoader->FireOnStartURLLoad((nsIDocumentLoader *)m_DocLoader, channel, viewer); #else m_DocLoader->FireOnStartURLLoad((nsIDocumentLoader *)m_DocLoader, m_Url, aContentType, viewer); #endif @@ -1885,7 +1957,9 @@ nsDocumentBindInfo::OnStartRequest(nsIURI* aURL, const char *aContentType) done: NS_IF_RELEASE(viewer); - +#ifdef NECKO + nsCRT::free(aContentType); +#endif return rv; } @@ -1985,15 +2059,14 @@ NS_METHOD nsDocumentBindInfo::OnStopRequest(nsIURI* aURL, nsresult aStatus, cons nsCRT::free(spec); #endif -#ifdef NECKO if (NS_FAILED(aStatus)) { +#ifdef NECKO char *url; if (NS_SUCCEEDED(rv)) aURL->GetSpec(&url); else url = nsCRT::strdup(""); #else - if (NS_FAILED(aStatus)) { const char *url; if (nsnull != aURL) aURL->GetSpec(&url); @@ -2001,7 +2074,7 @@ NS_METHOD nsDocumentBindInfo::OnStopRequest(nsIURI* aURL, nsresult aStatus, cons url = ""; #endif -#ifdef DEBUG_pnunn +#if DEBUG cerr << "nsDocumentBindInfo::OnStopRequest: Load of URL '" << url << "' failed. Error code: " << NS_ERROR_GET_CODE(aStatus) << "\n"; #endif @@ -2157,3 +2230,4 @@ nsresult NS_NewDocLoaderServiceFactory(nsIFactory** aResult) *aResult = factory; return rv; } + diff --git a/mozilla/webshell/embed/ActiveX/WebShellContainer.cpp b/mozilla/webshell/embed/ActiveX/WebShellContainer.cpp index c13523fd3c8..452c65335af 100644 --- a/mozilla/webshell/embed/ActiveX/WebShellContainer.cpp +++ b/mozilla/webshell/embed/ActiveX/WebShellContainer.cpp @@ -485,7 +485,14 @@ CWebShellContainer::OnStopRequest(nsIChannel* aChannel, nsISupports* aContext, n NS_IMETHODIMP -CWebShellContainer::OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURI, const char* aCommand) +CWebShellContainer::OnStartDocumentLoad(const char* aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI *aUrl, +#endif + nsIContentViewerContainer* aContainer, + nsIStreamListener **aDocListener) { return NS_OK; } diff --git a/mozilla/webshell/embed/ActiveX/WebShellContainer.h b/mozilla/webshell/embed/ActiveX/WebShellContainer.h index 4928c9cdf8a..2ed40504846 100644 --- a/mozilla/webshell/embed/ActiveX/WebShellContainer.h +++ b/mozilla/webshell/embed/ActiveX/WebShellContainer.h @@ -94,7 +94,9 @@ public: NS_IMETHOD OnStopRequest(nsIChannel* aChannel, nsISupports* aContext, nsresult aStatus, const PRUnichar* aMsg); // nsIDocumentLoaderObserver - NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aCommand); + NS_IMETHOD OnStartDocumentLoad(const char* aCommand, nsIChannel* aChannel, + nsIContentViewerContainer* aContainer, + nsIStreamListener **aDocListener); NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus, nsIDocumentLoaderObserver* aObserver); NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, const char* aContentType, nsIContentViewer* aViewer); NS_IMETHOD OnProgressURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRUint32 aProgress, PRUint32 aProgressMax); @@ -108,7 +110,9 @@ public: NS_IMETHOD OnStatus(nsIURI* aURL, const PRUnichar* aMsg); NS_IMETHOD OnStopRequest(nsIURI* aURL, nsresult aStatus, const PRUnichar* aMsg); - NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aCommand); + NS_IMETHOD OnStartDocumentLoad(const char* aCommand, nsIURI *aUrl, + nsIContentViewerContainer* aContainer, + nsIStreamListener **aDocListener); NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, nsIURI *aUrl, PRInt32 aStatus, nsIDocumentLoaderObserver* aObserver); NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aContentType, nsIContentViewer* aViewer); NS_IMETHOD OnProgressURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, PRUint32 aProgress, PRUint32 aProgressMax); diff --git a/mozilla/webshell/embed/gtk/lib/GtkMozillaContainer.cpp b/mozilla/webshell/embed/gtk/lib/GtkMozillaContainer.cpp index d885b07df02..a2b7de23bc5 100644 --- a/mozilla/webshell/embed/gtk/lib/GtkMozillaContainer.cpp +++ b/mozilla/webshell/embed/gtk/lib/GtkMozillaContainer.cpp @@ -20,8 +20,7 @@ #include "nsIWebShell.h" #include "nsIURL.h" #ifdef NECKO -#include "nsIIOService.h" -static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); +#include "nsNeckoUtil.h" #endif // NECKO #include "nsFileSpec.h" #include "nsIDocumentLoader.h" @@ -412,18 +411,7 @@ GtkMozillaContainer::StartStream(const char *base_url, const char *action, #ifndef NECKO rv = NS_NewURL(&url, url_str, NULL, mWebShell); #else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &rv); - if (NS_FAILED(rv)) return rv; - - nsIURI *uri = nsnull; - char *uriStr = url_str.ToNewCString(); - if (!uriStr) return NS_ERROR_OUT_OF_MEMORY; - rv = service->NewURI(uriStr, nsnull, &uri); - nsCRT::uriStr); - if (NS_FAILED(rv)) return rv; - - rv = uri->QueryInterface(nsIURI::GetIID(), (void**)&url); - NS_RELEASE(uri); + rv = NS_NewURI(&url, url_str, NULL); // XXX where should the container go? (mWebShell) #endif // NECKO if (NS_FAILED(rv)) { diff --git a/mozilla/webshell/public/nsIDocumentLoader.h b/mozilla/webshell/public/nsIDocumentLoader.h index cd3a943cdc2..a4be3fb64db 100644 --- a/mozilla/webshell/public/nsIDocumentLoader.h +++ b/mozilla/webshell/public/nsIDocumentLoader.h @@ -39,6 +39,7 @@ class nsIStreamListener; class nsIStreamObserver; class nsIDocumentLoaderObserver; class nsIDocument; +class nsIChannel; /* f43ba260-0737-11d2-beb9-00805f8a66dc */ #define NS_IDOCUMENTLOADERFACTORY_IID \ @@ -65,9 +66,13 @@ class nsIDocumentLoaderFactory : public nsISupports public: NS_DEFINE_STATIC_IID_ACCESSOR(NS_IDOCUMENTLOADERFACTORY_IID) - NS_IMETHOD CreateInstance(nsIURI* aURL, + NS_IMETHOD CreateInstance(const char *aCommand, +#ifdef NECKO + nsIChannel* aChannel, +#else + nsIURI* aURL, +#endif const char* aContentType, - const char *aCommand, nsIContentViewerContainer* aContainer, nsISupports* aExtraInfo, nsIStreamListener** aDocListenerResult, diff --git a/mozilla/webshell/public/nsIDocumentLoaderObserver.h b/mozilla/webshell/public/nsIDocumentLoaderObserver.h index 368778a06ac..ef8793349ae 100644 --- a/mozilla/webshell/public/nsIDocumentLoaderObserver.h +++ b/mozilla/webshell/public/nsIDocumentLoaderObserver.h @@ -69,7 +69,7 @@ public: * server has been established. */ #ifdef NECKO - NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, const char* aContentType, + NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer) = 0; #else NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aContentType, diff --git a/mozilla/webshell/src/nsDocLoader.cpp b/mozilla/webshell/src/nsDocLoader.cpp index 080dd579f41..925dac38cf3 100644 --- a/mozilla/webshell/src/nsDocLoader.cpp +++ b/mozilla/webshell/src/nsDocLoader.cpp @@ -38,6 +38,7 @@ #include "nsINetService.h" #include "nsIPostToServer.h" #else +#include "nsIIOService.h" #include "nsILoadGroup.h" #include "nsNeckoUtil.h" #include "nsIURL.h" @@ -89,6 +90,8 @@ static NS_DEFINE_IID(kRefreshURLIID, NS_IREFRESHURL_IID); static NS_DEFINE_IID(kILoadGroupIID, NS_ILOADGROUP_IID); static NS_DEFINE_IID(kINetServiceIID, NS_INETSERVICE_IID); static NS_DEFINE_IID(kNetServiceCID, NS_NETSERVICE_CID); +#else +static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); #endif // NECKO static NS_DEFINE_IID(kIContentViewerContainerIID, NS_ICONTENT_VIEWER_CONTAINER_IID); static NS_DEFINE_CID(kGenericFactoryCID, NS_GENERICFACTORY_CID); @@ -128,8 +131,6 @@ public: nsresult Bind(nsIURI* aURL, nsIStreamListener* aListener); - nsresult Stop(void); - #ifdef NECKO // nsIStreamObserver methods: NS_IMETHOD OnStartRequest(nsIChannel* channel, nsISupports *ctxt); @@ -144,6 +145,8 @@ public: NS_IMETHOD OnProgress(nsIChannel* channel, nsISupports *ctxt, PRUint32 aProgress, PRUint32 aProgressMax); NS_IMETHOD OnStatus(nsIChannel* channel, nsISupports *ctxt, const PRUnichar *aMsg); #else + nsresult Stop(void); + /* nsIStreamListener interface methods... */ NS_IMETHOD GetBindInfo(nsIURI* aURL, nsStreamBindingInfo* aInfo); NS_IMETHOD OnProgress(nsIURI* aURL, PRUint32 aProgress, PRUint32 aProgressMax); @@ -164,7 +167,9 @@ protected: protected: char* m_Command; +#ifndef NECKO nsIURI* m_Url; +#endif nsIContentViewerContainer* m_Container; nsISupports* m_ExtraInfo; nsIStreamObserver* m_Observer; @@ -183,7 +188,7 @@ protected: #ifndef NECKO class nsDocLoaderImpl : public nsIDocumentLoader, public nsILoadGroup #else -class nsDocLoaderImpl : public nsIDocumentLoader +class nsDocLoaderImpl : public nsIDocumentLoader, public nsIStreamObserver #endif // NECKO { public: @@ -267,8 +272,8 @@ public: nsIChannel* channel, #else nsIURI* aURL, -#endif const char* aContentType, +#endif nsIContentViewer* aViewer); void FireOnProgressURLLoad(nsIDocumentLoader* aLoadInitiator, @@ -309,12 +314,21 @@ public: #endif #ifdef NECKO + // nsIStreamObserver methods: (for observing the load group) + NS_IMETHOD OnStartRequest(nsIChannel *channel, nsISupports *ctxt); + NS_IMETHOD OnStopRequest(nsIChannel *channel, nsISupports *ctxt, + nsresult status, const PRUnichar *errorMsg); + nsILoadGroup* GetLoadGroup() { return mLoadGroup; } #endif - nsresult CreateContentViewer(nsIURI* aURL, + nsresult CreateContentViewer(const char *aCommand, +#ifdef NECKO + nsIChannel* channel, +#else + nsIURI* aURL, +#endif const char* aContentType, - const char *aCommand, nsIContentViewerContainer* aContainer, nsISupports* aExtraInfo, nsIStreamListener** aDocListener, @@ -327,11 +341,12 @@ protected: nsIDocumentLoader* aLoadInitiator, PRInt32 aStatus); - +#ifndef NECKO private: static PRBool StopBindInfoEnumerator (nsISupports* aElement, void* aData); static PRBool StopDocLoaderEnumerator(void* aElement, void* aData); static PRBool IsBusyEnumerator(void* aElement, void* aData); +#endif protected: @@ -345,27 +360,23 @@ protected: nsIChannel* mDocumentChannel; // [OWNER] ???compare with document #else nsIURI* mDocumentUrl; // [OWNER] ???compare with document -#endif - nsCOMPtr m_LoadingDocsList; - nsVoidArray mChildGroupList; - nsVoidArray mDocObservers; -#ifdef NECKO - nsLoadFlags m_LoadAttrib; -#else nsCOMPtr m_LoadAttrib; -#endif - nsCOMPtr mStreamObserver; // ??? unclear what to do here - nsIContentViewerContainer* mContainer; // [WEAK] it owns me! - - nsDocLoaderImpl* mParent; // [OWNER] but upside down ownership model - // needs to be fixed*** /* * The following counts are for the current document loader only. They * do not take into account URLs being loaded by child document loaders. */ PRInt32 mForegroundURLs; PRInt32 mTotalURLs; + nsCOMPtr m_LoadingDocsList; +#endif + + nsVoidArray mDocObservers; + nsCOMPtr mStreamObserver; // ??? unclear what to do here + nsIContentViewerContainer* mContainer; // [WEAK] it owns me! + + nsDocLoaderImpl* mParent; // [OWNER] but upside down ownership model + // needs to be fixed*** /* * This flag indicates that the loader is loading a document. It is set * from the call to LoadDocument(...) until the OnConnectionsComplete(...) @@ -393,17 +404,20 @@ nsDocLoaderImpl::nsDocLoaderImpl() mDocumentChannel = nsnull; #else mDocumentUrl = nsnull; + mForegroundURLs = 0; + mTotalURLs = 0; #endif mParent = nsnull; mContainer = nsnull; - mForegroundURLs = 0; - mTotalURLs = 0; mIsLoadingDocument = PR_FALSE; -#ifdef NECKO - m_LoadAttrib = nsIChannel::LOAD_NORMAL; -#endif + // XXX I wanted to pull this initialization code out of this constructor + // because it could fail... but the web shell uses this implementation + // as a service too. Since it's a service, it really can't have any + // initialization. We're sort of screwed here. + nsresult rv = Init(); + NS_ASSERTION(NS_SUCCEEDED(rv), "nsDocLoaderImpl::Init failed"); PR_LOG(gDocLoaderLog, PR_LOG_DEBUG, ("DocLoader:%p: created.\n", this)); @@ -414,12 +428,12 @@ nsDocLoaderImpl::Init() { nsresult rv; - rv = NS_NewISupportsArray(getter_AddRefs(m_LoadingDocsList)); - if (NS_FAILED(rv)) return rv; #ifdef NECKO - rv = NS_NewLoadGroup(nsnull, nsnull, getter_AddRefs(mLoadGroup)); + rv = NS_NewLoadGroup(nsnull, this, nsnull, getter_AddRefs(mLoadGroup)); if (NS_FAILED(rv)) return rv; #else + rv = NS_NewISupportsArray(getter_AddRefs(m_LoadingDocsList)); + if (NS_FAILED(rv)) return rv; rv = NS_NewLoadAttribs(getter_AddRefs(m_LoadAttrib)); if (NS_FAILED(rv)) return rv; #endif @@ -446,8 +460,9 @@ nsDocLoaderImpl::~nsDocLoaderImpl() PR_LOG(gDocLoaderLog, PR_LOG_DEBUG, ("DocLoader:%p: deleted.\n", this)); - +#ifndef NECKO NS_PRECONDITION((0 == mChildGroupList.Count()), "Document loader has children..."); +#endif } /* @@ -473,6 +488,12 @@ nsDocLoaderImpl::QueryInterface(REFNSIID aIID, void** aInstancePtr) NS_ADDREF_THIS(); return NS_OK; } +#else + if (aIID.Equals(kIStreamObserverIID)) { + *aInstancePtr = (void*)(nsIStreamObserver*)this; + NS_ADDREF_THIS(); + return NS_OK; + } #endif // NECKO return NS_NOINTERFACE; } @@ -495,8 +516,6 @@ nsDocLoaderImpl::CreateDocumentLoader(nsIDocumentLoader** anInstance) rv = NS_ERROR_OUT_OF_MEMORY; goto done; } - rv = newLoader->Init(); - if (NS_FAILED(rv)) return rv; rv = newLoader->QueryInterface(kIDocumentLoaderIID, (void**)anInstance); if (NS_SUCCEEDED(rv)) { @@ -513,9 +532,13 @@ nsDocLoaderImpl::CreateDocumentLoader(nsIDocumentLoader** anInstance) } nsresult -nsDocLoaderImpl::CreateContentViewer(nsIURI* aURL, +nsDocLoaderImpl::CreateContentViewer(const char *aCommand, +#ifdef NECKO + nsIChannel* channel, +#else + nsIURI* aURL, +#endif const char* aContentType, - const char *aCommand, nsIContentViewerContainer* aContainer, nsISupports* aExtraInfo, nsIStreamListener** aDocListenerResult, @@ -543,7 +566,14 @@ nsDocLoaderImpl::CreateContentViewer(nsIURI* aURL, } // Now create an instance of the content viewer - rv = factory->CreateInstance(aURL, aContentType, aCommand, aContainer, + rv = factory->CreateInstance(aCommand, +#ifdef NECKO + channel, +#else + aURL, +#endif + aContentType, + aContainer, aExtraInfo, aDocListenerResult, aDocViewerResult); NS_RELEASE(factory); @@ -590,18 +620,19 @@ nsDocLoaderImpl::LoadDocument(const nsString& aURLSpec, rv = NS_ERROR_OUT_OF_MEMORY; goto done; } + NS_ADDREF(loader); loader->Init(this, // DocLoader aCommand, // Command aContainer, // Viewer Container aExtraInfo, // Extra Info anObserver); // Observer +#ifndef NECKO /* The DocumentBindInfo reference is only held by the Array... */ m_LoadingDocsList->AppendElement((nsIStreamListener *)loader); /* Initialize the URL counters... */ - NS_PRECONDITION(((mTotalURLs == 0) && (mForegroundURLs == 0)), "DocuemntLoader is busy..."); -#ifndef NECKO + NS_PRECONDITION(((mTotalURLs == 0) && (mForegroundURLs == 0)), "DocumentLoader is busy..."); rv = m_LoadAttrib->GetLoadType(&loadType); if (NS_FAILED(rv)) { loadType = nsURLLoadNormal; @@ -609,8 +640,8 @@ nsDocLoaderImpl::LoadDocument(const nsString& aURLSpec, if (nsURLLoadBackground != loadType) { mForegroundURLs = 1; } -#endif mTotalURLs = 1; +#endif /* * Set the flag indicating that the document loader is in the process of * loading a document. This flag will remain set until the @@ -618,9 +649,7 @@ nsDocLoaderImpl::LoadDocument(const nsString& aURLSpec, */ mIsLoadingDocument = PR_TRUE; -#ifdef NECKO - m_LoadAttrib = aType; -#else +#ifndef NECKO m_LoadAttrib->SetReloadType(aType); // If we've got special loading instructions, mind them. if ((aType == nsURLReloadBypassProxy) || @@ -637,6 +666,7 @@ nsDocLoaderImpl::LoadDocument(const nsString& aURLSpec, rv = loader->Bind(aURLSpec, aPostData, nsnull); done: + NS_RELEASE(loader); return rv; } @@ -667,21 +697,24 @@ nsDocLoaderImpl::LoadSubDocument(const nsString& aURLSpec, rv = NS_ERROR_OUT_OF_MEMORY; return rv; } + NS_ADDREF(loader); loader->Init(this, // DocLoader nsnull, // Command nsnull, // Viewer Container aExtraInfo, // Extra Info mStreamObserver); // Observer +#ifndef NECKO /* The DocumentBindInfo reference is only held by the Array... */ m_LoadingDocsList->AppendElement((nsIStreamListener *)loader); /* Increment the URL counters... */ mForegroundURLs++; mTotalURLs++; - - rv = loader->Bind(aURLSpec, nsnull, nsnull); +#endif + rv = loader->Bind(aURLSpec, nsnull, nsnull); + NS_RELEASE(loader); return rv; } @@ -710,10 +743,10 @@ nsDocLoaderImpl::Stop(void) */ mChildGroupList.EnumerateForwards(nsDocLoaderImpl::StopDocLoaderEnumerator, nsnull); -#endif /* Reset the URL counters... */ mForegroundURLs = 0; mTotalURLs = 0; +#endif /* * Release the Stream Observer... @@ -728,6 +761,9 @@ nsDocLoaderImpl::Stop(void) NS_IMETHODIMP nsDocLoaderImpl::IsBusy(PRBool& aResult) { +#ifdef NECKO + return mLoadGroup->IsPending(&aResult); +#else aResult = PR_FALSE; /* If this document loader is busy? */ @@ -741,6 +777,7 @@ nsDocLoaderImpl::IsBusy(PRBool& aResult) } return NS_OK; +#endif } @@ -838,15 +875,13 @@ nsDocLoaderImpl::CreateURL(nsIURI** aInstancePtrResult, rv = NS_NewURI(&url, aURLSpec, aBaseURL); #else rv = NS_NewURL(&url, aURLSpec, aBaseURL, aContainer, this); -#endif if (NS_SUCCEEDED(rv)) { -#ifndef NECKO // set later after we open the channel nsCOMPtr loadAttributes; rv = url->GetLoadAttribs(getter_AddRefs(loadAttributes)); if (loadAttributes) loadAttributes->Clone(m_LoadAttrib); -#endif } +#endif *aInstancePtrResult = url; } @@ -884,17 +919,18 @@ nsDocLoaderImpl::OpenStream(nsIURI *aUrl, nsIStreamListener *aConsumer) rv = NS_ERROR_OUT_OF_MEMORY; goto done; } + NS_ADDREF(loader); loader->Init(this, // DocLoader nsnull, // Command mContainer, // Viewer Container nsnull, // Extra Info mStreamObserver); // Observer +#ifndef NECKO // done in the load group now /* The DocumentBindInfo reference is only held by the Array... */ m_LoadingDocsList->AppendElement(((nsISupports*)(nsIStreamObserver*)loader)); /* Update the URL counters... */ -#ifndef NECKO // do later after we call NS_OpenURI nsILoadAttribs* loadAttributes; rv = aUrl->GetLoadAttribs(&loadAttributes); @@ -909,11 +945,12 @@ nsDocLoaderImpl::OpenStream(nsIURI *aUrl, nsIStreamListener *aConsumer) if (nsURLLoadBackground != loadType) { mForegroundURLs += 1; } -#endif mTotalURLs += 1; +#endif rv = loader->Bind(aUrl, aConsumer); done: + NS_RELEASE(loader); return rv; } @@ -926,7 +963,7 @@ nsDocLoaderImpl::GetDefaultLoadAttributes(nsILoadAttribs*& aLoadAttribs) #endif { #ifdef NECKO - *aLoadAttribs = m_LoadAttrib; + return mLoadGroup->GetDefaultLoadAttributes(aLoadAttribs); #else aLoadAttribs = m_LoadAttrib; NS_IF_ADDREF(aLoadAttribs); @@ -944,10 +981,9 @@ nsDocLoaderImpl::SetDefaultLoadAttributes(nsILoadAttribs* aLoadAttribs) #endif { #ifdef NECKO - m_LoadAttrib = aLoadAttribs; + return mLoadGroup->SetDefaultLoadAttributes(aLoadAttribs); #else m_LoadAttrib->Clone(aLoadAttribs); -#endif /* * Now set the default attributes for all child DocumentLoaders... @@ -959,28 +995,57 @@ nsDocLoaderImpl::SetDefaultLoadAttributes(nsILoadAttribs* aLoadAttribs) nsILoadGroup* child = (nsILoadGroup*)mChildGroupList.ElementAt(index); child->SetDefaultLoadAttributes(m_LoadAttrib); } +#endif return NS_OK; } +#ifdef NECKO +NS_IMETHODIMP +nsDocLoaderImpl::OnStartRequest(nsIChannel *channel, nsISupports *ctxt) +{ + nsresult rv; + nsCOMPtr uri; + rv = channel->GetURI(getter_AddRefs(uri)); + if (NS_FAILED(rv)) return rv; +// FireOnStartDocumentLoad(this, uri, "load"); // XXX fix command + return NS_OK; +} + +NS_IMETHODIMP +nsDocLoaderImpl::OnStopRequest(nsIChannel *channel, nsISupports *ctxt, + nsresult status, const PRUnichar *errorMsg) +{ + FireOnEndDocumentLoad(this, status); + return NS_OK; +} +#endif NS_IMETHODIMP nsDocLoaderImpl::AddChildGroup(nsILoadGroup* aGroup) { +#ifdef NECKO + return mLoadGroup->AddSubGroup(aGroup); +#else mChildGroupList.AppendElement(aGroup); return NS_OK; +#endif } NS_IMETHODIMP nsDocLoaderImpl::RemoveChildGroup(nsILoadGroup* aGroup) { +#ifdef NECKO + return mLoadGroup->RemoveSubGroup(aGroup); +#else nsresult rv = NS_OK; if (PR_FALSE == mChildGroupList.RemoveElement(aGroup)) { rv = NS_ERROR_FAILURE; } return rv; +#endif } @@ -1057,8 +1122,8 @@ void nsDocLoaderImpl::FireOnStartURLLoad(nsIDocumentLoader* aLoadInitiator, nsIChannel* channel, #else nsIURI* aURL, -#endif const char* aContentType, +#endif nsIContentViewer* aViewer) { PRInt32 count = mDocObservers.Count(); @@ -1070,7 +1135,7 @@ void nsDocLoaderImpl::FireOnStartURLLoad(nsIDocumentLoader* aLoadInitiator, for (index = 0; index < count; index++) { nsIDocumentLoaderObserver* observer = (nsIDocumentLoaderObserver*)mDocObservers.ElementAt(index); #ifdef NECKO - observer->OnStartURLLoad(aLoadInitiator, channel, aContentType, aViewer); + observer->OnStartURLLoad(aLoadInitiator, channel, aViewer); #else observer->OnStartURLLoad(aLoadInitiator, aURL, aContentType, aViewer); #endif @@ -1081,7 +1146,7 @@ void nsDocLoaderImpl::FireOnStartURLLoad(nsIDocumentLoader* aLoadInitiator, */ if (nsnull != mParent) { #ifdef NECKO - mParent->FireOnStartURLLoad(aLoadInitiator, channel, aContentType, aViewer); + mParent->FireOnStartURLLoad(aLoadInitiator, channel, aViewer); #else mParent->FireOnStartURLLoad(aLoadInitiator, aURL, aContentType, aViewer); #endif @@ -1208,19 +1273,24 @@ void nsDocLoaderImpl::LoadURLComplete(nsIURI* aURL, nsISupports* aBindInfo, PRIn * If the entry is not found in the list, then it must have been cancelled * via Stop(...). So ignore just it... */ +#ifdef NECKO +#if defined(DEBUG) + nsCOMPtr uri; + nsresult rv = channel->GetURI(getter_AddRefs(uri)); + if (NS_SUCCEEDED(rv)) { + char* buffer; + rv = uri->GetSpec(&buffer); + if (NS_SUCCEEDED(rv)) { + PR_LOG(gDocLoaderLog, PR_LOG_DEBUG, + ("DocLoader:%p: LoadURLComplete(...) called for %s\n", + this, buffer)); + nsCRT::free(buffer); + } + } +#endif /* DEBUG */ +#else PRBool removed = m_LoadingDocsList->RemoveElement(aBindInfo); if (removed) { -#ifdef NECKO - PRUint32 loadAttribs; - nsresult rv; - rv = channel->GetLoadAttributes(&loadAttribs); - if (NS_SUCCEEDED(rv)) { - if (loadAttribs & nsIChannel::LOAD_QUIET) { - mForegroundURLs--; - isForegroundURL = PR_TRUE; - } - } -#else nsILoadAttribs* loadAttributes; nsURLLoadType loadType = nsURLLoadNormal; @@ -1236,36 +1306,21 @@ void nsDocLoaderImpl::LoadURLComplete(nsIURI* aURL, nsISupports* aBindInfo, PRIn mForegroundURLs--; isForegroundURL = PR_TRUE; } -#endif mTotalURLs -= 1; NS_ASSERTION(mTotalURLs >= mForegroundURLs, "Foreground URL count is wrong."); #if defined(DEBUG) -#ifdef NECKO - nsCOMPtr uri; - rv = channel->GetURI(getter_AddRefs(uri)); - if (NS_SUCCEEDED(rv)) { - char* buffer; - rv = uri->GetSpec(&buffer); - if (NS_SUCCEEDED(rv)) { - PR_LOG(gDocLoaderLog, PR_LOG_DEBUG, - ("DocLoader:%p: LoadURLComplete(...) called for %s; Foreground URLs: %d; Total URLs: %d\n", - this, buffer, mForegroundURLs, mTotalURLs)); - nsCRT::free(buffer); - } - } -#else const char* buffer; aURL->GetSpec(&buffer); PR_LOG(gDocLoaderLog, PR_LOG_DEBUG, ("DocLoader:%p: LoadURLComplete(...) called for %s; Foreground URLs: %d; Total URLs: %d\n", this, buffer, mForegroundURLs, mTotalURLs)); -#endif #endif /* DEBUG */ } +#endif /* * Fire the OnEndURLLoad notification to any observers... @@ -1328,6 +1383,7 @@ void nsDocLoaderImpl::SetDocumentUrl(nsIURI* aUrl) } #endif +#ifndef NECKO PRBool nsDocLoaderImpl::StopBindInfoEnumerator(nsISupports* aElement, void* aData) { nsresult rv; @@ -1372,6 +1428,7 @@ PRBool nsDocLoaderImpl::IsBusyEnumerator(void* aElement, void* aData) return !(*result); } +#endif /**************************************************************************** * nsDocumentBindInfo implementation... @@ -1382,7 +1439,9 @@ nsDocumentBindInfo::nsDocumentBindInfo() NS_INIT_REFCNT(); m_Command = nsnull; +#ifndef NECKO m_Url = nsnull; +#endif m_Container = nsnull; m_ExtraInfo = nsnull; m_Observer = nsnull; @@ -1398,8 +1457,9 @@ nsDocumentBindInfo::Init(nsDocLoaderImpl* aDocLoader, nsISupports* aExtraInfo, nsIStreamObserver* anObserver) { - +#ifndef NECKO m_Url = nsnull; +#endif m_NextStream = nsnull; m_Command = (nsnull != aCommand) ? PL_strdup(aCommand) : nsnull; @@ -1427,7 +1487,9 @@ nsDocumentBindInfo::~nsDocumentBindInfo() m_Command = nsnull; NS_RELEASE (m_DocLoader); +#ifndef NECKO NS_IF_RELEASE(m_Url); +#endif NS_IF_RELEASE(m_NextStream); NS_IF_RELEASE(m_Container); NS_IF_RELEASE(m_Observer); @@ -1519,10 +1581,7 @@ nsresult nsDocumentBindInfo::Bind(const nsString& aURLSpec, /* * Set the URL has the current "document" being loaded... */ -#ifdef NECKO -// m_DocLoader->SetDocumentChannel(channel); - //NS_ASSERTION(0, "help"); -#else +#ifndef NECKO m_DocLoader->SetDocumentUrl(url); #endif /* @@ -1544,8 +1603,10 @@ nsresult nsDocumentBindInfo::Bind(nsIURI* aURL, nsIStreamListener* aListener) { nsresult rv = NS_OK; +#ifndef NECKO m_Url = aURL; NS_ADDREF(m_Url); +#endif #if defined(DEBUG) #ifdef NECKO @@ -1586,13 +1647,21 @@ nsresult nsDocumentBindInfo::Bind(nsIURI* aURL, nsIStreamListener* aListener) if (m_DocLoader) { loadGroup = m_DocLoader->GetLoadGroup(); } - rv = NS_OpenURI(this, nsnull, m_Url, loadGroup); + + nsCOMPtr channel; + rv = NS_OpenURI(getter_AddRefs(channel), aURL); + if (NS_FAILED(rv)) return rv; + + m_DocLoader->SetDocumentChannel(channel); + + rv = channel->AsyncRead(0, -1, nsnull, this, loadGroup); + if (NS_FAILED(rv)) return rv; #endif // NECKO return rv; } - +#ifndef NECKO nsresult nsDocumentBindInfo::Stop(void) { nsresult rv; @@ -1638,7 +1707,6 @@ nsresult nsDocumentBindInfo::Stop(void) return rv; } -#ifndef NECKO NS_METHOD nsDocumentBindInfo::GetBindInfo(nsIURI* aURL, nsStreamBindingInfo* aInfo) { nsresult rv = NS_OK; @@ -1808,9 +1876,13 @@ nsDocumentBindInfo::OnStartRequest(nsIURI* aURL, const char *aContentType) * (and viewer) of the appropriate type... */ if (m_DocLoader) { - rv = m_DocLoader->CreateContentViewer(m_Url, + rv = m_DocLoader->CreateContentViewer(m_Command, +#ifdef NECKO + channel, +#else + m_Url, +#endif aContentType, - m_Command, m_Container, m_ExtraInfo, &m_NextStream, @@ -1867,7 +1939,7 @@ nsDocumentBindInfo::OnStartRequest(nsIURI* aURL, const char *aContentType) m_Container->GetContentViewer(&viewer); } #ifdef NECKO - m_DocLoader->FireOnStartURLLoad((nsIDocumentLoader *)m_DocLoader, channel, aContentType, viewer); + m_DocLoader->FireOnStartURLLoad((nsIDocumentLoader *)m_DocLoader, channel, viewer); #else m_DocLoader->FireOnStartURLLoad((nsIDocumentLoader *)m_DocLoader, m_Url, aContentType, viewer); #endif @@ -1885,7 +1957,9 @@ nsDocumentBindInfo::OnStartRequest(nsIURI* aURL, const char *aContentType) done: NS_IF_RELEASE(viewer); - +#ifdef NECKO + nsCRT::free(aContentType); +#endif return rv; } @@ -1985,15 +2059,14 @@ NS_METHOD nsDocumentBindInfo::OnStopRequest(nsIURI* aURL, nsresult aStatus, cons nsCRT::free(spec); #endif -#ifdef NECKO if (NS_FAILED(aStatus)) { +#ifdef NECKO char *url; if (NS_SUCCEEDED(rv)) aURL->GetSpec(&url); else url = nsCRT::strdup(""); #else - if (NS_FAILED(aStatus)) { const char *url; if (nsnull != aURL) aURL->GetSpec(&url); @@ -2001,7 +2074,7 @@ NS_METHOD nsDocumentBindInfo::OnStopRequest(nsIURI* aURL, nsresult aStatus, cons url = ""; #endif -#ifdef DEBUG_pnunn +#if DEBUG cerr << "nsDocumentBindInfo::OnStopRequest: Load of URL '" << url << "' failed. Error code: " << NS_ERROR_GET_CODE(aStatus) << "\n"; #endif @@ -2157,3 +2230,4 @@ nsresult NS_NewDocLoaderServiceFactory(nsIFactory** aResult) *aResult = factory; return rv; } + diff --git a/mozilla/webshell/src/nsWebShell.cpp b/mozilla/webshell/src/nsWebShell.cpp index 335dac6d21d..21cf8d39fce 100644 --- a/mozilla/webshell/src/nsWebShell.cpp +++ b/mozilla/webshell/src/nsWebShell.cpp @@ -26,6 +26,7 @@ #include "nsIStreamListener.h" #ifdef NECKO #include "nsIPrompt.h" +#include "nsNeckoUtil.h" #else #include "nsINetSupport.h" #include "nsIRefreshUrl.h" @@ -310,9 +311,9 @@ public: NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus, - nsIDocumentLoaderObserver * ); + nsIDocumentLoaderObserver * ); NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, - nsIChannel* channel, const char* aContentType, + nsIChannel* channel, nsIContentViewer* aViewer); NS_IMETHOD OnProgressURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRUint32 aProgress, @@ -1861,18 +1862,8 @@ nsWebShell::DoLoadURL(const nsString& aUrlSpec, nsCOMPtr url; #ifndef NECKO rv = NS_NewURL(getter_AddRefs(url), aUrlSpec); -#else - NS_WITH_SERVICE(nsIIOService, service, kIOServiceCID, &rv); - if (NS_FAILED(rv)) return rv; - - nsIURI *uri = nsnull; - char *uriSpec = aUrlSpec.ToNewCString(); - rv = service->NewURI(uriSpec, nsnull, &uri); - nsCRT::free(uriSpec); - if (NS_FAILED(rv)) return rv; - - rv = uri->QueryInterface(nsIURI::GetIID(), (void**)&url); - NS_RELEASE(uri); +#else + rv = NS_NewURI(getter_AddRefs(url), aUrlSpec); #endif // NECKO if (NS_FAILED(rv)) return rv; if (url && docURL && EqualBaseURLs(docURL, url)) { @@ -1960,13 +1951,16 @@ nsWebShell::LoadURL(const PRUnichar *aURLSpec, #endif const PRUint32 aLocalIP) { - nsresult rv; - PRInt32 colon, fSlash; - PRUnichar port; nsAutoString urlSpec; convertFileToURL(nsString(aURLSpec), urlSpec); - +//#ifdef NECKO +// nsCOMPtr url; +// rv = NS_NewURI(getter_AddRefs(url), urlSpec); +// if (NS_FAILED(rv)) return rv; +//#else + PRInt32 colon, fSlash; + PRUnichar port; fSlash=urlSpec.Find('/'); // if no scheme (protocol) is found, assume http. @@ -2102,6 +2096,7 @@ nsWebShell::LoadURL(const PRUnichar *aURLSpec, nsAutoString newURL(urlString); return DoLoadURL(newURL, aCommand, aPostData, aType, aLocalIP); +//#endif } NS_IMETHODIMP nsWebShell::Stop(void) @@ -3037,8 +3032,8 @@ nsWebShell::OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, #else nsIURI* aURL, -#endif const char* aContentType, +#endif nsIContentViewer* aViewer) { nsresult rv; @@ -3078,7 +3073,7 @@ nsWebShell::OnStartURLLoad(nsIDocumentLoader* loader, if ((nsnull != mContainer) && (nsnull != mDocLoaderObserver)) { #ifdef NECKO - mDocLoaderObserver->OnStartURLLoad(mDocLoader, channel, aContentType, aViewer); + mDocLoaderObserver->OnStartURLLoad(mDocLoader, channel, aViewer); #else mDocLoaderObserver->OnStartURLLoad(mDocLoader, aURL, aContentType, aViewer); #endif @@ -3772,8 +3767,8 @@ PRBool nsWebShellFactory::mStartedServices = PR_FALSE; void nsWebShellFactory::StartServices() { - // XXX TEMPORARY Till we have real pluggable protocol handlers #ifndef NECKO + // XXX TEMPORARY Till we have real pluggable protocol handlers NET_InitJavaScriptProtocol(); #endif // NECKO mStartedServices = PR_TRUE; diff --git a/mozilla/webshell/tests/viewer/nsWebCrawler.cpp b/mozilla/webshell/tests/viewer/nsWebCrawler.cpp index da7931c176b..3b1a1ff5631 100644 --- a/mozilla/webshell/tests/viewer/nsWebCrawler.cpp +++ b/mozilla/webshell/tests/viewer/nsWebCrawler.cpp @@ -329,7 +329,6 @@ NS_IMETHODIMP #ifdef NECKO nsWebCrawler::OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, - const char* aContentType, nsIContentViewer* aViewer) #else nsWebCrawler::OnStartURLLoad(nsIDocumentLoader* loader, nsIURI* aURL, diff --git a/mozilla/webshell/tests/viewer/nsWebCrawler.h b/mozilla/webshell/tests/viewer/nsWebCrawler.h index 61c315094a5..9e7448d888e 100644 --- a/mozilla/webshell/tests/viewer/nsWebCrawler.h +++ b/mozilla/webshell/tests/viewer/nsWebCrawler.h @@ -46,7 +46,7 @@ public: #ifdef NECKO NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aCommand); NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus, nsIDocumentLoaderObserver* aObserver); - NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, const char* aContentType, nsIContentViewer* aViewer); + NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer); NS_IMETHOD OnProgressURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRUint32 aProgress, PRUint32 aProgressMax); NS_IMETHOD OnStatusURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsString& aMsg); NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus); diff --git a/mozilla/xpcom/base/nsISupportsUtils.h b/mozilla/xpcom/base/nsISupportsUtils.h index 6679e3bf771..24859b6a3d6 100644 --- a/mozilla/xpcom/base/nsISupportsUtils.h +++ b/mozilla/xpcom/base/nsISupportsUtils.h @@ -254,6 +254,33 @@ NS_IMETHODIMP _class::QueryInterface(REFNSIID aIID, void** aInstancePtr) \ return NS_NOINTERFACE; \ } +#define NS_IMPL_QUERY_INTERFACE2(_class, _c1, _c2) \ +NS_IMETHODIMP _class::QueryInterface(REFNSIID aIID, void** aInstancePtr) \ +{ \ + if (NULL == aInstancePtr) { \ + return NS_ERROR_NULL_POINTER; \ + } \ + \ + *aInstancePtr = NULL; \ + \ + if (aIID.Equals(nsCOMTypeInfo<_c1>::GetIID())) { \ + *aInstancePtr = (void*) ((_c1*)this); \ + NS_ADDREF_THIS(); \ + return NS_OK; \ + } \ + if (aIID.Equals(nsCOMTypeInfo<_c2>::GetIID())) { \ + *aInstancePtr = (void*) ((_c2*)this); \ + NS_ADDREF_THIS(); \ + return NS_OK; \ + } \ + if (aIID.Equals(nsCOMTypeInfo::GetIID())) { \ + *aInstancePtr = (void*) ((_c1*)this); \ + NS_ADDREF_THIS(); \ + return NS_OK; \ + } \ + return NS_NOINTERFACE; \ +} + /** * Convenience macro for implementing all nsISupports methods for * a simple class. @@ -267,6 +294,11 @@ NS_IMETHODIMP _class::QueryInterface(REFNSIID aIID, void** aInstancePtr) \ NS_IMPL_RELEASE(_class) \ NS_IMPL_QUERY_INTERFACE(_class,_classiiddef) +#define NS_IMPL_ISUPPORTS2(_class, _c1, _c2) \ + NS_IMPL_ADDREF(_class) \ + NS_IMPL_RELEASE(_class) \ + NS_IMPL_QUERY_INTERFACE2(_class, _c1, _c2) + //////////////////////////////////////////////////////////////////////////////// /** diff --git a/mozilla/xpcom/glue/nsISupportsUtils.h b/mozilla/xpcom/glue/nsISupportsUtils.h index 6679e3bf771..24859b6a3d6 100644 --- a/mozilla/xpcom/glue/nsISupportsUtils.h +++ b/mozilla/xpcom/glue/nsISupportsUtils.h @@ -254,6 +254,33 @@ NS_IMETHODIMP _class::QueryInterface(REFNSIID aIID, void** aInstancePtr) \ return NS_NOINTERFACE; \ } +#define NS_IMPL_QUERY_INTERFACE2(_class, _c1, _c2) \ +NS_IMETHODIMP _class::QueryInterface(REFNSIID aIID, void** aInstancePtr) \ +{ \ + if (NULL == aInstancePtr) { \ + return NS_ERROR_NULL_POINTER; \ + } \ + \ + *aInstancePtr = NULL; \ + \ + if (aIID.Equals(nsCOMTypeInfo<_c1>::GetIID())) { \ + *aInstancePtr = (void*) ((_c1*)this); \ + NS_ADDREF_THIS(); \ + return NS_OK; \ + } \ + if (aIID.Equals(nsCOMTypeInfo<_c2>::GetIID())) { \ + *aInstancePtr = (void*) ((_c2*)this); \ + NS_ADDREF_THIS(); \ + return NS_OK; \ + } \ + if (aIID.Equals(nsCOMTypeInfo::GetIID())) { \ + *aInstancePtr = (void*) ((_c1*)this); \ + NS_ADDREF_THIS(); \ + return NS_OK; \ + } \ + return NS_NOINTERFACE; \ +} + /** * Convenience macro for implementing all nsISupports methods for * a simple class. @@ -267,6 +294,11 @@ NS_IMETHODIMP _class::QueryInterface(REFNSIID aIID, void** aInstancePtr) \ NS_IMPL_RELEASE(_class) \ NS_IMPL_QUERY_INTERFACE(_class,_classiiddef) +#define NS_IMPL_ISUPPORTS2(_class, _c1, _c2) \ + NS_IMPL_ADDREF(_class) \ + NS_IMPL_RELEASE(_class) \ + NS_IMPL_QUERY_INTERFACE2(_class, _c1, _c2) + //////////////////////////////////////////////////////////////////////////////// /** diff --git a/mozilla/xpcom/tests/CvtURL.cpp b/mozilla/xpcom/tests/CvtURL.cpp index 5fa96f16fef..27f53537292 100644 --- a/mozilla/xpcom/tests/CvtURL.cpp +++ b/mozilla/xpcom/tests/CvtURL.cpp @@ -65,7 +65,7 @@ int main(int argc, char** argv) #ifndef NECKO ec = NS_OpenURL(url, &in); #else - ec = NS_OpenURI(&in, url, nsnull); + ec = NS_OpenURI(&in, url); #endif // NECKO if (nsnull == in) { printf("open of url('%s') failed: error=%x\n", urlName, ec); diff --git a/mozilla/xpfe/AppCores/src/nsBrowserAppCore.cpp b/mozilla/xpfe/AppCores/src/nsBrowserAppCore.cpp index 5a8281e7162..b3455176e7f 100644 --- a/mozilla/xpfe/AppCores/src/nsBrowserAppCore.cpp +++ b/mozilla/xpfe/AppCores/src/nsBrowserAppCore.cpp @@ -1270,7 +1270,7 @@ nsBrowserAppCore::HandleUnknownContentType(nsIDocumentLoader* loader, NS_IMETHODIMP #ifdef NECKO nsBrowserAppCore::OnStartURLLoad(nsIDocumentLoader* loader, - nsIChannel* channel, const char* aContentType, + nsIChannel* channel, nsIContentViewer* aViewer) #else nsBrowserAppCore::OnStartURLLoad(nsIDocumentLoader* loader, diff --git a/mozilla/xpfe/AppCores/src/nsBrowserAppCore.h b/mozilla/xpfe/AppCores/src/nsBrowserAppCore.h index 1ffd28cab2f..e48b5a3a61a 100644 --- a/mozilla/xpfe/AppCores/src/nsBrowserAppCore.h +++ b/mozilla/xpfe/AppCores/src/nsBrowserAppCore.h @@ -110,7 +110,7 @@ class nsBrowserAppCore : public nsBaseAppCore, #ifdef NECKO NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aCommand); NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus, nsIDocumentLoaderObserver* aObserver); - NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, const char* aContentType, nsIContentViewer* aViewer); + NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer); NS_IMETHOD OnProgressURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRUint32 aProgress, PRUint32 aProgressMax); NS_IMETHOD OnStatusURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsString& aMsg); NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus); diff --git a/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp b/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp index f2cad0bd595..a7452a3629b 100644 --- a/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp +++ b/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp @@ -1827,7 +1827,6 @@ NS_IMETHODIMP #ifdef NECKO nsWebShellWindow::OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, - const char* aContentType, nsIContentViewer* aViewer) #else nsWebShellWindow::OnStartURLLoad(nsIDocumentLoader* loader, diff --git a/mozilla/xpfe/appshell/src/nsWebShellWindow.h b/mozilla/xpfe/appshell/src/nsWebShellWindow.h index 7a44211267c..424d9b25738 100644 --- a/mozilla/xpfe/appshell/src/nsWebShellWindow.h +++ b/mozilla/xpfe/appshell/src/nsWebShellWindow.h @@ -142,7 +142,7 @@ public: #ifdef NECKO NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader, nsIURI* aURL, const char* aCommand); NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus, nsIDocumentLoaderObserver* aObserver); - NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, const char* aContentType, nsIContentViewer* aViewer); + NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsIContentViewer* aViewer); NS_IMETHOD OnProgressURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRUint32 aProgress, PRUint32 aProgressMax); NS_IMETHOD OnStatusURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, nsString& aMsg); NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader, nsIChannel* channel, PRInt32 aStatus);