| // Copyright 2021 The PDFium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
| #include "fxjs/cfx_v8_array_buffer_allocator.h" | |
| #include "core/fxcrt/fx_memory.h" | |
| CFX_V8ArrayBufferAllocator::CFX_V8ArrayBufferAllocator() = default; | |
| CFX_V8ArrayBufferAllocator::~CFX_V8ArrayBufferAllocator() = default; | |
| // NOTE: Under V8 sandbox mode, defer NewDefaultAllocator() call until | |
| // first use, since V8 must be initialized first for it to succeed, but | |
| // we need the allocator in order to initialize V8. | |
| void* CFX_V8ArrayBufferAllocator::Allocate(size_t length) { | |
| if (length > kMaxAllowedBytes) | |
| return nullptr; | |
| #ifdef V8_ENABLE_SANDBOX | |
| if (!wrapped_) { | |
| wrapped_.reset(v8::ArrayBuffer::Allocator::NewDefaultAllocator()); | |
| } | |
| return wrapped_->Allocate(length); | |
| #else // V8_ENABLE_SANDBOX | |
| return FX_ArrayBufferAllocate(length); | |
| #endif // V8_ENABLE_SANDBOX | |
| } | |
| void* CFX_V8ArrayBufferAllocator::AllocateUninitialized(size_t length) { | |
| if (length > kMaxAllowedBytes) | |
| return nullptr; | |
| #ifdef V8_ENABLE_SANDBOX | |
| if (!wrapped_) { | |
| wrapped_.reset(v8::ArrayBuffer::Allocator::NewDefaultAllocator()); | |
| } | |
| return wrapped_->AllocateUninitialized(length); | |
| #else // V8_ENABLE_SANDBOX | |
| return FX_ArrayBufferAllocateUninitialized(length); | |
| #endif | |
| } | |
| void CFX_V8ArrayBufferAllocator::Free(void* data, size_t length) { | |
| #ifdef V8_ENABLE_SANDBOX | |
| if (wrapped_) { | |
| wrapped_->Free(data, length); | |
| } | |
| #else // V8_ENABLE_SANDBOX | |
| FX_ArrayBufferFree(data); | |
| #endif | |
| } |