On 7 30 ,   5 28 , steven <[EMAIL PROTECTED]> wrote:
>   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(tarĀ­get));
>  popupwindowlister * mPopupEventListener = new
> popupwindowlister(GTK_MOZ_EMBED(embed));
>  target->AddEventListener(NS_LITERAL_STRING("DOMPopupBlocked"),
>                                                 mPopupEventListener,
> PR_TRUE);
> But when I run it
> vistorhttp://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
I have just resolve it . AddEventLister on DOMPopupBlocked in
GtkMozEmbed, make a new signal ,
Once catching the event, emit the signal on GtkMozEmbed in HandleEvent
function ,That is all

_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding

Reply via email to