diff --git a/mozilla/htmlparser/robot/nsDebugRobot.cpp b/mozilla/htmlparser/robot/nsDebugRobot.cpp
index 50728162711..dde8ce6f503 100644
--- a/mozilla/htmlparser/robot/nsDebugRobot.cpp
+++ b/mozilla/htmlparser/robot/nsDebugRobot.cpp
@@ -38,6 +38,7 @@ public:
NS_IMETHOD ProcessLink(const nsString& aURLSpec);
NS_IMETHOD VerifyDirectory (const char * verify_dir);
+ NS_IMETHOD ReadyForNextUrl(void);
};
@@ -46,6 +47,7 @@ static nsVoidArray * g_duplicateList;
static int g_iProcessed;
static int g_iMaxProcess = 5000;
static PRBool g_bHitTop;
+static PRBool g_bReadyForNextUrl;
NS_IMPL_ISUPPORTS(RobotSinkObserver, kIRobotSinkObserverIID);
@@ -54,6 +56,12 @@ NS_IMETHODIMP RobotSinkObserver::VerifyDirectory(const char * verify_dir)
return NS_OK;
}
+NS_IMETHODIMP RobotSinkObserver::ReadyForNextUrl(void)
+{
+ g_bReadyForNextUrl = PR_TRUE;
+ return NS_OK;
+}
+
NS_IMETHODIMP RobotSinkObserver::ProcessLink(const nsString& aURLSpec)
{
if (!g_bHitTop) {
@@ -156,11 +164,15 @@ extern "C" NS_EXPORT int DebugRobot(
sink->AddObserver(myObserver);
parser->SetContentSink(sink);
+ g_bReadyForNextUrl = PR_FALSE;
parser->Parse(url);
- if (yieldProc != NULL)
- (*yieldProc)(url->GetSpec());
+ while (!g_bReadyForNextUrl) {
+ if (yieldProc != NULL)
+ (*yieldProc)(url->GetSpec());
+ }
if (ww)
- ww->LoadURL(url->GetSpec());
+ ww->LoadURL(url->GetSpec());
+
NS_RELEASE(sink);
NS_RELEASE(parser);
NS_RELEASE(url);
diff --git a/mozilla/htmlparser/robot/nsIRobotSinkObserver.h b/mozilla/htmlparser/robot/nsIRobotSinkObserver.h
index 68be54be43a..f67557f1781 100644
--- a/mozilla/htmlparser/robot/nsIRobotSinkObserver.h
+++ b/mozilla/htmlparser/robot/nsIRobotSinkObserver.h
@@ -30,6 +30,7 @@ class nsIRobotSinkObserver : public nsISupports {
public:
NS_IMETHOD ProcessLink(const nsString& aURLSpec) = 0;
NS_IMETHOD VerifyDirectory(const char * verify_dir) = 0;
+ NS_IMETHOD ReadyForNextUrl(void) = 0;
};
#endif /* nsIRobotSinkObserver_h___ */
diff --git a/mozilla/htmlparser/robot/nsRobotSink.cpp b/mozilla/htmlparser/robot/nsRobotSink.cpp
index d893bc7303c..62033eb99ca 100644
--- a/mozilla/htmlparser/robot/nsRobotSink.cpp
+++ b/mozilla/htmlparser/robot/nsRobotSink.cpp
@@ -18,6 +18,7 @@
#include "nsIRobotSink.h"
#include "nsIRobotSinkObserver.h"
#include "nsIParserNode.h"
+#include "nsParserTypes.h"
#include "nsString.h"
#include "nsIURL.h"
#include "nsCRT.h"
@@ -51,23 +52,23 @@ public:
NS_DECL_ISUPPORTS
// nsIHTMLContentSink
- virtual PRBool SetTitle(const nsString& aValue);
- virtual PRBool OpenHTML(const nsIParserNode& aNode);
- virtual PRBool CloseHTML(const nsIParserNode& aNode);
- virtual PRBool OpenHead(const nsIParserNode& aNode);
- virtual PRBool CloseHead(const nsIParserNode& aNode);
- virtual PRBool OpenBody(const nsIParserNode& aNode);
- virtual PRBool CloseBody(const nsIParserNode& aNode);
- virtual PRBool OpenForm(const nsIParserNode& aNode);
- virtual PRBool CloseForm(const nsIParserNode& aNode);
- virtual PRBool OpenFrameset(const nsIParserNode& aNode);
- virtual PRBool CloseFrameset(const nsIParserNode& aNode);
- virtual PRBool OpenContainer(const nsIParserNode& aNode);
- virtual PRBool CloseContainer(const nsIParserNode& aNode);
- virtual PRBool CloseTopmostContainer();
- virtual PRBool AddLeaf(const nsIParserNode& aNode);
+ virtual PRInt32 SetTitle(const nsString& aValue);
+ virtual PRInt32 OpenHTML(const nsIParserNode& aNode);
+ virtual PRInt32 CloseHTML(const nsIParserNode& aNode);
+ virtual PRInt32 OpenHead(const nsIParserNode& aNode);
+ virtual PRInt32 CloseHead(const nsIParserNode& aNode);
+ virtual PRInt32 OpenBody(const nsIParserNode& aNode);
+ virtual PRInt32 CloseBody(const nsIParserNode& aNode);
+ virtual PRInt32 OpenForm(const nsIParserNode& aNode);
+ virtual PRInt32 CloseForm(const nsIParserNode& aNode);
+ virtual PRInt32 OpenFrameset(const nsIParserNode& aNode);
+ virtual PRInt32 CloseFrameset(const nsIParserNode& aNode);
+ virtual PRInt32 OpenContainer(const nsIParserNode& aNode);
+ virtual PRInt32 CloseContainer(const nsIParserNode& aNode);
+ virtual PRInt32 CloseTopmostContainer();
+ virtual PRInt32 AddLeaf(const nsIParserNode& aNode);
virtual void WillBuildModel(void) { }
- virtual void DidBuildModel(void){ }
+ virtual void DidBuildModel(void);
virtual void WillInterrupt(void) { }
virtual void WillResume(void) { }
@@ -130,62 +131,62 @@ NS_IMETHODIMP RobotSink::QueryInterface(REFNSIID aIID, void** aInstancePtr)
return NS_NOINTERFACE;
}
-PRBool RobotSink::SetTitle(const nsString& aValue)
+PRInt32 RobotSink::SetTitle(const nsString& aValue)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::OpenHTML(const nsIParserNode& aNode)
+PRInt32 RobotSink::OpenHTML(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseHTML(const nsIParserNode& aNode)
+PRInt32 RobotSink::CloseHTML(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::OpenHead(const nsIParserNode& aNode)
+PRInt32 RobotSink::OpenHead(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseHead(const nsIParserNode& aNode)
+PRInt32 RobotSink::CloseHead(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::OpenBody(const nsIParserNode& aNode)
+PRInt32 RobotSink::OpenBody(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseBody(const nsIParserNode& aNode)
+PRInt32 RobotSink::CloseBody(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::OpenForm(const nsIParserNode& aNode)
+PRInt32 RobotSink::OpenForm(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseForm(const nsIParserNode& aNode)
+PRInt32 RobotSink::CloseForm(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::OpenFrameset(const nsIParserNode& aNode)
+PRInt32 RobotSink::OpenFrameset(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseFrameset(const nsIParserNode& aNode)
+PRInt32 RobotSink::CloseFrameset(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::OpenContainer(const nsIParserNode& aNode)
+PRInt32 RobotSink::OpenContainer(const nsIParserNode& aNode)
{
nsAutoString tmp(aNode.GetText());
tmp.ToUpperCase();
@@ -218,22 +219,22 @@ PRBool RobotSink::OpenContainer(const nsIParserNode& aNode)
}
}
}
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseContainer(const nsIParserNode& aNode)
+PRInt32 RobotSink::CloseContainer(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseTopmostContainer()
+PRInt32 RobotSink::CloseTopmostContainer()
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::AddLeaf(const nsIParserNode& aNode)
+PRInt32 RobotSink::AddLeaf(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
NS_IMETHODIMP RobotSink::Init(nsIURL* aDocumentURL)
@@ -287,3 +288,13 @@ void RobotSink::ProcessLink(const nsString& aLink)
cop->ProcessLink(absURLSpec);
}
}
+
+void RobotSink::DidBuildModel(void)
+{
+ PRInt32 i, n = mObservers.Count();
+ for (i = 0; i < n; i++) {
+ nsIRobotSinkObserver* cop = (nsIRobotSinkObserver*)mObservers.ElementAt(i);
+ cop->ReadyForNextUrl();
+ }
+
+}
diff --git a/mozilla/htmlparser/src/nsHTMLParser.cpp b/mozilla/htmlparser/src/nsHTMLParser.cpp
index b04f2a48581..d8022b635cd 100644
--- a/mozilla/htmlparser/src/nsHTMLParser.cpp
+++ b/mozilla/htmlparser/src/nsHTMLParser.cpp
@@ -30,6 +30,7 @@
#include "CNavDelegate.h"
#include "CNavDTD.h"
#include "prenv.h" //this is here for debug reasons...
+#include "prio.h"
#include "plstr.h"
#include
#include "nsIInputStream.h"
@@ -48,6 +49,7 @@ static const char* kNullToken = "Error: Null token given";
static const char* kInvalidTagStackPos = "Error: invalid tag stack position";
static char* gVerificationOutputDir=0;
+static char* gURLRef=0;
static int rickGDebug=0;
static const int gTransferBufferSize=4096; //size of the buffer used in moving data from iistream
@@ -160,6 +162,7 @@ nsHTMLParser::nsHTMLParser() {
mHasOpenForm=PR_FALSE;
InitializeDefaultTokenHandlers();
gVerificationOutputDir = PR_GetEnv("VERIFY_PARSER");
+ gURLRef = 0;
}
@@ -172,6 +175,11 @@ nsHTMLParser::nsHTMLParser() {
*/
nsHTMLParser::~nsHTMLParser() {
DeleteTokenHandlers();
+ if (gURLRef)
+ {
+ PL_strfree(gURLRef);
+ gURLRef = 0;
+ }
if(mTransferBuffer)
delete [] mTransferBuffer;
mTransferBuffer=0;
@@ -279,12 +287,12 @@ PRInt32 nsHTMLParser::GetTopmostIndex(eHTMLTags aTag) const {
return kNotFound;
}
-
/**
- * Destroy the list of token handlers
+ * Finds a tag handler for the given tag type, given in string.
*
* @update gess 4/2/98
- * @return this
+ * @param aString contains name of tag to be handled
+ * @return valid tag handler (if found) or null
*/
nsHTMLParser& nsHTMLParser::DeleteTokenHandlers(void) {
int i=0;
@@ -374,8 +382,6 @@ PRBool VerifyContextVector(PRInt32 aTags[],PRInt32 count,nsIDTD* aDTD) {
if(0!=gVerificationOutputDir) {
- if(aDTD){
-
#ifdef XP_PC
char path[_MAX_PATH+1];
strcpy(path,gVerificationOutputDir);
@@ -393,8 +399,22 @@ PRBool VerifyContextVector(PRInt32 aTags[],PRInt32 count,nsIDTD* aDTD) {
}
//ok, now see if we understand this vector
result=aDTD->VerifyContextVector(aTags,count);
- }
- if(PR_FALSE==result){
+
+ if(PR_FALSE==result){
+#ifdef NS_WIN32
+ // save file to directory indicated by bad context vector
+ int iCount = 1;
+ char filename[_MAX_PATH];
+ do {
+ sprintf(filename,"%s/html%04d.dbg", path, iCount++);
+ } while (PR_Access(filename,PR_ACCESS_EXISTS) == PR_SUCCESS);
+ PRFileDesc * debugFile = PR_Open(filename,PR_CREATE_FILE|PR_RDWR,0);
+ if (debugFile) {
+ PR_Write(debugFile,gURLRef,PL_strlen(gURLRef));
+ PR_Write(debugFile,"\n",PL_strlen("\n"));
+ PR_Close(debugFile);
+ }
+#endif
//add debugging code here to record the fact that we just encountered
//a context vector we don't know how to handle.
}
@@ -528,7 +548,13 @@ PRInt32 nsHTMLParser::ParseFileIncrementally(const char* aFilename){
nsString theBuffer;
const int kLocalBufSize=10;
+ if (gURLRef)
+ PL_strfree(gURLRef);
+ if (aFilename)
+ gURLRef = PL_strdup(aFilename);
+
mIteration=-1;
+
#if defined(XP_UNIX) && defined(IRIX)
/* XXX: IRIX does not support ios::binary */
mFileStream=new fstream(aFilename,ios::in);
@@ -576,14 +602,15 @@ PRInt32 nsHTMLParser::ParseFileIncrementally(const char* aFilename){
*/
PRBool nsHTMLParser::Parse(const char* aFilename,PRBool aIncremental){
NS_PRECONDITION(0!=aFilename,kNullFilename);
-
PRInt32 status=kBadFilename;
-
mIncremental=aIncremental;
mParseMode=DetermineParseMode();
if(aFilename) {
+ if (gURLRef)
+ PL_strfree(gURLRef);
+ gURLRef = PL_strdup(aFilename);
GetDelegateAndDTD(mParseMode,mDelegate,mDTD);
if(mDelegate) {
@@ -632,6 +659,14 @@ PRInt32 nsHTMLParser::Parse(nsIURL* aURL,PRBool aIncremental ){
if(aURL) {
+ if (gURLRef)
+ {
+ PL_strfree(gURLRef);
+ gURLRef = 0;
+ }
+ if (aURL->GetSpec())
+ gURLRef = PL_strdup(aURL->GetSpec());
+
GetDelegateAndDTD(mParseMode,mDelegate,mDTD);
if(mDelegate) {
@@ -1334,7 +1369,7 @@ PRInt32 nsHTMLParser::CloseContainer(const nsIParserNode& aNode){
break;
case eHTMLTag_head:
- //result=CloseHead(aNode);
+ result=CloseHead(aNode);
break;
case eHTMLTag_body:
diff --git a/mozilla/parser/htmlparser/robot/nsDebugRobot.cpp b/mozilla/parser/htmlparser/robot/nsDebugRobot.cpp
index 50728162711..dde8ce6f503 100644
--- a/mozilla/parser/htmlparser/robot/nsDebugRobot.cpp
+++ b/mozilla/parser/htmlparser/robot/nsDebugRobot.cpp
@@ -38,6 +38,7 @@ public:
NS_IMETHOD ProcessLink(const nsString& aURLSpec);
NS_IMETHOD VerifyDirectory (const char * verify_dir);
+ NS_IMETHOD ReadyForNextUrl(void);
};
@@ -46,6 +47,7 @@ static nsVoidArray * g_duplicateList;
static int g_iProcessed;
static int g_iMaxProcess = 5000;
static PRBool g_bHitTop;
+static PRBool g_bReadyForNextUrl;
NS_IMPL_ISUPPORTS(RobotSinkObserver, kIRobotSinkObserverIID);
@@ -54,6 +56,12 @@ NS_IMETHODIMP RobotSinkObserver::VerifyDirectory(const char * verify_dir)
return NS_OK;
}
+NS_IMETHODIMP RobotSinkObserver::ReadyForNextUrl(void)
+{
+ g_bReadyForNextUrl = PR_TRUE;
+ return NS_OK;
+}
+
NS_IMETHODIMP RobotSinkObserver::ProcessLink(const nsString& aURLSpec)
{
if (!g_bHitTop) {
@@ -156,11 +164,15 @@ extern "C" NS_EXPORT int DebugRobot(
sink->AddObserver(myObserver);
parser->SetContentSink(sink);
+ g_bReadyForNextUrl = PR_FALSE;
parser->Parse(url);
- if (yieldProc != NULL)
- (*yieldProc)(url->GetSpec());
+ while (!g_bReadyForNextUrl) {
+ if (yieldProc != NULL)
+ (*yieldProc)(url->GetSpec());
+ }
if (ww)
- ww->LoadURL(url->GetSpec());
+ ww->LoadURL(url->GetSpec());
+
NS_RELEASE(sink);
NS_RELEASE(parser);
NS_RELEASE(url);
diff --git a/mozilla/parser/htmlparser/robot/nsIRobotSinkObserver.h b/mozilla/parser/htmlparser/robot/nsIRobotSinkObserver.h
index 68be54be43a..f67557f1781 100644
--- a/mozilla/parser/htmlparser/robot/nsIRobotSinkObserver.h
+++ b/mozilla/parser/htmlparser/robot/nsIRobotSinkObserver.h
@@ -30,6 +30,7 @@ class nsIRobotSinkObserver : public nsISupports {
public:
NS_IMETHOD ProcessLink(const nsString& aURLSpec) = 0;
NS_IMETHOD VerifyDirectory(const char * verify_dir) = 0;
+ NS_IMETHOD ReadyForNextUrl(void) = 0;
};
#endif /* nsIRobotSinkObserver_h___ */
diff --git a/mozilla/parser/htmlparser/robot/nsRobotSink.cpp b/mozilla/parser/htmlparser/robot/nsRobotSink.cpp
index d893bc7303c..62033eb99ca 100644
--- a/mozilla/parser/htmlparser/robot/nsRobotSink.cpp
+++ b/mozilla/parser/htmlparser/robot/nsRobotSink.cpp
@@ -18,6 +18,7 @@
#include "nsIRobotSink.h"
#include "nsIRobotSinkObserver.h"
#include "nsIParserNode.h"
+#include "nsParserTypes.h"
#include "nsString.h"
#include "nsIURL.h"
#include "nsCRT.h"
@@ -51,23 +52,23 @@ public:
NS_DECL_ISUPPORTS
// nsIHTMLContentSink
- virtual PRBool SetTitle(const nsString& aValue);
- virtual PRBool OpenHTML(const nsIParserNode& aNode);
- virtual PRBool CloseHTML(const nsIParserNode& aNode);
- virtual PRBool OpenHead(const nsIParserNode& aNode);
- virtual PRBool CloseHead(const nsIParserNode& aNode);
- virtual PRBool OpenBody(const nsIParserNode& aNode);
- virtual PRBool CloseBody(const nsIParserNode& aNode);
- virtual PRBool OpenForm(const nsIParserNode& aNode);
- virtual PRBool CloseForm(const nsIParserNode& aNode);
- virtual PRBool OpenFrameset(const nsIParserNode& aNode);
- virtual PRBool CloseFrameset(const nsIParserNode& aNode);
- virtual PRBool OpenContainer(const nsIParserNode& aNode);
- virtual PRBool CloseContainer(const nsIParserNode& aNode);
- virtual PRBool CloseTopmostContainer();
- virtual PRBool AddLeaf(const nsIParserNode& aNode);
+ virtual PRInt32 SetTitle(const nsString& aValue);
+ virtual PRInt32 OpenHTML(const nsIParserNode& aNode);
+ virtual PRInt32 CloseHTML(const nsIParserNode& aNode);
+ virtual PRInt32 OpenHead(const nsIParserNode& aNode);
+ virtual PRInt32 CloseHead(const nsIParserNode& aNode);
+ virtual PRInt32 OpenBody(const nsIParserNode& aNode);
+ virtual PRInt32 CloseBody(const nsIParserNode& aNode);
+ virtual PRInt32 OpenForm(const nsIParserNode& aNode);
+ virtual PRInt32 CloseForm(const nsIParserNode& aNode);
+ virtual PRInt32 OpenFrameset(const nsIParserNode& aNode);
+ virtual PRInt32 CloseFrameset(const nsIParserNode& aNode);
+ virtual PRInt32 OpenContainer(const nsIParserNode& aNode);
+ virtual PRInt32 CloseContainer(const nsIParserNode& aNode);
+ virtual PRInt32 CloseTopmostContainer();
+ virtual PRInt32 AddLeaf(const nsIParserNode& aNode);
virtual void WillBuildModel(void) { }
- virtual void DidBuildModel(void){ }
+ virtual void DidBuildModel(void);
virtual void WillInterrupt(void) { }
virtual void WillResume(void) { }
@@ -130,62 +131,62 @@ NS_IMETHODIMP RobotSink::QueryInterface(REFNSIID aIID, void** aInstancePtr)
return NS_NOINTERFACE;
}
-PRBool RobotSink::SetTitle(const nsString& aValue)
+PRInt32 RobotSink::SetTitle(const nsString& aValue)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::OpenHTML(const nsIParserNode& aNode)
+PRInt32 RobotSink::OpenHTML(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseHTML(const nsIParserNode& aNode)
+PRInt32 RobotSink::CloseHTML(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::OpenHead(const nsIParserNode& aNode)
+PRInt32 RobotSink::OpenHead(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseHead(const nsIParserNode& aNode)
+PRInt32 RobotSink::CloseHead(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::OpenBody(const nsIParserNode& aNode)
+PRInt32 RobotSink::OpenBody(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseBody(const nsIParserNode& aNode)
+PRInt32 RobotSink::CloseBody(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::OpenForm(const nsIParserNode& aNode)
+PRInt32 RobotSink::OpenForm(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseForm(const nsIParserNode& aNode)
+PRInt32 RobotSink::CloseForm(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::OpenFrameset(const nsIParserNode& aNode)
+PRInt32 RobotSink::OpenFrameset(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseFrameset(const nsIParserNode& aNode)
+PRInt32 RobotSink::CloseFrameset(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::OpenContainer(const nsIParserNode& aNode)
+PRInt32 RobotSink::OpenContainer(const nsIParserNode& aNode)
{
nsAutoString tmp(aNode.GetText());
tmp.ToUpperCase();
@@ -218,22 +219,22 @@ PRBool RobotSink::OpenContainer(const nsIParserNode& aNode)
}
}
}
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseContainer(const nsIParserNode& aNode)
+PRInt32 RobotSink::CloseContainer(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::CloseTopmostContainer()
+PRInt32 RobotSink::CloseTopmostContainer()
{
- return PR_TRUE;
+ return kNoError;
}
-PRBool RobotSink::AddLeaf(const nsIParserNode& aNode)
+PRInt32 RobotSink::AddLeaf(const nsIParserNode& aNode)
{
- return PR_TRUE;
+ return kNoError;
}
NS_IMETHODIMP RobotSink::Init(nsIURL* aDocumentURL)
@@ -287,3 +288,13 @@ void RobotSink::ProcessLink(const nsString& aLink)
cop->ProcessLink(absURLSpec);
}
}
+
+void RobotSink::DidBuildModel(void)
+{
+ PRInt32 i, n = mObservers.Count();
+ for (i = 0; i < n; i++) {
+ nsIRobotSinkObserver* cop = (nsIRobotSinkObserver*)mObservers.ElementAt(i);
+ cop->ReadyForNextUrl();
+ }
+
+}
diff --git a/mozilla/parser/htmlparser/src/nsHTMLParser.cpp b/mozilla/parser/htmlparser/src/nsHTMLParser.cpp
index b04f2a48581..d8022b635cd 100644
--- a/mozilla/parser/htmlparser/src/nsHTMLParser.cpp
+++ b/mozilla/parser/htmlparser/src/nsHTMLParser.cpp
@@ -30,6 +30,7 @@
#include "CNavDelegate.h"
#include "CNavDTD.h"
#include "prenv.h" //this is here for debug reasons...
+#include "prio.h"
#include "plstr.h"
#include
#include "nsIInputStream.h"
@@ -48,6 +49,7 @@ static const char* kNullToken = "Error: Null token given";
static const char* kInvalidTagStackPos = "Error: invalid tag stack position";
static char* gVerificationOutputDir=0;
+static char* gURLRef=0;
static int rickGDebug=0;
static const int gTransferBufferSize=4096; //size of the buffer used in moving data from iistream
@@ -160,6 +162,7 @@ nsHTMLParser::nsHTMLParser() {
mHasOpenForm=PR_FALSE;
InitializeDefaultTokenHandlers();
gVerificationOutputDir = PR_GetEnv("VERIFY_PARSER");
+ gURLRef = 0;
}
@@ -172,6 +175,11 @@ nsHTMLParser::nsHTMLParser() {
*/
nsHTMLParser::~nsHTMLParser() {
DeleteTokenHandlers();
+ if (gURLRef)
+ {
+ PL_strfree(gURLRef);
+ gURLRef = 0;
+ }
if(mTransferBuffer)
delete [] mTransferBuffer;
mTransferBuffer=0;
@@ -279,12 +287,12 @@ PRInt32 nsHTMLParser::GetTopmostIndex(eHTMLTags aTag) const {
return kNotFound;
}
-
/**
- * Destroy the list of token handlers
+ * Finds a tag handler for the given tag type, given in string.
*
* @update gess 4/2/98
- * @return this
+ * @param aString contains name of tag to be handled
+ * @return valid tag handler (if found) or null
*/
nsHTMLParser& nsHTMLParser::DeleteTokenHandlers(void) {
int i=0;
@@ -374,8 +382,6 @@ PRBool VerifyContextVector(PRInt32 aTags[],PRInt32 count,nsIDTD* aDTD) {
if(0!=gVerificationOutputDir) {
- if(aDTD){
-
#ifdef XP_PC
char path[_MAX_PATH+1];
strcpy(path,gVerificationOutputDir);
@@ -393,8 +399,22 @@ PRBool VerifyContextVector(PRInt32 aTags[],PRInt32 count,nsIDTD* aDTD) {
}
//ok, now see if we understand this vector
result=aDTD->VerifyContextVector(aTags,count);
- }
- if(PR_FALSE==result){
+
+ if(PR_FALSE==result){
+#ifdef NS_WIN32
+ // save file to directory indicated by bad context vector
+ int iCount = 1;
+ char filename[_MAX_PATH];
+ do {
+ sprintf(filename,"%s/html%04d.dbg", path, iCount++);
+ } while (PR_Access(filename,PR_ACCESS_EXISTS) == PR_SUCCESS);
+ PRFileDesc * debugFile = PR_Open(filename,PR_CREATE_FILE|PR_RDWR,0);
+ if (debugFile) {
+ PR_Write(debugFile,gURLRef,PL_strlen(gURLRef));
+ PR_Write(debugFile,"\n",PL_strlen("\n"));
+ PR_Close(debugFile);
+ }
+#endif
//add debugging code here to record the fact that we just encountered
//a context vector we don't know how to handle.
}
@@ -528,7 +548,13 @@ PRInt32 nsHTMLParser::ParseFileIncrementally(const char* aFilename){
nsString theBuffer;
const int kLocalBufSize=10;
+ if (gURLRef)
+ PL_strfree(gURLRef);
+ if (aFilename)
+ gURLRef = PL_strdup(aFilename);
+
mIteration=-1;
+
#if defined(XP_UNIX) && defined(IRIX)
/* XXX: IRIX does not support ios::binary */
mFileStream=new fstream(aFilename,ios::in);
@@ -576,14 +602,15 @@ PRInt32 nsHTMLParser::ParseFileIncrementally(const char* aFilename){
*/
PRBool nsHTMLParser::Parse(const char* aFilename,PRBool aIncremental){
NS_PRECONDITION(0!=aFilename,kNullFilename);
-
PRInt32 status=kBadFilename;
-
mIncremental=aIncremental;
mParseMode=DetermineParseMode();
if(aFilename) {
+ if (gURLRef)
+ PL_strfree(gURLRef);
+ gURLRef = PL_strdup(aFilename);
GetDelegateAndDTD(mParseMode,mDelegate,mDTD);
if(mDelegate) {
@@ -632,6 +659,14 @@ PRInt32 nsHTMLParser::Parse(nsIURL* aURL,PRBool aIncremental ){
if(aURL) {
+ if (gURLRef)
+ {
+ PL_strfree(gURLRef);
+ gURLRef = 0;
+ }
+ if (aURL->GetSpec())
+ gURLRef = PL_strdup(aURL->GetSpec());
+
GetDelegateAndDTD(mParseMode,mDelegate,mDTD);
if(mDelegate) {
@@ -1334,7 +1369,7 @@ PRInt32 nsHTMLParser::CloseContainer(const nsIParserNode& aNode){
break;
case eHTMLTag_head:
- //result=CloseHead(aNode);
+ result=CloseHead(aNode);
break;
case eHTMLTag_body: