mirror of
https://github.com/vrcx-team/VRCX.git
synced 2026-04-06 00:32:02 +02:00
86 lines
3.4 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|