void nsIDOMEventListener.HandleEvent(nsIDOMEvent e)
{
string type;
using (nsAString str = new nsAString())
{
e.GetTypeAttribute(str);
type = str.ToString();
}
GeckoDomEventArgs ea = null;
switch (type)
{
case "keydown": OnDomKeyDown((GeckoDomKeyEventArgs)(ea = new GeckoDomKeyEventArgs((nsIDOMKeyEvent)e))); break;
case "keyup": OnDomKeyUp((GeckoDomKeyEventArgs)(ea = new GeckoDomKeyEventArgs((nsIDOMKeyEvent)e))); break;
case "keypress": OnDomKeyPress((GeckoDomKeyEventArgs)(ea = new GeckoDomKeyEventArgs((nsIDOMKeyEvent)e))); break;
case "mousedown": OnDomMouseDown((GeckoDomMouseEventArgs)(ea = new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e))); break;
case "mouseup": OnDomMouseUp((GeckoDomMouseEventArgs)(ea = new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e))); break;
case "mousemove": OnDomMouseMove((GeckoDomMouseEventArgs)(ea = new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e))); break;
case "mouseover": OnDomMouseOver((GeckoDomMouseEventArgs)(ea = new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e))); break;
case "mouseout": OnDomMouseOut((GeckoDomMouseEventArgs)(ea = new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e))); break;
case "click": OnDomClick(ea = new GeckoDomEventArgs(e)); break;
case "dblclick": OnDomDoubleClick(ea = new GeckoDomEventArgs(e)); break;
case "submit": OnDomSubmit(ea = new GeckoDomEventArgs(e)); break;
case "compositionstart": OnDomCompositionStart(ea = new GeckoDomEventArgs(e)); break;
case "compositionend": OnDomCompositionEnd(ea = new GeckoDomEventArgs(e)); break;
case "contextmenu": OnDomContextMenu((GeckoDomMouseEventArgs)(ea = new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e))); break;
case "DOMMouseScroll": OnDomMouseScroll((GeckoDomMouseEventArgs)(ea = new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e))); break;
case "focus": OnDomFocus(ea = new GeckoDomEventArgs(e)); break;
case "load": OnLoad(ea = new GeckoDomEventArgs(e)); break;
case "change": OnDomContentChanged(ea = new GeckoDomEventArgs(e)); break;
default:
Action<string> action;
if(_messageEventListeners.TryGetValue(type, out action))
{
action.Invoke(new GeckoDomMessageEventArgs((nsIDOMMessageEvent)e).Message);
}
break;
}
if (ea != null && ea.Cancelable && ea.Handled)
e.PreventDefault();
}