use GtkMozEmbed widget to construct gtk-based browser .
the situation is that the browser should notify end user when popup
windows blocked event occurred
and let end user to choose whether allow the popup windows shows
the framework is that
1) register a DOMPopupBlocked event listner of the target of doc
2) get blocked window uri
3) tell UI and nsIPermissionManager ,let end user to choose whether
allow the site popoup windows
I add a listener to DOMPopupBlocked event of the document when the
page load completely.
#include<nsIDOMEventListener.h>
#include <nsIDOMPopupBlockedEvent.h>
#include<nsCOMPtr.h>
#include<nsIURI.h>
#include<nsIDOMEvent.h>
#include "popupwindowlister.h"
#include <nsString.h>
#include <gtkembedmoz/gtkmozembed.h>
#include <nsIWebBrowser.h>
#include <gtkembedmoz/gtkmozembed_internal.h>
#include <nsIDOMWindow.h>
#include <nsIDOMWindow2.h>
NS_IMPL_ADDREF(popupwindowlister);
NS_IMPL_RELEASE(popupwindowlister);
NS_INTERFACE_MAP_BEGIN(popupwindowlister)
NS_INTERFACE_MAP_ENTRY(nsIDOMEventListener)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMEventListener)
NS_INTERFACE_MAP_END
NS_IMETHODIMP popupwindowlister::HandleEvent( nsIDOMEvent* aDOMEvent)
{
fprintf(stderr,"HandleEvent invoke\n");
nsCOMPtr<nsIDOMPopupBlockedEvent> popupEvent =
do_QueryInterface(aDOMEvent);
NS_ENSURE_TRUE (popupEvent, NS_ERROR_FAILURE);
nsCOMPtr<nsIURI> requesterURI;
popupEvent->GetRequestingWindowURI(getter_AddRefs(requesterURI));
NS_ENSURE_TRUE (requesterURI, NS_ERROR_FAILURE);
nsCAutoString spec;
nsresult rv = requesterURI->GetSpec(spec);
NS_ENSURE_SUCCESS (rv, rv);
NS_ENSURE_FALSE (spec.IsEmpty(), NS_ERROR_FAILURE);
fprintf (stderr, " popup %s\n",spec.get());
return rv;
}
popupwindowlister::popupwindowlister(GtkMozEmbed* embed)
{
gtk_moz_embed_get_nsIWebBrowser(embed ,getter_AddRefs(mWebBrowser));
}
popupwindowlister::~popupwindowlister()
{
}
nsresult popupwindowlister::GetDOMEventTarget (GtkMozEmbed * embed ,
nsIDOMEventTarget** aTarget)
{
nsCOMPtr<nsIWebBrowser> aWebBrowser ;
gtk_moz_embed_get_nsIWebBrowser(embed ,getter_AddRefs(aWebBrowser));
nsCOMPtr<nsIDOMWindow> domWin;
aWebBrowser->GetContentDOMWindow (getter_AddRefs(domWin));
NS_ENSURE_TRUE (domWin, NS_ERROR_FAILURE);
nsCOMPtr<nsIDOMWindow2> domWin2 (do_QueryInterface (domWin));
NS_ENSURE_TRUE (domWin2, NS_ERROR_FAILURE);
return domWin2->GetWindowRoot (aTarget);
}
I connect callback func below to "net_stop" singal :
nsCOMPtr<nsIDOMEventTarget> target;
popupwindowlister::GetDOMEventTarget((GtkMozEmbed*)embed,getter_AddRefs(target));
popupwindowlister * mPopupEventListener = new
popupwindowlister(GTK_MOZ_EMBED(embed));
target->AddEventListener(NS_LITERAL_STRING("DOMPopupBlocked"),
mPopupEventListener,
PR_TRUE);
But when I run it
vistor http://popuptest.com/popuptest1.com
function popupwindowlister::HandleEvent seems not be called ,because
the string HandleEvent invoke not show in the screen
thanks for any guide
_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding