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);
        }
Ejemplo n.º 8
0
        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);
            }
        }
Ejemplo n.º 9
0
        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;
        }