// Copyright © 2015 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 "JavascriptCallbackWrapper.h" using namespace System::Collections::Concurrent; namespace CefSharp { namespace Internals { private ref class JavascriptCallbackRegistry { private: //Only access through Interlocked::Increment - used to generate unique callback Id's //Is static so ids are unique to this process, which is required until #1984 is implemented //and callbacks are disposed of properly between contexts static Int64 _lastId; int _browserId; ConcurrentDictionary^ _callbacks; internal: JavascriptCallbackWrapper^ FindWrapper(int64 id); public: JavascriptCallbackRegistry(int browserId) : _browserId(browserId) { _callbacks = gcnew ConcurrentDictionary(); } ~JavascriptCallbackRegistry() { if (_callbacks != nullptr) { for each (JavascriptCallbackWrapper^ callback in _callbacks->Values) { delete callback; } _callbacks->Clear(); _callbacks = nullptr; } } JavascriptCallback^ Register(const CefRefPtr& context, const CefRefPtr& value); void Deregister(Int64 id); }; } }