cjs_runtime.h revision 5ae9d0c6fd838a2967cca72aa5751b51dadc2769
1// Copyright 2014 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 7#ifndef FPDFSDK_JAVASCRIPT_CJS_RUNTIME_H_ 8#define FPDFSDK_JAVASCRIPT_CJS_RUNTIME_H_ 9 10#include <map> 11#include <memory> 12#include <set> 13#include <utility> 14#include <vector> 15 16#include "core/fxcrt/cfx_observable.h" 17#include "core/fxcrt/fx_basic.h" 18#include "fpdfsdk/cpdfsdk_formfillenvironment.h" 19#include "fpdfsdk/javascript/JS_EventHandler.h" 20#include "fpdfsdk/javascript/ijs_runtime.h" 21#include "fxjs/fxjs_v8.h" 22 23class CJS_EventContext; 24 25class CJS_Runtime : public IJS_Runtime, 26 public CFXJS_Engine, 27 public CFX_Observable<CJS_Runtime> { 28 public: 29 using FieldEvent = std::pair<CFX_WideString, JS_EVENT_T>; 30 31 static CJS_Runtime* CurrentRuntimeFromIsolate(v8::Isolate* pIsolate); 32 33 explicit CJS_Runtime(CPDFSDK_FormFillEnvironment* pFormFillEnv); 34 ~CJS_Runtime() override; 35 36 // IJS_Runtime 37 IJS_EventContext* NewEventContext() override; 38 void ReleaseEventContext(IJS_EventContext* pContext) override; 39 CPDFSDK_FormFillEnvironment* GetFormFillEnv() const override; 40 int ExecuteScript(const CFX_WideString& script, 41 CFX_WideString* info) override; 42 43 CJS_EventContext* GetCurrentEventContext() const; 44 45 // Returns true if the event isn't already found in the set. 46 bool AddEventToSet(const FieldEvent& event); 47 void RemoveEventFromSet(const FieldEvent& event); 48 49 void BeginBlock() { m_bBlocking = true; } 50 void EndBlock() { m_bBlocking = false; } 51 bool IsBlocking() const { return m_bBlocking; } 52 53#ifdef PDF_ENABLE_XFA 54 bool GetValueByName(const CFX_ByteStringC& utf8Name, 55 CFXJSE_Value* pValue) override; 56 bool SetValueByName(const CFX_ByteStringC& utf8Name, 57 CFXJSE_Value* pValue) override; 58#endif // PDF_ENABLE_XFA 59 60 private: 61 void DefineJSObjects(); 62 void SetFormFillEnvToDocument(); 63 64 std::vector<std::unique_ptr<CJS_EventContext>> m_EventContextArray; 65 CPDFSDK_FormFillEnvironment::ObservedPtr m_pFormFillEnv; 66 bool m_bBlocking; 67 bool m_isolateManaged; 68 std::set<FieldEvent> m_FieldEventSet; 69}; 70 71#endif // FPDFSDK_JAVASCRIPT_CJS_RUNTIME_H_ 72