xref: /aosp_15_r20/external/pdfium/fxjs/xfa/cfxjse_isolatetracker.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
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