diff --git a/uriloader/base/nsDocLoader.h b/uriloader/base/nsDocLoader.h new file mode 100644 index 00000000000..e31d38f7411 --- /dev/null +++ b/uriloader/base/nsDocLoader.h @@ -0,0 +1,109 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1999 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + */ + +/* +*/ + +#ifndef nsDocLoader_h__ +#define nsDocLoader_h__ + +#include "nsIDocumentLoader.h" +#include "nsIStreamObserver.h" +#include "nsWeakReference.h" +#include "nsILoadGroup.h" +#include "nsISupportsArray.h" +#include "nsVoidArray.h" +#include "nsString.h" +#include "nsCOMPtr.h" + + +/**************************************************************************** + * nsDocLoaderImpl implementation... + ****************************************************************************/ + +class nsDocLoaderImpl : public nsIDocumentLoader, + public nsIStreamObserver, + public nsSupportsWeakReference +{ +public: + + nsDocLoaderImpl(); + + nsresult Init(); + + // for nsIGenericFactory: + static NS_IMETHODIMP Create(nsISupports *aOuter, const nsIID &aIID, void **aResult); + + NS_DECL_ISUPPORTS + NS_DECL_NSIDOCUMENTLOADER + // nsIStreamObserver methods: (for observing the load group) + NS_DECL_NSISTREAMOBSERVER + + // Implementation specific methods... +protected: + virtual ~nsDocLoaderImpl(); + + nsresult SetDocLoaderParent(nsDocLoaderImpl * aLoader); + nsresult RemoveChildGroup(nsDocLoaderImpl *aLoader); + void DocLoaderIsEmpty(nsresult aStatus); + + void FireOnStartDocumentLoad(nsDocLoaderImpl* aLoadInitiator, + nsIURI* aURL); + + void FireOnEndDocumentLoad(nsDocLoaderImpl* aLoadInitiator, + nsIChannel *aDocChannel, + nsresult aStatus); + + void FireOnStartURLLoad(nsDocLoaderImpl* aLoadInitiator, + nsIChannel* channel); + + void FireOnEndURLLoad(nsDocLoaderImpl* aLoadInitiator, + nsIChannel* channel, nsresult aStatus); + +protected: + + // IMPORTANT: The ownership implicit in the following member + // variables has been explicitly checked and set using nsCOMPtr + // for owning pointers and raw COM interface pointers for weak + // (ie, non owning) references. If you add any members to this + // class, please make the ownership explicit (pinkerton, scc). + + nsCOMPtr mDocumentChannel; // [OWNER] ???compare with document + nsVoidArray mDocObservers; + nsISupports* mContainer; // [WEAK] it owns me! + + nsDocLoaderImpl* mParent; // [WEAK] + + nsCString mCommand; + + /* + * This flag indicates that the loader is loading a document. It is set + * from the call to LoadDocument(...) until the OnConnectionsComplete(...) + * notification is fired... + */ + PRBool mIsLoadingDocument; + + nsCOMPtr mLoadGroup; + nsCOMPtr mChildList; +}; + +#endif /* nsDocLoader_h__ */ diff --git a/uriloader/base/nsIDocumentLoader.idl b/uriloader/base/nsIDocumentLoader.idl new file mode 100644 index 00000000000..c206f56ff8a --- /dev/null +++ b/uriloader/base/nsIDocumentLoader.idl @@ -0,0 +1,50 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1999 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + */ + +/* nsIDocumentLoader --> + +*/ + +#include "nsISupports.idl" +interface nsILoadGroup; +interface nsIDocumentLoaderObserver; +interface nsIContentViewerContainer; +interface nsIChannel; +interface nsIURI; + +[scriptable, uuid(f43ba260-0737-11d2-beb9-00805f8a66dc)] +interface nsIDocumentLoader : nsISupports +{ + void stop(); + boolean isBusy(); + void createDocumentLoader(out nsIDocumentLoader anInstance); + + void addObserver(in nsIDocumentLoaderObserver aObserver); + void removeObserver(in nsIDocumentLoaderObserver aObserver); + attribute nsISupports container; + + [noscript] void getContentViewerContainer(in unsigned long aDocumentID, out nsIContentViewerContainer aResult); + nsILoadGroup getLoadGroup(); + + void destroy(); +}; + diff --git a/uriloader/base/nsIDocumentLoaderObserver.idl b/uriloader/base/nsIDocumentLoaderObserver.idl new file mode 100644 index 00000000000..ae8e8078cd7 --- /dev/null +++ b/uriloader/base/nsIDocumentLoaderObserver.idl @@ -0,0 +1,103 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1999 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + */ + +/* nsIDocumentLoaderObserver --> + +*/ + +#include "nsISupports.idl" + +interface nsIDocumentLoader; +interface nsIURI; +interface nsIChannel; + +/* we'll be phasing this interface out in place of a new + improved progress sink interface +*/ + +%{C++ +#include "nsString.h" +%} + + native nsString(nsString); +[ref] native nsStringRef(nsString); + +[scriptable, uuid(f6b4f550-317c-11d2-bd8c-00805f8ae3f4)] +interface nsIDocumentLoaderObserver : nsISupports +{ + /** + * Notify the observer that a new document will be loaded. + * + * This notification occurs before any DNS resolution occurs, or + * a connection is established with the server... + */ + void onStartDocumentLoad(in nsIDocumentLoader aLoader, in nsIURI aURL, in string aCommand); + + /** + * Notify the observer that a document has been completely loaded. + */ + void onEndDocumentLoad(in nsIDocumentLoader loader, in nsIChannel aChannel, in unsigned long aStatus); + + /** + * Notify the observer that the specified nsIURI has just started to load. + * + * This notification occurs after DNS resolution, and a connection to the + * server has been established. + */ + void onStartURLLoad(in nsIDocumentLoader aLoader, in nsIChannel channel); + + /** + * Notify the observer that progress has occurred in the loading of the + * specified URL... + */ + void onProgressURLLoad(in nsIDocumentLoader aLoader, + in nsIChannel aChannel, in unsigned long aProgress, + in unsigned long aProgressMax); + + /** + * Notify the observer that status text is available regarding the URL + * being loaded... + */ + [noscript] void onStatusURLLoad(in nsIDocumentLoader loader, in nsIChannel channel, in nsStringRef aMsg); + + /** + * Notify the observer that the specified nsIURI has finished loading. + */ + void onEndURLLoad(in nsIDocumentLoader aLoader, in nsIChannel aChannel, in unsigned long aStatus); + + /** + * Notify the observer that some content of unknown type has been + * encountered... + */ + void handleUnknownContentType(in nsIDocumentLoader aLoader, + in nsIChannel aChannel, + in string aContentType, + in string aCommand); +}; + +/* the following is a transition define. nsIDocumentLoaderObserver wasn't scriptable and now it is. + so lots of people refer to the IID using the old non-scriptable generated IID... +*/ + +%{C++ +#define NS_IDOCUMENT_LOADER_OBSERVER_IID NS_IDOCUMENTLOADEROBSERVER_IID +%} \ No newline at end of file