diff --git a/CMakeLists.txt b/CMakeLists.txt index 588fb8c..f544729 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ project(aya-cef-subprocess) set(CMAKE_CXX_STANDARD 20) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") -# JACKDS DOING BELOW: +# JACKDS DOING BELOW: <== You smell like poop set(CEF_USE_SANDBOX TRUE CACHE BOOL "Force turning off of sandbox") set(CEF_VERSION 123.0.13+gfc703fb+chromium-123.0.6312.124) set(cefName cef_binary_${CEF_VERSION}_windows64) diff --git a/main.cpp b/main.cpp index 9203cb5..5606c08 100644 --- a/main.cpp +++ b/main.cpp @@ -1,6 +1,12 @@ - +// libcef +#include "include/cef_frame_handler.h" +#include +#include #include #include +#include +#include +#include class AyaCEFApp : public CefApp { @@ -11,13 +17,53 @@ private: }; -class AyaSubProcess : public AyaCEFApp , public CefRenderProcessHandler { +class AyaSubProcess + : public AyaCEFApp + , public CefRenderProcessHandler + , public CefV8Handler +{ public: virtual CefRefPtr GetRenderProcessHandler() override { return this; } + void OnContextCreated(CefRefPtr browser, + CefRefPtr frame, + CefRefPtr context) override + { + CefRefPtr global = context->GetGlobal(); + CefRefPtr func = CefV8Value::CreateFunction("sendResultToCpp", this); + global->SetValue("sendResultToCpp", func, V8_PROPERTY_ATTRIBUTE_NONE); + } + + bool Execute(const CefString& name, + CefRefPtr object, + const CefV8ValueList& arguments, + CefRefPtr& retval, + CefString& exception) override + { + // this should start to become a tuple of some kind because this is + // shit if we want to let users have more control over js w/ lua + + // but this is good enough as a poc & can be used for replication + // across different clients connected to a server + if (name == "sendResultToCpp" && arguments.size() == 1 && arguments[0]->IsString()) { + CefRefPtr msg = CefProcessMessage::Create("resultMessage"); + + CefRefPtr args = msg->GetArgumentList(); + args->SetString(0, arguments[0]->GetStringValue()); + + CefRefPtr browser = CefV8Context::GetCurrentContext()->GetBrowser(); + CefRefPtr frame = browser->GetMainFrame(); + + frame->SendProcessMessage(PID_BROWSER, msg); + + return true; + } + return false; + } + private: IMPLEMENT_REFCOUNTING(AyaSubProcess);