#include #include #include #include #include #include #include #include #include #include #include #include #include "WebClient.h" #include "WebBrowserHost.h" namespace Atomic { class WebBrowserHostPrivate { friend class WebBrowserHost; public: WebBrowserHostPrivate(WebBrowserHost* host) { host_ = host; } virtual ~WebBrowserHostPrivate() { host_ = 0; } private: WeakPtr host_; }; WebBrowserHost::WebBrowserHost(Context* context) : Object (context) { const Vector& arguments = GetArguments(); const char** _argv { 0 }; PODVector argv; for (unsigned i = 0; i < arguments.Size(); i++) argv.Push(arguments[i].CString()); CefMainArgs args(arguments.Size(), arguments.Size() ? (char**) &argv[0] : (char **) _argv); int result = CefExecuteProcess(args, nullptr, nullptr); if (result >= 0) { LOGERROR("CEFExecuteProcess - Error"); } CefSettings settings; settings.windowless_rendering_enabled = true; // If losing OSX system menu, it means we're calling this // before initializing graphics subsystem if (!CefInitialize(args, settings, nullptr, nullptr)) { LOGERROR("CefInitialize - Error"); } d_ = new WebBrowserHostPrivate(this); SubscribeToEvent(E_BEGINFRAME, HANDLER(WebBrowserHost, HandleBeginFrame)); } WebBrowserHost::~WebBrowserHost() { CefShutdown(); } void WebBrowserHost::HandleBeginFrame(StringHash eventType, VariantMap& eventData) { CefDoMessageLoopWork(); } }