Turn nsDOMWalker into an XPCOM object. b=155066 r=ccarlen sr=kin

git-svn-id: svn://10.0.0.236/trunk@124529 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
locka%iol.ie 2002-07-02 20:54:13 +00:00
parent f6935d6b59
commit de008e9c95
11 changed files with 196 additions and 18 deletions

View File

@ -327,7 +327,7 @@
<!-- Settings for "FTP Panel" panel -->
<SETTING><NAME>MWFTP_Post_hostName</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWFTP_Post_username</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWFTP_Post_password</NAME><VALUE>25jqsan5jqae2&#238;I&#192;&#229;R&#168;</VALUE></SETTING>
<SETTING><NAME>MWFTP_Post_password</NAME><VALUE>2635rsan635rae2p'!&#144;&#136;K &#191;&#255;&#217;0</VALUE></SETTING>
<SETTING><NAME>MWFTP_Post_remoteDir</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWFTP_Post_ftp_PathVersion</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFTP_Post_ftp_PathType</NAME><VALUE>0</VALUE></SETTING>
@ -856,6 +856,20 @@
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>nsCDOMWalker.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>nsIDOMWalker.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
</FILELIST>
<LINKORDER>
<FILEREF>
@ -948,6 +962,16 @@
<PATH>nsIProgressDialog.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>nsCDOMWalker.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>nsIDOMWalker.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
</LINKORDER>
</TARGET>
<TARGET>
@ -1224,7 +1248,7 @@
<!-- Settings for "FTP Panel" panel -->
<SETTING><NAME>MWFTP_Post_hostName</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWFTP_Post_username</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWFTP_Post_password</NAME><VALUE>25jqsan5jqae2&#238;I&#192;&#229;R&#168;</VALUE></SETTING>
<SETTING><NAME>MWFTP_Post_password</NAME><VALUE>2655qsan655qae2p'!&#144;&#136;K &#191;&#255;&#217;0</VALUE></SETTING>
<SETTING><NAME>MWFTP_Post_remoteDir</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWFTP_Post_ftp_PathVersion</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFTP_Post_ftp_PathType</NAME><VALUE>0</VALUE></SETTING>
@ -1753,6 +1777,20 @@
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>nsCDOMWalker.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>nsIDOMWalker.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
</FILELIST>
<LINKORDER>
<FILEREF>
@ -1845,6 +1883,16 @@
<PATH>nsIProgressDialog.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>nsCDOMWalker.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>nsIDOMWalker.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
</LINKORDER>
</TARGET>
</TARGETLIST>
@ -1963,6 +2011,18 @@
<PATH>nsIAuthPromptWrapper.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>headers</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>nsCDOMWalker.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>headers</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>nsIDOMWalker.idl</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
</GROUPLIST>
</PROJECT>

View File

