Add support for V8 ArrayBuffers (issue #244)

This commit is contained in:
Christopher Cifra
2018-04-10 15:37:33 -04:00
committed by Marshall Greenblatt
parent bb28b85bdd
commit 4315f3b724
16 changed files with 775 additions and 8 deletions

View File

@ -0,0 +1,63 @@
// Copyright (c) 2018 The Chromium Embedded Framework Authors. All rights
// reserved. Use of this source code is governed by a BSD-style license that
// can be found in the LICENSE file.
//
// ---------------------------------------------------------------------------
//
// This file was generated by the CEF translator tool. If making changes by
// hand only do so within the body of existing method and function
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=4518c58051d90673ecc1fc2b9e29b70467b36c97$
//
#include "libcef_dll/ctocpp/v8array_buffer_release_callback_ctocpp.h"
// VIRTUAL METHODS - Body may be edited by hand.
void CefV8ArrayBufferReleaseCallbackCToCpp::ReleaseBuffer(void* buffer) {
cef_v8array_buffer_release_callback_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, release_buffer))
return;
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Verify param: buffer; type: simple_byaddr
DCHECK(buffer);
if (!buffer)
return;
// Execute
_struct->release_buffer(_struct, buffer);
}
// CONSTRUCTOR - Do not edit by hand.
CefV8ArrayBufferReleaseCallbackCToCpp::CefV8ArrayBufferReleaseCallbackCToCpp() {
}
template <>
cef_v8array_buffer_release_callback_t*
CefCToCppRefCounted<CefV8ArrayBufferReleaseCallbackCToCpp,
CefV8ArrayBufferReleaseCallback,
cef_v8array_buffer_release_callback_t>::
UnwrapDerived(CefWrapperType type, CefV8ArrayBufferReleaseCallback* c) {
NOTREACHED() << "Unexpected class type: " << type;
return NULL;
}
#if DCHECK_IS_ON()
template <>
base::AtomicRefCount CefCToCppRefCounted<
CefV8ArrayBufferReleaseCallbackCToCpp,
CefV8ArrayBufferReleaseCallback,
cef_v8array_buffer_release_callback_t>::DebugObjCt ATOMIC_DECLARATION;
#endif
template <>
CefWrapperType
CefCToCppRefCounted<CefV8ArrayBufferReleaseCallbackCToCpp,
CefV8ArrayBufferReleaseCallback,
cef_v8array_buffer_release_callback_t>::kWrapperType =
WT_V8ARRAY_BUFFER_RELEASE_CALLBACK;

View File

@ -0,0 +1,40 @@
// Copyright (c) 2018 The Chromium Embedded Framework Authors. All rights
// reserved. Use of this source code is governed by a BSD-style license that
// can be found in the LICENSE file.
//
// ---------------------------------------------------------------------------
//
// This file was generated by the CEF translator tool. If making changes by
// hand only do so within the body of existing method and function
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=6c5b7fe181699426e51ca11b6216a1ec56e36032$
//
#ifndef CEF_LIBCEF_DLL_CTOCPP_V8ARRAY_BUFFER_RELEASE_CALLBACK_CTOCPP_H_
#define CEF_LIBCEF_DLL_CTOCPP_V8ARRAY_BUFFER_RELEASE_CALLBACK_CTOCPP_H_
#pragma once
#if !defined(BUILDING_CEF_SHARED)
#error This file can be included DLL-side only
#endif
#include "include/capi/cef_v8_capi.h"
#include "include/cef_v8.h"
#include "libcef_dll/ctocpp/ctocpp_ref_counted.h"
// Wrap a C structure with a C++ class.
// This class may be instantiated and accessed DLL-side only.
class CefV8ArrayBufferReleaseCallbackCToCpp
: public CefCToCppRefCounted<CefV8ArrayBufferReleaseCallbackCToCpp,
CefV8ArrayBufferReleaseCallback,
cef_v8array_buffer_release_callback_t> {
public:
CefV8ArrayBufferReleaseCallbackCToCpp();
// CefV8ArrayBufferReleaseCallback methods.
void ReleaseBuffer(void* buffer) override;
};
#endif // CEF_LIBCEF_DLL_CTOCPP_V8ARRAY_BUFFER_RELEASE_CALLBACK_CTOCPP_H_

View File

