Fix for 76152: /r=bstell; /sr=brendan

This commit is contained in:
yokoyama%netscape.com 2001-04-22 22:45:30 +00:00
parent beb757c9b8
commit 4241189e14
2 changed files with 20 additions and 70 deletions

View File

@ -21,8 +21,6 @@
* Pierre Phaneuf <pp@ludusdesign.com>
*/
#define IMPL_NS_IPARSERFILTER
#include "nsString.h"
#include "plstr.h"
#include "pratom.h"
@ -89,49 +87,16 @@ nsDetectionAdaptor::nsDetectionAdaptor( void )
{
NS_INIT_REFCNT();
PR_AtomicIncrement(& g_InstanceCount);
mDetector = nsnull;
mDontFeedToDetector = PR_TRUE;
mObserver = nsnull;
}
//--------------------------------------------------------------
nsDetectionAdaptor::~nsDetectionAdaptor()
{
PR_AtomicDecrement(& g_InstanceCount);
}
//--------------------------------------------------------------
NS_IMPL_ADDREF ( nsDetectionAdaptor );
NS_IMPL_RELEASE ( nsDetectionAdaptor );
//----------------------------------------------------------------------
// here: can't use NS_IMPL_QUERYINTERFACE due to the #ifdef
//----------------------------------------------------------------------
NS_IMETHODIMP nsDetectionAdaptor::QueryInterface(REFNSIID aIID, void**aInstancePtr)
{
if( NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
*aInstancePtr = NULL;
if( aIID.Equals ( NS_GET_IID(nsICharsetDetectionAdaptor) )) {
*aInstancePtr = (void*) ((nsICharsetDetectionAdaptor*) this);
NS_ADDREF_THIS();
return NS_OK;
}
#ifdef IMPL_NS_IPARSERFILTER
if( aIID.Equals ( kIParserFilterIID)) {
*aInstancePtr = (void*) ((nsIParserFilter*) this);
NS_ADDREF_THIS();
return NS_OK;
}
#endif /* IMPL_NS_IPARSERFILTER */
if( aIID.Equals ( kISupportsIID )) {
*aInstancePtr = (void*) ( this );
NS_ADDREF_THIS();
return NS_OK;
}
return NS_NOINTERFACE;
}
NS_IMPL_ISUPPORTS2 (nsDetectionAdaptor, nsIParserFilter, nsICharsetDetectionAdaptor);
//--------------------------------------------------------------
NS_IMETHODIMP nsDetectionAdaptor::Init(
@ -139,40 +104,30 @@ NS_IMETHODIMP nsDetectionAdaptor::Init(
nsIDocument* aDocument, nsIParser* aParser, const PRUnichar* aCharset,
const char* aCommand)
{
if((nsnull != aWebShellSvc) && (nsnull != aDetector) && (nsnull != aCharset))
{
nsICharsetDetectionObserver* aObserver = nsnull;
nsresult rv = NS_OK;
mObserver = new nsMyObserver(); // weak ref to it, release by charset detector
if(nsnull == mObserver)
return NS_ERROR_OUT_OF_MEMORY;
if((nsnull != aWebShellSvc) && (nsnull != aDetector) && (nsnull != aCharset))
{
nsresult rv = NS_OK;
mObserver = new nsMyObserver();
if(!mObserver)
return NS_ERROR_OUT_OF_MEMORY;
rv = mObserver->QueryInterface(NS_GET_IID(nsICharsetDetectionObserver),
(void**) &aObserver);
rv = mObserver->Init(aWebShellSvc, aDocument, aParser, aCharset, aCommand);
if(NS_SUCCEEDED(rv)) {
rv = aDetector->Init(mObserver.get());
if(NS_SUCCEEDED(rv)) {
rv = mObserver->Init(aWebShellSvc, aDocument,
aParser, aCharset, aCommand);
if(NS_SUCCEEDED(rv)) {
rv = aDetector->Init(aObserver);
}
if(NS_FAILED(rv))
return rv;
mDetector = aDetector;
mDontFeedToDetector = PR_FALSE;
return NS_OK;
}
mDetector = aDetector;
mDontFeedToDetector = PR_FALSE;
return NS_OK;
}
}
return NS_ERROR_ILLEGAL_VALUE;
}
return NS_ERROR_ILLEGAL_VALUE;
}
//--------------------------------------------------------------
NS_IMETHODIMP nsDetectionAdaptor::RawBuffer
(const char * buffer, PRUint32 * buffer_length)
{
if((mDontFeedToDetector) || (nsnull == mDetector))
if((mDontFeedToDetector) || (!mDetector))
return NS_OK;
nsresult rv = NS_OK;
rv = mDetector->DoIt((const char*)buffer, *buffer_length, &mDontFeedToDetector);
@ -184,7 +139,7 @@ NS_IMETHODIMP nsDetectionAdaptor::RawBuffer
//--------------------------------------------------------------
NS_IMETHODIMP nsDetectionAdaptor::Finish()
{
if((mDontFeedToDetector) || (nsnull == mDetector))
if((mDontFeedToDetector) || (!mDetector))
return NS_OK;
nsresult rv = NS_OK;
rv = mDetector->Done();

View File

@ -26,12 +26,9 @@
#include "nsIDocument.h"
#include "nsIWebShellServices.h"
#ifdef IMPL_NS_IPARSERFILTER
#include "nsIParserFilter.h"
static NS_DEFINE_IID(kIParserFilterIID, NS_IPARSERFILTER_IID);
#endif /* IMPL_NS_IPARSERFILTER */
class CToken;
extern "C" PRInt32 g_InstanceCount;
extern "C" PRInt32 g_LockCount;
@ -80,9 +77,7 @@ class nsMyObserver : public nsICharsetDetectionObserver
};
class nsDetectionAdaptor :
#ifdef IMPL_NS_IPARSERFILTER
public nsIParserFilter,
#endif /* IMPL_NS_IPARSERFILTER */
public nsICharsetDetectionAdaptor
{
public:
@ -111,7 +106,7 @@ class nsDetectionAdaptor :
private:
nsCOMPtr<nsICharsetDetector> mDetector;
PRBool mDontFeedToDetector;
nsMyObserver* mObserver;
nsCOMPtr<nsMyObserver> mObserver;
};
#endif /* nsDetectionAdaptor_h__ */