// Copyright © 2017 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; using CefSharp.Handler; namespace CefSharp.Example.RequestEventHandler { /// /// Example class that demos exposing some of the methods of as events. /// Inheriting from requres you only override the methods you are interested in. /// You can of course inherit from the interface and implement all the methods /// yourself if that's required. /// Simply check out the interface method the event was named by (e.g corresponds to /// ) /// inspired by: /// https://github.com/cefsharp/CefSharp/blob/fa41529853b2527eb0468a507ab6c5bd0768eb59/CefSharp.Example/RequestHandler.cs /// public class RequestEventHandler : RequestHandler { public event EventHandler OnBeforeBrowseEvent; public event EventHandler OnOpenUrlFromTabEvent; public event EventHandler OnCertificateErrorEvent; public event EventHandler GetAuthCredentialsEvent; public event EventHandler OnRenderProcessTerminatedEvent; protected override bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect) { var args = new OnBeforeBrowseEventArgs(chromiumWebBrowser, browser, frame, request, userGesture, isRedirect); OnBeforeBrowseEvent?.Invoke(this, args); return args.CancelNavigation; } protected override bool OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) { var args = new OnOpenUrlFromTabEventArgs(chromiumWebBrowser, browser, frame, targetUrl, targetDisposition, userGesture); OnOpenUrlFromTabEvent?.Invoke(this, args); return args.CancelNavigation; } protected override bool OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback) { var args = new OnCertificateErrorEventArgs(chromiumWebBrowser, browser, errorCode, requestUrl, sslInfo, callback); OnCertificateErrorEvent?.Invoke(this, args); EnsureCallbackDisposal(callback); return args.ContinueAsync; } protected override bool GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback) { var args = new GetAuthCredentialsEventArgs(chromiumWebBrowser, browser, originUrl, isProxy, host, port, realm, scheme, callback); GetAuthCredentialsEvent?.Invoke(this, args); EnsureCallbackDisposal(callback); return args.ContinueAsync; } protected override void OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser, IBrowser browser, CefTerminationStatus status, int errorCode, string errorMessage) { var args = new OnRenderProcessTerminatedEventArgs(chromiumWebBrowser, browser, status, errorCode, errorMessage); OnRenderProcessTerminatedEvent?.Invoke(this, args); } private static void EnsureCallbackDisposal(IRequestCallback callbackToDispose) { if (callbackToDispose != null && !callbackToDispose.IsDisposed) { callbackToDispose.Dispose(); } } private static void EnsureCallbackDisposal(IAuthCallback callbackToDispose) { if (callbackToDispose != null && !callbackToDispose.IsDisposed) { callbackToDispose.Dispose(); } } } }