I created a class (MyBrowser). This class implements the interfaces:
public nsIWebBrowserChrome,
public nsIWebBrowserChromeFocus,
public nsIEmbeddingSiteWindow,
public nsIInterfaceRequestor
I created a progresslistener (MyProgressListener) and MyBrowser object add
this listener.
I created a class (EmbedListener) and it implemets:
public nsIDOMKeyListener,
public nsIDOMMouseListener,
public nsIDOMUIListener
In MyBrowser object I created the EmbedListener object and I add these
listeners (nsIDOMKeyListener, nsIDOMMouseListener, nsIDOMUIListener) to it.
OnStateChange I tried to add for example the "DOMSubtreeModified" event
to EmbedListener object when STATE_STOP, It add the event without fail, but
never detects it. Mouse events are detected well, but not
"DOMSubtreeModified". I put a break point in HandleEvent function, but only
enters into it with mouse events. The tree is modifying after load the page,
firefox its detecting well the event and executing the associated function.
What am I doing wrong?
Code below:
//MyBrowser.cpp
MyBrowserProgressListener *pIL;
pIL = new MyBrowserProgressListener();
pIL->setBrowser(this);
nsCOMPtr<nsISupports> mPG;
mPG = static_cast<nsIWebProgressListener *>(pIL);
nsCOMPtr<nsISupportsWeakReference> supportsWeak;
supportsWeak = do_QueryInterface(mPG);
nsCOMPtr<nsIWeakReference> weakRef;
supportsWeak->GetWeakReference(getter_AddRefs(weakRef));
mWebBrowser->AddWebBrowserListener(weakRef,
NS_GET_IID(nsIWebProgressListener));
mEventListener = new EmbedEventListener();
nsCOMPtr<nsISupports> mEventListenerGuard;
mEventListener->Init();
nsIDOMEventListener *eventListener =
static_cast<nsIDOMEventListener *>(static_cast<nsIDOMKeyListener
*>(mEventListener));
nsCOMPtr<nsPIDOMWindow> pDomWin;
GetPIDOMWindow(getter_AddRefs(pDomWin));
mEventTarget = do_QueryInterface(pDomWin->GetChromeEventHandler());
// add the key listener
rv = mEventTarget->AddEventListenerByIID(eventListener,
NS_GET_IID(nsIDOMKeyListener));
if (NS_FAILED(rv)) {
NS_WARNING("Failed to add key listener\n");
printf("Failed to add key listener\n");fflush(stdout);
}
rv = mEventTarget->AddEventListenerByIID(eventListener,
NS_GET_IID(nsIDOMMouseListener));
if (NS_FAILED(rv)) {
NS_WARNING("Failed to add mouse listener\n");
printf("Failed to add mouse listener\n");fflush(stdout);
}
rv = mEventTarget->AddEventListenerByIID(eventListener,
NS_GET_IID(nsIDOMUIListener));
if (NS_FAILED(rv)) {
NS_WARNING("Failed to add UI listener\n");
printf("Failed to add UI listener\n");fflush(stdout);
}
rv = mEventTarget->AddEventListenerByIID(eventListener,
NS_GET_IID(nsIDOMEventListener));
if (NS_FAILED(rv)) {
NS_WARNING("Failed to add Event listener\n");
printf("Failed to add UI listener\n");fflush(stdout);
}
//MyWebProgressListener.cpp
MyBrowserProgressListener::MyBrowserProgressListener(){
NS_INIT_ISUPPORTS();
}
MyBrowserProgressListener::~MyBrowserProgressListener(){
}
void MyBrowserProgressListener::setBrowser(MyBrowser *MyBrowser){
pMyBrowser = MyBrowser;
}
NS_IMPL_ISUPPORTS2(MyBrowserProgressListener,
nsIWebProgressListener,
nsISupportsWeakReference)
NS_IMETHODIMP MyBrowserProgressListener::OnStateChange(nsIWebProgress
*aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus)
{
printf("MyBrowserProgressListener::OnStateChange\n");fflush(stdout);
nsresult rv;
nsCOMPtr<nsIWebNavigation> pCOM_wn;
nsCOMPtr<nsIURI> pCOM_u;
nsCOMPtr<nsIDOMWindow> pCOM_dw;
nsCOMPtr<nsIDOMEventTarget> pCOM_det;
//Seeing what is going on with the doucmnet
if (aStateFlags & STATE_IS_DOCUMENT) {
if (aStateFlags & STATE_START) {
printf("aStateFlags STATE_IS_DOCUMENT & STATE_START\n");
}
//return NS_OK;
}
if (STATE_STOP) {
//Getting DOM Window to get the event target
printf("STATE_STOP\n");fflush(stdout);
aWebProgress->GetDOMWindow (getter_AddRefs (pCOM_dw));
pCOM_det = do_QueryInterface (pCOM_dw);
nsIDOMEventListener *domEvList =
static_cast<nsIDOMEventListener *>(static_cast<nsIDOMKeyListener
*>(pMyBrowser->mEventListener));
//Unregistering listener first incase it's already registered for
this..Prolly not necessary
pCOM_det->RemoveEventListener (NS_LITERAL_STRING("DOMSubtreeModified"),
domEvList, false);
//Registering
rv = pCOM_det->AddEventListener (NS_LITERAL_STRING("DOMSubtreeModified"),
domEvList, false);
if (NS_FAILED(rv)) {
printf("MyBrowserProgressListener::OnStateChange FAILS Adding
EVentListener");fflush(stdout);
}
}
return NS_OK;
}
//EmbedEventListener
NS_IMETHODIMP
EmbedEventListener::HandleEvent(nsIDOMEvent* aDOMEvent)
{
nsString str_event;
aDOMEvent->GetType(str_event);
printf("EmbedEventListener::HandleEvent");fflush(stdout);
return NS_OK;
}
NS_IMETHODIMP
EmbedEventListener::KeyDown(nsIDOMEvent* aDOMEvent)
{
printf("EmbedEventListener::KeyDown\n");fflush(stdout);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
EmbedEventListener::KeyUp(nsIDOMEvent* aDOMEvent)
{
printf("EmbedEventListener::KeyUp\n");fflush(stdout);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
EmbedEventListener::KeyPress(nsIDOMEvent* aDOMEvent)
{
printf("EmbedEventListener::KeyPress\n");fflush(stdout);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
EmbedEventListener::MouseDown(nsIDOMEvent* aDOMEvent)
{
printf("EmbedEventListener::MouseDown\n");fflush(stdout);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
EmbedEventListener::MouseUp(nsIDOMEvent* aDOMEvent)
{
printf("EmbedEventListener::MouseUp\n");fflush(stdout);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
EmbedEventListener::MouseClick(nsIDOMEvent* aDOMEvent)
{
printf("EmbedEventListener::MouseClick\n");fflush(stdout);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
EmbedEventListener::MouseDblClick(nsIDOMEvent* aDOMEvent)
{
printf("EmbedEventListener::MouseDblClick\n");fflush(stdout);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
EmbedEventListener::MouseOver(nsIDOMEvent* aDOMEvent)
{
printf("EmbedEventListener::MouseOver\n");fflush(stdout);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
EmbedEventListener::MouseOut(nsIDOMEvent* aDOMEvent)
{
printf("EmbedEventListener::MouseOut\n");fflush(stdout);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
EmbedEventListener::Activate(nsIDOMEvent* aDOMEvent)
{
printf("EmbedEventListener::Activate\n");fflush(stdout);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
EmbedEventListener::FocusIn(nsIDOMEvent* aDOMEvent)
{
printf("EmbedEventListener::FocusIn\n");fflush(stdout);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
EmbedEventListener::FocusOut(nsIDOMEvent* aDOMEvent)
{
printf("EmbedEventListener::FocusOut\n");fflush(stdout);
return NS_ERROR_NOT_IMPLEMENTED;
}
_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding