blob: 8ed876097e4182f3f6080fd493191ded9dfecc39 [file] [log] [blame]
dsinclair08fea802016-07-12 10:37:52 -07001// Copyright 2016 PDFium Authors. All rights reserved.
Dan Sinclair1770c022016-03-14 14:14:16 -04002// 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
dsinclair43554682016-09-29 17:29:48 -07007#ifndef FXJS_CFXJSE_CONTEXT_H_
8#define FXJS_CFXJSE_CONTEXT_H_
Dan Sinclair1770c022016-03-14 14:14:16 -04009
tsepez56286b32016-05-17 16:24:34 -070010#include <memory>
11#include <vector>
12
dsinclair43554682016-09-29 17:29:48 -070013#include "fxjs/fxjse.h"
Dan Sinclair1770c022016-03-14 14:14:16 -040014#include "v8/include/v8.h"
Dan Sinclair1770c022016-03-14 14:14:16 -040015
16class CFXJSE_Class;
17class CFXJSE_Value;
tsepeze3b2a4e2016-05-26 12:39:34 -070018struct FXJSE_CLASS_DESCRIPTOR;
Dan Sinclair1770c022016-03-14 14:14:16 -040019
20class CFXJSE_Context {
Dan Sinclair1770c022016-03-14 14:14:16 -040021 public:
Tom Sepez80547a12017-04-25 12:43:13 -070022 static std::unique_ptr<CFXJSE_Context> Create(
tsepeze3b2a4e2016-05-26 12:39:34 -070023 v8::Isolate* pIsolate,
Tom Sepez80547a12017-04-25 12:43:13 -070024 const FXJSE_CLASS_DESCRIPTOR* pGlobalClass,
25 CFXJSE_HostObject* pGlobalObject);
dsinclair08fea802016-07-12 10:37:52 -070026
Tom Sepez80547a12017-04-25 12:43:13 -070027 explicit CFXJSE_Context(v8::Isolate* pIsolate);
Dan Sinclair1770c022016-03-14 14:14:16 -040028 ~CFXJSE_Context();
tsepez56286b32016-05-17 16:24:34 -070029
Tom Sepez80547a12017-04-25 12:43:13 -070030 v8::Isolate* GetIsolate() const { return m_pIsolate; }
31 v8::Local<v8::Context> GetContext();
dsinclair3cace322016-06-09 11:49:22 -070032 std::unique_ptr<CFXJSE_Value> GetGlobalObject();
Tom Sepez80547a12017-04-25 12:43:13 -070033 void AddClass(std::unique_ptr<CFXJSE_Class> pClass);
Ryan Harrison275e2602017-09-18 14:23:18 -040034 CFXJSE_Class* GetClassByName(const ByteStringView& szName) const;
dsinclair769b1372016-06-08 13:12:41 -070035 void EnableCompatibleMode();
Dan Sinclair812e96c2017-03-13 16:43:37 -040036 bool ExecuteScript(const char* szScript,
tsepez304bb912016-11-03 06:10:26 -070037 CFXJSE_Value* lpRetValue,
38 CFXJSE_Value* lpNewThisObject = nullptr);
Dan Sinclair1770c022016-03-14 14:14:16 -040039
40 protected:
dsinclair08fea802016-07-12 10:37:52 -070041 friend class CFXJSE_ScopeUtil_IsolateHandleContext;
42
Dan Sinclair1770c022016-03-14 14:14:16 -040043 CFXJSE_Context();
44 CFXJSE_Context(const CFXJSE_Context&);
45 CFXJSE_Context& operator=(const CFXJSE_Context&);
46
Dan Sinclair1770c022016-03-14 14:14:16 -040047 v8::Global<v8::Context> m_hContext;
48 v8::Isolate* m_pIsolate;
tsepez56286b32016-05-17 16:24:34 -070049 std::vector<std::unique_ptr<CFXJSE_Class>> m_rgClasses;
Dan Sinclair1770c022016-03-14 14:14:16 -040050};
tsepez56286b32016-05-17 16:24:34 -070051
Dan Sinclair1770c022016-03-14 14:14:16 -040052v8::Local<v8::Object> FXJSE_CreateReturnValue(v8::Isolate* pIsolate,
53 v8::TryCatch& trycatch);
54
tsepez3a005f22016-05-27 17:45:00 -070055v8::Local<v8::Object> FXJSE_GetGlobalObjectFromContext(
56 const v8::Local<v8::Context>& hContext);
57
58void FXJSE_UpdateObjectBinding(v8::Local<v8::Object>& hObject,
tsepez29adee72016-05-31 14:22:09 -070059 CFXJSE_HostObject* lpNewBinding = nullptr);
tsepez3a005f22016-05-27 17:45:00 -070060
tsepez29adee72016-05-31 14:22:09 -070061CFXJSE_HostObject* FXJSE_RetrieveObjectBinding(
62 const v8::Local<v8::Object>& hJSObject,
63 CFXJSE_Class* lpClass = nullptr);
tsepez3a005f22016-05-27 17:45:00 -070064
dsinclair43554682016-09-29 17:29:48 -070065#endif // FXJS_CFXJSE_CONTEXT_H_