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