private void ListenToContextMenuHandler(CfxContextMenuHandler contextMenuHandler)
 {
     contextMenuHandler.OnBeforeContextMenu  += OnBeforeContextMenu;
     contextMenuHandler.OnContextMenuCommand += ContextMenuHandler_OnContextMenuCommand;
 }
예제 #2
0
        public void Initialize()
        {
            Settings = new CfxBrowserSettings()
            {
                WindowlessFrameRate = InitSettings.Fps,
                Webgl                       = CfxState.Enabled,
                Plugins                     = CfxState.Enabled,
                ApplicationCache            = CfxState.Enabled,
                Javascript                  = CfxState.Enabled,
                FileAccessFromFileUrls      = CfxState.Enabled,
                UniversalAccessFromFileUrls = CfxState.Enabled,
                WebSecurity                 = CfxState.Disabled
            };
            Globals.UpdateScripts();

            TextureSize = (DefaultWidth, DefaultHeight);

            LifeSpanHandler = new CfxLifeSpanHandler();
            LifeSpanHandler.OnAfterCreated += (sender, e) =>
            {
                Browser   = e.Browser;
                BrowserId = e.Browser.Identifier;
                Instances.UpdateGeneric(BrowserId, this);
                Browser.Host.WasResized();

                _browserReadyFrame = true;
                //_invalidate = true;
            };
            LifeSpanHandler.OnBeforePopup += (sender, e) =>
            {
                if (BrowserSettings.AllowPopups)
                {
                    Browser.MainFrame.LoadUrl(e.TargetUrl);
                    e.SetReturnValue(true);
                }
                else
                {
                    e.SetReturnValue(true);
                }
            };

            RenderHandler              = new CfxRenderHandler();
            RenderHandler.GetViewRect += (sender, e) =>
            {
                e.Rect.X      = 0;
                e.Rect.Y      = 0;
                e.Rect.Width  = TextureSize.w;
                e.Rect.Height = TextureSize.h;
                e.SetReturnValue(true);
            };
            RenderHandler.GetRootScreenRect += (sender, e) =>
            {
                e.Rect.X      = 0;
                e.Rect.Y      = 0;
                e.Rect.Width  = TextureSize.w;
                e.Rect.Height = TextureSize.h;
                e.SetReturnValue(true);
            };
            //RenderHandler.OnPaint += (sender, args) => _paintFrame = true;
            RenderHandler.OnAcceleratedPaint += HandleAcceleratedRenderPaint;

            LoadHandler              = new CfxLoadHandler();
            LoadHandler.OnLoadStart += (sender, e) =>
            {
                if (e.Browser.MainFrame.Url != _prevUrl)
                {
                    IsDocumentReady = false;
                }
                _prevUrl = e.Browser.MainFrame.Url;
            };
            LoadHandler.OnLoadError += (sender, e) =>
            {
                LogError(e.ErrorCode.ToString() + Environment.NewLine + "    " + e.ErrorText + Environment.NewLine + "    " + e.FailedUrl);
                LastError = e.ErrorText;
            };
            LoadHandler.OnLoadingStateChange += (sender, e) => CurrentUrl = Browser.MainFrame.Url;

            RequestHandler = new CfxRequestHandler();
            RequestHandler.CanGetCookies             += (sender, args) => { args.SetReturnValue(BrowserSettings.AllowGetCookies); };
            RequestHandler.CanSetCookie              += (sender, args) => { args.SetReturnValue(BrowserSettings.AllowSetCookies); };
            RequestHandler.OnBeforeBrowse            += HandleOnBeforeBrowse;
            RequestHandler.OnBeforeResourceLoad      += HandleBeforeResourceLoad;
            RequestHandler.OnCertificateError        += (sender, e) => LogError("Cert error: " + e.CertError.ToString());
            RequestHandler.OnPluginCrashed           += (sender, e) => LogError("Plugin Crashed: " + e.PluginPath);
            RequestHandler.OnRenderProcessTerminated += (sender, e) => LogError("Render Process Terminated: " + e.Status.ToString());

            ContextMenuHandler = new CfxContextMenuHandler();
            ContextMenuHandler.OnBeforeContextMenu += (sender, args) => args.Model.Clear();
            DisplayHandler = new CfxDisplayHandler();
            DisplayHandler.OnConsoleMessage        += HandleConsoleMessage;
            DisplayHandler.OnLoadingProgressChange += (sender, args) => Progress = args.Progress;

            Client = new CfxClient();
            Client.GetLifeSpanHandler    += (sender, e) => e.SetReturnValue(LifeSpanHandler);
            Client.GetRenderHandler      += (sender, e) => e.SetReturnValue(RenderHandler);
            Client.GetLoadHandler        += (sender, e) => e.SetReturnValue(LoadHandler);
            Client.GetRequestHandler     += (sender, e) => e.SetReturnValue(RequestHandler);
            Client.GetDisplayHandler     += (sender, e) => e.SetReturnValue(DisplayHandler);
            Client.GetContextMenuHandler += (sender, args) => args.SetReturnValue(ContextMenuHandler);
            Visitor        = new CfxStringVisitor();
            Visitor.Visit += (sender, e) =>
            {
                RootElement = HtmlToXElement(e.String);
                Dom         = new XDocument(RootElement);
            };

            CreateBrowser();
            //_invalidate = true;
        }