130 lines
3.6 KiB
C++
130 lines
3.6 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "WebBrowserModule.h"
|
|
#include "WebBrowserLog.h"
|
|
#include "WebBrowserSingleton.h"
|
|
#include "Misc/App.h"
|
|
#include "Misc/EngineVersion.h"
|
|
#include "Misc/Paths.h"
|
|
#if WITH_CEF3
|
|
# include "CEF3Utils.h"
|
|
# include "include/cef_version.h"
|
|
# if PLATFORM_MAC
|
|
# include "include/wrapper/cef_library_loader.h"
|
|
# endif
|
|
#endif
|
|
|
|
DEFINE_LOG_CATEGORY(LogWebBrowser);
|
|
|
|
static FWebBrowserSingleton* WebBrowserSingleton = nullptr;
|
|
|
|
FWebBrowserInitSettings::FWebBrowserInitSettings()
|
|
: ProductVersion(FString::Printf(TEXT("%s/%s UnrealEngine/%s"), FApp::GetProjectName(), FApp::GetBuildVersion(), *FEngineVersion::Current().ToString()))
|
|
{
|
|
}
|
|
|
|
class FWebBrowserModule : public IWebBrowserModule
|
|
{
|
|
private:
|
|
// IModuleInterface Interface
|
|
virtual void StartupModule() override;
|
|
virtual void ShutdownModule() override;
|
|
|
|
public:
|
|
virtual bool IsWebModuleAvailable() const override;
|
|
virtual IWebBrowserSingleton* GetSingleton() override;
|
|
virtual bool CustomInitialize(const FWebBrowserInitSettings& WebBrowserInitSettings) override;
|
|
|
|
private:
|
|
#if WITH_CEF3
|
|
bool bLoadedCEFModule = false;
|
|
#if PLATFORM_MAC
|
|
// Dynamically load the CEF framework library.
|
|
CefScopedLibraryLoader *CEFLibraryLoader = nullptr;
|
|
#endif
|
|
#endif
|
|
};
|
|
|
|
IMPLEMENT_MODULE( FWebBrowserModule, WebBrowser );
|
|
|
|
void FWebBrowserModule::StartupModule()
|
|
{
|
|
#if WITH_CEF3
|
|
if (!IsRunningCommandlet())
|
|
{
|
|
CEF3Utils::BackupCEF3Logfile(FPaths::ProjectLogDir());
|
|
}
|
|
bLoadedCEFModule = CEF3Utils::LoadCEF3Modules(true);
|
|
if (!bLoadedCEFModule)
|
|
{
|
|
return;
|
|
}
|
|
#if PLATFORM_MAC
|
|
// Dynamically load the CEF framework library into this dylibs memory space.
|
|
// CEF now loads function pointers at runtime so we need this to be dylib specific.
|
|
CEFLibraryLoader = new CefScopedLibraryLoader();
|
|
if (!CEFLibraryLoader->LoadInMain(TCHAR_TO_ANSI(*CEF3Utils::GetCEF3ModulePath())))
|
|
{
|
|
UE_LOG(LogWebBrowser, Error, TEXT("Chromium loader initialization failed"));
|
|
return;
|
|
}
|
|
#endif // PLATFORM_MAC
|
|
const int CefVersionMajor = cef_version_info(0);
|
|
const int CefVersionMinor = cef_version_info(1);
|
|
const int CefVersionPatch = cef_version_info(2);
|
|
const int CefCommitNumber = cef_version_info(3);
|
|
UE_LOG(LogWebBrowser, Log, TEXT("Loaded CEF3 version %i.%i.%i.%i from %s"), CefVersionMajor, CefVersionMinor, CefVersionPatch, CefCommitNumber, *CEF3Utils::GetCEF3ModulePath());
|
|
if (CefVersionMajor != CEF_VERSION_MAJOR || CefVersionMinor != CEF_VERSION_MINOR || CefVersionPatch != CEF_VERSION_PATCH || CefCommitNumber != CEF_COMMIT_NUMBER)
|
|
{
|
|
UE_LOG(LogWebBrowser, Warning, TEXT("CEF3 loaded version mismatch! Module was built against %i.%i.%i.%i, check if library loading path is correct"), CEF_VERSION_MAJOR, CEF_VERSION_MINOR, CEF_VERSION_PATCH, CEF_COMMIT_NUMBER);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void FWebBrowserModule::ShutdownModule()
|
|
{
|
|
if (WebBrowserSingleton != nullptr)
|
|
{
|
|
delete WebBrowserSingleton;
|
|
WebBrowserSingleton = nullptr;
|
|
}
|
|
|
|
#if WITH_CEF3
|
|
CEF3Utils::UnloadCEF3Modules();
|
|
#if PLATFORM_MAC
|
|
delete CEFLibraryLoader;
|
|
CEFLibraryLoader = nullptr;
|
|
#endif // PLATFORM_MAC
|
|
#endif
|
|
}
|
|
|
|
bool FWebBrowserModule::CustomInitialize(const FWebBrowserInitSettings& WebBrowserInitSettings)
|
|
{
|
|
if (WebBrowserSingleton == nullptr)
|
|
{
|
|
WebBrowserSingleton = new FWebBrowserSingleton(WebBrowserInitSettings);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
IWebBrowserSingleton* FWebBrowserModule::GetSingleton()
|
|
{
|
|
if (WebBrowserSingleton == nullptr)
|
|
{
|
|
WebBrowserSingleton = new FWebBrowserSingleton(FWebBrowserInitSettings());
|
|
}
|
|
return WebBrowserSingleton;
|
|
}
|
|
|
|
|
|
bool FWebBrowserModule::IsWebModuleAvailable() const
|
|
{
|
|
#if WITH_CEF3
|
|
return bLoadedCEFModule;
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
|