// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved. #include "WebBrowserPrivatePCH.h" #include "WebBrowserHandler.h" #include "WebBrowserWindow.h" #include "WebBrowserSingleton.h" #define LOCTEXT_NAMESPACE "WebBrowserHandler" #if WITH_CEF3 FWebBrowserHandler::FWebBrowserHandler() { } void FWebBrowserHandler::OnTitleChange(CefRefPtr Browser, const CefString& Title) { if (BrowserWindow.IsValid()) { BrowserWindow.Pin()->SetTitle(Title); } } void FWebBrowserHandler::OnAfterCreated(CefRefPtr Browser) { if (BrowserWindow.IsValid()) { BrowserWindow.Pin()->BindCefBrowser(Browser); } } void FWebBrowserHandler::OnBeforeClose(CefRefPtr Browser) { if (BrowserWindow.IsValid()) { BrowserWindow.Pin()->BindCefBrowser(nullptr); } } void FWebBrowserHandler::OnLoadError(CefRefPtr Browser, CefRefPtr Frame, CefLoadHandler::ErrorCode InErrorCode, const CefString& ErrorText, const CefString& FailedUrl) { // Don't display an error for downloaded files. if (InErrorCode == ERR_ABORTED) return; // Display a load error message. FFormatNamedArguments Args; Args.Add(TEXT("FailedUrl"), FText::FromString(FailedUrl.c_str())); Args.Add(TEXT("ErrorText"), FText::FromString(ErrorText.c_str())); Args.Add(TEXT("ErrorCode"), FText::AsNumber(InErrorCode)); FText ErrorMsg = FText::Format(LOCTEXT("WebBrowserLoadError", "Failed to load URL {FailedUrl} with error {ErrorText} ({ErrorCode})."), Args); FString ErrorHTML = TEXT("

") + ErrorMsg.ToString() + TEXT("

"); Frame->LoadString(*ErrorHTML, FailedUrl); } bool FWebBrowserHandler::GetViewRect(CefRefPtr Browser, CefRect& Rect) { if (BrowserWindow.IsValid()) { return BrowserWindow.Pin()->GetViewRect(Rect); } return false; } void FWebBrowserHandler::OnPaint(CefRefPtr Browser, PaintElementType Type, const RectList& DirtyRects, const void* Buffer, int Width, int Height) { if (BrowserWindow.IsValid()) { BrowserWindow.Pin()->OnPaint(Type, DirtyRects, Buffer, Width, Height); } } void FWebBrowserHandler::OnCursorChange(CefRefPtr Browser, CefCursorHandle Cursor) { if (BrowserWindow.IsValid()) { BrowserWindow.Pin()->OnCursorChange(Cursor); } } bool FWebBrowserHandler::OnBeforeResourceLoad(CefRefPtr Browser, CefRefPtr Frame, CefRefPtr Request) { const FString LanguageHeaderText(TEXT("Accept-Language")); const FString LocaleCode = FWebBrowserSingleton::GetCurrentLocaleCode(); CefRequest::HeaderMap HeaderMap; Request->GetHeaderMap(HeaderMap); auto LanguageHeader = HeaderMap.find(*LanguageHeaderText); if (LanguageHeader != HeaderMap.end()) { (*LanguageHeader).second = *LocaleCode; } else { HeaderMap.insert(std::pair(*LanguageHeaderText, *LocaleCode)); } Request->SetHeaderMap(HeaderMap); return false; } void FWebBrowserHandler::SetBrowserWindow(TSharedPtr InBrowserWindow) { BrowserWindow = InBrowserWindow; } #endif #undef LOCTEXT_NAMESPACE