1 // Copyright 2016 The PDFium Authors 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 7 #ifndef FXJS_XFA_CFXJSE_ISOLATETRACKER_H_ 8 #define FXJS_XFA_CFXJSE_ISOLATETRACKER_H_ 9 10 #include "core/fxcrt/fx_memory.h" 11 #include "v8/include/v8-context.h" 12 #include "v8/include/v8-isolate.h" 13 14 class CFXJSE_Context; 15 16 class CFXJSE_ScopeUtil_IsolateHandle { 17 public: 18 FX_STACK_ALLOCATED(); 19 20 explicit CFXJSE_ScopeUtil_IsolateHandle(v8::Isolate* pIsolate); 21 CFXJSE_ScopeUtil_IsolateHandle(const CFXJSE_ScopeUtil_IsolateHandle&) = 22 delete; 23 CFXJSE_ScopeUtil_IsolateHandle& operator=( 24 const CFXJSE_ScopeUtil_IsolateHandle&) = delete; 25 ~CFXJSE_ScopeUtil_IsolateHandle(); 26 27 private: 28 v8::Isolate::Scope isolate_scope_; 29 v8::HandleScope handle_scope_; 30 }; 31 32 class CFXJSE_ScopeUtil_Context { 33 public: 34 FX_STACK_ALLOCATED(); 35 36 explicit CFXJSE_ScopeUtil_Context(CFXJSE_Context* pContext); 37 CFXJSE_ScopeUtil_Context(const CFXJSE_ScopeUtil_Context&) = delete; 38 CFXJSE_ScopeUtil_Context& operator=(const CFXJSE_ScopeUtil_Context&) = delete; 39 ~CFXJSE_ScopeUtil_Context(); 40 41 private: 42 v8::Context::Scope context_scope_; 43 }; 44 45 class CFXJSE_ScopeUtil_IsolateHandleContext { 46 public: 47 FX_STACK_ALLOCATED(); 48 49 explicit CFXJSE_ScopeUtil_IsolateHandleContext(CFXJSE_Context* pContext); 50 CFXJSE_ScopeUtil_IsolateHandleContext( 51 const CFXJSE_ScopeUtil_IsolateHandleContext&) = delete; 52 CFXJSE_ScopeUtil_IsolateHandleContext& operator=( 53 const CFXJSE_ScopeUtil_IsolateHandleContext&) = delete; 54 ~CFXJSE_ScopeUtil_IsolateHandleContext(); 55 56 private: 57 CFXJSE_ScopeUtil_IsolateHandle isolate_handle_; 58 CFXJSE_ScopeUtil_Context context_; 59 }; 60 61 class CFXJSE_ScopeUtil_RootContext { 62 public: 63 FX_STACK_ALLOCATED(); 64 65 explicit CFXJSE_ScopeUtil_RootContext(v8::Isolate* pIsolate); 66 CFXJSE_ScopeUtil_RootContext(const CFXJSE_ScopeUtil_RootContext&) = delete; 67 CFXJSE_ScopeUtil_RootContext& operator=(const CFXJSE_ScopeUtil_RootContext&) = 68 delete; 69 ~CFXJSE_ScopeUtil_RootContext(); 70 71 private: 72 v8::Context::Scope context_scope_; 73 }; 74 75 class CFXJSE_ScopeUtil_IsolateHandleRootContext { 76 public: 77 FX_STACK_ALLOCATED(); 78 79 explicit CFXJSE_ScopeUtil_IsolateHandleRootContext(v8::Isolate* pIsolate); 80 CFXJSE_ScopeUtil_IsolateHandleRootContext( 81 const CFXJSE_ScopeUtil_IsolateHandleRootContext&) = delete; 82 CFXJSE_ScopeUtil_IsolateHandleRootContext& operator=( 83 const CFXJSE_ScopeUtil_IsolateHandleRootContext&) = delete; 84 ~CFXJSE_ScopeUtil_IsolateHandleRootContext(); 85 86 private: 87 CFXJSE_ScopeUtil_IsolateHandle isolate_handle_; 88 CFXJSE_ScopeUtil_RootContext root_context_; 89 }; 90 91 #endif // FXJS_XFA_CFXJSE_ISOLATETRACKER_H_ 92