2018-09-10 02:41:13 +02:00
|
|
|
// Copyright © 2017 The CefSharp Authors. All rights reserved.
|
2017-02-10 00:23:37 +01:00
|
|
|
//
|
|
|
|
|
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
|
|
using System;
|
2019-06-25 18:56:12 +10:00
|
|
|
using CefSharp.Handler;
|
2017-02-10 00:23:37 +01:00
|
|
|
|
|
|
|
|
namespace CefSharp.Example.RequestEventHandler
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
2019-06-25 18:56:12 +10:00
|
|
|
/// Example class that demos exposing some of the methods of <see cref="RequestHandler"/> as events.
|
|
|
|
|
/// Inheriting from <see cref="RequestHandler"/> requres you only override the methods you are interested in.
|
|
|
|
|
/// You can of course inherit from the interface <see cref="IRequestHandler"/> and implement all the methods
|
|
|
|
|
/// yourself if that's required.
|
|
|
|
|
/// Simply check out the interface method the event was named by (e.g <see cref="OnCertificateErrorEvent" /> corresponds to
|
|
|
|
|
/// <see cref="IRequestHandler.OnCertificateError" />)
|
|
|
|
|
/// inspired by:
|
|
|
|
|
/// https://github.com/cefsharp/CefSharp/blob/fa41529853b2527eb0468a507ab6c5bd0768eb59/CefSharp.Example/RequestHandler.cs
|
2017-02-10 00:23:37 +01:00
|
|
|
/// </summary>
|
2019-06-25 18:56:12 +10:00
|
|
|
public class RequestEventHandler : RequestHandler
|
2017-02-10 00:23:37 +01:00
|
|
|
{
|
|
|
|
|
public event EventHandler<OnBeforeBrowseEventArgs> OnBeforeBrowseEvent;
|
|
|
|
|
public event EventHandler<OnOpenUrlFromTabEventArgs> OnOpenUrlFromTabEvent;
|
|
|
|
|
public event EventHandler<OnCertificateErrorEventArgs> OnCertificateErrorEvent;
|
|
|
|
|
public event EventHandler<GetAuthCredentialsEventArgs> GetAuthCredentialsEvent;
|
|
|
|
|
public event EventHandler<OnRenderProcessTerminatedEventArgs> OnRenderProcessTerminatedEvent;
|
2019-06-25 18:56:12 +10:00
|
|
|
|
2019-07-20 16:26:25 +10:00
|
|
|
protected override bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect)
|
2017-02-10 00:23:37 +01:00
|
|
|
{
|
2019-07-20 16:26:25 +10:00
|
|
|
var args = new OnBeforeBrowseEventArgs(chromiumWebBrowser, browser, frame, request, userGesture, isRedirect);
|
2018-03-28 14:40:26 +10:00
|
|
|
|
|
|
|
|
OnBeforeBrowseEvent?.Invoke(this, args);
|
|
|
|
|
|
2017-02-10 00:23:37 +01:00
|
|
|
return args.CancelNavigation;
|
|
|
|
|
}
|
|
|
|
|
|
2019-07-20 16:26:25 +10:00
|
|
|
protected override bool OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
|
2017-02-10 00:23:37 +01:00
|
|
|
{
|
2019-07-20 16:26:25 +10:00
|
|
|
var args = new OnOpenUrlFromTabEventArgs(chromiumWebBrowser, browser, frame, targetUrl, targetDisposition, userGesture);
|
2018-03-28 14:40:26 +10:00
|
|
|
|
|
|
|
|
OnOpenUrlFromTabEvent?.Invoke(this, args);
|
|
|
|
|
|
2017-02-10 00:23:37 +01:00
|
|
|
return args.CancelNavigation;
|
|
|
|
|
}
|
|
|
|
|
|
2019-07-20 16:26:25 +10:00
|
|
|
protected override bool OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
|
2017-02-10 00:23:37 +01:00
|
|
|
{
|
2019-07-20 16:26:25 +10:00
|
|
|
var args = new OnCertificateErrorEventArgs(chromiumWebBrowser, browser, errorCode, requestUrl, sslInfo, callback);
|
2018-03-28 14:40:26 +10:00
|
|
|
|
|
|
|
|
OnCertificateErrorEvent?.Invoke(this, args);
|
2017-02-10 00:23:37 +01:00
|
|
|
|
|
|
|
|
EnsureCallbackDisposal(callback);
|
|
|
|
|
return args.ContinueAsync;
|
|
|
|
|
}
|
|
|
|
|
|
2019-07-20 16:26:25 +10:00
|
|
|
protected override bool GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
|
2017-02-10 00:23:37 +01:00
|
|
|
{
|
2019-07-20 16:26:25 +10:00
|
|
|
var args = new GetAuthCredentialsEventArgs(chromiumWebBrowser, browser, originUrl, isProxy, host, port, realm, scheme, callback);
|
2018-03-28 14:40:26 +10:00
|
|
|
|
|
|
|
|
GetAuthCredentialsEvent?.Invoke(this, args);
|
2017-02-10 00:23:37 +01:00
|
|
|
|
|
|
|
|
EnsureCallbackDisposal(callback);
|
|
|
|
|
return args.ContinueAsync;
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-03 18:45:50 +10:00
|
|
|
protected override void OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser, IBrowser browser, CefTerminationStatus status, int errorCode, string errorMessage)
|
2017-02-10 00:23:37 +01:00
|
|
|
{
|
2024-05-03 18:45:50 +10:00
|
|
|
var args = new OnRenderProcessTerminatedEventArgs(chromiumWebBrowser, browser, status, errorCode, errorMessage);
|
2018-03-28 14:40:26 +10:00
|
|
|
|
|
|
|
|
OnRenderProcessTerminatedEvent?.Invoke(this, args);
|
2017-02-10 00:23:37 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|