@@ -77,20 +77,7 @@ namespace CefSharp
77
77
{
78
78
auto javascriptObjects = DeserializeJsObjects (objects, 0 );
79
79
80
- for each (JavascriptObject ^ obj in Enumerable::OfType<JavascriptObject^>(javascriptObjects))
81
- {
82
- // Using LegacyBinding with multiple ChromiumWebBrowser instances that share the same
83
- // render process and using LegacyBinding will cause problems for the limited caching implementation
84
- // that exists at the moment, for now we'll remove an object if already exists, same behaviour
85
- // as the new binding method.
86
- // TODO: This should be removed when https://github.com/cefsharp/CefSharp/issues/2306
87
- // Is complete as objects will be stored at the browser level
88
- if (_javascriptObjects->ContainsKey (obj->JavascriptName ))
89
- {
90
- _javascriptObjects->Remove (obj->JavascriptName );
91
- }
92
- _javascriptObjects->Add (obj->JavascriptName , obj);
93
- }
80
+ _javascriptObjectCache->InsertOrUpdate (browser->GetIdentifier (), javascriptObjects);
94
81
}
95
82
}
96
83
@@ -113,6 +100,8 @@ namespace CefSharp
113
100
_onBrowserDestroyed->Invoke (wrapper);
114
101
delete wrapper;
115
102
}
103
+
104
+ _javascriptObjectCache->ClearCache (browser->GetIdentifier ());
116
105
};
117
106
118
107
void CefAppUnmanagedWrapper::OnContextCreated (CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, CefRefPtr<CefV8Context> context)
@@ -130,9 +119,11 @@ namespace CefSharp
130
119
131
120
if (_legacyBindingEnabled)
132
121
{
133
- if (_javascriptObjects->Count > 0 && rootObject != nullptr )
122
+ auto values = _javascriptObjectCache->GetCacheValues (browser->GetIdentifier ());
123
+
124
+ if (values->Count > 0 && rootObject != nullptr )
134
125
{
135
- rootObject->Bind (_javascriptObjects-> Values , context->GetGlobal ());
126
+ rootObject->Bind (values , context->GetGlobal ());
136
127
}
137
128
}
138
129
@@ -142,13 +133,14 @@ namespace CefSharp
142
133
auto global = context->GetGlobal ();
143
134
auto browserWrapper = FindBrowserWrapper (browser->GetIdentifier ());
144
135
auto processId = System::Diagnostics::Process::GetCurrentProcess ()->Id ;
136
+ auto objectCache = _javascriptObjectCache->GetCache (browser->GetIdentifier ());
145
137
146
138
// TODO: JSB: Split functions into their own classes
147
139
// Browser wrapper is only used for BindObjectAsync
148
- auto bindObjAsyncFunction = CefV8Value::CreateFunction (kBindObjectAsync , new BindObjectAsyncHandler (_registerBoundObjectRegistry, _javascriptObjects , browserWrapper));
149
- auto unBindObjFunction = CefV8Value::CreateFunction (kDeleteBoundObject , new RegisterBoundObjectHandler (_javascriptObjects ));
150
- auto removeObjectFromCacheFunction = CefV8Value::CreateFunction (kRemoveObjectFromCache , new RegisterBoundObjectHandler (_javascriptObjects ));
151
- auto isObjectCachedFunction = CefV8Value::CreateFunction (kIsObjectCached , new RegisterBoundObjectHandler (_javascriptObjects ));
140
+ auto bindObjAsyncFunction = CefV8Value::CreateFunction (kBindObjectAsync , new BindObjectAsyncHandler (_registerBoundObjectRegistry, objectCache , browserWrapper));
141
+ auto unBindObjFunction = CefV8Value::CreateFunction (kDeleteBoundObject , new RegisterBoundObjectHandler (objectCache ));
142
+ auto removeObjectFromCacheFunction = CefV8Value::CreateFunction (kRemoveObjectFromCache , new RegisterBoundObjectHandler (objectCache ));
143
+ auto isObjectCachedFunction = CefV8Value::CreateFunction (kIsObjectCached , new RegisterBoundObjectHandler (objectCache ));
152
144
auto postMessageFunction = CefV8Value::CreateFunction (kPostMessage , new JavascriptPostMessageHandler (rootObject == nullptr ? nullptr : rootObject->CallbackRegistry ));
153
145
auto promiseHandlerFunction = CefV8Value::CreateFunction (kSendEvalScriptResponse , new JavascriptPromiseHandler ());
154
146
@@ -621,15 +613,7 @@ namespace CefSharp
621
613
auto javascriptObjects = DeserializeJsObjects (argList, 1 );
622
614
623
615
// Caching of JavascriptObjects
624
- // TODO: JSB Should caching be configurable? On a per object basis?
625
- for each (JavascriptObject ^ obj in Enumerable::OfType<JavascriptObject^>(javascriptObjects))
626
- {
627
- if (_javascriptObjects->ContainsKey (obj->JavascriptName ))
628
- {
629
- _javascriptObjects->Remove (obj->JavascriptName );
630
- }
631
- _javascriptObjects->Add (obj->JavascriptName , obj);
632
- }
616
+ _javascriptObjectCache->InsertOrUpdate (browser->GetIdentifier (), javascriptObjects);
633
617
634
618
auto rootObject = GetJsRootObjectWrapper (browser->GetIdentifier (), frame->GetIdentifier ());
635
619
0 commit comments