コード例 #1
0
        internal int RenderProcessStartup()
        {
            var remoteProcessId = CfxRemoteCallContext.CurrentContext.ProcessId;

            _CfrApp = new CfrApp();
            _RenderProcessHandler             = new RenderProcessHandler(_CfrApp, remoteProcessId);
            _RenderProcessHandler.OnNewFrame += (e) =>
            {
                _TaskContextCreatedEventArgs.TrySetResult(new ChromiumFxWebView(e.Browser, Logger));
            };
            _CfrApp.GetRenderProcessHandler += (s, e) =>
            {
                try
                {
                    e.SetReturnValue(_RenderProcessHandler);
                }
                catch (Exception ex)
                {
                    Logger?.Error($"Exception raised during GetRenderProcessHandler SetReturnValue {ex.Message}, loading task is {_TaskContextCreatedEventArgs.Task.Status}");
                    throw;
                }
            };

            return(CfrRuntime.ExecuteProcess(_CfrApp));
        }
コード例 #2
0
        private void RenderProcessHandler_OnWebKitInitialized(object sender, CfrEventArgs e)
        {
            handler = new ChromeFXUIV8Handler();
#if XP
            CfrRuntime.RegisterExtension("chromeui/base", ChromFXUI.XP.Properties.Resources.chromefxui_nativeExtension, handler);
#else
            CfrRuntime.RegisterExtension("chromeui/base", ChromFXUI.Properties.Resources.chromefxui_nativeExtension, handler);
#endif
        }
コード例 #3
0
        private void WebBrowserCore_RemoteBrowserCreated(object sender, RemoteBrowserCreatedEventArgs e)
        {
            formV8Handler = new FormV8Handler(this);
#if XP
            CfrRuntime.RegisterExtension("chromefxui/form", ChromFXUI.XP.Properties.Resources.chromefxui_formExtension, formV8Handler);
#else
            CfrRuntime.RegisterExtension("chromefxui/form", ChromFXUI.Properties.Resources.chromefxui_formExtension, formV8Handler);
#endif
        }
コード例 #4
0
        private void RenderProcessHandler_OnWebKitInitialized(object sender, CfrEventArgs e)
        {
            handler = new NanUIV8Handler();
#if XP
            CfrRuntime.RegisterExtension("nanui/base", NetDimension.NanUI.XP.Properties.Resources.nanui_nativeExtension, handler);
#else
            CfrRuntime.RegisterExtension("nanui/base", NetDimension.NanUI.Properties.Resources.nanui_nativeExtension, handler);
#endif
        }
コード例 #5
0
 private int RemoteMain()
 {
     try {
         var retval = CfrRuntime.ExecuteProcess(app);
         return(retval);
     } finally {
         var handler = OnExit;
         if (handler != null)
         {
             handler(this);
         }
     }
 }
コード例 #6
0
ファイル: RenderProcess.cs プロジェクト: 386845154a/NanUI-1
 private int RemoteMain()
 {
     try {
         var retval = CfrRuntime.ExecuteProcess(app);
         return(retval);
     } finally {
         foreach (var br in browserReferences)
         {
             var b = (BrowserCore)br.Target;
             b?.RemoteProcessExited(this);
         }
     }
 }
コード例 #7
0
        private void evaluateJavascriptSynchronouslyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (CfxRemoteCallContext.IsInContext && CfrRuntime.CurrentlyOn(CfxThreadId.Renderer))
            {
                throw new Exception("Doing this on the render thread would deadlock.");
            }

            var waitLock = new object();

            lock (waitLock) {
                string documentAllLength = null;

                var evaluationStarted = WebBrowser.EvaluateJavascript("'document.all.length = ' + document.all.length",
                                                                      // Don't invoke, otherwise the ui thread will deadlock!
                                                                      JSInvokeMode.DontInvoke,
                                                                      (v, ex) => {
                    Monitor.Enter(waitLock);
                    try {
                        documentAllLength = v.StringValue;
                    } finally {
                        Monitor.PulseAll(waitLock);
                        Monitor.Exit(waitLock);
                    }
                }
                                                                      );

                if (evaluationStarted)
                {
                    var success = Monitor.Wait(waitLock, 5000);
                    if (success)
                    {
                        LogWriteLine("Synchronous evaluation succeeded: {0}", documentAllLength);
                    }
                    else
                    {
                        LogWriteLine("Evaluation not finished after 5 seconds, giving up.");
                    }
                }
                else
                {
                    LogWriteLine("Failed to start evaluation.");
                }
            }
        }
コード例 #8
0
        private void RenderProcessHandler_OnWebKitInitialized(object sender, CfrEventArgs e)
        {
            baseExtension = new FormiumJavascriptExtension();
            CfrRuntime.RegisterExtension("NanUI/Base", baseExtension.DefinitionJavascriptCode, baseExtension);

            foreach (var kv in Bootstrap.RegisterChromiumExtensionActions)
            {
                var name      = kv.Key;
                var extension = kv.Value?.Invoke();
                if (extension != null)
                {
                    customExtensions.Add(name, extension);

                    CfrRuntime.RegisterExtension(name, extension.DefinitionJavascriptCode, extension);
                }
            }

            BrowserCore.RaiseWebKitInitialized();
        }
