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,70 @@
// 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=a0e352ab964b29c7b1aa22791ee38a81cd418a99$
//
#include "libcef_dll/cpptoc/v8array_buffer_release_callback_cpptoc.h"
namespace {
// MEMBER FUNCTIONS - Body may be edited by hand.
void CEF_CALLBACK v8array_buffer_release_callback_release_buffer(
struct _cef_v8array_buffer_release_callback_t* self,
void* buffer) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self);
if (!self)
return;
// Verify param: buffer; type: simple_byaddr
DCHECK(buffer);
if (!buffer)
return;
// Execute
CefV8ArrayBufferReleaseCallbackCppToC::Get(self)->ReleaseBuffer(buffer);
}
} // namespace
// CONSTRUCTOR - Do not edit by hand.
CefV8ArrayBufferReleaseCallbackCppToC::CefV8ArrayBufferReleaseCallbackCppToC() {
GetStruct()->release_buffer = v8array_buffer_release_callback_release_buffer;
}
template <>
CefRefPtr<CefV8ArrayBufferReleaseCallback>
CefCppToCRefCounted<CefV8ArrayBufferReleaseCallbackCppToC,
CefV8ArrayBufferReleaseCallback,
cef_v8array_buffer_release_callback_t>::
UnwrapDerived(CefWrapperType type,
cef_v8array_buffer_release_callback_t* s) {
NOTREACHED() << "Unexpected class type: " << type;
return NULL;
}
#if DCHECK_IS_ON()
template <>
base::AtomicRefCount CefCppToCRefCounted<
CefV8ArrayBufferReleaseCallbackCppToC,
CefV8ArrayBufferReleaseCallback,
cef_v8array_buffer_release_callback_t>::DebugObjCt ATOMIC_DECLARATION;
#endif
template <>
CefWrapperType
CefCppToCRefCounted<CefV8ArrayBufferReleaseCallbackCppToC,
CefV8ArrayBufferReleaseCallback,
cef_v8array_buffer_release_callback_t>::kWrapperType =
WT_V8ARRAY_BUFFER_RELEASE_CALLBACK;

View File

@@ -0,0 +1,37 @@
// 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=61fe643dbdefcacb37612d6611d5b3cd0d0f731a$
//
#ifndef CEF_LIBCEF_DLL_CPPTOC_V8ARRAY_BUFFER_RELEASE_CALLBACK_CPPTOC_H_
#define CEF_LIBCEF_DLL_CPPTOC_V8ARRAY_BUFFER_RELEASE_CALLBACK_CPPTOC_H_
#pragma once
#if !defined(WRAPPING_CEF_SHARED)
#error This file can be included wrapper-side only
#endif
#include "include/capi/cef_v8_capi.h"
#include "include/cef_v8.h"
#include "libcef_dll/cpptoc/cpptoc_ref_counted.h"
// Wrap a C++ class with a C structure.
// This class may be instantiated and accessed wrapper-side only.
class CefV8ArrayBufferReleaseCallbackCppToC
: public CefCppToCRefCounted<CefV8ArrayBufferReleaseCallbackCppToC,
CefV8ArrayBufferReleaseCallback,
cef_v8array_buffer_release_callback_t> {
public:
CefV8ArrayBufferReleaseCallbackCppToC();
};
#endif // CEF_LIBCEF_DLL_CPPTOC_V8ARRAY_BUFFER_RELEASE_CALLBACK_CPPTOC_H_

View File

