protected virtual void Dispose(bool disposing)
        {
            if (!disposing)
            {
                return;
            }

            if (_windowManager != null)
            {
                _windowManager.NoWindowsOpen  -= OnWindowManagerNoWindowsOpen;
                _windowManager.CreatingWindow -= OnWindowManagerCreatingWindow;
                _windowManager.CreatedWindow  -= OnWindowManagerCreatedWindow;
                _windowManager = null;
            }

            _schemeHandler = null;

            if (_eventPageLaunchTimer != null)
            {
                _eventPageLaunchTimer.Dispose();
                _eventPageLaunchTimer = null;
            }
            if (_router != null)
            {
                _router.Dispose();
                _router = null;
            }
            if (_eventPageBrowser != null)
            {
                _eventPageBrowser.Dispose();
                _eventPageBrowser = null;
            }

            if (_appRegistrationToken != null)
            {
                _appRegistrationToken.Dispose();
                _appRegistrationToken = null;
            }

            if (_setCookieEvent != null)
            {
                _setCookieEvent.Close();
                _setCookieEvent = null;
            }

            if (_eventPageUnloadTimer != null)
            {
                _eventPageUnloadTimer.Dispose();
                _eventPageUnloadTimer = null;
            }
        }
        public override void CreateControl()
        {
            base.CreateControl();

            if (!_controlCreated && !DesignMode)
            {
                if (!ParagonRuntime.IsInitialized)
                {
                    ParagonRuntime.Initialize();
                }

                _client = new CefWebClient(this);

                if (!IsPopup && _browser == null)
                {
                    var settings = new CefBrowserSettings
                    {
                        Java = CefState.Disabled
                    };

                    using (AutoStopwatch.TimeIt("Creating browser"))
                    {
                        var info = CefWindowInfo.Create();
                        var ea   = new BrowserCreateEventArgs();

                        using (AutoStopwatch.TimeIt("Raising BeforeBrowserCreate event"))
                        {
                            BeforeBrowserCreate.Raise(this, ea);
                        }

                        _router     = ea.Router;
                        _currentUrl = _sourceUrl;

                        if (IntPtr.Zero != ParentHandle)
                        {
                            RECT rect = new RECT();
                            Win32Api.GetClientRect(ParentHandle, ref rect);
                            info.SetAsChild(ParentHandle, new CefRectangle(rect.Left, rect.Top, rect.Width, rect.Height));
                        }

                        Logger.Info(string.Format("OnHandleCreated - Creating a browser with url {0}", _currentUrl));
                        CefBrowserHost.CreateBrowser(info, _client, settings, _currentUrl);
                    }
                }

                _controlCreated = true;
            }
        }
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);

            if (_browser != null && disposing)
            {
                ParagonRuntime.RemoveBrowser(this);
                if (_widgetWindowZOrderHandler != null)
                {
                    _widgetWindowZOrderHandler.Dispose();
                    _widgetWindowZOrderHandler = null;
                }
                if (_containerWindowMoveListener != null)
                {
                    _containerWindowMoveListener.Dispose();
                    _containerWindowMoveListener = null;
                }
                if (_client != null)
                {
                    _client.Dispose();
                    _client = null;
                }
                if (_router != null)
                {
                    // Router should not be disposed here since it is shared by all cefwebbrowsers
                    //_router.Dispose();
                    _router = null;
                }
                if (_browser != null)
                {
                    _browser.Dispose();
                    _browser = null;
                }
                _browserWindowHandle = IntPtr.Zero;
            }
        }
 protected virtual CefWebBrowser CreatePopupBrowser(int parentId, IBrowserSideMessageRouter router)
 {
     return(new CefWebBrowser(parentId, router));
 }
 protected CefWebBrowser(int parentId, IBrowserSideMessageRouter router)
     : this()
 {
     _parentBrowserId = parentId;
     _router          = router;
 }