@ -9,12 +9,13 @@
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=54a9512b67fa17d33626e83e249fa27037bd92bc$
// $hash=c08a6af7e4295bc574af45eb798e84e546f2e1a0$
//
#include "libcef_dll/ctocpp/v8value_ctocpp.h"
#include "libcef_dll/cpptoc/base_ref_counted_cpptoc.h"
#include "libcef_dll/cpptoc/v8accessor_cpptoc.h"
#include "libcef_dll/cpptoc/v8array_buffer_release_callback_cpptoc.h"
#include "libcef_dll/cpptoc/v8handler_cpptoc.h"
#include "libcef_dll/cpptoc/v8interceptor_cpptoc.h"
#include "libcef_dll/ctocpp/v8context_ctocpp.h"
@ -131,6 +132,30 @@ CefRefPtr<CefV8Value> CefV8Value::CreateArray(int length) {
return CefV8ValueCToCpp::Wrap(_retval);
}
CefRefPtr<CefV8Value> CefV8Value::CreateArrayBuffer(
void* buffer,
size_t length,
CefRefPtr<CefV8ArrayBufferReleaseCallback> release_callback) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Verify param: buffer; type: simple_byaddr
DCHECK(buffer);
if (!buffer)
return NULL;
// Verify param: release_callback; type: refptr_diff
DCHECK(release_callback.get());
if (!release_callback.get())
return NULL;
// Execute
cef_v8value_t* _retval = cef_v8value_create_array_buffer(
buffer, length,
CefV8ArrayBufferReleaseCallbackCppToC::Wrap(release_callback));
// Return type: refptr_same
return CefV8ValueCToCpp::Wrap(_retval);
}
CefRefPtr<CefV8Value> CefV8Value::CreateFunction(
const CefString& name,
CefRefPtr<CefV8Handler> handler) {
@ -309,6 +334,20 @@ bool CefV8ValueCToCpp::IsArray() {
return _retval ? true : false;
}
bool CefV8ValueCToCpp::IsArrayBuffer() {
cef_v8value_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, is_array_buffer))
return false;
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Execute
int _retval = _struct->is_array_buffer(_struct);
// Return type: bool
return _retval ? true : false;
}
bool CefV8ValueCToCpp::IsFunction() {
cef_v8value_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, is_function))
@ -784,6 +823,36 @@ int CefV8ValueCToCpp::GetArrayLength() {
return _retval;
}
CefRefPtr<CefV8ArrayBufferReleaseCallback>
CefV8ValueCToCpp::GetArrayBufferReleaseCallback() {
cef_v8value_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, get_array_buffer_release_callback))
return NULL;
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Execute
cef_v8array_buffer_release_callback_t* _retval =
_struct->get_array_buffer_release_callback(_struct);
// Return type: refptr_diff
return CefV8ArrayBufferReleaseCallbackCppToC::Unwrap(_retval);
}
bool CefV8ValueCToCpp::NeuterArrayBuffer() {
cef_v8value_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, neuter_array_buffer))
return false;
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Execute
int _retval = _struct->neuter_array_buffer(_struct);
// Return type: bool
return _retval ? true : false;
}
CefString CefV8ValueCToCpp::GetFunctionName() {
cef_v8value_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, get_function_name))

View File

@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=8a913ff3ac0743621e969fed20ce713804ac4f16$
// $hash=72b98313f1c00f864fd01694eb741f066ae2c5f4$
//
#ifndef CEF_LIBCEF_DLL_CTOCPP_V8VALUE_CTOCPP_H_
@ -44,6 +44,7 @@ class CefV8ValueCToCpp
bool IsString() OVERRIDE;
bool IsObject() OVERRIDE;
bool IsArray() OVERRIDE;
bool IsArrayBuffer() OVERRIDE;
bool IsFunction() OVERRIDE;
bool IsSame(CefRefPtr<CefV8Value> that) OVERRIDE;
bool GetBoolValue() OVERRIDE;
@ -77,6 +78,9 @@ class CefV8ValueCToCpp
int GetExternallyAllocatedMemory() OVERRIDE;
int AdjustExternallyAllocatedMemory(int change_in_bytes) OVERRIDE;
int GetArrayLength() OVERRIDE;
CefRefPtr<CefV8ArrayBufferReleaseCallback> GetArrayBufferReleaseCallback()
OVERRIDE;
bool NeuterArrayBuffer() OVERRIDE;
CefString GetFunctionName() OVERRIDE;
CefRefPtr<CefV8Handler> GetFunctionHandler() OVERRIDE;
CefRefPtr<CefV8Value> ExecuteFunction(