Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 1 | // Copyright 2017 PDFium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | |
Tom Sepez | e0518bf | 2018-02-08 21:44:59 +0000 | [diff] [blame] | 7 | #ifndef FXJS_CFX_V8_H_ |
| 8 | #define FXJS_CFX_V8_H_ |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 9 | |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 10 | #include <vector> |
| 11 | |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 12 | #include "core/fxcrt/fx_string.h" |
Tom Sepez | e0518bf | 2018-02-08 21:44:59 +0000 | [diff] [blame] | 13 | #include "core/fxcrt/unowned_ptr.h" |
Tom Sepez | bbeb10d | 2018-02-02 20:26:39 +0000 | [diff] [blame] | 14 | #include "v8/include/v8.h" |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 15 | |
Tom Sepez | e0518bf | 2018-02-08 21:44:59 +0000 | [diff] [blame] | 16 | class CFX_V8 { |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 17 | public: |
Tom Sepez | e0518bf | 2018-02-08 21:44:59 +0000 | [diff] [blame] | 18 | explicit CFX_V8(v8::Isolate* pIsolate); |
| 19 | virtual ~CFX_V8(); |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 20 | |
Tom Sepez | 98b356a | 2018-07-16 21:35:06 +0000 | [diff] [blame] | 21 | v8::Isolate* GetIsolate() const { return m_pIsolate.Get(); } |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 22 | |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 23 | v8::Local<v8::Value> NewNull(); |
| 24 | v8::Local<v8::Value> NewUndefined(); |
| 25 | v8::Local<v8::Array> NewArray(); |
Tom Sepez | 9ad9a5f | 2018-02-07 21:07:24 +0000 | [diff] [blame] | 26 | v8::Local<v8::Object> NewObject(); |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 27 | v8::Local<v8::Number> NewNumber(int number); |
| 28 | v8::Local<v8::Number> NewNumber(double number); |
| 29 | v8::Local<v8::Number> NewNumber(float number); |
| 30 | v8::Local<v8::Boolean> NewBoolean(bool b); |
Tom Sepez | c839ac7 | 2018-12-14 20:34:11 +0000 | [diff] [blame] | 31 | v8::Local<v8::String> NewString(ByteStringView str); |
Tom Sepez | 1ab2757 | 2018-12-14 20:31:31 +0000 | [diff] [blame] | 32 | v8::Local<v8::String> NewString(WideStringView str); |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 33 | v8::Local<v8::Date> NewDate(double d); |
| 34 | |
| 35 | int ToInt32(v8::Local<v8::Value> pValue); |
| 36 | bool ToBoolean(v8::Local<v8::Value> pValue); |
| 37 | double ToDouble(v8::Local<v8::Value> pValue); |
| 38 | WideString ToWideString(v8::Local<v8::Value> pValue); |
Dan Sinclair | cb22f9a | 2017-12-11 22:01:08 +0000 | [diff] [blame] | 39 | ByteString ToByteString(v8::Local<v8::Value> pValue); |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 40 | v8::Local<v8::Object> ToObject(v8::Local<v8::Value> pValue); |
| 41 | v8::Local<v8::Array> ToArray(v8::Local<v8::Value> pValue); |
| 42 | |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 43 | // Arrays. |
| 44 | unsigned GetArrayLength(v8::Local<v8::Array> pArray); |
| 45 | v8::Local<v8::Value> GetArrayElement(v8::Local<v8::Array> pArray, |
| 46 | unsigned index); |
Tom Sepez | 96b67f6 | 2019-12-04 00:18:04 +0000 | [diff] [blame] | 47 | bool PutArrayElement(v8::Local<v8::Array> pArray, |
| 48 | unsigned index, |
| 49 | v8::Local<v8::Value> pValue); |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 50 | |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 51 | // Objects. |
| 52 | std::vector<WideString> GetObjectPropertyNames(v8::Local<v8::Object> pObj); |
Tom Sepez | c839ac7 | 2018-12-14 20:34:11 +0000 | [diff] [blame] | 53 | v8::Local<v8::Value> GetObjectProperty(v8::Local<v8::Object> pObj, |
| 54 | ByteStringView bsUTF8PropertyName); |
Tom Sepez | 96b67f6 | 2019-12-04 00:18:04 +0000 | [diff] [blame] | 55 | bool PutObjectProperty(v8::Local<v8::Object> pObj, |
Tom Sepez | c839ac7 | 2018-12-14 20:34:11 +0000 | [diff] [blame] | 56 | ByteStringView bsUTF8PropertyName, |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 57 | v8::Local<v8::Value> pValue); |
| 58 | |
| 59 | protected: |
Tom Sepez | 98b356a | 2018-07-16 21:35:06 +0000 | [diff] [blame] | 60 | void SetIsolate(v8::Isolate* pIsolate) { m_pIsolate = pIsolate; } |
| 61 | void DisposeIsolate(); |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 62 | |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 63 | private: |
Tom Sepez | 98b356a | 2018-07-16 21:35:06 +0000 | [diff] [blame] | 64 | UnownedPtr<v8::Isolate> m_pIsolate; |
Dan Sinclair | 4bd2ad8 | 2017-12-06 03:12:09 +0000 | [diff] [blame] | 65 | }; |
| 66 | |
Tom Sepez | 5586545 | 2018-08-27 20:18:04 +0000 | [diff] [blame] | 67 | class CFX_V8ArrayBufferAllocator final : public v8::ArrayBuffer::Allocator { |
Tom Sepez | 3f8ee5e | 2018-02-09 18:26:09 +0000 | [diff] [blame] | 68 | static const size_t kMaxAllowedBytes = 0x10000000; |
| 69 | void* Allocate(size_t length) override; |
| 70 | void* AllocateUninitialized(size_t length) override; |
| 71 | void Free(void* data, size_t length) override; |
| 72 | }; |
| 73 | |
Tom Sepez | 98b356a | 2018-07-16 21:35:06 +0000 | [diff] [blame] | 74 | // Use with std::unique_ptr<v8::Isolate> to dispose of isolates correctly. |
| 75 | struct CFX_V8IsolateDeleter { |
| 76 | inline void operator()(v8::Isolate* ptr) { ptr->Dispose(); } |
| 77 | }; |
| 78 | |
Tom Sepez | e0518bf | 2018-02-08 21:44:59 +0000 | [diff] [blame] | 79 | #endif // FXJS_CFX_V8_H_ |