public EventListener(nsIDOMEventTarget target, object owner)
        {
            this.target = target;
            this.owner  = owner;
            IntPtr p = Base.StringInit();

            storage = new HandleRef(this, p);
        }
示例#2
0
		public EventListener(nsIDOMEventTarget target, object owner)
		{
			this.target = target;
			this.owner = owner;
			IntPtr p = Base.StringInit ();
			storage = new HandleRef (this, p);
			
		}
示例#3
0
        /// <summary>
        /// Remove  C# listner from the xpcom listner.
        /// </summary>
        /// <param name="Type">The name of the eventtype, for e.g 'MyCustomEvent'. This must be the same as the EventName in the JavaScript.</param>
        /// <param name="Handler">The handler for this event</param>
        public void RemoveEventListener(string Type, EventHandler <DOMJSONStringEventArgs> Handler)
        {
            nsIDOMEventTarget target  = oDomWindow as nsIDOMEventTarget;
            nsAString         strType = oEventTypes[Handler.Method.GetHashCode()] as nsAString;

            RouteEventHandler route = oEventListeners[Handler.Method.GetHashCode()] as RouteEventHandler;

            target.RemoveEventListener(strType, route, false);

            oEventListeners.Remove(Handler.Method.GetHashCode());
            oEventTypes.Remove(Handler.Method.GetHashCode());
        }
示例#4
0
        /// <summary>
        /// Register a listener for a custom jscrip-initiated MessageEvent
        /// https://developer.mozilla.org/en/DOM/document.createEvent
        /// http://help.dottoro.com/ljknkjqd.php
        /// </summary>
        /// <param name="eventName"></param>
        /// <param name="action"></param>
        /// <example>AddMessageEventListener("callMe", (message=>MessageBox.Show(message)));</example>
        public void AddMessageEventListener(string eventName, Action <string> action, bool useCapture)
        {
            nsIDOMEventTarget target = Xpcom.QueryInterface <nsIDOMEventTarget>(Xpcom.QueryInterface <nsIDOMWindow>(_webBrowser.Instance.GetContentDOMWindowAttribute()).GetWindowRootAttribute());

            if (target != null)
            {
                // the argc parameter is the number of optionial argumetns we are passing.
                // (useCapture and wantsUntrusted are specified as optional so we always pass 2 when calling interface from C#)
                target.AddEventListener(new nsAString(eventName), this, /*Review*/ useCapture, true, 2);
                _messageEventListeners.Add(eventName, action);
            }
        }
 private DomEventTarget(nsIDOMEventTarget target)
 {
     _target = new ComPtr <nsIDOMEventTarget>(target);
 }
 public static DomEventTarget Create(nsIDOMEventTarget target)
 {
     return(new DomEventTarget(target));
 }
        protected override void OnHandleCreated(EventArgs e)
        {
#if GTK
            if (Xpcom.IsMono)
            {
                base.OnHandleCreated(e);
                m_wrapper.Init();
            }
#endif
            if (!this.DesignMode)
            {
                Xpcom.Initialize();
                WindowCreator.Register();
#if !GTK
                LauncherDialogFactory.Register();
#endif

                WebBrowser      = Xpcom.CreateInstance <nsIWebBrowser>("@mozilla.org/embedding/browser/nsWebBrowser;1");
                WebBrowserFocus = (nsIWebBrowserFocus)WebBrowser;
                BaseWindow      = (nsIBaseWindow)WebBrowser;

                WebNav = (nsIWebNavigation)WebBrowser;

                WebBrowser.SetContainerWindowAttribute(this);
#if GTK
                if (Xpcom.IsMono)
                {
                    BaseWindow.InitWindow(m_wrapper.BrowserWindow.Handle, IntPtr.Zero, 0, 0, this.Width, this.Height);
                }
                else
#endif
                BaseWindow.InitWindow(this.Handle, IntPtr.Zero, 0, 0, this.Width, this.Height);


                RecordNewJsContext();
                BaseWindow.Create();

                Guid nsIWebProgressListenerGUID = typeof(nsIWebProgressListener).GUID;
                WebBrowser.AddWebBrowserListener(this.GetWeakReference(), ref nsIWebProgressListenerGUID);

                if (UseHttpActivityObserver)
                {
                    ObserverService.AddObserver(this, ObserverNotifications.HttpRequests.HttpOnModifyRequest, false);

                    nsIHttpActivityDistributor activityDistributor = Xpcom.GetService <nsIHttpActivityDistributor>("@mozilla.org/network/http-activity-distributor;1");
                    activityDistributor = Xpcom.QueryInterface <nsIHttpActivityDistributor>(activityDistributor);
                    activityDistributor.AddObserver(this);
                }

                // var domEventListener = new GeckoDOMEventListener(this);

                _target = Xpcom.QueryInterface <nsIDOMWindow>(WebBrowser.GetContentDOMWindowAttribute()).GetWindowRootAttribute();

                _target.AddEventListener(new nsAString("submit"), this, true, true, 2);
                _target.AddEventListener(new nsAString("keydown"), this, true, true, 2);
                _target.AddEventListener(new nsAString("keyup"), this, true, true, 2);
                _target.AddEventListener(new nsAString("keypress"), this, true, true, 2);
                _target.AddEventListener(new nsAString("mousemove"), this, true, true, 2);
                _target.AddEventListener(new nsAString("mouseover"), this, true, true, 2);
                _target.AddEventListener(new nsAString("mouseout"), this, true, true, 2);
                _target.AddEventListener(new nsAString("mousedown"), this, true, true, 2);
                _target.AddEventListener(new nsAString("mouseup"), this, true, true, 2);
                _target.AddEventListener(new nsAString("click"), this, true, true, 2);
                _target.AddEventListener(new nsAString("dblclick"), this, true, true, 2);
                _target.AddEventListener(new nsAString("compositionstart"), this, true, true, 2);
                _target.AddEventListener(new nsAString("compositionend"), this, true, true, 2);
                _target.AddEventListener(new nsAString("contextmenu"), this, true, true, 2);
                _target.AddEventListener(new nsAString("DOMMouseScroll"), this, true, true, 2);
                _target.AddEventListener(new nsAString("focus"), this, true, true, 2);
                _target.AddEventListener(new nsAString("blur"), this, true, true, 2);
                // Load event added here rather than DOMDocument as DOMDocument recreated when navigating
                // ths losing attached listener.
                _target.AddEventListener(new nsAString("load"), this, true, true, 2);
                _target.AddEventListener(new nsAString("change"), this, true, true, 2);

                // history
                {
                    var sessionHistory = WebNav.GetSessionHistoryAttribute();
                    if (sessionHistory != null)
                    {
                        sessionHistory.AddSHistoryListener(this);
                    }
                }

                BaseWindow.SetVisibilityAttribute(true);

                // this fix prevents the browser from crashing if the first page loaded is invalid (missing file, invalid URL, etc)
                if (Document != null)
                {
                    // only for html documents
                    Document.Cookie = "";
                }
            }

            base.OnHandleCreated(e);
        }
 public static DomEventTarget Create(nsIDOMEventTarget target)
 {
     return new DomEventTarget(target);
 }
 private DomEventTarget(nsIDOMEventTarget target)
 {
     _target = new ComPtr<nsIDOMEventTarget>(target);
 }
