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)); }
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 }
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 }
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 }
private int RemoteMain() { try { var retval = CfrRuntime.ExecuteProcess(app); return(retval); } finally { var handler = OnExit; if (handler != null) { handler(this); } } }
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); } } }
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."); } } }
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(); }
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(); } }
//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); } } }
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); } }
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(); }
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); } }
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(); }