using System; using System.IO; using CefBridgeDataExchange.Tests.Resources; using CefSharp; using CefSharp.WinForms; namespace CefBridgeDataExchange.Tests.CefRelated { internal static class CefInit { public static readonly string ResourceSchemeName = $"cef-custom-scheme-{Guid.NewGuid()}".ToLower(); public static readonly string ResourceDomainName = $"app-{Guid.NewGuid()}"; public static readonly string ResourceRootUrl = $"{ResourceSchemeName}://{ResourceDomainName}/"; public static void Init() { CefSharpSettings.LegacyJavascriptBindingEnabled = true; var settings = new CefSettings(); settings.BrowserSubprocessPath = Path.Combine(Environment.Is64BitProcess ? "x64" : "x86", settings.BrowserSubprocessPath); settings.LogSeverity = LogSeverity.Disable; settings.CefCommandLineArgs.Add("-incognito", ""); settings.CefCommandLineArgs.Add("--disable-application-cache", ""); settings.CefCommandLineArgs.Add("--disable-cache", ""); settings.CefCommandLineArgs.Add("--disable-gpu-program-cache", ""); settings.CefCommandLineArgs.Add("--disable-gpu-shader-disk-cache", ""); settings.CefCommandLineArgs.Add("--disable-local-storage", ""); settings.RegisterScheme(new CefCustomScheme { SchemeName = ResourceSchemeName, DomainName = ResourceDomainName, SchemeHandlerFactory = new ResourceSchemeHandlerFactory(), }); Cef.Initialize(settings); } public static void Quit() { Cef.Shutdown(); } } internal class ResourceSchemeHandlerFactory : ISchemeHandlerFactory { IResourceHandler ISchemeHandlerFactory.Create(IBrowser browser, IFrame frame, string schemeName, IRequest request) { var path = new Uri(request.Url).LocalPath.TrimStart('/'); var resource = ResourceLoader.GetBinResource(path); return new ResourceHandler(ResourceHandler.GetMimeType(Path.GetExtension(path)), new MemoryStream(resource, false), true); } } }