[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/csharpbuilder/ClearScript/master/ClearScriptV8/HostObjectUtil.h [Back]  [Original]

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

#pragma once

//-----------------------------------------------------------------------------
// forward declarations
//-----------------------------------------------------------------------------

struct V8DocumentInfo;

//-----------------------------------------------------------------------------
// HostObjectUtil
//-----------------------------------------------------------------------------

struct HostObjectUtil final: StaticBase
{
    static void* AddRef(void* pvObject);
    static void Release(void* pvObject);

    enum class Invocability : int32_t
    {
        // IMPORTANT: maintain bitwise equivalence with managed enum Invocability
        None,
        Delegate,
        Dynamic,
        DefaultProperty
    };

    static Invocability GetInvocability(void* pvObject);

    static V8Value GetProperty(void* pvObject, const StdString& name, bool& isCacheable);
    static void SetProperty(void* pvObject, const StdString& name, const V8Value& value);
    static bool DeleteProperty(void* pvObject, const StdString& name);
    static void GetPropertyNames(void* pvObject, std::vector& names);

    static V8Value GetProperty(void* pvObject, int32_t index);
    static void SetProperty(void* pvObject, int32_t index, const V8Value& value);
    static bool DeleteProperty(void* pvObject, int32_t index);
    static void GetPropertyIndices(void* pvObject, std::vector& indices);

    static V8Value Invoke(void* pvObject, bool asConstructor, size_t argCount, const V8Value* pArgs);
    static V8Value InvokeMethod(void* pvObject, const StdString& name, size_t argCount, const V8Value* pArgs);

    static V8Value GetEnumerator(void* pvObject);
    static V8Value GetAsyncEnumerator(void* pvObject);

    static void* CreateV8ObjectCache();
    static void CacheV8Object(void* pvCache, void* pvObject, void* pvV8Object);
    static void* GetCachedV8Object(void* pvCache, void* pvObject);
    static void GetAllCachedV8Objects(void* pvCache, std::vector& v8ObjectPtrs);
    static bool RemoveV8ObjectCacheEntry(void* pvCache, void* pvObject);

    enum class DebugDirective
    {
        ConnectClient,
        SendCommand,
        DisconnectClient
    };

    using DebugCallback = std::function;
    static void* CreateDebugAgent(const StdString& name, const StdString& version, int32_t port, bool remote, DebugCallback&& callback);
    static void SendDebugMessage(void* pvAgent, const StdString& content);
    static void DestroyDebugAgent(void* pvAgent);

    using NativeCallback = std::function;
    static void QueueNativeCallback(NativeCallback&& callback);
    static void* CreateNativeCallbackTimer(int32_t dueTime, int32_t period, NativeCallback&& callback);
    static bool ChangeNativeCallbackTimer(void* pvTimer, int32_t dueTime, int32_t period);
    static void DestroyNativeCallbackTimer(void* pvTimer);

    static StdString LoadModule(const V8DocumentInfo& sourceDocumentInfo, const StdString& specifier, V8DocumentInfo& documentInfo, V8Value& exports);
    static std::vector CreateModuleContext(const V8DocumentInfo& documentInfo);

    static size_t GetMaxScriptCacheSize();
    static size_t GetMaxModuleCacheSize();
};

//-----------------------------------------------------------------------------
// FastHostObjectUtil
//-----------------------------------------------------------------------------

struct FastHostObjectUtil final: StaticBase
{
    enum class PropertyFlags : int32_t
    {
        // IMPORTANT: maintain bitwise equivalence with managed enum V8.FastProxy.V8FastHostPropertyFlags
        None = 0,
        Available = 0x00000001,
        Cacheable = 0x00000002,
        Enumerable = 0x00000004,
        Writable = 0x00000008,
        Deletable = 0x00000010
    };

    static V8Value GetProperty(void* pvObject, const StdString& name, bool& isCacheable);
    static void SetProperty(void* pvObject, const StdString& name, const V8Value& value);
    static PropertyFlags QueryProperty(void* pvObject, const StdString& name);
    static bool DeleteProperty(void* pvObject, const StdString& name);
    static void GetPropertyNames(void* pvObject, std::vector& names);

    static V8Value GetProperty(void* pvObject, int32_t index);
    static void SetProperty(void* pvObject, int32_t index, const V8Value& value);
    static PropertyFlags QueryProperty(void* pvObject, int32_t index);
    static bool DeleteProperty(void* pvObject, int32_t index);
    static void GetPropertyIndices(void* pvObject, std::vector& indices);

    static V8Value Invoke(void* pvObject, bool asConstructor, size_t argCount, const V8Value* pArgs);

    static V8Value GetEnumerator(void* pvObject);
    static V8Value GetAsyncEnumerator(void* pvObject);
};

Web Proxy Viewer  |  New URL  |  Original Page