X Tutup
// Copyright (c) 2012 The CEF Python authors. All rights reserved. // License: New BSD License. // Website: http://code.google.com/p/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 "common/DebugLog.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: OnProcessMessageReceived(): "; logMessage.append(messageName.c_str()); DebugLog(logMessage.c_str()); if (messageName == "OnContextCreated") { CefRefPtr 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 { DebugLog("Browser: OnProcessMessageReceived(): invalid arguments" \ ", messageName = OnContextCreated"); return false; } } else if (messageName == "OnContextReleased") { CefRefPtr 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 { DebugLog("Browser: OnProcessMessageReceived(): invalid arguments" \ ", messageName = OnContextReleased"); return false; } } else if (messageName == "V8FunctionHandler::Execute") { CefRefPtr 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 { DebugLog("Browser: OnProcessMessageReceived(): invalid arguments" \ ", messageName = V8FunctionHandler::Execute"); return false; } } else if (messageName == "ExecutePythonCallback") { CefRefPtr 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 { DebugLog("Browser: OnProcessMessageReceived(): invalid arguments" \ ", messageName = ExecutePythonCallback"); return false; } } else if (messageName == "RemovePythonCallbacksForFrame") { CefRefPtr arguments = message->GetArgumentList(); if (arguments->GetSize() == 1 && arguments->GetType(0) == VTYPE_INT) { int frameId = arguments->GetInt(0); RemovePythonCallbacksForFrame(frameId); return true; } else { DebugLog("Browser: OnProcessMessageReceived(): invalid arguments" \ ", messageName = ExecutePythonCallback"); return false; } } return false; }
X Tutup