Skip to content
Open

Succes #5284

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .vsconfig
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
"Microsoft.VisualStudio.Component.VC.CLI.Support",
"Microsoft.VisualStudio.Component.Windows10SDK.19041",
"Microsoft.VisualStudio.Workload.NativeDesktop",
"Microsoft.NetCore.Component.DevelopmentTools",
"Microsoft.NetCore.Component.Runtime.6.0",
"Microsoft.NetCore.Component.DevelopmentTools",
"Microsoft.NetCore.Component.Runtime.3.1",
"Microsoft.NetCore.Component.SDK"
]
}
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ The upstream [`CEF` forum](http://magpcss.org/ceforum/) is a valuable resource,
It maybe helpful to run the `cefclient` application and compare output with `CefSharp`. The `WinForms` and `WPF` versions use two different rendering modes, `WPF` uses Offscreen Rendering (`OSR`). `OffScreen` also uses `OSR` mode.

- Download and run the `CEF Sample Application(cefclient)`:
- Download for [x86](https://cef-builds.spotifycdn.com/cef_binary_146.0.7%2Bga6b143f%2Bchromium-146.0.7680.165_windows32_client.tar.bz2) or [x64](https://cef-builds.spotifycdn.com/cef_binary_146.0.7%2Bga6b143f%2Bchromium-146.0.7680.165_windows64_client.tar.bz2) or [arm64](https://cef-builds.spotifycdn.com/cef_binary_146.0.7%2Bga6b143f%2Bchromium-146.0.7680.165_windowsarm64_client.tar.bz2).
- Download for [x86](https://cef-builds.spotifycdn.com/cef_binary_131.2.7%2Bg9a14dc9%2Bchromium-131.0.6778.86_windows32_client.tar.bz2) or [x64](https://cef-builds.spotifycdn.com/cef_binary_131.2.7%2Bg9a14dc9%2Bchromium-131.0.6778.86_windows64_client.tar.bz2) or [arm64](https://cef-builds.spotifycdn.com/cef_binary_131.2.7%2Bg9a14dc9%2Bchromium-131.0.6778.86_windowsarm64_client.tar.bz2).
- Extract and run cefclient.exe
- If you are using WPF/OffScreen run
```
Expand Down
25 changes: 18 additions & 7 deletions CefSharp.BrowserSubprocess.Core/BindObjectAsyncHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,21 @@ namespace CefSharp
private:
gcroot<RegisterBoundObjectRegistry^> _callbackRegistry;
gcroot<Dictionary<String^, JavascriptObject^>^> _javascriptObjects;
gcroot<JavascriptRootObjectWrapper^> _javascriptRootObjectWrapper;
gcroot<CefBrowserWrapper^> _browserWrapper;

public:
BindObjectAsyncHandler(RegisterBoundObjectRegistry^ callbackRegistery, Dictionary<String^, JavascriptObject^>^ javascriptObjects, JavascriptRootObjectWrapper^ javascriptRootObjectWrapper)
BindObjectAsyncHandler(RegisterBoundObjectRegistry^ callbackRegistery, Dictionary<String^, JavascriptObject^>^ javascriptObjects, CefBrowserWrapper^ browserWrapper)
{
_callbackRegistry = callbackRegistery;
_javascriptObjects = javascriptObjects;
_javascriptRootObjectWrapper = javascriptRootObjectWrapper;
_browserWrapper = browserWrapper;
}

~BindObjectAsyncHandler()
{
_callbackRegistry = nullptr;
_javascriptObjects = nullptr;
_javascriptRootObjectWrapper = nullptr;
_browserWrapper = nullptr;
}

bool Execute(const CefString& name, CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval, CefString& exception) override
Expand Down Expand Up @@ -139,16 +139,27 @@ namespace CefSharp
//https://github.com/cefsharp/CefSharp/issues/3470
if (objectCount > 0 && cachedObjects->Count == objectCount && ignoreCache == false)
{
if (Object::ReferenceEquals(_javascriptRootObjectWrapper, nullptr))
if (Object::ReferenceEquals(_browserWrapper, nullptr))
{
exception = "BindObjectAsyncHandler::Execute - _javascriptRootObjectWrapper null, unable to bind objects";
exception = "BindObjectAsyncHandler::Execute - Browser wrapper null, unable to bind objects";

return true;
}

auto browser = context->GetBrowser();

JavascriptRootObjectWrapper^ rootObject = _javascriptRootObjectWrapper;
auto rootObjectWrappers = _browserWrapper->JavascriptRootObjectWrappers;

JavascriptRootObjectWrapper^ rootObject;
if (!rootObjectWrappers->TryGetValue(StringUtils::ToClr(frame->GetIdentifier()), rootObject))
{
#ifdef NETCOREAPP
rootObject = gcnew JavascriptRootObjectWrapper(browser->GetIdentifier());
#else
rootObject = gcnew JavascriptRootObjectWrapper(browser->GetIdentifier(), _browserWrapper->BrowserProcess);
#endif
rootObjectWrappers->TryAdd(StringUtils::ToClr(frame->GetIdentifier()), rootObject);
}

//Cached objects only contains a list of objects not already bound
rootObject->Bind(cachedObjects, context->GetGlobal());
Expand Down
Loading