#include "libcef_dll/cpptoc/display_handler_cpptoc.h"
#include "libcef_dll/ctocpp/browser_ctocpp.h"
#include "libcef_dll/ctocpp/frame_ctocpp.h"
#include "libcef_dll/shutdown_checker.h"
#include "libcef_dll/transfer_util.h"
namespace {
void CEF_CALLBACK
display_handler_on_address_change(struct _cef_display_handler_t* self,
cef_browser_t* browser,
struct _cef_frame_t* frame,
const cef_string_t* url) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
DCHECK(browser);
if (!browser)
return;
DCHECK(frame);
if (!frame)
return;
DCHECK(url);
if (!url)
return;
CefDisplayHandlerCppToC::Get(self)->OnAddressChange(
CefBrowserCToCpp::Wrap(browser), CefFrameCToCpp::Wrap(frame),
CefString(url));
}
void CEF_CALLBACK
display_handler_on_title_change(struct _cef_display_handler_t* self,
cef_browser_t* browser,
const cef_string_t* title) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
DCHECK(browser);
if (!browser)
return;
CefDisplayHandlerCppToC::Get(self)->OnTitleChange(
CefBrowserCToCpp::Wrap(browser), CefString(title));
}
void CEF_CALLBACK
display_handler_on_favicon_urlchange(struct _cef_display_handler_t* self,
cef_browser_t* browser,
cef_string_list_t icon_urls) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
DCHECK(browser);
if (!browser)
return;
std::vector<CefString> icon_urlsList;
transfer_string_list_contents(icon_urls, icon_urlsList);
CefDisplayHandlerCppToC::Get(self)->OnFaviconURLChange(
CefBrowserCToCpp::Wrap(browser), icon_urlsList);
}
void CEF_CALLBACK
display_handler_on_fullscreen_mode_change(struct _cef_display_handler_t* self,
cef_browser_t* browser,
int fullscreen) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
DCHECK(browser);
if (!browser)
return;
CefDisplayHandlerCppToC::Get(self)->OnFullscreenModeChange(
CefBrowserCToCpp::Wrap(browser), fullscreen ? true : false);
}
int CEF_CALLBACK display_handler_on_tooltip(struct _cef_display_handler_t* self,
cef_browser_t* browser,
cef_string_t* text) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(browser);
if (!browser)
return 0;
CefString textStr(text);
bool _retval = CefDisplayHandlerCppToC::Get(self)->OnTooltip(
CefBrowserCToCpp::Wrap(browser), textStr);
return _retval;
}
void CEF_CALLBACK
display_handler_on_status_message(struct _cef_display_handler_t* self,
cef_browser_t* browser,
const cef_string_t* value) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
DCHECK(browser);
if (!browser)
return;
CefDisplayHandlerCppToC::Get(self)->OnStatusMessage(
CefBrowserCToCpp::Wrap(browser), CefString(value));
}
int CEF_CALLBACK
display_handler_on_console_message(struct _cef_display_handler_t* self,
cef_browser_t* browser,
cef_log_severity_t level,
const cef_string_t* message,
const cef_string_t* source,
int line) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(browser);
if (!browser)
return 0;
bool _retval = CefDisplayHandlerCppToC::Get(self)->OnConsoleMessage(
CefBrowserCToCpp::Wrap(browser), level, CefString(message),
CefString(source), line);
return _retval;
}
int CEF_CALLBACK
display_handler_on_auto_resize(struct _cef_display_handler_t* self,
cef_browser_t* browser,
const cef_size_t* new_size) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(browser);
if (!browser)
return 0;
DCHECK(new_size);
if (!new_size)
return 0;
CefSize new_sizeVal = new_size ? *new_size : CefSize();
bool _retval = CefDisplayHandlerCppToC::Get(self)->OnAutoResize(
CefBrowserCToCpp::Wrap(browser), new_sizeVal);
return _retval;
}
void CEF_CALLBACK
display_handler_on_loading_progress_change(struct _cef_display_handler_t* self,
cef_browser_t* browser,
double progress) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
DCHECK(browser);
if (!browser)
return;
CefDisplayHandlerCppToC::Get(self)->OnLoadingProgressChange(
CefBrowserCToCpp::Wrap(browser), progress);
}
int CEF_CALLBACK display_handler_on_cursor_change(
struct _cef_display_handler_t* self,
cef_browser_t* browser,
cef_cursor_handle_t cursor,
cef_cursor_type_t type,
const struct _cef_cursor_info_t* custom_cursor_info) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(browser);
if (!browser)
return 0;
DCHECK(custom_cursor_info);
if (!custom_cursor_info)
return 0;
CefCursorInfo custom_cursor_infoObj;
if (custom_cursor_info)
custom_cursor_infoObj.Set(*custom_cursor_info, false);
bool _retval = CefDisplayHandlerCppToC::Get(self)->OnCursorChange(
CefBrowserCToCpp::Wrap(browser), cursor, type, custom_cursor_infoObj);
return _retval;
}
}
CefDisplayHandlerCppToC::CefDisplayHandlerCppToC() {
GetStruct()->on_address_change = display_handler_on_address_change;
GetStruct()->on_title_change = display_handler_on_title_change;
GetStruct()->on_favicon_urlchange = display_handler_on_favicon_urlchange;
GetStruct()->on_fullscreen_mode_change =
display_handler_on_fullscreen_mode_change;
GetStruct()->on_tooltip = display_handler_on_tooltip;
GetStruct()->on_status_message = display_handler_on_status_message;
GetStruct()->on_console_message = display_handler_on_console_message;
GetStruct()->on_auto_resize = display_handler_on_auto_resize;
GetStruct()->on_loading_progress_change =
display_handler_on_loading_progress_change;
GetStruct()->on_cursor_change = display_handler_on_cursor_change;
}
CefDisplayHandlerCppToC::~CefDisplayHandlerCppToC() {
shutdown_checker::AssertNotShutdown();
}
template <>
CefRefPtr<CefDisplayHandler> CefCppToCRefCounted<
CefDisplayHandlerCppToC,
CefDisplayHandler,
cef_display_handler_t>::UnwrapDerived(CefWrapperType type,
cef_display_handler_t* s) {
NOTREACHED() << "Unexpected class type: " << type;
return nullptr;
}
template <>
CefWrapperType CefCppToCRefCounted<CefDisplayHandlerCppToC,
CefDisplayHandler,
cef_display_handler_t>::kWrapperType =
WT_DISPLAY_HANDLER;