@@ -82,20 +82,7 @@ namespace CefSharp
82
82
{
83
83
auto javascriptObjects = DeserializeJsObjects (objects, 0 );
84
84
85
- for each (JavascriptObject ^ obj in Enumerable::OfType<JavascriptObject^>(javascriptObjects))
86
- {
87
- // Using LegacyBinding with multiple ChromiumWebBrowser instances that share the same
88
- // render process and using LegacyBinding will cause problems for the limited caching implementation
89
- // that exists at the moment, for now we'll remove an object if already exists, same behaviour
90
- // as the new binding method.
91
- // TODO: This should be removed when https://github.com/cefsharp/CefSharp/issues/2306
92
- // Is complete as objects will be stored at the browser level
93
- if (_javascriptObjects->ContainsKey (obj->JavascriptName ))
94
- {
95
- _javascriptObjects->Remove (obj->JavascriptName );
96
- }
97
- _javascriptObjects->Add (obj->JavascriptName , obj);
98
- }
85
+ _javascriptObjectCache->InsertOrUpdate (browser->GetIdentifier (), javascriptObjects);
99
86
}
100
87
}
101
88
@@ -118,6 +105,8 @@ namespace CefSharp
118
105
_onBrowserDestroyed->Invoke (wrapper);
119
106
delete wrapper;
120
107
}
108
+
109
+ _javascriptObjectCache->ClearCache (browser->GetIdentifier ());
121
110
};
122
111
123
112
void CefAppUnmanagedWrapper::OnContextCreated (CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, CefRefPtr<CefV8Context> context)
@@ -141,9 +130,11 @@ namespace CefSharp
141
130
142
131
if (_legacyBindingEnabled)
143
132
{
144
- if (_javascriptObjects->Count > 0 && rootObject != nullptr )
133
+ auto values = _javascriptObjectCache->GetCacheValues (browser->GetIdentifier ());
134
+
135
+ if (values->Count > 0 && rootObject != nullptr )
145
136
{
146
- rootObject->Bind (_javascriptObjects-> Values , context->GetGlobal ());
137
+ rootObject->Bind (values , context->GetGlobal ());
147
138
}
148
139
}
149
140
@@ -153,13 +144,14 @@ namespace CefSharp
153
144
auto global = context->GetGlobal ();
154
145
auto browserWrapper = FindBrowserWrapper (browser->GetIdentifier ());
155
146
auto processId = System::Diagnostics::Process::GetCurrentProcess ()->Id ;
147
+ auto objectCache = _javascriptObjectCache->GetCache (browser->GetIdentifier ());
156
148
157
149
// TODO: JSB: Split functions into their own classes
158
150
// Browser wrapper is only used for BindObjectAsync
159
- auto bindObjAsyncFunction = CefV8Value::CreateFunction (kBindObjectAsync , new BindObjectAsyncHandler (_registerBoundObjectRegistry, _javascriptObjects , browserWrapper));
160
- auto unBindObjFunction = CefV8Value::CreateFunction (kDeleteBoundObject , new RegisterBoundObjectHandler (_javascriptObjects ));
161
- auto removeObjectFromCacheFunction = CefV8Value::CreateFunction (kRemoveObjectFromCache , new RegisterBoundObjectHandler (_javascriptObjects ));
162
- auto isObjectCachedFunction = CefV8Value::CreateFunction (kIsObjectCached , new RegisterBoundObjectHandler (_javascriptObjects ));
151
+ auto bindObjAsyncFunction = CefV8Value::CreateFunction (kBindObjectAsync , new BindObjectAsyncHandler (_registerBoundObjectRegistry, objectCache , browserWrapper));
152
+ auto unBindObjFunction = CefV8Value::CreateFunction (kDeleteBoundObject , new RegisterBoundObjectHandler (objectCache ));
153
+ auto removeObjectFromCacheFunction = CefV8Value::CreateFunction (kRemoveObjectFromCache , new RegisterBoundObjectHandler (objectCache ));
154
+ auto isObjectCachedFunction = CefV8Value::CreateFunction (kIsObjectCached , new RegisterBoundObjectHandler (objectCache ));
163
155
auto postMessageFunction = CefV8Value::CreateFunction (kPostMessage , new JavascriptPostMessageHandler (rootObject == nullptr ? nullptr : rootObject->CallbackRegistry ));
164
156
auto promiseHandlerFunction = CefV8Value::CreateFunction (kSendEvalScriptResponse , new JavascriptPromiseHandler ());
165
157
@@ -633,15 +625,7 @@ namespace CefSharp
633
625
auto javascriptObjects = DeserializeJsObjects (argList, 1 );
634
626
635
627
// Caching of JavascriptObjects
636
- // TODO: JSB Should caching be configurable? On a per object basis?
637
- for each (JavascriptObject ^ obj in Enumerable::OfType<JavascriptObject^>(javascriptObjects))
638
- {
639
- if (_javascriptObjects->ContainsKey (obj->JavascriptName ))
640
- {
641
- _javascriptObjects->Remove (obj->JavascriptName );
642
- }
643
- _javascriptObjects->Add (obj->JavascriptName , obj);
644
- }
628
+ _javascriptObjectCache->InsertOrUpdate (browser->GetIdentifier (), javascriptObjects);
645
629
646
630
auto rootObject = GetJsRootObjectWrapper (browser->GetIdentifier (), frame->GetIdentifier ());
647
631
0 commit comments