@@ -575,13 +575,9 @@ namespace CefSharp
575575 {
576576 auto objectRepository = _browserAdapter->JavascriptObjectRepository ;
577577
578+ // For legacy binding we only send kJavascriptRootObjectResponse when we have bound objects
578579 if (objectRepository->HasBoundObjects )
579580 {
580- /* auto jsRootObjectMessage = CefProcessMessage::Create(kJavascriptRootObjectRequest);
581- auto argList = jsRootObjectMessage->GetArgumentList();
582- SerializeJsObject(objectRepository->GetObjects(nullptr), argList, 0);
583- browser->SendProcessMessage(CefProcessId::PID_RENDERER, jsRootObjectMessage);*/
584-
585581 auto msg = CefProcessMessage::Create (kJavascriptRootObjectResponse );
586582 auto responseArgList = msg->GetArgumentList ();
587583 responseArgList->SetBool (0 , true ); // Use Legacy Behaviour (auto bind on context creation)
@@ -1145,28 +1141,30 @@ namespace CefSharp
11451141 {
11461142 auto objectRepository = _browserAdapter->JavascriptObjectRepository ;
11471143
1148- if (objectRepository->HasBoundObjects )
1149- {
1150- auto browserId = argList->GetInt (0 );
1151- auto frameId = GetInt64 (argList, 1 );
1152- auto callbackId = GetInt64 (argList, 2 );
1153- auto objectNames = argList->GetList (3 );
1144+ auto browserId = argList->GetInt (0 );
1145+ auto frameId = GetInt64 (argList, 1 );
1146+ auto callbackId = GetInt64 (argList, 2 );
1147+ auto objectNames = argList->GetList (3 );
11541148
1155- auto names = gcnew List<String^>(objectNames->GetSize ());
1156- for (auto i = 0 ; i < objectNames->GetSize (); i++)
1157- {
1158- names->Add (StringUtils::ToClr (objectNames->GetString (i)));
1159- }
1160-
1161- auto msg = CefProcessMessage::Create (kJavascriptRootObjectResponse );
1162- auto responseArgList = msg->GetArgumentList ();
1163- responseArgList->SetBool (0 , false ); // Use LegacyBehaviour (false)
1164- responseArgList->SetInt (1 , browserId);
1165- SetInt64 (responseArgList, 2 , frameId);
1166- SetInt64 (responseArgList, 3 , callbackId);
1167- SerializeJsObjects (objectRepository->GetObjects (names), responseArgList, 4 );
1168- browser->SendProcessMessage (CefProcessId::PID_RENDERER, msg);
1149+ auto names = gcnew List<String^>(objectNames->GetSize ());
1150+ for (auto i = 0 ; i < objectNames->GetSize (); i++)
1151+ {
1152+ names->Add (StringUtils::ToClr (objectNames->GetString (i)));
11691153 }
1154+
1155+ // Call GetObjects with the list of names provided (will default to all if the list is empty
1156+ // Previously we only sent a response if there were bound objects, now we always send
1157+ // a response so the promise is resolved.
1158+ auto objs = objectRepository->GetObjects (names);
1159+
1160+ auto msg = CefProcessMessage::Create (kJavascriptRootObjectResponse );
1161+ auto responseArgList = msg->GetArgumentList ();
1162+ responseArgList->SetBool (0 , false ); // Use LegacyBehaviour (false)
1163+ responseArgList->SetInt (1 , browserId);
1164+ SetInt64 (responseArgList, 2 , frameId);
1165+ SetInt64 (responseArgList, 3 , callbackId);
1166+ SerializeJsObjects (objs, responseArgList, 4 );
1167+ browser->SendProcessMessage (CefProcessId::PID_RENDERER, msg);
11701168 }
11711169
11721170 handled = true ;
0 commit comments