@@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=d4baeb8853a8d33bde68e82a87e73e63fefb6e59$
// $hash=b8c41c5cff5d308ad0ecbeafb38f12fae4ce06eb$
//
#include "libcef_dll/cpptoc/v8value_cpptoc.h"
@@ -17,6 +17,7 @@
#include "libcef_dll/cpptoc/v8exception_cpptoc.h"
#include "libcef_dll/ctocpp/base_ref_counted_ctocpp.h"
#include "libcef_dll/ctocpp/v8accessor_ctocpp.h"
#include "libcef_dll/ctocpp/v8array_buffer_release_callback_ctocpp.h"
#include "libcef_dll/ctocpp/v8handler_ctocpp.h"
#include "libcef_dll/ctocpp/v8interceptor_ctocpp.h"
#include "libcef_dll/transfer_util.h"
@@ -139,6 +140,30 @@ CEF_EXPORT cef_v8value_t* cef_v8value_create_array(int length) {
return CefV8ValueCppToC::Wrap(_retval);
}
CEF_EXPORT cef_v8value_t* cef_v8value_create_array_buffer(
void* buffer,
size_t length,
cef_v8array_buffer_release_callback_t* 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);
if (!release_callback)
return NULL;
// Execute
CefRefPtr<CefV8Value> _retval = CefV8Value::CreateArrayBuffer(
buffer, length,
CefV8ArrayBufferReleaseCallbackCToCpp::Wrap(release_callback));
// Return type: refptr_same
return CefV8ValueCppToC::Wrap(_retval);
}
CEF_EXPORT cef_v8value_t* cef_v8value_create_function(
const cef_string_t* name,
cef_v8handler_t* handler) {
@@ -319,6 +344,20 @@ int CEF_CALLBACK v8value_is_array(struct _cef_v8value_t* self) {
return _retval;
}
int CEF_CALLBACK v8value_is_array_buffer(struct _cef_v8value_t* self) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self);
if (!self)
return 0;
// Execute
bool _retval = CefV8ValueCppToC::Get(self)->IsArrayBuffer();
// Return type: bool
return _retval;
}
int CEF_CALLBACK v8value_is_function(struct _cef_v8value_t* self) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
@@ -806,6 +845,36 @@ int CEF_CALLBACK v8value_get_array_length(struct _cef_v8value_t* self) {
return _retval;
}
cef_v8array_buffer_release_callback_t* CEF_CALLBACK
v8value_get_array_buffer_release_callback(struct _cef_v8value_t* self) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self);
if (!self)
return NULL;
// Execute
CefRefPtr<CefV8ArrayBufferReleaseCallback> _retval =
CefV8ValueCppToC::Get(self)->GetArrayBufferReleaseCallback();
// Return type: refptr_diff
return CefV8ArrayBufferReleaseCallbackCToCpp::Unwrap(_retval);
}
int CEF_CALLBACK v8value_neuter_array_buffer(struct _cef_v8value_t* self) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self);
if (!self)
return 0;
// Execute
bool _retval = CefV8ValueCppToC::Get(self)->NeuterArrayBuffer();
// Return type: bool
return _retval;
}
cef_string_userfree_t CEF_CALLBACK
v8value_get_function_name(struct _cef_v8value_t* self) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
@@ -928,6 +997,7 @@ CefV8ValueCppToC::CefV8ValueCppToC() {
GetStruct()->is_string = v8value_is_string;
GetStruct()->is_object = v8value_is_object;
GetStruct()->is_array = v8value_is_array;
GetStruct()->is_array_buffer = v8value_is_array_buffer;
GetStruct()->is_function = v8value_is_function;
GetStruct()->is_same = v8value_is_same;
GetStruct()->get_bool_value = v8value_get_bool_value;
@@ -959,6 +1029,9 @@ CefV8ValueCppToC::CefV8ValueCppToC() {
GetStruct()->adjust_externally_allocated_memory =
v8value_adjust_externally_allocated_memory;
GetStruct()->get_array_length = v8value_get_array_length;
GetStruct()->get_array_buffer_release_callback =
v8value_get_array_buffer_release_callback;
GetStruct()->neuter_array_buffer = v8value_neuter_array_buffer;
GetStruct()->get_function_name = v8value_get_function_name;
GetStruct()->get_function_handler = v8value_get_function_handler;
GetStruct()->execute_function = v8value_execute_function;

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(

View File

@@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=8fb3e1af64274b34482ee34c75a6196654104360$
// $hash=34ae05a5b71f5f9ede44fb859074e9ffcd7b65ad$
//
#include "include/capi/cef_app_capi.h"
@@ -158,6 +158,7 @@
#include "libcef_dll/ctocpp/test/translator_test_scoped_client_ctocpp.h"
#include "libcef_dll/ctocpp/urlrequest_client_ctocpp.h"
#include "libcef_dll/ctocpp/v8accessor_ctocpp.h"
#include "libcef_dll/ctocpp/v8array_buffer_release_callback_ctocpp.h"
#include "libcef_dll/ctocpp/v8handler_ctocpp.h"
#include "libcef_dll/ctocpp/v8interceptor_ctocpp.h"
#include "libcef_dll/ctocpp/views/browser_view_delegate_ctocpp.h"
@@ -372,6 +373,8 @@ CEF_EXPORT void cef_shutdown() {
DCHECK(base::AtomicRefCountIsZero(&CefURLRequestClientCToCpp::DebugObjCt));
DCHECK(base::AtomicRefCountIsZero(&CefURLRequestCppToC::DebugObjCt));
DCHECK(base::AtomicRefCountIsZero(&CefV8AccessorCToCpp::DebugObjCt));
DCHECK(base::AtomicRefCountIsZero(
&CefV8ArrayBufferReleaseCallbackCToCpp::DebugObjCt));
DCHECK(base::AtomicRefCountIsZero(&CefV8ContextCppToC::DebugObjCt));
DCHECK(base::AtomicRefCountIsZero(&CefV8ExceptionCppToC::DebugObjCt));
DCHECK(base::AtomicRefCountIsZero(&CefV8HandlerCToCpp::DebugObjCt));

View File

@@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=07d31c969dc527db8df550827d750aefa0abf1b8$
// $hash=0549060b3d0b129aa1d4b0824eeacf3af9d3d5ab$
//
#include "include/capi/cef_app_capi.h"
@@ -87,6 +87,7 @@
#include "libcef_dll/cpptoc/test/translator_test_scoped_client_cpptoc.h"
#include "libcef_dll/cpptoc/urlrequest_client_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/cpptoc/views/browser_view_delegate_cpptoc.h"
@@ -363,6 +364,8 @@ CEF_GLOBAL void CefShutdown() {
DCHECK(base::AtomicRefCountIsZero(&CefURLRequestCToCpp::DebugObjCt));
DCHECK(base::AtomicRefCountIsZero(&CefURLRequestClientCppToC::DebugObjCt));
DCHECK(base::AtomicRefCountIsZero(&CefV8AccessorCppToC::DebugObjCt));
DCHECK(base::AtomicRefCountIsZero(
&CefV8ArrayBufferReleaseCallbackCppToC::DebugObjCt));
DCHECK(base::AtomicRefCountIsZero(&CefV8ContextCToCpp::DebugObjCt));
DCHECK(base::AtomicRefCountIsZero(&CefV8ExceptionCToCpp::DebugObjCt));
DCHECK(base::AtomicRefCountIsZero(&CefV8HandlerCppToC::DebugObjCt));

View File

@@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=3fe3af71072987e46db28d1a94b8b6a9ad7d9e2a$
// $hash=47f1724d1f28c8295717e5df6ce8f5f8602ce1d5$
//
#ifndef CEF_LIBCEF_DLL_WRAPPER_TYPES_H_
@@ -137,6 +137,7 @@ enum CefWrapperType {
WT_URLREQUEST,
WT_URLREQUEST_CLIENT,
WT_V8ACCESSOR,
WT_V8ARRAY_BUFFER_RELEASE_CALLBACK,
WT_V8CONTEXT,
WT_V8EXCEPTION,
WT_V8HANDLER,