internal BrowserClient(ChromiumWebBrowserBase browser) { this.browser = browser; this.lifeSpanHandler = new LifeSpanHandler(this); this.requestHandler = new RequestHandler(this); this.GetLifeSpanHandler += (s, e) => e.SetReturnValue(lifeSpanHandler); this.GetRequestHandler += (s, e) => e.SetReturnValue(requestHandler); //this.GetKeyboardHandler += (s, e) => e.SetReturnValue (keyboardHandler); }
private void LocalSchemeHandlerFactory_Create(object sender, Chromium.Event.CfxSchemeHandlerFactoryCreateEventArgs e) { if (e.SchemeName.Equals(_schemaName.Trim()) && e.Browser != null) { var browser = ChromiumWebBrowserBase.FromCfxBrowser(e.Browser); var handler = new LocalResourceHandler(browser); e.SetReturnValue(handler); } }
internal static int RenderProcessMain() { try { var rp = new RenderProcess(); ChromiumWebBrowserBase.RaiseRemoteProcessCreated(rp.processHandler); return(rp.RemoteMain()); } catch (CfxRemotingException) { return(-1); } }
private void EmbeddedSchemeHandlerFactory_Create(object sender, Chromium.Event.CfxSchemeHandlerFactoryCreateEventArgs e) { //var url = new Uri(e.Request.Url); if (e.SchemeName == SchemeName && e.Browser != null) { var browser = ChromiumWebBrowserBase.FromCfxBrowser(e.Browser); // ChromiumStartup.BrowserDict[e.Browser.Identifier]; var handler = new EmbeddedResourceHandler(resourceAssembly, browser, DomainName); e.SetReturnValue(handler); } }
internal void AddBrowserReference(ChromiumWebBrowserBase browser) { for (int i = 0; i < browserReferences.Count; ++i) { if (browserReferences[i].Target == null) { browserReferences[i] = new WeakReference(browser); return; } } browserReferences.Add(new WeakReference(browser)); }
internal LocalResourceHandler(ChromiumWebBrowserBase browser) { gcHandle = System.Runtime.InteropServices.GCHandle.Alloc(this); this.browser = browser; this.GetResponseHeaders += LocalResourceHandler_GetResponseHeaders; this.ProcessRequest += LocalResourceHandler_ProcessRequest; this.ReadResponse += LocalResourceHandler_ReadResponse; this.CanGetCookie += (s, e) => e.SetReturnValue(false); this.CanSetCookie += (s, e) => e.SetReturnValue(false); }
internal EmbeddedResourceHandler(Assembly resourceAssembly, ChromiumWebBrowserBase browser, string domain = null) { gcHandle = System.Runtime.InteropServices.GCHandle.Alloc(this); this.domain = domain; this.browser = browser; //if (!ChromiumStartup.BrowserDict.ContainsKey(browser.Browser.Identifier)) //{ // ChromiumStartup.BrowserDict.Add(browser.Browser.Identifier,browser); //} this.resourceAssembly = resourceAssembly; this.GetResponseHeaders += EmbeddedResourceHandler_GetResponseHeaders; this.ProcessRequest += EmbeddedResourceHandler_ProcessRequest; this.ReadResponse += EmbeddedResourceHandler_ReadResponse; this.CanGetCookie += (s, e) => e.SetReturnValue(false); this.CanSetCookie += (s, e) => e.SetReturnValue(false); }
void RenderProcessHandler_OnContextCreated(object sender, CfrOnContextCreatedEventArgs e) { var wb = ChromiumWebBrowserBase.GetBrowser(e.Browser.Identifier); if (wb != null) { if (e.Frame.IsMain) { SetProperties(e.Context, wb.GlobalObject); } else { JSObject obj; if (wb.frameGlobalObjects.TryGetValue(e.Frame.Name, out obj)) { SetProperties(e.Context, obj); } } wb.RaiseOnV8ContextCreated(e); } }
void RenderProcessHandler_OnBrowserCreated(object sender, CfrOnBrowserCreatedEventArgs e) { var id = e.Browser.Identifier; var wb = ChromiumWebBrowserBase.GetBrowser(id); if (wb != null) { var rp = wb.remoteProcess; if (rp != null && rp != this.remoteProcess) { // A new process has been created for the browser. // The old process is still alive, but probably it gets // killed soon after this callback returns. // So we suspend all callbacks from the old process. // If there are currently executing callbacks, // this call will block until they are finished. // When this call returns, it should be safe to // continue execution and let the old process die. CfxRemoteCallbackManager.SuspendCallbacks(rp.RemoteProcessId); } wb.SetRemoteBrowser(e.Browser, remoteProcess); } }
public static void Initialize(string domain = "local", bool enableDevtools = false, int remoteDevPort = 10808, Action <OnCSBeforeCfxInitializeEventArgs> beforeInitsettingsCallback = null) { if (initialized) { return; } enableDevTools = enableDevtools; devtoolPort = remoteDevPort; onBeforeCfxInitializeCallback = beforeInitsettingsCallback; var cachePath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), Application.ProductName, "Cache"); if (!System.IO.Directory.Exists(cachePath)) { System.IO.Directory.CreateDirectory(cachePath); } var assemblyDir = System.IO.Path.GetDirectoryName(new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath); //rootPath = assemblyDir; //_logPath = Path.Combine(assemblyDir, "debug.log"); cachePath = Path.Combine(assemblyDir, "cache"); if (!Directory.Exists(cachePath)) { Directory.CreateDirectory(cachePath); } userPath = Path.Combine(assemblyDir, "temp"); if (!Directory.Exists(userPath)) { Directory.CreateDirectory(userPath); } var basePath = assemblyDir;//AppDomain.CurrentDomain.BaseDirectory; if (string.IsNullOrEmpty(_libCefDirPath)) { _libCefDirPath = Path.Combine(basePath, "cef"); if (!Environment.Is64BitProcess) { _libCefDirPath = Path.Combine(basePath, "cef32"); } } if (string.IsNullOrEmpty(_libCfxDirPath)) { _libCfxDirPath = _libCefDirPath; } ////var libCefLocalesPath = Path.Combine(libCefDirPath, "locales"); CfxRuntime.LibCefDirPath = _libCefDirPath; CfxRuntime.LibCfxDirPath = _libCefDirPath; //if (CfxRuntime.PlatformArch == CfxPlatformArch.x64) // CfxRuntime.LibCefDirPath = Path.Combine(libCefDirPath,"Release64"); //else // CfxRuntime.LibCefDirPath = Path.Combine(libCefDirPath, "Release"); ChromiumWebBrowserBase.OnBeforeCfxInitialize += ChromiumWebBrowser_OnBeforeCfxInitialize; ChromiumWebBrowserBase.OnBeforeCommandLineProcessing += ChromiumWebBrowser_OnBeforeCommandLineProcessing; ChromiumWebBrowserBase.Initialize(); RegisterLocalScheme(); RegisterEmbeddedScheme(System.Reflection.Assembly.GetEntryAssembly(), domainName: domain); //if (CfxRuntime.PlatformOS != CfxPlatformOS.Windows) //{ // Application.Idle += Application_Idle; //} Application.ApplicationExit += Application_ApplicationExit; initialized = true; }
internal static void Initialize() { _mono = Type.GetType("Mono.Runtime") != null; if (initialized) { throw new ChromiumWebBrowserException("ChromiumWebBrowser library already initialized."); } int retval = CfxRuntime.ExecuteProcess(); if (retval >= 0) { Environment.Exit(retval); } app = new CfxApp(); processHandler = new CfxBrowserProcessHandler(); processHandler.OnBeforeChildProcessLaunch += ProcessHandler_OnBeforeChildProcessLaunch; app.GetBrowserProcessHandler += (s, e) => e.SetReturnValue(processHandler); app.OnBeforeCommandLineProcessing += (s, e) => ChromiumWebBrowserBase.RaiseOnBeforeCommandLineProcessing(e); app.OnRegisterCustomSchemes += (s, e) => ChromiumWebBrowserBase.RaiseOnRegisterCustomSchemes(e); var settings = new CfxSettings(); //FIXED different default settings based on platform switch (CfxRuntime.PlatformOS) { case CfxPlatformOS.Linux: settings.MultiThreadedMessageLoop = false; //TODO less demanding way of using DoMessageLoopWork, ExernalMessageLoop = true doesn't seem to work Application.Idle += BrowserMessageLoopStep; break; default: settings.MultiThreadedMessageLoop = true; Application.ApplicationExit += Application_ApplicationExit; break; } settings.NoSandbox = true; ChromiumWebBrowserBase.RaiseOnBeforeCfxInitialize(settings, processHandler); //ChromiumWebBrowserBase.WindowLess = settings.WindowlessRenderingEnabled; Console.WriteLine(" ****************** window Less " + ChromiumWebBrowserBase.WindowLess); //if(!CfxRuntime.Initialize(settings, app, RenderProcess.RenderProcessMain)) // throw new ChromiumWebBrowserException("Failed to initialize CEF library."); if (CfxRuntime.PlatformOS == CfxPlatformOS.Windows) { if (!CfxRuntime.Initialize(settings, app, RenderProcess.RenderProcess.RenderProcessMain)) { throw new ChromiumWebBrowserException("Failed to initialize CEF library."); } } else { Console.WriteLine("()()*()*(**()*)(*()*))"); if (!CfxRuntime.Initialize(settings, app)) { Environment.Exit(-1); } } initialized = true; }