示例#10
0
文件: Node.cs 项目: pmq20/mono_forked
        public virtual void FireEvent(string eventName)
        {
            nsIDOMDocument doc;

            this.node.getOwnerDocument(out doc);

            nsIDOMDocumentEvent docEvent = (nsIDOMDocumentEvent)doc;
            nsIDOMDocumentView  docView  = (nsIDOMDocumentView)doc;
            nsIDOMAbstractView  abstractView;

            docView.getDefaultView(out abstractView);
            nsIDOMEventTarget target = (nsIDOMEventTarget)this.node;
            bool ret = false;

            string eventType;

            switch (eventName)
            {
            case "mousedown":
            case "mouseup":
            case "click":
            case "dblclick":
            case "mouseover":
            case "mouseout":
            case "mousemove":
            case "contextmenu":
                eventType = "mouseevents";
                nsIDOMEvent evtMouse;
                Base.StringSet(storage, eventType);
                docEvent.createEvent(storage, out evtMouse);
                nsIDOMMouseEvent domEventMouse = evtMouse as nsIDOMMouseEvent;
                Base.StringSet(storage, eventName);
                domEventMouse.initMouseEvent(storage, true, true, abstractView, 1, 0, 0, 0, 0, false, false, false, false, 0, target);
                target.dispatchEvent(domEventMouse, out ret);
                break;

            case "keydown":
            case "keyup":
            case "keypress":
                eventType = "keyevents";
                nsIDOMEvent evtKey;
                Base.StringSet(storage, eventType);
                docEvent.createEvent(storage, out evtKey);
                Base.StringSet(storage, eventName);
                nsIDOMKeyEvent domEventKey = evtKey as nsIDOMKeyEvent;
                domEventKey.initKeyEvent(storage, true, true, abstractView, false, false, false, false, 0, 0);
                target.dispatchEvent(domEventKey, out ret);
                break;

            case "DOMActivate":
            case "DOMFocusIn":
            case "DOMFocusOut":
            case "input":
                eventType = "uievents";
                nsIDOMEvent evtUI;
                Base.StringSet(storage, eventType);
                docEvent.createEvent(storage, out evtUI);
                Base.StringSet(storage, eventName);
                nsIDOMUIEvent domEventUI = evtUI as nsIDOMUIEvent;
                domEventUI.initUIEvent(storage, true, true, abstractView, 1);
                target.dispatchEvent(domEventUI, out ret);
                break;

            case "focus":
            case "blur":
            case "submit":
            case "reset":
            case "change":
            case "select":
            case "load":
            case "beforeunload":
            case "unload":
            case "abort":
            case "error":
            default:
                eventType = "events";
                nsIDOMEvent domEvent;
                Base.StringSet(storage, eventType);
                docEvent.createEvent(storage, out domEvent);
                Base.StringSet(storage, eventName);
                domEvent.initEvent(storage, true, true);
                target.dispatchEvent(domEvent, out ret);
                break;
            }
        }
