// Copyright © 2014 The CefSharp Authors. All rights reserved. // // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. using System.Security.Cryptography.X509Certificates; namespace CefSharp.Handler { /// /// Default implementation of . This class provides default implementations of the methods from /// , therefore providing a convenience base class for any custom request handler. /// /// public class RequestHandler : IRequestHandler { /// bool IRequestHandler.OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect) { return OnBeforeBrowse(chromiumWebBrowser, browser, frame, request, userGesture, isRedirect); } /// /// Called before browser navigation. If the navigation is allowed and /// /// will be called. If the navigation is canceled will be called with an ErrorCode value of /// . /// /// the ChromiumWebBrowser control. /// the browser object. /// The frame the request is coming from. /// the request object - cannot be modified in this callback. /// The value will be true if the browser navigated via explicit user gesture (e.g. clicking a link) or /// false if it navigated automatically (e.g. via the DomContentLoaded event). /// has the request been redirected. /// /// Return true to cancel the navigation or false to allow the navigation to proceed. /// protected virtual bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect) { return false; } /// bool IRequestHandler.OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) { return OnOpenUrlFromTab(chromiumWebBrowser, browser, frame, targetUrl, targetDisposition, userGesture); } /// /// Called on the UI thread before OnBeforeBrowse in certain limited cases where navigating a new or different browser might be /// desirable. This includes user-initiated navigation that might open in a special way (e.g. links clicked via middle-click or /// ctrl + left-click) and certain types of cross-origin navigation initiated from the renderer process (e.g. navigating the top- /// level frame to/from a file URL). /// /// the ChromiumWebBrowser control. /// the browser object. /// The frame object. /// target url. /// The value indicates where the user intended to navigate the browser based on standard /// Chromium behaviors (e.g. current tab, new tab, etc). /// The value will be true if the browser navigated via explicit user gesture (e.g. clicking a link) or /// false if it navigated automatically (e.g. via the DomContentLoaded event). /// /// Return true to cancel the navigation or false to allow the navigation to proceed in the source browser's top-level frame. /// protected virtual bool OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) { return false; } /// IResourceRequestHandler IRequestHandler.GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling) { return GetResourceRequestHandler(chromiumWebBrowser, browser, frame, request, isNavigation, isDownload, requestInitiator, ref disableDefaultHandling); } /// /// Called on the CEF IO thread before a resource request is initiated. /// /// the ChromiumWebBrowser control. /// represent the source browser of the request. /// represent the source frame of the request. /// represents the request contents and cannot be modified in this callback. /// will be true if the resource request is a navigation. /// will be true if the resource request is a download. /// is the origin (scheme + domain) of the page that initiated the request. /// [in,out] to true to disable default handling of the request, in which case it will need /// to be handled via or it will be canceled. /// /// To allow the resource load to proceed with default handling return null. To specify a handler for the resource return a /// object. If this callback returns null the same method will be called on the associated /// , if any. /// protected virtual IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling) { return null; } /// bool IRequestHandler.GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback) { return GetAuthCredentials(chromiumWebBrowser, browser, originUrl, isProxy, host, port, realm, scheme, callback); } /// /// Called when the browser needs credentials from the user. /// /// The ChromiumWebBrowser control. /// the browser object. /// is the origin making this authentication request. /// indicates whether the host is a proxy server. /// hostname. /// port number. /// realm. /// scheme. /// Callback interface used for asynchronous continuation of authentication requests. /// /// Return true to continue the request and call when the authentication /// information is available. Return false to cancel the request. /// protected virtual bool GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback) { callback.Dispose(); return false; } /// bool IRequestHandler.OnQuotaRequest(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, long newSize, IRequestCallback callback) { return OnQuotaRequest(chromiumWebBrowser, browser, originUrl, newSize, callback); } /// /// Called when JavaScript requests a specific storage quota size via the webkitStorageInfo.requestQuota function. For async /// processing return true and execute at a later time to grant or deny the request or /// to cancel. /// /// The ChromiumWebBrowser control. /// the browser object. /// the origin of the page making the request. /// is the requested quota size in bytes. /// Callback interface used for asynchronous continuation of url requests. /// /// Return false to cancel the request immediately. Return true to continue the request and call /// either in this method or at a later time to grant or deny the request. /// protected virtual bool OnQuotaRequest(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, long newSize, IRequestCallback callback) { callback.Dispose(); return false; } /// bool IRequestHandler.OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback) { return OnCertificateError(chromiumWebBrowser, browser, errorCode, requestUrl, sslInfo, callback); } /// /// Called to handle requests for URLs with an invalid SSL certificate. Return true and call /// either in this method or at a later time to continue or cancel the request. /// If CefSettings.IgnoreCertificateErrors is set all invalid certificates will be accepted without calling this method. /// /// the ChromiumWebBrowser control. /// the browser object. /// the error code for this invalid certificate. /// the url of the request for the invalid certificate. /// ssl certificate information. /// Callback interface used for asynchronous continuation of url requests. If empty the error cannot be /// recovered from and the request will be canceled automatically. /// /// Return false to cancel the request immediately. Return true and use to execute in an async /// fashion. /// protected virtual bool OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback) { callback.Dispose(); return false; } /// bool IRequestHandler.OnSelectClientCertificate(IWebBrowser chromiumWebBrowser, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback) { return OnSelectClientCertificate(chromiumWebBrowser, browser, isProxy, host, port, certificates, callback); } /// /// Called when the browser needs user to select Client Certificate for authentication requests (eg. PKI authentication). /// /// The ChromiumWebBrowser control. /// the browser object. /// indicates whether the host is a proxy server. /// hostname. /// port number. /// List of Client certificates for selection. /// Callback interface used for asynchronous continuation of client certificate selection for /// authentication requests. /// /// Return true to continue the request and call ISelectClientCertificateCallback.Select() with the selected certificate for /// authentication. Return false to use the default behavior where the browser selects the first certificate from the list. /// /// protected virtual bool OnSelectClientCertificate(IWebBrowser chromiumWebBrowser, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback) { callback.Dispose(); return false; } /// void IRequestHandler.OnPluginCrashed(IWebBrowser chromiumWebBrowser, IBrowser browser, string pluginPath) { OnPluginCrashed(chromiumWebBrowser, browser, pluginPath); } /// /// Called when a plugin has crashed. /// /// the ChromiumWebBrowser control. /// the browser object. /// path of the plugin that crashed. protected virtual void OnPluginCrashed(IWebBrowser chromiumWebBrowser, IBrowser browser, string pluginPath) { } /// void IRequestHandler.OnRenderViewReady(IWebBrowser chromiumWebBrowser, IBrowser browser) { OnRenderViewReady(chromiumWebBrowser, browser); } /// /// Called on the CEF UI thread when the render view associated with browser is ready to receive/handle IPC messages in the /// render process. /// /// The ChromiumWebBrowser control. /// the browser object. protected virtual void OnRenderViewReady(IWebBrowser chromiumWebBrowser, IBrowser browser) { } /// void IRequestHandler.OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser, IBrowser browser, CefTerminationStatus status) { OnRenderProcessTerminated(chromiumWebBrowser, browser, status); } /// /// Called when the render process terminates unexpectedly. /// /// The ChromiumWebBrowser control. /// the browser object. /// indicates how the process terminated. protected virtual void OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser, IBrowser browser, CefTerminationStatus status) { } } }