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

Reply via email to