示例#11
0
 public static DomEventTarget Create(mozIDOMWindowProxy window, nsIDOMEventTarget target)
 {
     return(new DomEventTarget((mozIDOMWindowProxy)window, target));
 }
示例#12
0
 private DomEventTarget(mozIDOMWindowProxy window, nsIDOMEventTarget target)
 {
     _window = window;
     _target = new ComPtr <nsIDOMEventTarget>(target);
 }
示例#13
0
		public static nsIDOMEventTarget GetProxy (Mono.WebBrowser.IWebBrowser control, nsIDOMEventTarget obj)
		{
			object o = Base.GetProxyForObject (control, typeof(nsIDOMEventTarget).GUID, obj);
			return o as nsIDOMEventTarget;
		}
示例#14
0
 private DomEventTarget(nsIDOMEventTarget target)
 {
     _target = new InstanceWrapper <nsIDOMEventTarget>(target);
 }
示例#15
0
        internal static IntPtr GetJSContextForDomWindow(nsIDOMWindow window)
        {
            IntPtr            context     = IntPtr.Zero;
            nsIDOMEventTarget eventTarget = window.GetWindowRootAttribute();

            try
            {
                context = eventTarget.GetJSContextForEventHandlers();
                if (context == IntPtr.Zero)
                {
                    IntPtr pUnk = Marshal.GetIUnknownForObject(window);
                    Marshal.Release(pUnk);


                    if (!_windowContexts.TryGetValue(pUnk, out context))
                    {
                        context = IntPtr.Zero;

                        IntPtr cx;
                        IntPtr iterp = IntPtr.Zero;
                        IntPtr rt    = Runtime;
                        while ((cx = SpiderMonkey.JS_ContextIterator(rt, ref iterp)) != IntPtr.Zero)
                        {
                            IntPtr pGlobal = SpiderMonkey.DefaultObjectForContextOrNull(cx);
                            if (pGlobal != IntPtr.Zero)
                            {
                                using (var auto = new AutoJSContext(cx))
                                {
                                    using (ComPtr <nsISupports> global = auto.GetGlobalNsObject())
                                    {
                                        if (global != null)
                                        {
                                            var domWindow = Xpcom.QueryInterface <nsIDOMWindow>(global.Instance);
                                            if (domWindow != null)
                                            {
                                                try
                                                {
                                                    IntPtr pUnkTest = Marshal.GetIUnknownForObject(domWindow.GetWindowAttribute());
                                                    Marshal.Release(pUnkTest);

                                                    if (pUnk == pUnkTest)
                                                    {
                                                        _windowContexts.Add(pUnk, cx);
                                                        context = cx;
                                                        break;
                                                    }
                                                }
                                                finally
                                                {
                                                    Xpcom.FreeComObject(ref domWindow);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            finally
            {
                if (eventTarget != null)
                {
                    Xpcom.FreeComObject(ref eventTarget);
                }
            }
            return(context);
        }
        public static nsIDOMEventTarget GetProxy(Mono.WebBrowser.IWebBrowser control, nsIDOMEventTarget obj)
        {
            object o = Base.GetProxyForObject(control, typeof(nsIDOMEventTarget).GUID, obj);

            return(o as nsIDOMEventTarget);
        }