#include "atom_cef_render_process_handler.h" #include "atom.h" #include "native_linux.h" #include "onig_reg_exp.h" #include "io_utils.h" #include "message_translation.h" #include void AtomCefRenderProcessHandler::OnWebKitInitialized() { new v8_extensions::Atom(); new v8_extensions::NativeHandler(); } void AtomCefRenderProcessHandler::OnContextCreated( CefRefPtr browser, CefRefPtr frame, CefRefPtr context) { CefRefPtr resourcePath = CefV8Value::CreateString( io_util_app_directory()); CefRefPtr global = context->GetGlobal(); CefRefPtr atom = global->GetValue("atom"); atom->SetValue("resourcePath", resourcePath, V8_PROPERTY_ATTRIBUTE_NONE); } bool AtomCefRenderProcessHandler::OnProcessMessageReceived( CefRefPtr browser, CefProcessId source_process, CefRefPtr message) { std::string name = message->GetName().ToString(); if (name == "reload") { Reload(browser); return true; } else { return CallMessageReceivedHandler(browser->GetMainFrame()->GetV8Context(), message); } } void AtomCefRenderProcessHandler::Reload(CefRefPtr browser) { CefRefPtr context = browser->GetMainFrame()->GetV8Context(); CefRefPtr global = context->GetGlobal(); context->Enter(); CefV8ValueList arguments; CefRefPtr reloadFunction = global->GetValue("reload"); reloadFunction->ExecuteFunction(global, arguments); if (reloadFunction->HasException()) { browser->ReloadIgnoreCache(); } context->Exit(); } bool AtomCefRenderProcessHandler::CallMessageReceivedHandler( CefRefPtr context, CefRefPtr message) { context->Enter(); CefRefPtr atom = context->GetGlobal()->GetValue("atom"); CefRefPtr receiveFn = atom->GetValue( "receiveMessageFromBrowserProcess"); CefV8ValueList arguments; arguments.push_back(CefV8Value::CreateString(message->GetName().ToString())); CefRefPtr messageArguments = message->GetArgumentList(); if (messageArguments->GetSize() > 0) { CefRefPtr data = CefV8Value::CreateArray( messageArguments->GetSize()); TranslateList(messageArguments, data); arguments.push_back(data); } receiveFn->ExecuteFunction(atom, arguments); context->Exit(); if (receiveFn->HasException()) { std::cout << "ERROR: Exception in JS receiving message " << message->GetName().ToString() << "\n"; return false; } else { return true; } }