WebView fixes and improvements.

Re-organize initialization so that User-Agent CVar actually works.

Add web.headless CVar to not load CEF even on graphical client.

Clean up init logic to not rely on static IoC, and clean up loggers used too.
This commit is contained in:
Pieter-Jan Briers
2023-02-24 00:26:37 +01:00
parent 59a8a98703
commit d6cbdd221c
8 changed files with 40 additions and 19 deletions

View File

@@ -27,7 +27,7 @@ namespace Robust.Client.WebView.Cef
var impl = new WebViewWindowImpl(this);
var lifeSpanHandler = new WindowLifeSpanHandler(impl);
var reqHandler = new RobustRequestHandler(Logger.GetSawmill("root"));
var reqHandler = new RobustRequestHandler(_sawmill);
var client = new WindowCefClient(lifeSpanHandler, reqHandler);
var settings = new CefBrowserSettings();

View File

@@ -33,8 +33,6 @@ namespace Robust.Client.WebView.Cef
public void Initialize()
{
IoCManager.Instance!.InjectDependencies(this, oneOff: true);
_sawmill = _logManager.GetSawmill("web.cef");
_consoleHost.RegisterCommand(
@@ -77,7 +75,7 @@ namespace Robust.Client.WebView.Cef
CachePath = cachePath,
};
var userAgentOverride = _cfg.GetCVar(WCVars.UserAgentOverride);
var userAgentOverride = _cfg.GetCVar(WCVars.WebUserAgentOverride);
if (!string.IsNullOrEmpty(userAgentOverride))
{
settings.UserAgent = userAgentOverride;
@@ -96,7 +94,11 @@ namespace Robust.Client.WebView.Cef
if (_cfg.GetCVar(WCVars.WebResProtocol))
{
var handler = new ResourceSchemeFactoryHandler(this, _resourceManager, Logger.GetSawmill("web.res"));
var handler = new ResourceSchemeFactoryHandler(
this,
_resourceManager,
_logManager.GetSawmill("web.res"));
CefRuntime.RegisterSchemeHandlerFactory("res", "", handler);
}
}

View File

@@ -18,6 +18,12 @@ public static class WCVars
/// <summary>
/// Overrides the default CEF user-agent when set to a non-empty string.
/// </summary>
public static readonly CVarDef<string> UserAgentOverride =
public static readonly CVarDef<string> WebUserAgentOverride =
CVarDef.Create("web.user_agent", "", CVar.CLIENTONLY);
/// <summary>
/// If true, use headless WebView implementation even with graphical client (turn off CEF).
/// </summary>
public static readonly CVarDef<bool> WebHeadless =
CVarDef.Create("web.headless", false, CVar.CLIENTONLY);
}

View File

@@ -15,22 +15,29 @@ namespace Robust.Client.WebView
{
private IWebViewManagerImpl? _impl;
public void Initialize(GameController.DisplayMode mode)
public void PreInitialize(IDependencyCollection dependencies, GameController.DisplayMode mode)
{
DebugTools.Assert(_impl == null, "WebViewManager has already been initialized!");
var cfg = IoCManager.Resolve<IConfigurationManagerInternal>();
var cfg = dependencies.Resolve<IConfigurationManagerInternal>();
cfg.LoadCVarsFromAssembly(typeof(WebViewManager).Assembly);
IoCManager.RegisterInstance<IWebViewManager>(this);
IoCManager.RegisterInstance<IWebViewManagerInternal>(this);
dependencies.RegisterInstance<IWebViewManager>(this);
dependencies.RegisterInstance<IWebViewManagerInternal>(this);
if (mode == GameController.DisplayMode.Headless)
if (mode == GameController.DisplayMode.Headless || cfg.GetCVar(WCVars.WebHeadless))
_impl = new WebViewManagerHeadless();
else
_impl = new WebViewManagerCef();
_impl.Initialize();
dependencies.InjectDependencies(_impl, oneOff: true);
}
public void Initialize()
{
DebugTools.Assert(_impl != null, "WebViewManager has not yet been initialized!");
_impl!.Initialize();
}
public void Update()