// Copyright (c) 2012 CEF Python, see the Authors file. // All rights reserved. Licensed under BSD 3-clause license. // Project website: https://github.com/cztomczak/cefpython // NOTE: clienthandler code is running only in the BROWSER PROCESS. // cefpythonapp code is running in both BROWSER PROCESS and subprocess // (see the subprocess/ directory). #include "client_handler.h" #include "common/cefpython_public_api.h" #include "include/base/cef_logging.h" #if defined(OS_WIN) #include #pragma comment(lib, "Shell32.lib") #include "dpi_aware.h" #elif defined(OS_LINUX) #include #include #endif // OS_WIN // ---------------------------------------------------------------------------- // CefClient // ---------------------------------------------------------------------------- bool ClientHandler::OnProcessMessageReceived( CefRefPtr browser, CefProcessId source_process, CefRefPtr message) { if (source_process != PID_RENDERER) { return false; } std::string messageName = message->GetName().ToString(); std::string logMessage = "[Browser process] OnProcessMessageReceived(): "; logMessage.append(messageName.c_str()); LOG(INFO) arguments = message->GetArgumentList(); if (arguments->GetSize() == 1 && arguments->GetType(0) == VTYPE_INT) { int64 frameId = arguments->GetInt(0); CefRefPtr frame = browser->GetFrame(frameId); V8ContextHandler_OnContextCreated(browser, frame); return true; } else { LOG(ERROR) arguments = message->GetArgumentList(); if (arguments->GetSize() == 2 \ && arguments->GetType(0) == VTYPE_INT \ && arguments->GetType(1) == VTYPE_INT) { int browserId = arguments->GetInt(0); int64 frameId = arguments->GetInt(1); V8ContextHandler_OnContextReleased(browserId, frameId); return true; } else { LOG(ERROR) arguments = message->GetArgumentList(); if (arguments->GetSize() == 3 // frameId && arguments->GetType(0) == VTYPE_INT // functionName && arguments->GetType(1) == VTYPE_STRING // functionArguments && arguments->GetType(2) == VTYPE_LIST) { int64 frameId = arguments->GetInt(0); CefString functionName = arguments->GetString(1); CefRefPtr functionArguments = arguments->GetList(2); CefRefPtr frame = browser->GetFrame(frameId); V8FunctionHandler_Execute(browser, frame, functionName, functionArguments); return true; } else { LOG(ERROR) arguments = message->GetArgumentList(); if (arguments->GetSize() == 2 && arguments->GetType(0) == VTYPE_INT // callbackId && arguments->GetType(1) == VTYPE_LIST) { // functionArguments int callbackId = arguments->GetInt(0); CefRefPtr functionArguments = arguments->GetList(1); ExecutePythonCallback(browser, callbackId, functionArguments); return true; } else { LOG(ERROR) arguments = message->GetArgumentList(); if (arguments->GetSize() == 1 && arguments->GetType(0) == VTYPE_INT) { int frameId = arguments->GetInt(0); RemovePythonCallbacksForFrame(frameId); return true; } else { LOG(ERROR)