I'm not claiming this is the RIGHT thing to do, but this is what I
did to get things working when embedding mozilla1.7.5.
I made modifications to nsDSURIContentListener.cpp and changed
nsDSURIContentListener::OnStartURIOpen() (which is what I was using
to do the filtering it sounds like you want to)to look like this:
NS_IMETHODIMP
nsDSURIContentListener::OnStartURIOpen(nsIURI* aURI, PRBool* aAbortOpen)
{
nsCOMPtr<nsIURIContentListener> parentListener;
GetParentContentListener(getter_AddRefs(parentListener));
if (parentListener) {
nsresult result;
result = parentListener->OnStartURIOpen(aURI, aAbortOpen);
// if we should pay attention to parent
if (result != NS_ERROR_NOT_IMPLEMENTED)
return result;
}
return NS_OK;
}
I'm happy to hear a better way of doing this, but it worked for me :)
J
On Jun 12, 2006, at 4:24 PM, Craig Kadziolka wrote:
Hi,
I am trying to implement the nsIURIContentListener interface and
get it registered so I can closely monitor URI changes before the
location is changed. I have added this interface to my "Chrome"
class and basically stubbed out all the methods. I then registered
the interface using SetParentURIContentListener. After that I put
breakpoints on all the methods included in nsIURIContentListener
but none of them seem to be called, even when the user clicks on a
URL.
I am using Mozilla checked out of CVS about a week ago, since I had
problems getting older release versions building with my compiler
(VC++ 2005 express).
My main initialization looks like this (error checking removed to
be concise):
NS_InitEmbedding(nsnull, nsnull);
nsCOMPtr<nsIComponentRegistrar> registrar;
nsresult rv = NS_GetComponentRegistrar(getter_AddRefs(registrar));
if (NS_FAILED(rv)) return false;
rv = registrar->AutoRegister(nsnull);
mWebBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv);
mBaseWindow = do_QueryInterface(mWebBrowser, &rv);
chrome = new TestChrome();
chrome->AddRef();
mWebBrowser->SetContainerWindow(NS_STATIC_CAST
(nsIWebBrowserChrome*, chrome));
mWebBrowser->SetParentURIContentListener(NS_STATIC_CAST
(nsIURIContentListener *, chrome));
nsCOMPtr<nsIWebBrowserSetup>setup(do_QueryInterface(mWebBrowser));
if (setup)
{
setup->SetProperty
(nsIWebBrowserSetup::SETUP_IS_CHROME_WRAPPER, PR_TRUE);
}
nsWeakPtr weakling(dont_AddRef(NS_GetWeakReference(NS_STATIC_CAST
(nsIWebProgressListener*,
chrome))));
mWebBrowser->AddWebBrowserListener(weakling, NS_GET_IID
(nsIWebProgressListener));
Then my "TestChrome" class is defined to be:
class TestChrome : public nsIInterfaceRequestor,
public nsIWebBrowserChrome,
public nsIWebBrowserChromeFocus,
public nsIEmbeddingSiteWindow2,
public nsIWebProgressListener,
public nsIContextMenuListener2,
public nsITooltipListener,
public nsIURIContentListener,
public nsSupportsWeakReference
{
public:
TestChrome() {};
NS_DECL_ISUPPORTS
NS_DECL_NSIINTERFACEREQUESTOR
NS_DECL_NSIWEBBROWSERCHROME
NS_DECL_NSIWEBBROWSERCHROMEFOCUS
NS_DECL_NSIEMBEDDINGSITEWINDOW
NS_DECL_NSIEMBEDDINGSITEWINDOW2
NS_DECL_NSIWEBPROGRESSLISTENER
NS_DECL_NSICONTEXTMENULISTENER2
NS_DECL_NSITOOLTIPLISTENER
NS_DECL_NSIURICONTENTLISTENER
protected:
nsCOMPtr<nsIWebBrowser> mWebBrowser;
};
And the nsIURIContentListener methods are stubbed out like this
(however none of them ever get called so it shouldnt make any
difference):
NS_IMETHODIMP TestChrome::OnStartURIOpen(nsIURI *aURI, PRBool
*_retval){
*_retval = PR_TRUE;
return NS_OK;
}
NS_IMETHODIMP TestChrome::DoContent(const char *aContentType,
PRBool aIsContentPreferred, nsIRequest *aRequest, nsIStreamListener
**aContentHandler, PRBool *_retval){
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP TestChrome::IsPreferred(const char *aContentType,
char **aDesiredContentType, PRBool *_retval)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP TestChrome::CanHandleContent(const char
*aContentType, PRBool aIsContentPreferred, char
**aDesiredContentType, PRBool *_retval)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP TestChrome::GetLoadCookie(nsISupports * *aLoadCookie){
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP TestChrome::SetLoadCookie(nsISupports *aLoadCookie){
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP TestChrome::GetParentContentListener
(nsIURIContentListener * *aParentContentListener){
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP TestChrome::SetParentContentListener
(nsIURIContentListener *aParentContentListener){
return NS_ERROR_NOT_IMPLEMENTED;
}
Any ideas?
Craig.
_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding
_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding