This repository has been archived on 2025-03-23. You can view files and clone it, but cannot push or open issues or pull requests.
xerobrowser/packages/CefSharp.Common.113.1.40/src/CefSharp.BrowserSubprocess.Core/JavascriptRootObjectWrapper.h
Diamond Creeper 81286909c6 Update
Updated cefsharp and removed flash.
But there is now a bug where the browser crashed when trying to download anything.
2023-05-18 17:03:55 +12:00

110 lines
3.6 KiB
C++

// Copyright © 2014 The CefSharp Authors. All rights reserved.
//
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
#pragma once
#include "include/cef_v8.h"
#include "JavascriptCallbackRegistry.h"
#ifndef NETCOREAPP
#include "JavascriptObjectWrapper.h"
#endif
#include "Async/JavascriptAsyncObjectWrapper.h"
using namespace System::Runtime::Serialization;
using namespace System::Linq;
using namespace System::Collections::Generic;
using namespace CefSharp::BrowserSubprocess::Async;
#ifndef NETCOREAPP
using namespace CefSharp::Internals::Wcf;
#endif
namespace CefSharp
{
namespace BrowserSubprocess
{
// This wraps the transmitted registered objects
// by binding the meta-data to V8 JavaScript objects
// and installing callbacks for changes to those
// objects.
private ref class JavascriptRootObjectWrapper
{
private:
//Only access through Interlocked::Increment - used to generate unique callback Id's
//Is static so ids are unique to this process https://github.com/cefsharp/CefSharp/issues/2792
static int64 _lastCallback;
#ifndef NETCOREAPP
initonly List<JavascriptObjectWrapper^>^ _wrappedObjects;
#endif
initonly List<JavascriptAsyncObjectWrapper^>^ _wrappedAsyncObjects;
initonly Dictionary<int64, JavascriptAsyncMethodCallback^>^ _methodCallbacks;
#ifndef NETCOREAPP
IBrowserProcess^ _browserProcess;
#endif
// The entire set of possible JavaScript functions to
// call directly into.
JavascriptCallbackRegistry^ _callbackRegistry;
int64 SaveMethodCallback(JavascriptAsyncMethodCallback^ callback);
internal:
property JavascriptCallbackRegistry^ CallbackRegistry
{
JavascriptCallbackRegistry^ get();
}
public:
#ifdef NETCOREAPP
JavascriptRootObjectWrapper(int browserId)
#else
JavascriptRootObjectWrapper(int browserId, IBrowserProcess^ browserProcess)
#endif
{
#ifndef NETCOREAPP
_browserProcess = browserProcess;
_wrappedObjects = gcnew List<JavascriptObjectWrapper^>();
#endif
_wrappedAsyncObjects = gcnew List<JavascriptAsyncObjectWrapper^>();
_callbackRegistry = gcnew JavascriptCallbackRegistry(browserId);
_methodCallbacks = gcnew Dictionary<int64, JavascriptAsyncMethodCallback^>();
}
~JavascriptRootObjectWrapper()
{
if (_callbackRegistry != nullptr)
{
delete _callbackRegistry;
_callbackRegistry = nullptr;
}
#ifndef NETCOREAPP
for each (JavascriptObjectWrapper ^ var in _wrappedObjects)
{
delete var;
}
_wrappedObjects->Clear();
#endif
for each (JavascriptAsyncObjectWrapper ^ var in _wrappedAsyncObjects)
{
delete var;
}
_wrappedAsyncObjects->Clear();
for each (JavascriptAsyncMethodCallback ^ var in _methodCallbacks->Values)
{
delete var;
}
_methodCallbacks->Clear();
}
bool TryGetAndRemoveMethodCallback(int64 id, JavascriptAsyncMethodCallback^% callback);
void Bind(ICollection<JavascriptObject^>^ objects, const CefRefPtr<CefV8Value>& v8Value);
};
}
}