コード例 #9
0
        void CfrTaskStressTest()
        {
            if (remoteBrowser == null)
            {
                return;
            }

            var ctx = remoteBrowser.CreateRemoteCallContext();

            ctx.Enter();
            try {
                int taskExecutionCounter = 0;

                for (int i = 0; i < 10000; ++i)
                {
                    var task = new CfrTask();
                    task.Execute += (s, e1) => {
                        ++taskExecutionCounter;
                        if (taskExecutionCounter % 1000 == 0)
                        {
                            LogWriteLine($"CfrTask stress test: {taskExecutionCounter}/10000 tasks executed.");
                        }
                    };
                    if (i % 2 == 0)
                    {
                        CfrRuntime.PostTask(CfxThreadId.Renderer, task);
                    }
                    else
                    {
                        var tr = CfrTaskRunner.GetForThread(CfxThreadId.Renderer);
                        tr.PostTask(task);
                    }
                    if (i % 1000 == 0)
                    {
                        LogWriteLine($"CfrTask stress test: {i}/10000 tasks posted.");
                    }
                }
            } catch {
                LogWriteLine($"CfrTask stress test: Exception cought, aborting.");
            } finally {
                ctx.Exit();
            }
        }
コード例 #10
0
ファイル: RenderProcess.cs プロジェクト: zhouatnet/NanUI
        //internal void RemoveBrowserReference(BrowserCore browser)
        //{
        //    var reffedBrowser = browserRefs.Find(x => x.Target.Equals(browser));
        //    //if (reffedBrowser != null)
        //    //{
        //    //    browserRefs.Remove(reffedBrowser);
        //    //}
        //}

        private int Initialize()
        {
            try
            {
                var retval = CfrRuntime.ExecuteProcess(app);
                return(retval);
            }
            finally
            {
                foreach (var br in browserRefs)
                {
                    if (br.Target == null)
                    {
                        continue;
                    }

                    var b = (BrowserCore)br.Target;
                    b?.RemoteProcessExited(this);
                }
            }
        }
コード例 #11
0
        private void RunInContextUnsafe(Action action)
        {
            if (CfxRemoteCallContext.IsInContext)
            {
                action();
                return;
            }

            _Actions.Enqueue(action);

            if (_IsExecutingActions)
            {
                return;
            }

            using (GetRemoteContext())
            {
                var task = new CfrTask();
                task.Execute += CfrTask_Execute;
                CfrRuntime.PostTask(CfxThreadId.Renderer, task);
            }
        }
コード例 #12
0
        public WebBrowserFormImplement(Form form, BrowserCore browser)
        {
            parentForm  = form;
            browserCore = browser;


            browser.RemoteBrowserCreated += (_, e) => {
                formV8Handler = new FormV8Handler(parentForm);
#if XP
                CfrRuntime.RegisterExtension("nanui/form", Xzy.UI.Core.XP.Properties.Resources.nanui_formExtension, formV8Handler);
#else
                CfrRuntime.RegisterExtension("nanui/form", Xzy.UI.Core.Properties.Resources.nanui_formExtension, formV8Handler);
#endif
            };
            browser.LoadHandler.OnLoadEnd += (_, e) => {
                if (e.Frame.IsMain)
                {
                    foreach (var script in delayedScripts)
                    {
                        browserCore.ExecuteJavascript(script.Value);
                    }
                }
            };


            form.Move += (_, e) =>
            {
                if (browserCore != null && browserCore.BrowserHost != null)
                {
                    browserCore.BrowserHost.NotifyMoveOrResizeStarted();
                }
            };



            RegisterActivatedStateChangedHandler();
            RegisterSizeChangedEventHandler();
        }
コード例 #13
0
        private int Start()
        {
            try
            {
                app = new CfrApp();

                loadHandler              = new CfrLoadHandler();
                loadHandler.OnLoadEnd   += loadHandler_OnLoadEnd;
                loadHandler.OnLoadStart += loadHandler_OnLoadStart;

                renderProcessHandler = new CfrRenderProcessHandler();
                renderProcessHandler.GetLoadHandler += (sender, e) => e.SetReturnValue(loadHandler);

                app.GetRenderProcessHandler += (s, e) => e.SetReturnValue(renderProcessHandler);

                var retval = CfrRuntime.ExecuteProcess(app);
                return(retval);
            }
            catch
            {
                return(0);
            }
        }
コード例 #14
0
        private void JS_SubmitAsyncTestFunction(object sender, CfrV8HandlerExecuteEventArgs e)
        {
            var function = e.Arguments[0];

            LogWriteLine("JS_SubmitAsyncTestFunction: function.FunctionName = " + function.FunctionName);
            LogWriteLine("JS_SubmitAsyncTestFunction: CfrRuntime.CurrentlyOn(CfxThreadId.Renderer) = " + CfrRuntime.CurrentlyOn(CfxThreadId.Renderer));
            var ctx = CfrV8Context.GetCurrentContext();
            var t   = new Thread(() => { AsyncTestFunctionCallback(function, ctx); });

            t.Start();
        }