Files
VRCX/Dotnet/Cef/CefCustomRequestHandler.cs
2026-01-12 11:14:33 +13:00

86 lines
3.4 KiB
C#

using System.Security.Cryptography.X509Certificates;
using CefSharp;
using NLog;
namespace VRCX
{
public class CustomRequestHandler : IRequestHandler
{
private readonly Logger _logger = LogManager.GetCurrentClassLogger();
public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect)
{
if (Program.LaunchDebug ||
request.Url.StartsWith("file://vrcx/") ||
request.Url.StartsWith("chrome-extension://"))
return false;
_logger.Error("Blocking navigation to: {Url}", request.Url);
return true;
}
public void OnDocumentAvailableInMainFrame(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
}
public bool OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl,
WindowOpenDisposition targetDisposition, bool userGesture)
{
_logger.Debug("Blocking OnOpenUrlFromTab: {TargetUrl}",
targetUrl);
return true;
}
public IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame,
IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
return null;
}
public bool GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host,
int port, string realm, string scheme, IAuthCallback callback)
{
return false;
}
public bool OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl,
ISslInfo sslInfo, IRequestCallback callback)
{
return true;
}
public bool OnSelectClientCertificate(IWebBrowser chromiumWebBrowser, IBrowser browser, bool isProxy, string host, int port,
X509Certificate2Collection certificates, ISelectClientCertificateCallback callback)
{
return false;
}
public void OnRenderViewReady(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
}
public void OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser, IBrowser browser, CefTerminationStatus status,
int errorCode, string errorMessage)
{
var message = status switch
{
CefTerminationStatus.AbnormalTermination => "Browser terminated abnormally.",
CefTerminationStatus.ProcessWasKilled => "Browser was killed.",
CefTerminationStatus.ProcessCrashed => "Browser crashed.",
CefTerminationStatus.OutOfMemory => "Browser out of memory.",
_ => $"Browser terminated with unhandled status code '{status}'"
};
_logger.Error("Render process terminated: {Message} ErrorCode: {ErrorCode} ErrorMessage: {ErrorMessage}",
message, errorCode, errorMessage);
StartupArgs.LaunchArguments.LaunchCommand = $"crash/{message}";
if (chromiumWebBrowser.IsDisposed || chromiumWebBrowser.IsLoading)
return;
_logger.Info("Attempting to reload browser...");
chromiumWebBrowser.Reload();
}
}
}