@ -45,6 +45,7 @@
#include "nsFind.h"
#include "nsWebBrowserFind.h"
#include "nsWebBrowserPersist.h"
#include "nsDOMWalker.h"
#include "nsCommandManager.h"
#include "nsControllerCommandManager.h"
#include "nsCommandParams.h"
@ -59,6 +60,7 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsJSConsoleService)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsFind)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsWebBrowserFind)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsWebBrowserPersist)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsDOMWalker)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsControllerCommandManager)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsCommandManager)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsCommandParams, Init)
@ -75,6 +77,7 @@ static const nsModuleComponentInfo gComponents[] = {
{ "WebBrowserFind", NS_WEB_BROWSER_FIND_CID, NS_WEB_BROWSER_FIND_CONTRACTID, nsWebBrowserFindConstructor },
{ NS_APPSTARTUPNOTIFIER_CLASSNAME, NS_APPSTARTUPNOTIFIER_CID, NS_APPSTARTUPNOTIFIER_CONTRACTID, nsAppStartupNotifierConstructor },
{ "WebBrowserPersist Component", NS_WEBBROWSERPERSIST_CID, NS_WEBBROWSERPERSIST_CONTRACTID, nsWebBrowserPersistConstructor },
{ "DOM Walker", NS_DOMWALKER_CID, NS_DOMWALKER_CONTRACTID, nsDOMWalkerConstructor },
{ "Controller Command Manager", NS_CONTROLLERCOMMANDMANAGER_CID, NS_CONTROLLERCOMMANDMANAGER_CONTRACTID, nsControllerCommandManagerConstructor },
{ "Command Manager", NS_COMMAND_MANAGER_CID, NS_COMMAND_MANAGER_CONTRACTID, nsCommandManagerConstructor },
{ "Command Params", NS_COMMAND_PARAMS_CID, NS_COMMAND_PARAMS_CONTRACTID, nsCommandParamsConstructor },

View File

@ -1,2 +1,4 @@
nsCWebBrowserPersist.idl
nsIWebBrowserPersist.idl
nsCDOMWalker.idl
nsIDOMWalker.idl

View File

@ -31,6 +31,8 @@ XPIDL_MODULE = webbrowserpersist
XPIDLSRCS = nsIWebBrowserPersist.idl \
nsCWebBrowserPersist.idl \
nsIDOMWalker.idl \
nsCDOMWalker.idl \
$(NULL)
include $(topsrcdir)/config/rules.mk

View File

@ -25,6 +25,8 @@ MODULE=webbrowserpersist
XPIDLSRCS = \
.\nsIWebBrowserPersist.idl \
.\nsCWebBrowserPersist.idl \
.\nsIDOMWalker.idl \
.\nsCDOMWalker.idl \
$(NULL)
include <$(DEPTH)\config\rules.mak>

View File

@ -0,0 +1,31 @@
/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla 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/MPL/
*
* 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 the Mozilla browser.
*
* The Initial Developer of the Original Code is Netscape
* Communications, Inc. Portions created by Netscape are
* Copyright (C) 1999, Mozilla. All Rights Reserved.
*
* Contributor(s):
* Adam Lock <adamlock@netscape.com>
*/
#include "nsIDOMWalker.idl"
%{ C++
// {2abe95e1-59fb-4b24-84c9-db164d5eb540}
#define NS_DOMWALKER_CID \
{ 0x2abe95e1, 0x59fb, 0x4b24, {0x84, 0xc9, 0xdb, 0x16, 0x4d, 0x5e, 0xb5, 0x40} }
#define NS_DOMWALKER_CONTRACTID \
"@mozilla.org/embedding/browser/nsDOMWalker;1"
%}

View File

@ -0,0 +1,57 @@
/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla 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/MPL/
*
* 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 the Mozilla browser.
*
* The Initial Developer of the Original Code is Netscape
* Communications, Inc. Portions created by Netscape are
* Copyright (C) 1999, Mozilla. All Rights Reserved.
*
* Contributor(s):
* Adam Lock <adamlock@netscape.com>
*/
#include "nsISupports.idl"
interface nsIDOMNode;
/**
* @status UNDER_REVIEW
*/
/**
* Interface for callback
*/
[scriptable, uuid(2d247cde-bae6-4c1e-8c17-102934b8694b)]
interface nsIDOMWalkerCallback : nsISupports
{
/**
* Called for each DOM node to be traversed. Set the aAbort parameter
* to PR_TRUE to stop further traversal.
*/
void onWalkDOMNode(in nsIDOMNode aNode, inout boolean aAbort);
};
/**
* Interface for walking through a DOM tree.
*/
[scriptable, uuid(d489d5a0-375d-41ab-b647-fe6a489544a5)]
interface nsIDOMWalker : nsISupports
{
/**
* Traverse the specified DOM recursively starting with the supplied root
* node and walking through each child node in turn. The supplied callback
* interface will be called on each DOM node until traversal is completed
* or the operation is cancelled.
*/
void walkDOM(in nsIDOMNode aRootNode, in nsIDOMWalkerCallback aCallback);
};

View File

@ -30,7 +30,25 @@ struct DOMTreePos
nsCOMPtr<nsIDOMNode> current;
};
nsresult nsDOMWalker::WalkDOM(nsIDOMNode *aRootNode, nsDOMWalkerCallback *aCallback)
nsDOMWalker::nsDOMWalker()
{
NS_INIT_REFCNT();
}
nsDOMWalker::~nsDOMWalker()
{
}
//*****************************************************************************
// nsDOMWalker::nsISupports
//*****************************************************************************
NS_IMPL_ISUPPORTS1(nsDOMWalker, nsIDOMWalker);
//*****************************************************************************
// nsIDOMWalker
nsresult nsDOMWalker::WalkDOM(nsIDOMNode *aRootNode, nsIDOMWalkerCallback *aCallback)
{
NS_ENSURE_ARG_POINTER(aRootNode);
NS_ENSURE_ARG_POINTER(aCallback);

View File

@ -24,17 +24,19 @@
#define NSDOMWALKER_H
#include "nsIDOMNode.h"
#include "nsCDOMWalker.h"
class nsDOMWalkerCallback
class nsDOMWalker :
public nsIDOMWalker
{
// Public members
public:
virtual nsresult OnWalkDOMNode(nsIDOMNode *aNode, PRBool *aAbort) = 0;
};
class nsDOMWalker
{
public:
nsresult WalkDOM(nsIDOMNode *aRootNode, nsDOMWalkerCallback *aCallback = nsnull);
nsDOMWalker();
NS_DECL_ISUPPORTS
NS_DECL_NSIDOMWALKER
protected:
virtual ~nsDOMWalker();
};
#endif

View File

@ -203,6 +203,7 @@ NS_INTERFACE_MAP_BEGIN(nsWebBrowserPersist)
NS_INTERFACE_MAP_ENTRY(nsIStreamListener)
NS_INTERFACE_MAP_ENTRY(nsIRequestObserver)
NS_INTERFACE_MAP_ENTRY(nsIProgressEventSink)
NS_INTERFACE_MAP_ENTRY(nsIDOMWalkerCallback)
NS_INTERFACE_MAP_END
@ -1370,8 +1371,10 @@ nsresult nsWebBrowserPersist::SaveDocumentInternal(
mDocList.AppendElement(docData);
// Walk the DOM gathering a list of externally referenced URIs in the uri map
nsDOMWalker walker;
walker.WalkDOM(docAsNode, this);
nsCOMPtr<nsIDOMWalker> walker =
do_CreateInstance(NS_DOMWALKER_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE);
walker->WalkDOM(docAsNode, this);
// If there are things to persist, create a directory to hold them
if (mCurrentThingsToPersist > 0)

View File

@ -53,7 +53,7 @@ struct URIData;
class nsWebBrowserPersist : public nsIInterfaceRequestor,
public nsIWebBrowserPersist,
public nsIStreamListener,
public nsDOMWalkerCallback,
public nsIDOMWalkerCallback,
public nsIProgressEventSink,
public nsSupportsWeakReference
{
@ -69,7 +69,8 @@ public:
NS_DECL_NSIREQUESTOBSERVER
NS_DECL_NSISTREAMLISTENER
NS_DECL_NSIPROGRESSEVENTSINK
NS_DECL_NSIDOMWALKERCALLBACK
// Protected members
protected:
virtual ~nsWebBrowserPersist();
@ -134,9 +135,6 @@ private:
PRBool SerializeNextFile();
void CalcTotalProgress();
// nsDOMWalkerCallback method
nsresult OnWalkDOMNode(nsIDOMNode *aNode, PRBool *aAbort);
// Hash table enumerators
static PRBool PR_CALLBACK EnumPersistURIs(
nsHashKey *aKey, void *aData, void* closure);