66#include " cefpython_public_api.h"
77#include < stdio.h>
88
9- // Declared "inline" to get rid of the "already defined" errors when linking.
9+ // Defined as "inline" to get rid of the "already defined" errors
10+ // when linking.
1011inline void DebugLog (const char * szString)
1112{
1213 // TODO: get the log_file option from CefSettings.
14+ printf (" cefpython: %s\n " , szString);
1315 FILE* pFile = fopen (" debug.log" , " a" );
1416 fprintf (pFile, " cefpython_app: %s\n " , szString);
1517 fclose (pFile);
@@ -18,32 +20,51 @@ inline void DebugLog(const char* szString)
1820bool ClientHandler::OnProcessMessageReceived (CefRefPtr<CefBrowser> browser,
1921 CefProcessId source_process,
2022 CefRefPtr<CefProcessMessage> message) {
21- std::string messageName = message.get ()->GetName ().ToString ();
22- printf (" Browser: OnProcessMessageReceived(): %s\n " , messageName.c_str ());
23+ std::string messageName = message->GetName ().ToString ();
24+ std::string logMessage = " Browser: OnProcessMessageReceived(): " ;
25+ logMessage.append (messageName.c_str ());
26+ DebugLog (logMessage.c_str ());
2327 if (messageName == " OnContextCreated" ) {
24- CefRefPtr<CefListValue> args = message. get () ->GetArgumentList ();
25- if (args. get () ->GetSize () == 1
26- && args. get ()-> GetType (0 ) == VTYPE_INT) {
27- int64 frameIdentifier = args. get ()-> GetInt ( 0 );
28- V8ContextHandler_OnContextCreated (browser, frameIdentifier );
28+ CefRefPtr<CefListValue> args = message->GetArgumentList ();
29+ if (args->GetSize () == 1 && args-> GetType ( 0 ) == VTYPE_INT) {
30+ int64 frameId = args-> GetInt (0 );
31+ CefRefPtr<CefFrame> frame = browser-> GetFrame (frameId );
32+ V8ContextHandler_OnContextCreated (browser, frame );
2933 return true ;
3034 } else {
31- DebugLog (" Browser: OnProcessMessageReceived(): invalid arguments," \
35+ DebugLog (" Browser: OnProcessMessageReceived(): invalid arguments," \
3236 " messageName=OnContextCreated" );
3337 return false ;
3438 }
3539 } else if (messageName == " OnContextReleased" ) {
36- CefRefPtr<CefListValue> args = message. get () ->GetArgumentList ();
37- if (args. get () ->GetSize () == 1
38- && args. get ()-> GetType (0 ) == VTYPE_INT) {
39- int64 frameIdentifier = args. get ()-> GetInt ( 0 );
40- V8ContextHandler_OnContextReleased (browser, frameIdentifier );
40+ CefRefPtr<CefListValue> args = message->GetArgumentList ();
41+ if (args->GetSize () == 1 && args-> GetType ( 0 ) == VTYPE_INT) {
42+ int64 frameId = args-> GetInt (0 );
43+ CefRefPtr<CefFrame> frame = browser-> GetFrame (frameId );
44+ V8ContextHandler_OnContextReleased (browser, frame );
4145 return true ;
4246 } else {
43- DebugLog (" Browser: OnProcessMessageReceived(): invalid arguments," \
47+ DebugLog (" Browser: OnProcessMessageReceived(): invalid arguments," \
4448 " messageName=OnContextReleased" );
4549 return false ;
4650 }
51+ } else if (messageName == " V8FunctionHandler::Execute" ) {
52+ CefRefPtr<CefListValue> args = message->GetArgumentList ();
53+ if (args->GetSize () == 3
54+ && args->GetType (0 ) == VTYPE_INT // frameId
55+ && args->GetType (1 ) == VTYPE_STRING // funcName
56+ && args->GetType (2 ) == VTYPE_LIST) { // funcArgs
57+ int64 frameId = args->GetInt (0 );
58+ CefRefPtr<CefFrame> frame = browser->GetFrame (frameId);
59+ CefString funcName = args->GetString (1 );
60+ CefRefPtr<CefListValue> funcArgs = args->GetList (2 );
61+ V8FunctionHandler_Execute (browser, frame, funcName, funcArgs);
62+ return true ;
63+ } else {
64+ DebugLog (" Browser: OnProcessMessageReceived(): invalid arguments," \
65+ " messageName=V8FunctionHandler::Execute" );
66+ return false ;
67+ }
4768 }
4869 return false ;
4970}
0 commit comments