public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request) { //Notes: // - The 'host' portion is entirely ignored by this scheme handler. // - If you register a ISchemeHandlerFactory for http/https schemes you should also specify a domain name // - Avoid doing lots of processing in this method as it will affect performance. // - Use the Default ResourceHandler implementation var uri = new Uri(request.Url); var fileName = uri.AbsolutePath; //Load a file directly from Disk if (fileName.EndsWith("CefSharp.Core.xml", StringComparison.OrdinalIgnoreCase)) { //Convenient helper method to lookup the mimeType var mimeType = Cef.GetMimeType("xml"); //Load a resource handler for CefSharp.Core.xml //mimeType is optional and will default to text/html return(ResourceHandler.FromFilePath("CefSharp.Core.xml", mimeType, autoDisposeStream: true)); } if (fileName.EndsWith("Logo.png", StringComparison.OrdinalIgnoreCase)) { //Convenient helper method to lookup the mimeType var mimeType = Cef.GetMimeType("png"); //Load a resource handler for Logo.png //mimeType is optional and will default to text/html return(ResourceHandler.FromFilePath("..\\..\\..\\..\\CefSharp.WinForms.Example\\Resources\\chromium-256.png", mimeType, autoDisposeStream: true)); } if (uri.Host == "cefsharp.com" && schemeName == "https" && (string.Equals(fileName, "/PostDataTest.html", StringComparison.OrdinalIgnoreCase) || string.Equals(fileName, "/PostDataAjaxTest.html", StringComparison.OrdinalIgnoreCase))) { return(new CefSharpSchemeHandler()); } if (string.Equals(fileName, "/EmptyResponseFilterTest.html", StringComparison.OrdinalIgnoreCase)) { return(ResourceHandler.FromString("", mimeType: ResourceHandler.DefaultMimeType)); } string resource; if (ResourceDictionary.TryGetValue(fileName, out resource) && !string.IsNullOrEmpty(resource)) { var fileExtension = Path.GetExtension(fileName); return(ResourceHandler.FromString(resource, includePreamble: true, mimeType: Cef.GetMimeType(fileExtension))); } return(null); }
public BrowserTabView() { InitializeComponent(); DataContextChanged += OnDataContextChanged; //browser.BrowserSettings.BackgroundColor = Cef.ColorSetARGB(0, 255, 255, 255); //Please remove the comments below to use the Experimental WpfImeKeyboardHandler. //browser.WpfKeyboardHandler = new WpfImeKeyboardHandler(browser); //Please remove the comments below to specify the color of the CompositionUnderline. //var transparent = Colors.Transparent; //var black = Colors.Black; //ImeHandler.ColorBKCOLOR = Cef.ColorSetARGB(transparent.A, transparent.R, transparent.G, transparent.B); //ImeHandler.ColorUNDERLINE = Cef.ColorSetARGB(black.A, black.R, black.G, black.B); browser.RequestHandler = new ExampleRequestHandler(); var bindingOptions = new BindingOptions() { Binder = BindingOptions.DefaultBinder.Binder, MethodInterceptor = new MethodInterceptorLogger() // intercept .net methods calls from js and log it }; //To use the ResolveObject below and bind an object with isAsync:false we must set CefSharpSettings.WcfEnabled = true before //the browser is initialized. CefSharpSettings.WcfEnabled = true; //If you call CefSharp.BindObjectAsync in javascript and pass in the name of an object which is not yet //bound, then ResolveObject will be called, you can then register it browser.JavascriptObjectRepository.ResolveObject += (sender, e) => { var repo = e.ObjectRepository; //When JavascriptObjectRepository.Settings.LegacyBindingEnabled = true //This event will be raised with ObjectName == Legacy so you can bind your //legacy objects if (e.ObjectName == "Legacy") { repo.Register("bound", new BoundObject(), isAsync: false, options: BindingOptions.DefaultBinder); repo.Register("boundAsync", new AsyncBoundObject(), isAsync: true, options: bindingOptions); } else { if (e.ObjectName == "bound") { repo.Register("bound", new BoundObject(), isAsync: false, options: BindingOptions.DefaultBinder); } else if (e.ObjectName == "boundAsync") { repo.Register("boundAsync", new AsyncBoundObject(), isAsync: true, options: bindingOptions); } else if (e.ObjectName == "boundAsync2") { repo.Register("boundAsync2", new AsyncBoundObject(), isAsync: true, options: bindingOptions); } } }; browser.JavascriptObjectRepository.ObjectBoundInJavascript += (sender, e) => { var name = e.ObjectName; Debug.WriteLine($"Object {e.ObjectName} was bound successfully."); }; browser.DisplayHandler = new DisplayHandler(); //This LifeSpanHandler implementaion demos hosting a popup in a ChromiumWebBrowser //instance, it's still considered Experimental //browser.LifeSpanHandler = new ExperimentalLifespanHandler(); browser.MenuHandler = new MenuHandler(); browser.AccessibilityHandler = new AccessibilityHandler(); var downloadHandler = new DownloadHandler(); downloadHandler.OnBeforeDownloadFired += OnBeforeDownloadFired; downloadHandler.OnDownloadUpdatedFired += OnDownloadUpdatedFired; browser.DownloadHandler = downloadHandler; browser.AudioHandler = new AudioHandler(); //Read an embedded bitmap into a memory stream then register it as a resource you can then load custom://cefsharp/images/beach.jpg var beachImageStream = new MemoryStream(); CefSharp.Example.Properties.Resources.beach.Save(beachImageStream, System.Drawing.Imaging.ImageFormat.Jpeg); browser.RegisterResourceHandler(CefExample.BaseUrl + "/images/beach.jpg", beachImageStream, Cef.GetMimeType("jpg")); var dragHandler = new DragHandler(); dragHandler.RegionsChanged += OnDragHandlerRegionsChanged; browser.DragHandler = dragHandler; //browser.ResourceHandlerFactory = new InMemorySchemeAndResourceHandlerFactory(); //You can specify a custom RequestContext to share settings amount groups of ChromiumWebBrowsers //Also this is now the only way to access OnBeforePluginLoad - need to implement IRequestContextHandler //browser.RequestContext = new RequestContext(new RequestContextHandler()); //NOTE - This is very important for this example as the default page will not load otherwise //browser.RequestContext.RegisterSchemeHandlerFactory(CefSharpSchemeHandlerFactory.SchemeName, null, new CefSharpSchemeHandlerFactory()); //browser.RequestContext.RegisterSchemeHandlerFactory("https", "cefsharp.example", new CefSharpSchemeHandlerFactory()); //You can start setting preferences on a RequestContext that you created straight away, still needs to be called on the CEF UI thread. //Cef.UIThreadTaskFactory.StartNew(delegate //{ // string errorMessage; // //Use this to check that settings preferences are working in your code // var success = browser.RequestContext.SetPreference("webkit.webprefs.minimum_font_size", 24, out errorMessage); //}); browser.RenderProcessMessageHandler = new RenderProcessMessageHandler(); browser.LoadError += (sender, args) => { // Don't display an error for downloaded files. if (args.ErrorCode == CefErrorCode.Aborted) { return; } //Don't display an error for external protocols that we allow the OS to //handle in OnProtocolExecution(). if (args.ErrorCode == CefErrorCode.UnknownUrlScheme && args.Frame.Url.StartsWith("mailto")) { return; } // Display a load error message. var errorBody = string.Format("<html><body bgcolor=\"white\"><h2>Failed to load URL {0} with error {1} ({2}).</h2></body></html>", args.FailedUrl, args.ErrorText, args.ErrorCode); args.Frame.LoadHtml(errorBody, base64Encode: true); }; CefExample.RegisterTestResources(browser); browser.JavascriptMessageReceived += OnBrowserJavascriptMessageReceived; }
public string GetMimeTypeFromExtension(string extension) { return(Cef.GetMimeType(extension)); }
public void MapFileExtensionToMimeTypeTheory(string fileExtension, string expectedMimeType) { var actualMimeType = Cef.GetMimeType(fileExtension); Assert.Equal(expectedMimeType, actualMimeType); }
public AcceptRangeResourceHandler(string fileName) { fileInfo = new FileInfo(fileName); mimeType = Cef.GetMimeType(fileInfo.Extension); }