// 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();
}
}
}
}