Hi,

I created a C++ class called MyBrowserProgressListener. This class
implements the nsIWebProgressListener interface. When I run the application
the AddWebBrowserListener fails. I returns 0x80004003
(NS_ERROR_INVALID_POINTER)

I defined the NS_STATIC_CAST in main.cpp code because isn't defined in
nscore.h. [#define NS_STATIC_CAST(__type, __ptr)      static_cast< __type
>(__ptr)]
I included the "nsIWeakReference.h" and "nsIWeakReferenceUtils.h" headers
because without them the compiler returns: do_GetWakReference was not
declared in this scope.

What am I doing wrong? The code below:

//Code of myBrowserProgressListener.h
class MyBrowserProgressListener : public nsIWebProgressListener{

public:
    NS_DECL_ISUPPORTS
    NS_DECL_NSIWEBPROGRESSLISTENER
};

//Code of myBrowserProgressListener.cpp
#include "mybrowserProgressListener.h"
#include <stdio.h>

NS_IMETHODIMP MyBrowserProgressListener::OnStateChange(nsIWebProgress
*aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus)
{
    printf("MyBrowserProgressListener::OnStateChange");
}

NS_IMETHODIMP MyBrowserProgressListener::OnProgressChange(nsIWebProgress
*aWebProgress, nsIRequest *aRequest, PRInt32 aCurSelfProgress, PRInt32
aMaxSelfProgress, PRInt32 aCurTotalProgress, PRInt32 aMaxTotalProgress) {
    printf("MyBrowserProgressListener::OnProgressChange");
}
NS_IMETHODIMP MyBrowserProgressListener::OnLocationChange(nsIWebProgress
*aWebProgress, nsIRequest *aRequest, nsIURI *aLocation) {
    printf("MyBrowserProgressListener::OnLocationChange");
}
NS_IMETHODIMP MyBrowserProgressListener::OnStatusChange(nsIWebProgress
*aWebProgress, nsIRequest *aRequest, nsresult aStatus, const PRUnichar
*aMessage) {
    printf("MyBrowserProgressListener::OnStatusChange");
}
NS_IMETHODIMP MyBrowserProgressListener::OnSecurityChange(nsIWebProgress
*aWebProgress, nsIRequest *aRequest, PRUint32 aState) {
    printf("MyBrowserProgressListener::OnSecurityChange");
}

//Main.cpp Add listener.
//I add "#define NS_STATIC_CAST(__type, __ptr)      static_cast< __type
>(__ptr)" because NS_STATIC_CAST is not defined in nscore header
//I included "nsIWeakReferenceUtils.h" and "nsIWeakReference.h" headers.
mWebBrowser = do_CreateInstance ( NS_WEBBROWSER_CONTRACTID, &rv );
NS_ENSURE_SUCCESS ( rv, rv );
mWindow = reinterpret_cast<nativeWindow> ( parentWindow );

mWebBrowser->SetContainerWindow ( static_cast<nsIWebBrowserChrome*> ( this )
);

nsCOMPtr<nsIDocShellTreeItem> dsti = do_QueryInterface ( mWebBrowser );
dsti->SetItemType ( nsIDocShellTreeItem::typeContentWrapper );

mBrowserBaseWindow = do_QueryInterface ( mWebBrowser ) ;

mBrowserBaseWindow->InitWindow( mWindow, nsnull, x, y, width, height );
mBrowserBaseWindow->Create();

nsCOMPtr<MyBrowserProgressListener> ml;
nsCOMPtr<nsIWeakReference>
listener(do_GetWeakReference(NS_STATIC_CAST(nsIWebProgressListener*, ml)));
rv = mWebBrowser->AddWebBrowserListener(listener,
NS_GET_IID(nsIWebProgressListener));
if (NS_FAILED(rv))
{
    printf("Add listener FAILED (rv = 0x%08x)", rv); //It returns
0x80004003.
    return rv;
}

mBrowserBaseWindow->SetVisibility ( PR_TRUE );
_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding

Reply via email to