protected override void OnHandleCreated(EventArgs e)
        {
            if (!this.DesignMode)
            {
                Xpcom.Initialize();
                #if !NO_CUSTOM_PROMPT_SERVICE
                PromptServiceFactory.Register();
                #endif
                WindowCreator.Register();
                //CertificateDialogsFactory.Register();
                //ToolTipTextProviderFactory.Register();

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

                WebBrowser.SetContainerWindow(this);

                //int type = ((this.ChromeFlags & (int)GeckoWindowFlags.OpenAsChrome) != 0) ? nsIDocShellTreeItemConstants.typeChromeWrapper : nsIDocShellTreeItemConstants.typeContentWrapper;

                //nsIDocShellTreeItem shellTreeItem = Xpcom.QueryInterface<nsIDocShellTreeItem>(WebBrowser);
                //if (shellTreeItem != null)
                //      shellTreeItem.SetItemType(type);
                //else
                //{
                //      nsIDocShellTreeItem19 treeItem19 = Xpcom.QueryInterface<nsIDocShellTreeItem19>(WebBrowser);
                //      if (treeItem19 != null)
                //            treeItem19.SetItemType(type);
                //}
                BaseWindow.InitWindow(this.Handle, IntPtr.Zero, 0, 0, this.Width, this.Height);
                BaseWindow.Create();

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

                nsIDOMEventTarget target = Xpcom.QueryInterface<nsIDOMWindow2>(WebBrowser.GetContentDOMWindow()).GetWindowRoot();

                target.AddEventListener(new nsAString("submit"), this, true);
                target.AddEventListener(new nsAString("keydown"), this, true);
                target.AddEventListener(new nsAString("keyup"), this, true);
                target.AddEventListener(new nsAString("mousemove"), this, true);
                target.AddEventListener(new nsAString("mouseover"), this, true);
                target.AddEventListener(new nsAString("mouseout"), this, true);
                target.AddEventListener(new nsAString("mousedown"), this, true);
                target.AddEventListener(new nsAString("mouseup"), this, true);
                target.AddEventListener(new nsAString("click"), this, true);

                // history
                WebNav.GetSessionHistory().AddSHistoryListener(this);

                BaseWindow.SetVisibility(true);

                if ((this.ChromeFlags & (int)GeckoWindowFlags.OpenAsChrome) == 0)
                {
                    // navigating to about:blank allows drag & drop to work properly before a page has been loaded into the browser
                    Navigate("about:blank");
                }

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

            base.OnHandleCreated(e);
        }
        protected override void OnHandleCreated(EventArgs e)
        {
            #if GTK
            if (Xpcom.IsMono)
            {
                base.OnHandleCreated(e);
                m_wrapper.Init();
            }
            #endif

            if (!this.DesignMode)
            {
                Xpcom.Initialize();
                #if !NO_CUSTOM_PROMPT_SERVICE
                PromptServiceFactory.Register();
                #endif
                WindowCreator.Register();
                LauncherDialogFactory.Register();
                //CertificateDialogsFactory.Register();
                //ToolTipTextProviderFactory.Register();

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

                WebBrowser.SetContainerWindowAttribute(this);

                //int type = ((this.ChromeFlags & (int)GeckoWindowFlags.OpenAsChrome) != 0) ? nsIDocShellTreeItemConstants.typeChromeWrapper : nsIDocShellTreeItemConstants.typeContentWrapper;

                //nsIDocShellTreeItem shellTreeItem = Xpcom.QueryInterface<nsIDocShellTreeItem>(WebBrowser);
                //if (shellTreeItem != null)
                //      shellTreeItem.SetItemType(type);
                //else
                //{
                //      nsIDocShellTreeItem19 treeItem19 = Xpcom.QueryInterface<nsIDocShellTreeItem19>(WebBrowser);
                //      if (treeItem19 != null)
                //            treeItem19.SetItemType(type);
                //}

            #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);

                BaseWindow.Create();

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

                nsIDOMEventTarget 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);
                // 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
                if (WebNav.GetSessionHistoryAttribute() != null)
                    WebNav.GetSessionHistoryAttribute().AddSHistoryListener(this);

                BaseWindow.SetVisibilityAttribute(true);

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

            base.OnHandleCreated(e);
        }