// Copyright 2017 PDFium Authors. All rights reserved. // 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 #ifndef FXJS_CFX_V8_H_ #define FXJS_CFX_V8_H_ #include #include "core/fxcrt/fx_string.h" #include "core/fxcrt/unowned_ptr.h" #include "v8/include/v8.h" class CFX_V8 { public: explicit CFX_V8(v8::Isolate* pIsolate); virtual ~CFX_V8(); v8::Isolate* GetIsolate() const { return m_pIsolate.Get(); } v8::Local NewNull(); v8::Local NewUndefined(); v8::Local NewArray(); v8::Local NewObject(); v8::Local NewNumber(int number); v8::Local NewNumber(double number); v8::Local NewNumber(float number); v8::Local NewBoolean(bool b); v8::Local NewString(const ByteStringView& str); v8::Local NewString(const WideStringView& str); v8::Local NewDate(double d); int ToInt32(v8::Local pValue); bool ToBoolean(v8::Local pValue); double ToDouble(v8::Local pValue); WideString ToWideString(v8::Local pValue); ByteString ToByteString(v8::Local pValue); v8::Local ToObject(v8::Local pValue); v8::Local ToArray(v8::Local pValue); // Arrays. unsigned GetArrayLength(v8::Local pArray); v8::Local GetArrayElement(v8::Local pArray, unsigned index); unsigned PutArrayElement(v8::Local pArray, unsigned index, v8::Local pValue); // Objects. std::vector GetObjectPropertyNames(v8::Local pObj); v8::Local GetObjectProperty(v8::Local pObj, const WideString& PropertyName); void PutObjectProperty(v8::Local pObj, const WideString& PropertyName, v8::Local pValue); protected: void SetIsolate(v8::Isolate* pIsolate) { m_pIsolate = pIsolate; } void DisposeIsolate(); private: UnownedPtr m_pIsolate; }; class CFX_V8ArrayBufferAllocator final : public v8::ArrayBuffer::Allocator { static const size_t kMaxAllowedBytes = 0x10000000; void* Allocate(size_t length) override; void* AllocateUninitialized(size_t length) override; void Free(void* data, size_t length) override; }; // Use with std::unique_ptr to dispose of isolates correctly. struct CFX_V8IsolateDeleter { inline void operator()(v8::Isolate* ptr) { ptr->Dispose(); } }; #endif // FXJS_CFX_V8_H_