Skip to content

Commit 38663e3

Browse files
committed
JSB - JavascriptObjectRepository.ResolveObject was only being called when object previously registered
The HasBoundObjects check has been removed, now we always attempt to GetObjects and return a response Resolves #2273
1 parent bea70cc commit 38663e3

File tree

1 file changed

+23
-25
lines changed

1 file changed

+23
-25
lines changed

CefSharp.Core/Internals/ClientAdapter.cpp

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)