From 64376be4aac4710848b36b823fd98aae75095336 Mon Sep 17 00:00:00 2001 From: dsinclair Date: Thu, 31 Mar 2016 20:03:24 -0700 Subject: Move the fpdfsdk/include/javascript folder This CL splits the IJavaScript.h file into the two inner classes and puts them in the fpdfsdk/javascript folder. Review URL: https://codereview.chromium.org/1847583004 --- BUILD.gn | 11 +- fpdfsdk/DEPS | 1 - fpdfsdk/fpdfview.cpp | 2 +- fpdfsdk/fpdfxfa/fpdfxfa_app.cpp | 1 - fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp | 2 +- fpdfsdk/fsdk_actionhandler.cpp | 3 +- fpdfsdk/fsdk_baseform.cpp | 3 +- fpdfsdk/fsdk_mgr.cpp | 2 +- fpdfsdk/include/fsdk_mgr.h | 2 +- fpdfsdk/include/fxedit/fxet_edit.h | 13 -- fpdfsdk/include/javascript/DEPS | 3 - fpdfsdk/include/javascript/IJavaScript.h | 166 --------------- fpdfsdk/javascript/Consts.cpp | 1 - fpdfsdk/javascript/Consts.h | 22 -- fpdfsdk/javascript/Document.cpp | 10 +- fpdfsdk/javascript/Field.cpp | 5 +- fpdfsdk/javascript/Icon.cpp | 3 - fpdfsdk/javascript/JS_Context.cpp | 284 -------------------------- fpdfsdk/javascript/JS_Context.h | 137 ------------- fpdfsdk/javascript/JS_EventHandler.cpp | 7 +- fpdfsdk/javascript/JS_GlobalData.cpp | 5 - fpdfsdk/javascript/JS_Object.cpp | 5 +- fpdfsdk/javascript/JS_Object.h | 4 +- fpdfsdk/javascript/JS_Runtime.cpp | 334 ------------------------------- fpdfsdk/javascript/JS_Runtime.h | 92 --------- fpdfsdk/javascript/JS_Runtime_Stub.cpp | 5 +- fpdfsdk/javascript/JS_Value.cpp | 2 - fpdfsdk/javascript/PublicMethods.cpp | 20 +- fpdfsdk/javascript/app.cpp | 5 +- fpdfsdk/javascript/cjs_context.cpp | 281 ++++++++++++++++++++++++++ fpdfsdk/javascript/cjs_context.h | 138 +++++++++++++ fpdfsdk/javascript/cjs_runtime.cpp | 333 ++++++++++++++++++++++++++++++ fpdfsdk/javascript/cjs_runtime.h | 92 +++++++++ fpdfsdk/javascript/color.cpp | 7 +- fpdfsdk/javascript/console.cpp | 5 +- fpdfsdk/javascript/event.cpp | 5 +- fpdfsdk/javascript/global.cpp | 5 +- fpdfsdk/javascript/ijs_context.h | 134 +++++++++++++ fpdfsdk/javascript/ijs_runtime.h | 48 +++++ fpdfsdk/javascript/report.cpp | 3 - fpdfsdk/javascript/util.cpp | 5 +- pdfium.gyp | 11 +- samples/image_diff_png.cc | 4 +- xfa/fxjse/runtime.cpp | 2 +- 44 files changed, 1077 insertions(+), 1146 deletions(-) delete mode 100644 fpdfsdk/include/javascript/DEPS delete mode 100644 fpdfsdk/include/javascript/IJavaScript.h delete mode 100644 fpdfsdk/javascript/JS_Context.cpp delete mode 100644 fpdfsdk/javascript/JS_Context.h delete mode 100644 fpdfsdk/javascript/JS_Runtime.cpp delete mode 100644 fpdfsdk/javascript/JS_Runtime.h create mode 100644 fpdfsdk/javascript/cjs_context.cpp create mode 100644 fpdfsdk/javascript/cjs_context.h create mode 100644 fpdfsdk/javascript/cjs_runtime.cpp create mode 100644 fpdfsdk/javascript/cjs_runtime.h create mode 100644 fpdfsdk/javascript/ijs_context.h create mode 100644 fpdfsdk/javascript/ijs_runtime.h diff --git a/BUILD.gn b/BUILD.gn index 0ba2998718..aa8c58f707 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -774,7 +774,8 @@ static_library("pdfwindow") { static_library("javascript") { sources = [ - "fpdfsdk/include/javascript/IJavaScript.h", + "fpdfsdk/javascript/ijs_context.h", + "fpdfsdk/javascript/ijs_runtime.h", ] if (pdf_enable_v8) { sources += [ @@ -787,8 +788,6 @@ static_library("javascript") { "fpdfsdk/javascript/Field.h", "fpdfsdk/javascript/Icon.cpp", "fpdfsdk/javascript/Icon.h", - "fpdfsdk/javascript/JS_Context.cpp", - "fpdfsdk/javascript/JS_Context.h", "fpdfsdk/javascript/JS_Define.h", "fpdfsdk/javascript/JS_EventHandler.cpp", "fpdfsdk/javascript/JS_EventHandler.h", @@ -796,14 +795,16 @@ static_library("javascript") { "fpdfsdk/javascript/JS_GlobalData.h", "fpdfsdk/javascript/JS_Object.cpp", "fpdfsdk/javascript/JS_Object.h", - "fpdfsdk/javascript/JS_Runtime.cpp", - "fpdfsdk/javascript/JS_Runtime.h", "fpdfsdk/javascript/JS_Value.cpp", "fpdfsdk/javascript/JS_Value.h", "fpdfsdk/javascript/PublicMethods.cpp", "fpdfsdk/javascript/PublicMethods.h", "fpdfsdk/javascript/app.cpp", "fpdfsdk/javascript/app.h", + "fpdfsdk/javascript/cjs_context.cpp", + "fpdfsdk/javascript/cjs_context.h", + "fpdfsdk/javascript/cjs_runtime.cpp", + "fpdfsdk/javascript/cjs_runtime.h", "fpdfsdk/javascript/color.cpp", "fpdfsdk/javascript/color.h", "fpdfsdk/javascript/console.cpp", diff --git a/fpdfsdk/DEPS b/fpdfsdk/DEPS index 1f188771d9..1383f25c35 100644 --- a/fpdfsdk/DEPS +++ b/fpdfsdk/DEPS @@ -7,7 +7,6 @@ include_rules = [ '+core/fpdfapi/fpdf_parser/include', '+core/fpdfapi/fpdf_render/include', '+core/fxcrt/include', - '+javascript/IJavaScript.h', '+public', '+v8', '+xfa/include', diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp index 3a3449745c..e5a53da739 100644 --- a/fpdfsdk/fpdfview.cpp +++ b/fpdfsdk/fpdfview.cpp @@ -18,7 +18,7 @@ #include "fpdfsdk/include/fsdk_define.h" #include "fpdfsdk/include/fsdk_mgr.h" #include "fpdfsdk/include/fsdk_rendercontext.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" +#include "fpdfsdk/javascript/ijs_runtime.h" #include "public/fpdf_ext.h" #include "public/fpdf_progressive.h" #include "third_party/base/numerics/safe_conversions_impl.h" diff --git a/fpdfsdk/fpdfxfa/fpdfxfa_app.cpp b/fpdfsdk/fpdfxfa/fpdfxfa_app.cpp index cdc1949d46..b52879a25a 100644 --- a/fpdfsdk/fpdfxfa/fpdfxfa_app.cpp +++ b/fpdfsdk/fpdfxfa/fpdfxfa_app.cpp @@ -9,7 +9,6 @@ #include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h" #include "fpdfsdk/include/fsdk_define.h" #include "fpdfsdk/include/fsdk_mgr.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" #include "public/fpdf_formfill.h" #include "xfa/fxbarcode/include/BC_Library.h" diff --git a/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp index e9c9e61ffc..23efc3321a 100644 --- a/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp +++ b/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp @@ -14,7 +14,7 @@ #include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h" #include "fpdfsdk/include/fsdk_define.h" #include "fpdfsdk/include/fsdk_mgr.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" +#include "fpdfsdk/javascript/ijs_runtime.h" #include "public/fpdf_formfill.h" #define IDS_XFA_Validate_Input \ diff --git a/fpdfsdk/fsdk_actionhandler.cpp b/fpdfsdk/fsdk_actionhandler.cpp index 1977ce5cee..ebcaf354ad 100644 --- a/fpdfsdk/fsdk_actionhandler.cpp +++ b/fpdfsdk/fsdk_actionhandler.cpp @@ -11,7 +11,8 @@ #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h" #include "fpdfsdk/include/fsdk_define.h" #include "fpdfsdk/include/fsdk_mgr.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" +#include "fpdfsdk/javascript/ijs_context.h" +#include "fpdfsdk/javascript/ijs_runtime.h" #include "third_party/base/stl_util.h" CPDFSDK_ActionHandler::CPDFSDK_ActionHandler() diff --git a/fpdfsdk/fsdk_baseform.cpp b/fpdfsdk/fsdk_baseform.cpp index 6027eec23d..9b21880d05 100644 --- a/fpdfsdk/fsdk_baseform.cpp +++ b/fpdfsdk/fsdk_baseform.cpp @@ -20,7 +20,8 @@ #include "fpdfsdk/include/fsdk_baseannot.h" #include "fpdfsdk/include/fsdk_define.h" #include "fpdfsdk/include/fsdk_mgr.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" +#include "fpdfsdk/javascript/ijs_context.h" +#include "fpdfsdk/javascript/ijs_runtime.h" #include "fpdfsdk/pdfwindow/PWL_Utils.h" #ifdef PDF_ENABLE_XFA diff --git a/fpdfsdk/fsdk_mgr.cpp b/fpdfsdk/fsdk_mgr.cpp index 83de4e84f9..b318b0a9db 100644 --- a/fpdfsdk/fsdk_mgr.cpp +++ b/fpdfsdk/fsdk_mgr.cpp @@ -14,7 +14,7 @@ #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" #include "fpdfsdk/formfiller/cffl_formfiller.h" #include "fpdfsdk/include/fsdk_define.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" +#include "fpdfsdk/javascript/ijs_runtime.h" #include "public/fpdf_ext.h" #include "third_party/base/stl_util.h" diff --git a/fpdfsdk/include/fsdk_mgr.h b/fpdfsdk/include/fsdk_mgr.h index 3b8c951e0e..4bc5a7f916 100644 --- a/fpdfsdk/include/fsdk_mgr.h +++ b/fpdfsdk/include/fsdk_mgr.h @@ -19,7 +19,6 @@ #include "fpdfsdk/include/fsdk_common.h" #include "fpdfsdk/include/fsdk_define.h" #include "fpdfsdk/include/fx_systemhandler.h" -#include "javascript/IJavaScript.h" #include "public/fpdf_formfill.h" #include "public/fpdf_fwlevent.h" @@ -30,6 +29,7 @@ class CPDFSDK_InterForm; class CPDFSDK_PageView; class CPDFSDK_Widget; class IFX_SystemHandler; +class IJS_Runtime; // NOTE: |bsUTF16LE| must outlive the use of the result. Care must be taken // since modifying the result would impact |bsUTF16LE|. diff --git a/fpdfsdk/include/fxedit/fxet_edit.h b/fpdfsdk/include/fxedit/fxet_edit.h index 6f174a81d1..d3383ac2cd 100644 --- a/fpdfsdk/include/fxedit/fxet_edit.h +++ b/fpdfsdk/include/fxedit/fxet_edit.h @@ -21,8 +21,6 @@ class CFX_Edit_Provider; #define FX_EDIT_IsFloatSmaller(fa, fb) \ (fa < fb && !FX_EDIT_IsFloatEqual(fa, fb)) -/* ------------------------- CFX_Edit_Refresh ---------------------------- */ - enum REFRESH_PLAN_E { RP_ANALYSE, RP_NOANALYSE, RP_OPTIONAL }; enum EDIT_PROPS_E { @@ -165,8 +163,6 @@ class CFX_Edit_Refresh { CFX_Edit_RectArray m_RefreshRects; }; -/* ------------------------- CFX_Edit_Select ---------------------------- */ - class CFX_Edit_Select { public: CFX_Edit_Select() {} @@ -206,8 +202,6 @@ class CFX_Edit_Select { CPVT_WordPlace BeginPos, EndPos; }; -/* ------------------------- CFX_Edit_Undo ---------------------------- */ - class CFX_Edit_Undo { public: explicit CFX_Edit_Undo(int32_t nBufsize); @@ -280,9 +274,6 @@ class CFX_Edit_GroupUndoItem : public IFX_Edit_UndoItem { CFX_ArrayTemplate m_Items; }; -/* ------------------------- CFX_Edit_UndoItem derived classes - * ---------------------------- */ - class CFXEU_InsertWord : public CFX_Edit_UndoItem { public: CFXEU_InsertWord(CFX_Edit* pEdit, @@ -507,8 +498,6 @@ class CFXEU_SetWordProps : public CFX_Edit_UndoItem { CPVT_WordProps m_NewWordProps; }; -/* ------------------------- CFX_Edit ---------------------------- */ - class CFX_Edit : public IFX_Edit { friend class CFX_Edit_Iterator; friend class CFXEU_InsertWord; @@ -764,8 +753,6 @@ class CFX_Edit : public IFX_Edit { CFX_Edit_GroupUndoItem* m_pGroupUndoItem; }; -/* ------------------------- CFX_Edit_Iterator ---------------------------- */ - class CFX_Edit_Iterator : public IFX_Edit_Iterator { public: CFX_Edit_Iterator(CFX_Edit* pEdit, IPDF_VariableText_Iterator* pVTIterator); diff --git a/fpdfsdk/include/javascript/DEPS b/fpdfsdk/include/javascript/DEPS deleted file mode 100644 index 2846bdc69c..0000000000 --- a/fpdfsdk/include/javascript/DEPS +++ /dev/null @@ -1,3 +0,0 @@ -include_rules = [ - '+xfa/fxjse/include' -] diff --git a/fpdfsdk/include/javascript/IJavaScript.h b/fpdfsdk/include/javascript/IJavaScript.h deleted file mode 100644 index 8aab367983..0000000000 --- a/fpdfsdk/include/javascript/IJavaScript.h +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef FPDFSDK_INCLUDE_JAVASCRIPT_IJAVASCRIPT_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_IJAVASCRIPT_H_ - -#include "core/fxcrt/include/fx_string.h" -#include "core/fxcrt/include/fx_system.h" - -#ifdef PDF_ENABLE_XFA -#include "xfa/fxjse/include/fxjse.h" -#endif // PDF_ENABLE_XFA - -class CPDFDoc_Environment; -class CPDFSDK_Annot; -class CPDFSDK_Document; -class CPDF_Bookmark; -class CPDF_FormField; - -// Records the details of an event and triggers JS execution for it. -class IJS_Context { - public: - virtual FX_BOOL RunScript(const CFX_WideString& script, - CFX_WideString* info) = 0; - - virtual void OnApp_Init() = 0; - - virtual void OnDoc_Open(CPDFSDK_Document* pDoc, - const CFX_WideString& strTargetName) = 0; - virtual void OnDoc_WillPrint(CPDFSDK_Document* pDoc) = 0; - virtual void OnDoc_DidPrint(CPDFSDK_Document* pDoc) = 0; - virtual void OnDoc_WillSave(CPDFSDK_Document* pDoc) = 0; - virtual void OnDoc_DidSave(CPDFSDK_Document* pDoc) = 0; - virtual void OnDoc_WillClose(CPDFSDK_Document* pDoc) = 0; - - virtual void OnPage_Open(CPDFSDK_Document* pTarget) = 0; - virtual void OnPage_Close(CPDFSDK_Document* pTarget) = 0; - virtual void OnPage_InView(CPDFSDK_Document* pTarget) = 0; - virtual void OnPage_OutView(CPDFSDK_Document* pTarget) = 0; - - virtual void OnField_MouseDown(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget) = 0; - virtual void OnField_MouseEnter(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget) = 0; - virtual void OnField_MouseExit(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget) = 0; - virtual void OnField_MouseUp(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget) = 0; - virtual void OnField_Focus(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget, - const CFX_WideString& Value) = 0; - virtual void OnField_Blur(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget, - const CFX_WideString& Value) = 0; - - virtual void OnField_Calculate(CPDF_FormField* pSource, - CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL& bRc) = 0; - virtual void OnField_Format(CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL bWillCommit) = 0; - virtual void OnField_Keystroke(CFX_WideString& strChange, - const CFX_WideString& strChangeEx, - FX_BOOL KeyDown, - FX_BOOL bModifier, - int& nSelEnd, - int& nSelStart, - FX_BOOL bShift, - CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL bWillCommit, - FX_BOOL bFieldFull, - FX_BOOL& bRc) = 0; - virtual void OnField_Validate(CFX_WideString& strChange, - const CFX_WideString& strChangeEx, - FX_BOOL bKeyDown, - FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL& bRc) = 0; - - virtual void OnScreen_Focus(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_Blur(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_Open(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_Close(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_MouseDown(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_MouseUp(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_MouseEnter(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_MouseExit(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_InView(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_OutView(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) = 0; - - virtual void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) = 0; - virtual void OnLink_MouseUp(CPDFSDK_Document* pTarget) = 0; - - virtual void OnMenu_Exec(CPDFSDK_Document* pTarget, - const CFX_WideString&) = 0; - virtual void OnBatchExec(CPDFSDK_Document* pTarget) = 0; - virtual void OnConsole_Exec() = 0; - virtual void OnExternal_Exec() = 0; - - virtual void EnableMessageBox(FX_BOOL bEnable) = 0; - - protected: - virtual ~IJS_Context() {} -}; - -// Owns the FJXS objects needed to actually execute JS. -class IJS_Runtime { - public: - static void Initialize(unsigned int slot, void* isolate); - static IJS_Runtime* Create(CPDFDoc_Environment* pEnv); - virtual ~IJS_Runtime() {} - - virtual IJS_Context* NewContext() = 0; - virtual void ReleaseContext(IJS_Context* pContext) = 0; - virtual IJS_Context* GetCurrentContext() = 0; - virtual void SetReaderDocument(CPDFSDK_Document* pReaderDoc) = 0; - virtual CPDFSDK_Document* GetReaderDocument() = 0; - virtual int Execute(IJS_Context* cc, - const wchar_t* script, - CFX_WideString* info) = 0; - -#ifdef PDF_ENABLE_XFA - virtual FX_BOOL GetHValueByName(const CFX_ByteStringC& utf8Name, - FXJSE_HVALUE hValue) = 0; - virtual FX_BOOL SetHValueByName(const CFX_ByteStringC& utf8Name, - FXJSE_HVALUE hValue) = 0; -#endif // PDF_ENABLE_XFA - - protected: - IJS_Runtime() {} -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_IJAVASCRIPT_H_ diff --git a/fpdfsdk/javascript/Consts.cpp b/fpdfsdk/javascript/Consts.cpp index 3fdbb40ccb..8aeb0b9239 100644 --- a/fpdfsdk/javascript/Consts.cpp +++ b/fpdfsdk/javascript/Consts.cpp @@ -6,7 +6,6 @@ #include "fpdfsdk/javascript/Consts.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_Object.h" #include "fpdfsdk/javascript/JS_Value.h" diff --git a/fpdfsdk/javascript/Consts.h b/fpdfsdk/javascript/Consts.h index 165e91ffaa..e358cb9341 100644 --- a/fpdfsdk/javascript/Consts.h +++ b/fpdfsdk/javascript/Consts.h @@ -9,8 +9,6 @@ #include "fpdfsdk/javascript/JS_Define.h" -/* ------------------------------ border ------------------------------ */ - class CJS_Border : public CJS_Object { public: explicit CJS_Border(v8::Local pObject) : CJS_Object(pObject) {} @@ -19,8 +17,6 @@ class CJS_Border : public CJS_Object { DECLARE_JS_CLASS_CONST(); }; -/* ------------------------------ display ------------------------------ */ - class CJS_Display : public CJS_Object { public: explicit CJS_Display(v8::Local pObject) : CJS_Object(pObject) {} @@ -29,8 +25,6 @@ class CJS_Display : public CJS_Object { DECLARE_JS_CLASS_CONST(); }; -/* ------------------------------ font ------------------------------ */ - class CJS_Font : public CJS_Object { public: explicit CJS_Font(v8::Local pObject) : CJS_Object(pObject) {} @@ -39,8 +33,6 @@ class CJS_Font : public CJS_Object { DECLARE_JS_CLASS_CONST(); }; -/* ------------------------------ highlight ------------------------------ */ - class CJS_Highlight : public CJS_Object { public: explicit CJS_Highlight(v8::Local pObject) : CJS_Object(pObject) {} @@ -49,8 +41,6 @@ class CJS_Highlight : public CJS_Object { DECLARE_JS_CLASS_CONST(); }; -/* ------------------------------ position ------------------------------ */ - class CJS_Position : public CJS_Object { public: explicit CJS_Position(v8::Local pObject) : CJS_Object(pObject) {} @@ -59,8 +49,6 @@ class CJS_Position : public CJS_Object { DECLARE_JS_CLASS_CONST(); }; -/* ------------------------------ scaleHow ------------------------------ */ - class CJS_ScaleHow : public CJS_Object { public: explicit CJS_ScaleHow(v8::Local pObject) : CJS_Object(pObject) {} @@ -69,8 +57,6 @@ class CJS_ScaleHow : public CJS_Object { DECLARE_JS_CLASS_CONST(); }; -/* ------------------------------ scaleWhen ------------------------------ */ - class CJS_ScaleWhen : public CJS_Object { public: explicit CJS_ScaleWhen(v8::Local pObject) : CJS_Object(pObject) {} @@ -79,8 +65,6 @@ class CJS_ScaleWhen : public CJS_Object { DECLARE_JS_CLASS_CONST(); }; -/* ------------------------------ style ------------------------------ */ - class CJS_Style : public CJS_Object { public: explicit CJS_Style(v8::Local pObject) : CJS_Object(pObject) {} @@ -89,8 +73,6 @@ class CJS_Style : public CJS_Object { DECLARE_JS_CLASS_CONST(); }; -/* ------------------------------ zoomtype ------------------------------ */ - class CJS_Zoomtype : public CJS_Object { public: explicit CJS_Zoomtype(v8::Local pObject) : CJS_Object(pObject) {} @@ -99,15 +81,11 @@ class CJS_Zoomtype : public CJS_Object { DECLARE_JS_CLASS_CONST(); }; -/* ------------------------------ CJS_GlobalConsts -------------------------- */ - class CJS_GlobalConsts : public CJS_Object { public: static void DefineJSObjects(CJS_Runtime* pRuntime); }; -/* ------------------------------ CJS_GlobalArrays -------------------------- */ - class CJS_GlobalArrays : public CJS_Object { public: static void DefineJSObjects(CJS_Runtime* pRuntmie); diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp index 70b4ef7e03..762ba71cf2 100644 --- a/fpdfsdk/javascript/Document.cpp +++ b/fpdfsdk/javascript/Document.cpp @@ -12,16 +12,15 @@ #include "core/fpdfapi/fpdf_page/include/cpdf_page.h" #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" #include "fpdfsdk/include/fsdk_mgr.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" #include "fpdfsdk/javascript/Field.h" #include "fpdfsdk/javascript/Icon.h" -#include "fpdfsdk/javascript/JS_Context.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_EventHandler.h" #include "fpdfsdk/javascript/JS_Object.h" -#include "fpdfsdk/javascript/JS_Runtime.h" #include "fpdfsdk/javascript/JS_Value.h" #include "fpdfsdk/javascript/app.h" +#include "fpdfsdk/javascript/cjs_context.h" +#include "fpdfsdk/javascript/cjs_runtime.h" #include "fpdfsdk/javascript/resource.h" #include "third_party/base/numerics/safe_math.h" @@ -54,8 +53,6 @@ PrintParamsObj::PrintParamsObj(CJS_Object* pJSObject) bAnnotations = TRUE; } -/* ---------------------- Document ---------------------- */ - #define MINWIDTH 5.0f #define MINHEIGHT 5.0f @@ -148,9 +145,6 @@ void CJS_Document::InitInstance(IJS_Runtime* pIRuntime) { pDoc->SetIsolate(pRuntime->GetIsolate()); } -/* --------------------------------- Document --------------------------------- - */ - Document::Document(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject), m_isolate(NULL), diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp index 5b8750d88e..158d4d6a7f 100644 --- a/fpdfsdk/javascript/Field.cpp +++ b/fpdfsdk/javascript/Field.cpp @@ -14,16 +14,15 @@ #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" #include "core/fpdfapi/fpdf_page/include/cpdf_page.h" #include "fpdfsdk/include/fsdk_mgr.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" #include "fpdfsdk/javascript/Document.h" #include "fpdfsdk/javascript/Icon.h" -#include "fpdfsdk/javascript/JS_Context.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_EventHandler.h" #include "fpdfsdk/javascript/JS_Object.h" -#include "fpdfsdk/javascript/JS_Runtime.h" #include "fpdfsdk/javascript/JS_Value.h" #include "fpdfsdk/javascript/PublicMethods.h" +#include "fpdfsdk/javascript/cjs_context.h" +#include "fpdfsdk/javascript/cjs_runtime.h" #include "fpdfsdk/javascript/color.h" BEGIN_JS_STATIC_CONST(CJS_Field) diff --git a/fpdfsdk/javascript/Icon.cpp b/fpdfsdk/javascript/Icon.cpp index d3c2ba8039..7dde8bf0b5 100644 --- a/fpdfsdk/javascript/Icon.cpp +++ b/fpdfsdk/javascript/Icon.cpp @@ -6,13 +6,10 @@ #include "fpdfsdk/javascript/Icon.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_Object.h" #include "fpdfsdk/javascript/JS_Value.h" -/* ---------------------- Icon ---------------------- */ - BEGIN_JS_STATIC_CONST(CJS_Icon) END_JS_STATIC_CONST() diff --git a/fpdfsdk/javascript/JS_Context.cpp b/fpdfsdk/javascript/JS_Context.cpp deleted file mode 100644 index c382b07b8b..0000000000 --- a/fpdfsdk/javascript/JS_Context.cpp +++ /dev/null @@ -1,284 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "fpdfsdk/javascript/JS_Context.h" - -#include "fpdfsdk/include/javascript/IJavaScript.h" -#include "fpdfsdk/javascript/JS_EventHandler.h" -#include "fpdfsdk/javascript/JS_Runtime.h" -#include "fpdfsdk/javascript/resource.h" - -/* -------------------------- CJS_Context -------------------------- */ - -CJS_Context::CJS_Context(CJS_Runtime* pRuntime) - : m_pRuntime(pRuntime), m_bBusy(FALSE), m_bMsgBoxEnable(TRUE) { - m_pEventHandler = new CJS_EventHandler(this); -} - -CJS_Context::~CJS_Context() { - delete m_pEventHandler; -} - -CPDFSDK_Document* CJS_Context::GetReaderDocument() { - return m_pRuntime->GetReaderDocument(); -} - -CPDFDoc_Environment* CJS_Context::GetReaderApp() { - return m_pRuntime->GetReaderApp(); -} - -FX_BOOL CJS_Context::RunScript(const CFX_WideString& script, - CFX_WideString* info) { - v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate()); -#ifdef PDF_ENABLE_XFA - v8::Locker locker(m_pRuntime->GetIsolate()); -#endif // PDF_ENABLE_XFA - v8::HandleScope handle_scope(m_pRuntime->GetIsolate()); - v8::Local context = m_pRuntime->NewJSContext(); - v8::Context::Scope context_scope(context); - - if (m_bBusy) { - *info = JSGetStringFromID(this, IDS_STRING_JSBUSY); - return FALSE; - } - m_bBusy = TRUE; - - ASSERT(m_pEventHandler->IsValid()); - CJS_Runtime::FieldEvent event(m_pEventHandler->TargetName(), - m_pEventHandler->EventType()); - if (!m_pRuntime->AddEventToSet(event)) { - *info = JSGetStringFromID(this, IDS_STRING_JSEVENT); - return FALSE; - } - - CFX_WideString sErrorMessage; - int nRet = 0; - if (script.GetLength() > 0) { - nRet = m_pRuntime->Execute(this, script.c_str(), &sErrorMessage); - } - - if (nRet < 0) { - *info += sErrorMessage; - } else { - *info = JSGetStringFromID(this, IDS_STRING_RUN); - } - - m_pRuntime->RemoveEventFromSet(event); - m_pEventHandler->Destroy(); - m_bBusy = FALSE; - - return nRet >= 0; -} - -void CJS_Context::OnApp_Init() { - m_pEventHandler->OnApp_Init(); -} - -void CJS_Context::OnDoc_Open(CPDFSDK_Document* pDoc, - const CFX_WideString& strTargetName) { - m_pEventHandler->OnDoc_Open(pDoc, strTargetName); -} - -void CJS_Context::OnDoc_WillPrint(CPDFSDK_Document* pDoc) { - m_pEventHandler->OnDoc_WillPrint(pDoc); -} - -void CJS_Context::OnDoc_DidPrint(CPDFSDK_Document* pDoc) { - m_pEventHandler->OnDoc_DidPrint(pDoc); -} - -void CJS_Context::OnDoc_WillSave(CPDFSDK_Document* pDoc) { - m_pEventHandler->OnDoc_WillSave(pDoc); -} - -void CJS_Context::OnDoc_DidSave(CPDFSDK_Document* pDoc) { - m_pEventHandler->OnDoc_DidSave(pDoc); -} - -void CJS_Context::OnDoc_WillClose(CPDFSDK_Document* pDoc) { - m_pEventHandler->OnDoc_WillClose(pDoc); -} - -void CJS_Context::OnPage_Open(CPDFSDK_Document* pTarget) { - m_pEventHandler->OnPage_Open(pTarget); -} - -void CJS_Context::OnPage_Close(CPDFSDK_Document* pTarget) { - m_pEventHandler->OnPage_Close(pTarget); -} - -void CJS_Context::OnPage_InView(CPDFSDK_Document* pTarget) { - m_pEventHandler->OnPage_InView(pTarget); -} - -void CJS_Context::OnPage_OutView(CPDFSDK_Document* pTarget) { - m_pEventHandler->OnPage_OutView(pTarget); -} - -void CJS_Context::OnField_MouseDown(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget) { - m_pEventHandler->OnField_MouseDown(bModifier, bShift, pTarget); -} - -void CJS_Context::OnField_MouseEnter(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget) { - m_pEventHandler->OnField_MouseEnter(bModifier, bShift, pTarget); -} - -void CJS_Context::OnField_MouseExit(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget) { - m_pEventHandler->OnField_MouseExit(bModifier, bShift, pTarget); -} - -void CJS_Context::OnField_MouseUp(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget) { - m_pEventHandler->OnField_MouseUp(bModifier, bShift, pTarget); -} - -void CJS_Context::OnField_Focus(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget, - const CFX_WideString& Value) { - m_pEventHandler->OnField_Focus(bModifier, bShift, pTarget, Value); -} - -void CJS_Context::OnField_Blur(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget, - const CFX_WideString& Value) { - m_pEventHandler->OnField_Blur(bModifier, bShift, pTarget, Value); -} - -void CJS_Context::OnField_Calculate(CPDF_FormField* pSource, - CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL& bRc) { - m_pEventHandler->OnField_Calculate(pSource, pTarget, Value, bRc); -} - -void CJS_Context::OnField_Format(CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL bWillCommit) { - m_pEventHandler->OnField_Format(pTarget, Value, bWillCommit); -} - -void CJS_Context::OnField_Keystroke(CFX_WideString& strChange, - const CFX_WideString& strChangeEx, - FX_BOOL bKeyDown, - FX_BOOL bModifier, - int& nSelEnd, - int& nSelStart, - FX_BOOL bShift, - CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL bWillCommit, - FX_BOOL bFieldFull, - FX_BOOL& bRc) { - m_pEventHandler->OnField_Keystroke( - strChange, strChangeEx, bKeyDown, bModifier, nSelEnd, nSelStart, bShift, - pTarget, Value, bWillCommit, bFieldFull, bRc); -} - -void CJS_Context::OnField_Validate(CFX_WideString& strChange, - const CFX_WideString& strChangeEx, - FX_BOOL bKeyDown, - FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL& bRc) { - m_pEventHandler->OnField_Validate(strChange, strChangeEx, bKeyDown, bModifier, - bShift, pTarget, Value, bRc); -} - -void CJS_Context::OnScreen_Focus(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) { - m_pEventHandler->OnScreen_Focus(bModifier, bShift, pScreen); -} - -void CJS_Context::OnScreen_Blur(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) { - m_pEventHandler->OnScreen_Blur(bModifier, bShift, pScreen); -} - -void CJS_Context::OnScreen_Open(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) { - m_pEventHandler->OnScreen_Open(bModifier, bShift, pScreen); -} - -void CJS_Context::OnScreen_Close(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) { - m_pEventHandler->OnScreen_Close(bModifier, bShift, pScreen); -} - -void CJS_Context::OnScreen_MouseDown(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) { - m_pEventHandler->OnScreen_MouseDown(bModifier, bShift, pScreen); -} - -void CJS_Context::OnScreen_MouseUp(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) { - m_pEventHandler->OnScreen_MouseUp(bModifier, bShift, pScreen); -} - -void CJS_Context::OnScreen_MouseEnter(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) { - m_pEventHandler->OnScreen_MouseEnter(bModifier, bShift, pScreen); -} - -void CJS_Context::OnScreen_MouseExit(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) { - m_pEventHandler->OnScreen_MouseExit(bModifier, bShift, pScreen); -} - -void CJS_Context::OnScreen_InView(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) { - m_pEventHandler->OnScreen_InView(bModifier, bShift, pScreen); -} - -void CJS_Context::OnScreen_OutView(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) { - m_pEventHandler->OnScreen_OutView(bModifier, bShift, pScreen); -} - -void CJS_Context::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) { - m_pEventHandler->OnBookmark_MouseUp(pBookMark); -} - -void CJS_Context::OnLink_MouseUp(CPDFSDK_Document* pTarget) { - m_pEventHandler->OnLink_MouseUp(pTarget); -} - -void CJS_Context::OnConsole_Exec() { - m_pEventHandler->OnConsole_Exec(); -} - -void CJS_Context::OnExternal_Exec() { - m_pEventHandler->OnExternal_Exec(); -} - -void CJS_Context::OnBatchExec(CPDFSDK_Document* pTarget) { - m_pEventHandler->OnBatchExec(pTarget); -} - -void CJS_Context::OnMenu_Exec(CPDFSDK_Document* pTarget, - const CFX_WideString& strTargetName) { - m_pEventHandler->OnMenu_Exec(pTarget, strTargetName); -} diff --git a/fpdfsdk/javascript/JS_Context.h b/fpdfsdk/javascript/JS_Context.h deleted file mode 100644 index 5aeba27fca..0000000000 --- a/fpdfsdk/javascript/JS_Context.h +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef FPDFSDK_JAVASCRIPT_JS_CONTEXT_H_ -#define FPDFSDK_JAVASCRIPT_JS_CONTEXT_H_ - -#include "core/fxcrt/include/fx_string.h" -#include "core/fxcrt/include/fx_system.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" - -class CJS_EventHandler; -class CJS_Runtime; - -class CJS_Context : public IJS_Context { - public: - explicit CJS_Context(CJS_Runtime* pRuntime); - ~CJS_Context() override; - - // IJS_Context - FX_BOOL RunScript(const CFX_WideString& script, - CFX_WideString* info) override; - void OnApp_Init() override; - void OnDoc_Open(CPDFSDK_Document* pDoc, - const CFX_WideString& strTargetName) override; - void OnDoc_WillPrint(CPDFSDK_Document* pDoc) override; - void OnDoc_DidPrint(CPDFSDK_Document* pDoc) override; - void OnDoc_WillSave(CPDFSDK_Document* pDoc) override; - void OnDoc_DidSave(CPDFSDK_Document* pDoc) override; - void OnDoc_WillClose(CPDFSDK_Document* pDoc) override; - void OnPage_Open(CPDFSDK_Document* pTarget) override; - void OnPage_Close(CPDFSDK_Document* pTarget) override; - void OnPage_InView(CPDFSDK_Document* pTarget) override; - void OnPage_OutView(CPDFSDK_Document* pTarget) override; - void OnField_MouseDown(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget) override; - void OnField_MouseEnter(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget) override; - void OnField_MouseExit(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget) override; - void OnField_MouseUp(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget) override; - void OnField_Focus(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget, - const CFX_WideString& Value) override; - void OnField_Blur(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget, - const CFX_WideString& Value) override; - void OnField_Calculate(CPDF_FormField* pSource, - CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL& bRc) override; - void OnField_Format(CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL bWillCommit) override; - void OnField_Keystroke(CFX_WideString& strChange, - const CFX_WideString& strChangeEx, - FX_BOOL bKeyDown, - FX_BOOL bModifier, - int& nSelEnd, - int& nSelStart, - FX_BOOL bShift, - CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL bWillCommit, - FX_BOOL bFieldFull, - FX_BOOL& bRc) override; - void OnField_Validate(CFX_WideString& strChange, - const CFX_WideString& strChangeEx, - FX_BOOL bKeyDown, - FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL& bRc) override; - void OnScreen_Focus(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) override; - void OnScreen_Blur(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) override; - void OnScreen_Open(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) override; - void OnScreen_Close(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) override; - void OnScreen_MouseDown(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) override; - void OnScreen_MouseUp(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) override; - void OnScreen_MouseEnter(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) override; - void OnScreen_MouseExit(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) override; - void OnScreen_InView(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) override; - void OnScreen_OutView(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen) override; - void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) override; - void OnLink_MouseUp(CPDFSDK_Document* pTarget) override; - void OnMenu_Exec(CPDFSDK_Document* pTarget, - const CFX_WideString& strTargetName) override; - void OnBatchExec(CPDFSDK_Document* pTarget) override; - void OnConsole_Exec() override; - void OnExternal_Exec() override; - void EnableMessageBox(FX_BOOL bEnable) override { m_bMsgBoxEnable = bEnable; } - - FX_BOOL IsMsgBoxEnabled() const { return m_bMsgBoxEnable; } - - CPDFDoc_Environment* GetReaderApp(); - CJS_Runtime* GetJSRuntime() const { return m_pRuntime; } - CJS_EventHandler* GetEventHandler() const { return m_pEventHandler; } - CPDFSDK_Document* GetReaderDocument(); - - private: - CJS_Runtime* m_pRuntime; - CJS_EventHandler* m_pEventHandler; - FX_BOOL m_bBusy; - FX_BOOL m_bMsgBoxEnable; -}; - -#endif // FPDFSDK_JAVASCRIPT_JS_CONTEXT_H_ diff --git a/fpdfsdk/javascript/JS_EventHandler.cpp b/fpdfsdk/javascript/JS_EventHandler.cpp index 0dffa7de54..5984946f6d 100644 --- a/fpdfsdk/javascript/JS_EventHandler.cpp +++ b/fpdfsdk/javascript/JS_EventHandler.cpp @@ -6,16 +6,13 @@ #include "fpdfsdk/javascript/JS_EventHandler.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" #include "fpdfsdk/javascript/Document.h" #include "fpdfsdk/javascript/Field.h" -#include "fpdfsdk/javascript/JS_Context.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_Object.h" -#include "fpdfsdk/javascript/JS_Runtime.h" #include "fpdfsdk/javascript/JS_Value.h" - -/* ---------------------------- CJS_EventHandler ---------------------------- */ +#include "fpdfsdk/javascript/cjs_context.h" +#include "fpdfsdk/javascript/cjs_runtime.h" CJS_EventHandler::CJS_EventHandler(CJS_Context* pContext) : m_pJSContext(pContext), diff --git a/fpdfsdk/javascript/JS_GlobalData.cpp b/fpdfsdk/javascript/JS_GlobalData.cpp index 3a9e52175a..fe3475c2b1 100644 --- a/fpdfsdk/javascript/JS_GlobalData.cpp +++ b/fpdfsdk/javascript/JS_GlobalData.cpp @@ -7,13 +7,10 @@ #include "fpdfsdk/javascript/JS_GlobalData.h" #include "core/fdrm/crypto/include/fx_crypt.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" #include "third_party/base/stl_util.h" #define JS_MAXGLOBALDATA (1024 * 4 - 8) -/* --------------------- CJS_GlobalVariableArray --------------------- */ - CJS_GlobalVariableArray::CJS_GlobalVariableArray() {} CJS_GlobalVariableArray::~CJS_GlobalVariableArray() { @@ -81,8 +78,6 @@ void CJS_GlobalVariableArray::Empty() { array.RemoveAll(); } -/* -------------------------- CJS_GlobalData -------------------------- */ - #define READER_JS_GLOBALDATA_FILENAME L"Reader_JsGlobal.Data" #define PHANTOM_JS_GLOBALDATA_FILENAME L"Phantom_JsGlobal.Data" #define SDK_JS_GLOBALDATA_FILENAME L"SDK_JsGlobal.Data" diff --git a/fpdfsdk/javascript/JS_Object.cpp b/fpdfsdk/javascript/JS_Object.cpp index 9bfa857cb9..d85cc1dbe4 100644 --- a/fpdfsdk/javascript/JS_Object.cpp +++ b/fpdfsdk/javascript/JS_Object.cpp @@ -6,10 +6,9 @@ #include "fpdfsdk/javascript/JS_Object.h" -#include "fpdfsdk/include/fsdk_mgr.h" // For CPDFDoc_Environment. -#include "fpdfsdk/include/javascript/IJavaScript.h" -#include "fpdfsdk/javascript/JS_Context.h" +#include "fpdfsdk/include/fsdk_mgr.h" #include "fpdfsdk/javascript/JS_Define.h" +#include "fpdfsdk/javascript/cjs_context.h" namespace { diff --git a/fpdfsdk/javascript/JS_Object.h b/fpdfsdk/javascript/JS_Object.h index da15199e34..e0ec23e79a 100644 --- a/fpdfsdk/javascript/JS_Object.h +++ b/fpdfsdk/javascript/JS_Object.h @@ -10,9 +10,9 @@ #include #include -#include "fpdfsdk/include/fsdk_define.h" // For FX_UINT +#include "fpdfsdk/include/fsdk_define.h" #include "fpdfsdk/include/jsapi/fxjs_v8.h" -#include "fpdfsdk/javascript/JS_Runtime.h" +#include "fpdfsdk/javascript/cjs_runtime.h" class CJS_Context; class CJS_Object; diff --git a/fpdfsdk/javascript/JS_Runtime.cpp b/fpdfsdk/javascript/JS_Runtime.cpp deleted file mode 100644 index 44fb340f2d..0000000000 --- a/fpdfsdk/javascript/JS_Runtime.cpp +++ /dev/null @@ -1,334 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "fpdfsdk/javascript/JS_Runtime.h" - -#include - -#include "fpdfsdk/include/fsdk_mgr.h" // For CPDFDoc_Environment. -#include "fpdfsdk/include/javascript/IJavaScript.h" -#include "fpdfsdk/javascript/Consts.h" -#include "fpdfsdk/javascript/Document.h" -#include "fpdfsdk/javascript/Field.h" -#include "fpdfsdk/javascript/Icon.h" -#include "fpdfsdk/javascript/JS_Context.h" -#include "fpdfsdk/javascript/JS_Define.h" -#include "fpdfsdk/javascript/JS_EventHandler.h" -#include "fpdfsdk/javascript/JS_GlobalData.h" -#include "fpdfsdk/javascript/JS_Object.h" -#include "fpdfsdk/javascript/JS_Value.h" -#include "fpdfsdk/javascript/PublicMethods.h" -#include "fpdfsdk/javascript/app.h" -#include "fpdfsdk/javascript/color.h" -#include "fpdfsdk/javascript/console.h" -#include "fpdfsdk/javascript/event.h" -#include "fpdfsdk/javascript/global.h" -#include "fpdfsdk/javascript/report.h" -#include "fpdfsdk/javascript/util.h" -#include "third_party/base/stl_util.h" - -#ifdef PDF_ENABLE_XFA -#include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h" -#include "xfa/fxjse/value.h" -#endif // PDF_ENABLE_XFA - -// static -void IJS_Runtime::Initialize(unsigned int slot, void* isolate) { - FXJS_Initialize(slot, reinterpret_cast(isolate)); -} - -// static -IJS_Runtime* IJS_Runtime::Create(CPDFDoc_Environment* pEnv) { - return new CJS_Runtime(pEnv); -} - -// static -CJS_Runtime* CJS_Runtime::FromContext(const IJS_Context* cc) { - const CJS_Context* pContext = static_cast(cc); - return pContext->GetJSRuntime(); -} - -CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp) - : m_pApp(pApp), - m_pDocument(NULL), - m_bBlocking(FALSE), - m_isolate(NULL), - m_isolateManaged(false) { -#ifndef PDF_ENABLE_XFA - IPDF_JSPLATFORM* pPlatform = m_pApp->GetFormFillInfo()->m_pJsPlatform; - if (pPlatform->version <= 2) { - unsigned int embedderDataSlot = 0; - v8::Isolate* pExternalIsolate = nullptr; - if (pPlatform->version == 2) { - pExternalIsolate = reinterpret_cast(pPlatform->m_isolate); - embedderDataSlot = pPlatform->m_v8EmbedderSlot; -#else - if (CPDFXFA_App::GetInstance()->GetJSERuntime()) { - // TODO(tsepez): CPDFXFA_App should also use the embedder provided isolate. - m_isolate = (v8::Isolate*)CPDFXFA_App::GetInstance()->GetJSERuntime(); - } else { - IPDF_JSPLATFORM* pPlatform = m_pApp->GetFormFillInfo()->m_pJsPlatform; - if (pPlatform->version <= 2) { - unsigned int embedderDataSlot = 0; - v8::Isolate* pExternalIsolate = nullptr; - if (pPlatform->version == 2) { - pExternalIsolate = reinterpret_cast(pPlatform->m_isolate); - embedderDataSlot = pPlatform->m_v8EmbedderSlot; - } - FXJS_Initialize(embedderDataSlot, pExternalIsolate); -#endif - } -#ifndef PDF_ENABLE_XFA - FXJS_Initialize(embedderDataSlot, pExternalIsolate); -#else - m_isolateManaged = FXJS_GetIsolate(&m_isolate); - } - - v8::Isolate* isolate = m_isolate; - v8::Isolate::Scope isolate_scope(isolate); - v8::Locker locker(isolate); - v8::HandleScope handle_scope(isolate); - if (CPDFXFA_App::GetInstance()->IsJavaScriptInitialized()) { - CJS_Context* pContext = (CJS_Context*)NewContext(); - FXJS_InitializeRuntime(GetIsolate(), this, &m_context, &m_StaticObjects); - ReleaseContext(pContext); - return; -#endif - } -#ifndef PDF_ENABLE_XFA - m_isolateManaged = FXJS_GetIsolate(&m_isolate); -#else - -#endif - if (m_isolateManaged || FXJS_GlobalIsolateRefCount() == 0) - DefineJSObjects(); - -#ifdef PDF_ENABLE_XFA - CPDFXFA_App::GetInstance()->SetJavaScriptInitialized(TRUE); - -#endif - CJS_Context* pContext = (CJS_Context*)NewContext(); - FXJS_InitializeRuntime(GetIsolate(), this, &m_context, &m_StaticObjects); - ReleaseContext(pContext); -} - -CJS_Runtime::~CJS_Runtime() { - for (auto* obs : m_observers) - obs->OnDestroyed(); - - m_ContextArray.clear(); - m_ConstArrays.clear(); - FXJS_ReleaseRuntime(GetIsolate(), &m_context, &m_StaticObjects); - m_context.Reset(); - if (m_isolateManaged) - m_isolate->Dispose(); -} - -void CJS_Runtime::DefineJSObjects() { - v8::Isolate::Scope isolate_scope(GetIsolate()); -#ifdef PDF_ENABLE_XFA - v8::Locker locker(GetIsolate()); -#endif - v8::HandleScope handle_scope(GetIsolate()); - v8::Local context = v8::Context::New(GetIsolate()); - v8::Context::Scope context_scope(context); - - // The call order determines the "ObjDefID" assigned to each class. - // ObjDefIDs 0 - 2 - CJS_Border::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - CJS_Display::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - CJS_Font::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - - // ObjDefIDs 3 - 5 - CJS_Highlight::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - CJS_Position::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - CJS_ScaleHow::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - - // ObjDefIDs 6 - 8 - CJS_ScaleWhen::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - CJS_Style::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - CJS_Zoomtype::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - - // ObjDefIDs 9 - 11 - CJS_App::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - CJS_Color::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - CJS_Console::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - - // ObjDefIDs 12 - 14 - CJS_Document::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_GLOBAL); - CJS_Event::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - CJS_Field::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_DYNAMIC); - - // ObjDefIDs 15 - 17 - CJS_Global::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - CJS_Icon::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_DYNAMIC); - CJS_Util::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); - - // ObjDefIDs 18 - 20 (these can't fail, return void). - CJS_PublicMethods::DefineJSObjects(GetIsolate()); - CJS_GlobalConsts::DefineJSObjects(this); - CJS_GlobalArrays::DefineJSObjects(this); - - // ObjDefIDs 21 - 22. - CJS_TimerObj::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_DYNAMIC); - CJS_PrintParamsObj::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_DYNAMIC); -} - -IJS_Context* CJS_Runtime::NewContext() { - m_ContextArray.push_back(std::unique_ptr(new CJS_Context(this))); - return m_ContextArray.back().get(); -} - -void CJS_Runtime::ReleaseContext(IJS_Context* pContext) { - for (auto it = m_ContextArray.begin(); it != m_ContextArray.end(); ++it) { - if (it->get() == static_cast(pContext)) { - m_ContextArray.erase(it); - return; - } - } -} - -IJS_Context* CJS_Runtime::GetCurrentContext() { - return m_ContextArray.empty() ? nullptr : m_ContextArray.back().get(); -} - -void CJS_Runtime::SetReaderDocument(CPDFSDK_Document* pReaderDoc) { - if (m_pDocument != pReaderDoc) { - v8::Isolate::Scope isolate_scope(m_isolate); -#ifdef PDF_ENABLE_XFA - v8::Locker locker(m_isolate); -#endif - v8::HandleScope handle_scope(m_isolate); - v8::Local context = - v8::Local::New(m_isolate, m_context); - v8::Context::Scope context_scope(context); - - m_pDocument = pReaderDoc; - if (pReaderDoc) { - v8::Local pThis = FXJS_GetThisObj(GetIsolate()); - if (!pThis.IsEmpty()) { - if (FXJS_GetObjDefnID(pThis) == CJS_Document::g_nObjDefnID) { - if (CJS_Document* pJSDocument = - (CJS_Document*)FXJS_GetPrivate(GetIsolate(), pThis)) { - if (Document* pDocument = (Document*)pJSDocument->GetEmbedObject()) - pDocument->AttachDoc(pReaderDoc); - } - } - } - } - } -} - -int CJS_Runtime::Execute(IJS_Context* cc, - const wchar_t* script, - CFX_WideString* info) { - FXJSErr error = {}; - int nRet = FXJS_Execute(m_isolate, cc, script, &error); - if (nRet < 0) { - info->Format(L"[ Line: %05d { %s } ] : %s", error.linnum - 1, error.srcline, - error.message); - } - return nRet; -} - -bool CJS_Runtime::AddEventToSet(const FieldEvent& event) { - return m_FieldEventSet.insert(event).second; -} - -void CJS_Runtime::RemoveEventFromSet(const FieldEvent& event) { - m_FieldEventSet.erase(event); -} - -v8::Local CJS_Runtime::NewJSContext() { - return v8::Local::New(m_isolate, m_context); -} - -void CJS_Runtime::SetConstArray(const CFX_WideString& name, - v8::Local array) { - m_ConstArrays[name] = v8::Global(m_isolate, array); -} - -v8::Local CJS_Runtime::GetConstArray(const CFX_WideString& name) { - return v8::Local::New(m_isolate, m_ConstArrays[name]); -} - -#ifdef PDF_ENABLE_XFA -CFX_WideString ChangeObjName(const CFX_WideString& str) { - CFX_WideString sRet = str; - sRet.Replace(L"_", L"."); - return sRet; -} -FX_BOOL CJS_Runtime::GetHValueByName(const CFX_ByteStringC& utf8Name, - FXJSE_HVALUE hValue) { -#ifdef PDF_ENABLE_XFA - const FX_CHAR* name = utf8Name.GetCStr(); - - v8::Locker lock(GetIsolate()); - v8::Isolate::Scope isolate_scope(GetIsolate()); - v8::HandleScope handle_scope(GetIsolate()); - v8::Local old_context = GetIsolate()->GetCurrentContext(); - v8::Local context = - v8::Local::New(GetIsolate(), m_context); - v8::Context::Scope context_scope(context); - - // Caution: We're about to hand to XFA an object that in order to invoke - // methods will require that the current v8::Context always has a pointer - // to a CJS_Runtime in its embedder data slot. Unfortunately, XFA creates - // its own v8::Context which has not initialized the embedder data slot. - // Do so now. - // TODO(tsepez): redesign PDF-side objects to not rely on v8::Context's - // embedder data slots, and/or to always use the right context. - FXJS_SetRuntimeForV8Context(old_context, this); - - v8::Local propvalue = - context->Global()->Get(v8::String::NewFromUtf8( - GetIsolate(), name, v8::String::kNormalString, utf8Name.GetLength())); - - if (propvalue.IsEmpty()) { - FXJSE_Value_SetUndefined(hValue); - return FALSE; - } - ((CFXJSE_Value*)hValue)->ForceSetValue(propvalue); -#endif - - return TRUE; -} -FX_BOOL CJS_Runtime::SetHValueByName(const CFX_ByteStringC& utf8Name, - FXJSE_HVALUE hValue) { -#ifdef PDF_ENABLE_XFA - if (utf8Name.IsEmpty() || hValue == NULL) - return FALSE; - const FX_CHAR* name = utf8Name.GetCStr(); - v8::Isolate* pIsolate = GetIsolate(); - v8::Locker lock(pIsolate); - v8::Isolate::Scope isolate_scope(pIsolate); - v8::HandleScope handle_scope(pIsolate); - v8::Local context = - v8::Local::New(pIsolate, m_context); - v8::Context::Scope context_scope(context); - - // v8::Local tmpCotext = - // v8::Local::New(GetIsolate(), m_context); - v8::Local propvalue = v8::Local::New( - GetIsolate(), ((CFXJSE_Value*)hValue)->DirectGetValue()); - context->Global()->Set( - v8::String::NewFromUtf8(pIsolate, name, v8::String::kNormalString, - utf8Name.GetLength()), - propvalue); -#endif - return TRUE; -} - -#endif -void CJS_Runtime::AddObserver(Observer* observer) { - ASSERT(!pdfium::ContainsKey(m_observers, observer)); - m_observers.insert(observer); -} - -void CJS_Runtime::RemoveObserver(Observer* observer) { - ASSERT(pdfium::ContainsKey(m_observers, observer)); - m_observers.erase(observer); -} diff --git a/fpdfsdk/javascript/JS_Runtime.h b/fpdfsdk/javascript/JS_Runtime.h deleted file mode 100644 index 68dfb5b973..0000000000 --- a/fpdfsdk/javascript/JS_Runtime.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef FPDFSDK_JAVASCRIPT_JS_RUNTIME_H_ -#define FPDFSDK_JAVASCRIPT_JS_RUNTIME_H_ - -#include -#include -#include -#include -#include - -#include "core/fxcrt/include/fx_basic.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" -#include "fpdfsdk/include/jsapi/fxjs_v8.h" -#include "fpdfsdk/javascript/JS_EventHandler.h" - -class CJS_Context; - -class CJS_Runtime : public IJS_Runtime { - public: - class Observer { - public: - virtual void OnDestroyed() = 0; - - protected: - virtual ~Observer() {} - }; - - using FieldEvent = std::pair; - - static CJS_Runtime* FromContext(const IJS_Context* cc); - - explicit CJS_Runtime(CPDFDoc_Environment* pApp); - ~CJS_Runtime() override; - - // IJS_Runtime - IJS_Context* NewContext() override; - void ReleaseContext(IJS_Context* pContext) override; - IJS_Context* GetCurrentContext() override; - void SetReaderDocument(CPDFSDK_Document* pReaderDoc) override; - CPDFSDK_Document* GetReaderDocument() override { return m_pDocument; } - int Execute(IJS_Context* cc, - const wchar_t* script, - CFX_WideString* info) override; - - CPDFDoc_Environment* GetReaderApp() const { return m_pApp; } - - // Returns true if the event isn't already found in the set. - bool AddEventToSet(const FieldEvent& event); - void RemoveEventFromSet(const FieldEvent& event); - - void BeginBlock() { m_bBlocking = TRUE; } - void EndBlock() { m_bBlocking = FALSE; } - FX_BOOL IsBlocking() const { return m_bBlocking; } - - v8::Isolate* GetIsolate() const { return m_isolate; } - v8::Local NewJSContext(); - - void SetConstArray(const CFX_WideString& name, v8::Local array); - v8::Local GetConstArray(const CFX_WideString& name); - -#ifdef PDF_ENABLE_XFA - FX_BOOL GetHValueByName(const CFX_ByteStringC& utf8Name, - FXJSE_HVALUE hValue) override; - FX_BOOL SetHValueByName(const CFX_ByteStringC& utf8Name, - FXJSE_HVALUE hValue) override; -#endif // PDF_ENABLE_XFA - - void AddObserver(Observer* observer); - void RemoveObserver(Observer* observer); - - private: - void DefineJSObjects(); - - std::vector> m_ContextArray; - CPDFDoc_Environment* const m_pApp; - CPDFSDK_Document* m_pDocument; - FX_BOOL m_bBlocking; - std::set m_FieldEventSet; - v8::Isolate* m_isolate; - bool m_isolateManaged; - v8::Global m_context; - std::vector*> m_StaticObjects; - std::map> m_ConstArrays; - std::set m_observers; -}; - -#endif // FPDFSDK_JAVASCRIPT_JS_RUNTIME_H_ diff --git a/fpdfsdk/javascript/JS_Runtime_Stub.cpp b/fpdfsdk/javascript/JS_Runtime_Stub.cpp index d7962807c9..7d201d1b56 100644 --- a/fpdfsdk/javascript/JS_Runtime_Stub.cpp +++ b/fpdfsdk/javascript/JS_Runtime_Stub.cpp @@ -6,8 +6,9 @@ #include -#include "fpdfsdk/include/fsdk_mgr.h" // For CPDFDoc_Environment. -#include "fpdfsdk/include/javascript/IJavaScript.h" +#include "fpdfsdk/include/fsdk_mgr.h" +#include "fpdfsdk/javascript/ijs_context.h" +#include "fpdfsdk/javascript/ijs_runtime.h" class CJS_ContextStub final : public IJS_Context { public: diff --git a/fpdfsdk/javascript/JS_Value.cpp b/fpdfsdk/javascript/JS_Value.cpp index 4d2a1d44a8..0b31494b75 100644 --- a/fpdfsdk/javascript/JS_Value.cpp +++ b/fpdfsdk/javascript/JS_Value.cpp @@ -282,8 +282,6 @@ FX_BOOL CJS_Value::ConvertToDate(CJS_Date& date) const { return FALSE; } -/* ---------------------------- CJS_PropValue ---------------------------- */ - CJS_PropValue::CJS_PropValue(const CJS_Value& value) : CJS_Value(value), m_bIsSetting(0) {} diff --git a/fpdfsdk/javascript/PublicMethods.cpp b/fpdfsdk/javascript/PublicMethods.cpp index 62659e4163..b928aab31d 100644 --- a/fpdfsdk/javascript/PublicMethods.cpp +++ b/fpdfsdk/javascript/PublicMethods.cpp @@ -11,15 +11,14 @@ #include #include "core/fxcrt/include/fx_ext.h" -#include "fpdfsdk/include/fsdk_mgr.h" // For CPDFDoc_Environment. -#include "fpdfsdk/include/javascript/IJavaScript.h" +#include "fpdfsdk/include/fsdk_mgr.h" #include "fpdfsdk/javascript/Field.h" -#include "fpdfsdk/javascript/JS_Context.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_EventHandler.h" #include "fpdfsdk/javascript/JS_Object.h" -#include "fpdfsdk/javascript/JS_Runtime.h" #include "fpdfsdk/javascript/JS_Value.h" +#include "fpdfsdk/javascript/cjs_context.h" +#include "fpdfsdk/javascript/cjs_runtime.h" #include "fpdfsdk/javascript/color.h" #include "fpdfsdk/javascript/resource.h" #include "fpdfsdk/javascript/util.h" @@ -739,8 +738,6 @@ CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate, return sRet; } -/* -------------------------------------------------------------------------- */ - // function AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency, // bCurrencyPrepend) FX_BOOL CJS_PublicMethods::AFNumber_Format(IJS_Context* cc, @@ -780,7 +777,6 @@ FX_BOOL CJS_PublicMethods::AFNumber_Format(IJS_Context* cc, if (iNegStyle < 0 || iNegStyle > 3) iNegStyle = 0; - ////////////////////////////////////////////////////// // for processing decimal places strValue.Replace(",", "."); double dValue = atof(strValue); @@ -813,7 +809,7 @@ FX_BOOL CJS_PublicMethods::AFNumber_Format(IJS_Context* cc, } iMax = iDec2 + 1; } - /////////////////////////////////////////////////////// + // for processing seperator style if (iDec2 < iMax) { if (iSepStyle == 0 || iSepStyle == 1) { @@ -840,9 +836,7 @@ FX_BOOL CJS_PublicMethods::AFNumber_Format(IJS_Context* cc, } } - ////////////////////////////////////////////////////////////////////// // for processing currency string - Value = CFX_WideString::FromLocal(strValue); std::wstring strValue2 = Value.c_str(); @@ -851,7 +845,6 @@ FX_BOOL CJS_PublicMethods::AFNumber_Format(IJS_Context* cc, else strValue2 = strValue2 + wstrCurrency; - ///////////////////////////////////////////////////////////////////////// // for processing negative style if (iNegative) { if (iNegStyle == 0) { @@ -1069,7 +1062,6 @@ FX_BOOL CJS_PublicMethods::AFPercent_Format( if (iSepStyle < 0 || iSepStyle > 3) iSepStyle = 0; - ////////////////////////////////////////////////////// // for processing decimal places double dValue = atof(strValue); dValue *= 100; @@ -1097,7 +1089,7 @@ FX_BOOL CJS_PublicMethods::AFPercent_Format( } iMax = iDec2 + 1; } - /////////////////////////////////////////////////////// + // for processing seperator style if (iDec2 < iMax) { if (iSepStyle == 0 || iSepStyle == 1) { @@ -1123,7 +1115,7 @@ FX_BOOL CJS_PublicMethods::AFPercent_Format( iMax++; } } - //////////////////////////////////////////////////////////////////// + // negative mark if (iNegative) strValue = "-" + strValue; diff --git a/fpdfsdk/javascript/app.cpp b/fpdfsdk/javascript/app.cpp index 83836759d7..dd706ebd8c 100644 --- a/fpdfsdk/javascript/app.cpp +++ b/fpdfsdk/javascript/app.cpp @@ -10,14 +10,13 @@ #include #include "fpdfsdk/include/fsdk_mgr.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" #include "fpdfsdk/javascript/Document.h" -#include "fpdfsdk/javascript/JS_Context.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_EventHandler.h" #include "fpdfsdk/javascript/JS_Object.h" -#include "fpdfsdk/javascript/JS_Runtime.h" #include "fpdfsdk/javascript/JS_Value.h" +#include "fpdfsdk/javascript/cjs_context.h" +#include "fpdfsdk/javascript/cjs_runtime.h" #include "fpdfsdk/javascript/resource.h" BEGIN_JS_STATIC_CONST(CJS_TimerObj) diff --git a/fpdfsdk/javascript/cjs_context.cpp b/fpdfsdk/javascript/cjs_context.cpp new file mode 100644 index 0000000000..66a3e0783d --- /dev/null +++ b/fpdfsdk/javascript/cjs_context.cpp @@ -0,0 +1,281 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#include "fpdfsdk/javascript/cjs_context.h" + +#include "fpdfsdk/javascript/JS_EventHandler.h" +#include "fpdfsdk/javascript/cjs_runtime.h" +#include "fpdfsdk/javascript/resource.h" + +CJS_Context::CJS_Context(CJS_Runtime* pRuntime) + : m_pRuntime(pRuntime), m_bBusy(FALSE), m_bMsgBoxEnable(TRUE) { + m_pEventHandler = new CJS_EventHandler(this); +} + +CJS_Context::~CJS_Context() { + delete m_pEventHandler; +} + +CPDFSDK_Document* CJS_Context::GetReaderDocument() { + return m_pRuntime->GetReaderDocument(); +} + +CPDFDoc_Environment* CJS_Context::GetReaderApp() { + return m_pRuntime->GetReaderApp(); +} + +FX_BOOL CJS_Context::RunScript(const CFX_WideString& script, + CFX_WideString* info) { + v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate()); +#ifdef PDF_ENABLE_XFA + v8::Locker locker(m_pRuntime->GetIsolate()); +#endif // PDF_ENABLE_XFA + v8::HandleScope handle_scope(m_pRuntime->GetIsolate()); + v8::Local context = m_pRuntime->NewJSContext(); + v8::Context::Scope context_scope(context); + + if (m_bBusy) { + *info = JSGetStringFromID(this, IDS_STRING_JSBUSY); + return FALSE; + } + m_bBusy = TRUE; + + ASSERT(m_pEventHandler->IsValid()); + CJS_Runtime::FieldEvent event(m_pEventHandler->TargetName(), + m_pEventHandler->EventType()); + if (!m_pRuntime->AddEventToSet(event)) { + *info = JSGetStringFromID(this, IDS_STRING_JSEVENT); + return FALSE; + } + + CFX_WideString sErrorMessage; + int nRet = 0; + if (script.GetLength() > 0) { + nRet = m_pRuntime->Execute(this, script.c_str(), &sErrorMessage); + } + + if (nRet < 0) { + *info += sErrorMessage; + } else { + *info = JSGetStringFromID(this, IDS_STRING_RUN); + } + + m_pRuntime->RemoveEventFromSet(event); + m_pEventHandler->Destroy(); + m_bBusy = FALSE; + + return nRet >= 0; +} + +void CJS_Context::OnApp_Init() { + m_pEventHandler->OnApp_Init(); +} + +void CJS_Context::OnDoc_Open(CPDFSDK_Document* pDoc, + const CFX_WideString& strTargetName) { + m_pEventHandler->OnDoc_Open(pDoc, strTargetName); +} + +void CJS_Context::OnDoc_WillPrint(CPDFSDK_Document* pDoc) { + m_pEventHandler->OnDoc_WillPrint(pDoc); +} + +void CJS_Context::OnDoc_DidPrint(CPDFSDK_Document* pDoc) { + m_pEventHandler->OnDoc_DidPrint(pDoc); +} + +void CJS_Context::OnDoc_WillSave(CPDFSDK_Document* pDoc) { + m_pEventHandler->OnDoc_WillSave(pDoc); +} + +void CJS_Context::OnDoc_DidSave(CPDFSDK_Document* pDoc) { + m_pEventHandler->OnDoc_DidSave(pDoc); +} + +void CJS_Context::OnDoc_WillClose(CPDFSDK_Document* pDoc) { + m_pEventHandler->OnDoc_WillClose(pDoc); +} + +void CJS_Context::OnPage_Open(CPDFSDK_Document* pTarget) { + m_pEventHandler->OnPage_Open(pTarget); +} + +void CJS_Context::OnPage_Close(CPDFSDK_Document* pTarget) { + m_pEventHandler->OnPage_Close(pTarget); +} + +void CJS_Context::OnPage_InView(CPDFSDK_Document* pTarget) { + m_pEventHandler->OnPage_InView(pTarget); +} + +void CJS_Context::OnPage_OutView(CPDFSDK_Document* pTarget) { + m_pEventHandler->OnPage_OutView(pTarget); +} + +void CJS_Context::OnField_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) { + m_pEventHandler->OnField_MouseDown(bModifier, bShift, pTarget); +} + +void CJS_Context::OnField_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) { + m_pEventHandler->OnField_MouseEnter(bModifier, bShift, pTarget); +} + +void CJS_Context::OnField_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) { + m_pEventHandler->OnField_MouseExit(bModifier, bShift, pTarget); +} + +void CJS_Context::OnField_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) { + m_pEventHandler->OnField_MouseUp(bModifier, bShift, pTarget); +} + +void CJS_Context::OnField_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value) { + m_pEventHandler->OnField_Focus(bModifier, bShift, pTarget, Value); +} + +void CJS_Context::OnField_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value) { + m_pEventHandler->OnField_Blur(bModifier, bShift, pTarget, Value); +} + +void CJS_Context::OnField_Calculate(CPDF_FormField* pSource, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc) { + m_pEventHandler->OnField_Calculate(pSource, pTarget, Value, bRc); +} + +void CJS_Context::OnField_Format(CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit) { + m_pEventHandler->OnField_Format(pTarget, Value, bWillCommit); +} + +void CJS_Context::OnField_Keystroke(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + int& nSelEnd, + int& nSelStart, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit, + FX_BOOL bFieldFull, + FX_BOOL& bRc) { + m_pEventHandler->OnField_Keystroke( + strChange, strChangeEx, bKeyDown, bModifier, nSelEnd, nSelStart, bShift, + pTarget, Value, bWillCommit, bFieldFull, bRc); +} + +void CJS_Context::OnField_Validate(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc) { + m_pEventHandler->OnField_Validate(strChange, strChangeEx, bKeyDown, bModifier, + bShift, pTarget, Value, bRc); +} + +void CJS_Context::OnScreen_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + m_pEventHandler->OnScreen_Focus(bModifier, bShift, pScreen); +} + +void CJS_Context::OnScreen_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + m_pEventHandler->OnScreen_Blur(bModifier, bShift, pScreen); +} + +void CJS_Context::OnScreen_Open(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + m_pEventHandler->OnScreen_Open(bModifier, bShift, pScreen); +} + +void CJS_Context::OnScreen_Close(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + m_pEventHandler->OnScreen_Close(bModifier, bShift, pScreen); +} + +void CJS_Context::OnScreen_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + m_pEventHandler->OnScreen_MouseDown(bModifier, bShift, pScreen); +} + +void CJS_Context::OnScreen_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + m_pEventHandler->OnScreen_MouseUp(bModifier, bShift, pScreen); +} + +void CJS_Context::OnScreen_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + m_pEventHandler->OnScreen_MouseEnter(bModifier, bShift, pScreen); +} + +void CJS_Context::OnScreen_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + m_pEventHandler->OnScreen_MouseExit(bModifier, bShift, pScreen); +} + +void CJS_Context::OnScreen_InView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + m_pEventHandler->OnScreen_InView(bModifier, bShift, pScreen); +} + +void CJS_Context::OnScreen_OutView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + m_pEventHandler->OnScreen_OutView(bModifier, bShift, pScreen); +} + +void CJS_Context::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) { + m_pEventHandler->OnBookmark_MouseUp(pBookMark); +} + +void CJS_Context::OnLink_MouseUp(CPDFSDK_Document* pTarget) { + m_pEventHandler->OnLink_MouseUp(pTarget); +} + +void CJS_Context::OnConsole_Exec() { + m_pEventHandler->OnConsole_Exec(); +} + +void CJS_Context::OnExternal_Exec() { + m_pEventHandler->OnExternal_Exec(); +} + +void CJS_Context::OnBatchExec(CPDFSDK_Document* pTarget) { + m_pEventHandler->OnBatchExec(pTarget); +} + +void CJS_Context::OnMenu_Exec(CPDFSDK_Document* pTarget, + const CFX_WideString& strTargetName) { + m_pEventHandler->OnMenu_Exec(pTarget, strTargetName); +} diff --git a/fpdfsdk/javascript/cjs_context.h b/fpdfsdk/javascript/cjs_context.h new file mode 100644 index 0000000000..64b97d616e --- /dev/null +++ b/fpdfsdk/javascript/cjs_context.h @@ -0,0 +1,138 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef FPDFSDK_JAVASCRIPT_CJS_CONTEXT_H_ +#define FPDFSDK_JAVASCRIPT_CJS_CONTEXT_H_ + +#include "core/fxcrt/include/fx_string.h" +#include "core/fxcrt/include/fx_system.h" +#include "fpdfsdk/javascript/ijs_context.h" + +class CJS_EventHandler; +class CJS_Runtime; +class CPDFDoc_Environment; + +class CJS_Context : public IJS_Context { + public: + explicit CJS_Context(CJS_Runtime* pRuntime); + ~CJS_Context() override; + + // IJS_Context + FX_BOOL RunScript(const CFX_WideString& script, + CFX_WideString* info) override; + void OnApp_Init() override; + void OnDoc_Open(CPDFSDK_Document* pDoc, + const CFX_WideString& strTargetName) override; + void OnDoc_WillPrint(CPDFSDK_Document* pDoc) override; + void OnDoc_DidPrint(CPDFSDK_Document* pDoc) override; + void OnDoc_WillSave(CPDFSDK_Document* pDoc) override; + void OnDoc_DidSave(CPDFSDK_Document* pDoc) override; + void OnDoc_WillClose(CPDFSDK_Document* pDoc) override; + void OnPage_Open(CPDFSDK_Document* pTarget) override; + void OnPage_Close(CPDFSDK_Document* pTarget) override; + void OnPage_InView(CPDFSDK_Document* pTarget) override; + void OnPage_OutView(CPDFSDK_Document* pTarget) override; + void OnField_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) override; + void OnField_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) override; + void OnField_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) override; + void OnField_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) override; + void OnField_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value) override; + void OnField_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value) override; + void OnField_Calculate(CPDF_FormField* pSource, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc) override; + void OnField_Format(CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit) override; + void OnField_Keystroke(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + int& nSelEnd, + int& nSelStart, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit, + FX_BOOL bFieldFull, + FX_BOOL& bRc) override; + void OnField_Validate(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc) override; + void OnScreen_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) override; + void OnScreen_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) override; + void OnScreen_Open(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) override; + void OnScreen_Close(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) override; + void OnScreen_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) override; + void OnScreen_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) override; + void OnScreen_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) override; + void OnScreen_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) override; + void OnScreen_InView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) override; + void OnScreen_OutView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) override; + void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) override; + void OnLink_MouseUp(CPDFSDK_Document* pTarget) override; + void OnMenu_Exec(CPDFSDK_Document* pTarget, + const CFX_WideString& strTargetName) override; + void OnBatchExec(CPDFSDK_Document* pTarget) override; + void OnConsole_Exec() override; + void OnExternal_Exec() override; + void EnableMessageBox(FX_BOOL bEnable) override { m_bMsgBoxEnable = bEnable; } + + FX_BOOL IsMsgBoxEnabled() const { return m_bMsgBoxEnable; } + + CPDFDoc_Environment* GetReaderApp(); + CJS_Runtime* GetJSRuntime() const { return m_pRuntime; } + CJS_EventHandler* GetEventHandler() const { return m_pEventHandler; } + CPDFSDK_Document* GetReaderDocument(); + + private: + CJS_Runtime* m_pRuntime; + CJS_EventHandler* m_pEventHandler; + FX_BOOL m_bBusy; + FX_BOOL m_bMsgBoxEnable; +}; + +#endif // FPDFSDK_JAVASCRIPT_CJS_CONTEXT_H_ diff --git a/fpdfsdk/javascript/cjs_runtime.cpp b/fpdfsdk/javascript/cjs_runtime.cpp new file mode 100644 index 0000000000..9c616e6c0e --- /dev/null +++ b/fpdfsdk/javascript/cjs_runtime.cpp @@ -0,0 +1,333 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#include "fpdfsdk/javascript/cjs_runtime.h" + +#include + +#include "fpdfsdk/include/fsdk_mgr.h" +#include "fpdfsdk/javascript/Consts.h" +#include "fpdfsdk/javascript/Document.h" +#include "fpdfsdk/javascript/Field.h" +#include "fpdfsdk/javascript/Icon.h" +#include "fpdfsdk/javascript/cjs_context.h" +#include "fpdfsdk/javascript/JS_Define.h" +#include "fpdfsdk/javascript/JS_EventHandler.h" +#include "fpdfsdk/javascript/JS_GlobalData.h" +#include "fpdfsdk/javascript/JS_Object.h" +#include "fpdfsdk/javascript/JS_Value.h" +#include "fpdfsdk/javascript/PublicMethods.h" +#include "fpdfsdk/javascript/app.h" +#include "fpdfsdk/javascript/color.h" +#include "fpdfsdk/javascript/console.h" +#include "fpdfsdk/javascript/event.h" +#include "fpdfsdk/javascript/global.h" +#include "fpdfsdk/javascript/report.h" +#include "fpdfsdk/javascript/util.h" +#include "third_party/base/stl_util.h" + +#ifdef PDF_ENABLE_XFA +#include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h" +#include "xfa/fxjse/value.h" +#endif // PDF_ENABLE_XFA + +// static +void IJS_Runtime::Initialize(unsigned int slot, void* isolate) { + FXJS_Initialize(slot, reinterpret_cast(isolate)); +} + +// static +IJS_Runtime* IJS_Runtime::Create(CPDFDoc_Environment* pEnv) { + return new CJS_Runtime(pEnv); +} + +// static +CJS_Runtime* CJS_Runtime::FromContext(const IJS_Context* cc) { + const CJS_Context* pContext = static_cast(cc); + return pContext->GetJSRuntime(); +} + +CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp) + : m_pApp(pApp), + m_pDocument(NULL), + m_bBlocking(FALSE), + m_isolate(NULL), + m_isolateManaged(false) { +#ifndef PDF_ENABLE_XFA + IPDF_JSPLATFORM* pPlatform = m_pApp->GetFormFillInfo()->m_pJsPlatform; + if (pPlatform->version <= 2) { + unsigned int embedderDataSlot = 0; + v8::Isolate* pExternalIsolate = nullptr; + if (pPlatform->version == 2) { + pExternalIsolate = reinterpret_cast(pPlatform->m_isolate); + embedderDataSlot = pPlatform->m_v8EmbedderSlot; +#else + if (CPDFXFA_App::GetInstance()->GetJSERuntime()) { + // TODO(tsepez): CPDFXFA_App should also use the embedder provided isolate. + m_isolate = (v8::Isolate*)CPDFXFA_App::GetInstance()->GetJSERuntime(); + } else { + IPDF_JSPLATFORM* pPlatform = m_pApp->GetFormFillInfo()->m_pJsPlatform; + if (pPlatform->version <= 2) { + unsigned int embedderDataSlot = 0; + v8::Isolate* pExternalIsolate = nullptr; + if (pPlatform->version == 2) { + pExternalIsolate = reinterpret_cast(pPlatform->m_isolate); + embedderDataSlot = pPlatform->m_v8EmbedderSlot; + } + FXJS_Initialize(embedderDataSlot, pExternalIsolate); +#endif + } +#ifndef PDF_ENABLE_XFA + FXJS_Initialize(embedderDataSlot, pExternalIsolate); +#else + m_isolateManaged = FXJS_GetIsolate(&m_isolate); + } + + v8::Isolate* isolate = m_isolate; + v8::Isolate::Scope isolate_scope(isolate); + v8::Locker locker(isolate); + v8::HandleScope handle_scope(isolate); + if (CPDFXFA_App::GetInstance()->IsJavaScriptInitialized()) { + CJS_Context* pContext = (CJS_Context*)NewContext(); + FXJS_InitializeRuntime(GetIsolate(), this, &m_context, &m_StaticObjects); + ReleaseContext(pContext); + return; +#endif + } +#ifndef PDF_ENABLE_XFA + m_isolateManaged = FXJS_GetIsolate(&m_isolate); +#else + +#endif + if (m_isolateManaged || FXJS_GlobalIsolateRefCount() == 0) + DefineJSObjects(); + +#ifdef PDF_ENABLE_XFA + CPDFXFA_App::GetInstance()->SetJavaScriptInitialized(TRUE); + +#endif + CJS_Context* pContext = (CJS_Context*)NewContext(); + FXJS_InitializeRuntime(GetIsolate(), this, &m_context, &m_StaticObjects); + ReleaseContext(pContext); +} + +CJS_Runtime::~CJS_Runtime() { + for (auto* obs : m_observers) + obs->OnDestroyed(); + + m_ContextArray.clear(); + m_ConstArrays.clear(); + FXJS_ReleaseRuntime(GetIsolate(), &m_context, &m_StaticObjects); + m_context.Reset(); + if (m_isolateManaged) + m_isolate->Dispose(); +} + +void CJS_Runtime::DefineJSObjects() { + v8::Isolate::Scope isolate_scope(GetIsolate()); +#ifdef PDF_ENABLE_XFA + v8::Locker locker(GetIsolate()); +#endif + v8::HandleScope handle_scope(GetIsolate()); + v8::Local context = v8::Context::New(GetIsolate()); + v8::Context::Scope context_scope(context); + + // The call order determines the "ObjDefID" assigned to each class. + // ObjDefIDs 0 - 2 + CJS_Border::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + CJS_Display::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + CJS_Font::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + + // ObjDefIDs 3 - 5 + CJS_Highlight::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + CJS_Position::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + CJS_ScaleHow::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + + // ObjDefIDs 6 - 8 + CJS_ScaleWhen::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + CJS_Style::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + CJS_Zoomtype::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + + // ObjDefIDs 9 - 11 + CJS_App::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + CJS_Color::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + CJS_Console::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + + // ObjDefIDs 12 - 14 + CJS_Document::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_GLOBAL); + CJS_Event::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + CJS_Field::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_DYNAMIC); + + // ObjDefIDs 15 - 17 + CJS_Global::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + CJS_Icon::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_DYNAMIC); + CJS_Util::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_STATIC); + + // ObjDefIDs 18 - 20 (these can't fail, return void). + CJS_PublicMethods::DefineJSObjects(GetIsolate()); + CJS_GlobalConsts::DefineJSObjects(this); + CJS_GlobalArrays::DefineJSObjects(this); + + // ObjDefIDs 21 - 22. + CJS_TimerObj::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_DYNAMIC); + CJS_PrintParamsObj::DefineJSObjects(GetIsolate(), FXJSOBJTYPE_DYNAMIC); +} + +IJS_Context* CJS_Runtime::NewContext() { + m_ContextArray.push_back(std::unique_ptr(new CJS_Context(this))); + return m_ContextArray.back().get(); +} + +void CJS_Runtime::ReleaseContext(IJS_Context* pContext) { + for (auto it = m_ContextArray.begin(); it != m_ContextArray.end(); ++it) { + if (it->get() == static_cast(pContext)) { + m_ContextArray.erase(it); + return; + } + } +} + +IJS_Context* CJS_Runtime::GetCurrentContext() { + return m_ContextArray.empty() ? nullptr : m_ContextArray.back().get(); +} + +void CJS_Runtime::SetReaderDocument(CPDFSDK_Document* pReaderDoc) { + if (m_pDocument != pReaderDoc) { + v8::Isolate::Scope isolate_scope(m_isolate); +#ifdef PDF_ENABLE_XFA + v8::Locker locker(m_isolate); +#endif + v8::HandleScope handle_scope(m_isolate); + v8::Local context = + v8::Local::New(m_isolate, m_context); + v8::Context::Scope context_scope(context); + + m_pDocument = pReaderDoc; + if (pReaderDoc) { + v8::Local pThis = FXJS_GetThisObj(GetIsolate()); + if (!pThis.IsEmpty()) { + if (FXJS_GetObjDefnID(pThis) == CJS_Document::g_nObjDefnID) { + if (CJS_Document* pJSDocument = + (CJS_Document*)FXJS_GetPrivate(GetIsolate(), pThis)) { + if (Document* pDocument = (Document*)pJSDocument->GetEmbedObject()) + pDocument->AttachDoc(pReaderDoc); + } + } + } + } + } +} + +int CJS_Runtime::Execute(IJS_Context* cc, + const wchar_t* script, + CFX_WideString* info) { + FXJSErr error = {}; + int nRet = FXJS_Execute(m_isolate, cc, script, &error); + if (nRet < 0) { + info->Format(L"[ Line: %05d { %s } ] : %s", error.linnum - 1, error.srcline, + error.message); + } + return nRet; +} + +bool CJS_Runtime::AddEventToSet(const FieldEvent& event) { + return m_FieldEventSet.insert(event).second; +} + +void CJS_Runtime::RemoveEventFromSet(const FieldEvent& event) { + m_FieldEventSet.erase(event); +} + +v8::Local CJS_Runtime::NewJSContext() { + return v8::Local::New(m_isolate, m_context); +} + +void CJS_Runtime::SetConstArray(const CFX_WideString& name, + v8::Local array) { + m_ConstArrays[name] = v8::Global(m_isolate, array); +} + +v8::Local CJS_Runtime::GetConstArray(const CFX_WideString& name) { + return v8::Local::New(m_isolate, m_ConstArrays[name]); +} + +#ifdef PDF_ENABLE_XFA +CFX_WideString ChangeObjName(const CFX_WideString& str) { + CFX_WideString sRet = str; + sRet.Replace(L"_", L"."); + return sRet; +} +FX_BOOL CJS_Runtime::GetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue) { +#ifdef PDF_ENABLE_XFA + const FX_CHAR* name = utf8Name.GetCStr(); + + v8::Locker lock(GetIsolate()); + v8::Isolate::Scope isolate_scope(GetIsolate()); + v8::HandleScope handle_scope(GetIsolate()); + v8::Local old_context = GetIsolate()->GetCurrentContext(); + v8::Local context = + v8::Local::New(GetIsolate(), m_context); + v8::Context::Scope context_scope(context); + + // Caution: We're about to hand to XFA an object that in order to invoke + // methods will require that the current v8::Context always has a pointer + // to a CJS_Runtime in its embedder data slot. Unfortunately, XFA creates + // its own v8::Context which has not initialized the embedder data slot. + // Do so now. + // TODO(tsepez): redesign PDF-side objects to not rely on v8::Context's + // embedder data slots, and/or to always use the right context. + FXJS_SetRuntimeForV8Context(old_context, this); + + v8::Local propvalue = + context->Global()->Get(v8::String::NewFromUtf8( + GetIsolate(), name, v8::String::kNormalString, utf8Name.GetLength())); + + if (propvalue.IsEmpty()) { + FXJSE_Value_SetUndefined(hValue); + return FALSE; + } + ((CFXJSE_Value*)hValue)->ForceSetValue(propvalue); +#endif + + return TRUE; +} +FX_BOOL CJS_Runtime::SetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue) { +#ifdef PDF_ENABLE_XFA + if (utf8Name.IsEmpty() || hValue == NULL) + return FALSE; + const FX_CHAR* name = utf8Name.GetCStr(); + v8::Isolate* pIsolate = GetIsolate(); + v8::Locker lock(pIsolate); + v8::Isolate::Scope isolate_scope(pIsolate); + v8::HandleScope handle_scope(pIsolate); + v8::Local context = + v8::Local::New(pIsolate, m_context); + v8::Context::Scope context_scope(context); + + // v8::Local tmpCotext = + // v8::Local::New(GetIsolate(), m_context); + v8::Local propvalue = v8::Local::New( + GetIsolate(), ((CFXJSE_Value*)hValue)->DirectGetValue()); + context->Global()->Set( + v8::String::NewFromUtf8(pIsolate, name, v8::String::kNormalString, + utf8Name.GetLength()), + propvalue); +#endif + return TRUE; +} + +#endif +void CJS_Runtime::AddObserver(Observer* observer) { + ASSERT(!pdfium::ContainsKey(m_observers, observer)); + m_observers.insert(observer); +} + +void CJS_Runtime::RemoveObserver(Observer* observer) { + ASSERT(pdfium::ContainsKey(m_observers, observer)); + m_observers.erase(observer); +} diff --git a/fpdfsdk/javascript/cjs_runtime.h b/fpdfsdk/javascript/cjs_runtime.h new file mode 100644 index 0000000000..97e30e7eee --- /dev/null +++ b/fpdfsdk/javascript/cjs_runtime.h @@ -0,0 +1,92 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef FPDFSDK_JAVASCRIPT_CJS_RUNTIME_H_ +#define FPDFSDK_JAVASCRIPT_CJS_RUNTIME_H_ + +#include +#include +#include +#include +#include + +#include "core/fxcrt/include/fx_basic.h" +#include "fpdfsdk/include/jsapi/fxjs_v8.h" +#include "fpdfsdk/javascript/JS_EventHandler.h" +#include "fpdfsdk/javascript/ijs_runtime.h" + +class CJS_Context; + +class CJS_Runtime : public IJS_Runtime { + public: + class Observer { + public: + virtual void OnDestroyed() = 0; + + protected: + virtual ~Observer() {} + }; + + using FieldEvent = std::pair; + + static CJS_Runtime* FromContext(const IJS_Context* cc); + + explicit CJS_Runtime(CPDFDoc_Environment* pApp); + ~CJS_Runtime() override; + + // IJS_Runtime + IJS_Context* NewContext() override; + void ReleaseContext(IJS_Context* pContext) override; + IJS_Context* GetCurrentContext() override; + void SetReaderDocument(CPDFSDK_Document* pReaderDoc) override; + CPDFSDK_Document* GetReaderDocument() override { return m_pDocument; } + int Execute(IJS_Context* cc, + const wchar_t* script, + CFX_WideString* info) override; + + CPDFDoc_Environment* GetReaderApp() const { return m_pApp; } + + // Returns true if the event isn't already found in the set. + bool AddEventToSet(const FieldEvent& event); + void RemoveEventFromSet(const FieldEvent& event); + + void BeginBlock() { m_bBlocking = TRUE; } + void EndBlock() { m_bBlocking = FALSE; } + FX_BOOL IsBlocking() const { return m_bBlocking; } + + v8::Isolate* GetIsolate() const { return m_isolate; } + v8::Local NewJSContext(); + + void SetConstArray(const CFX_WideString& name, v8::Local array); + v8::Local GetConstArray(const CFX_WideString& name); + +#ifdef PDF_ENABLE_XFA + FX_BOOL GetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue) override; + FX_BOOL SetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue) override; +#endif // PDF_ENABLE_XFA + + void AddObserver(Observer* observer); + void RemoveObserver(Observer* observer); + + private: + void DefineJSObjects(); + + std::vector> m_ContextArray; + CPDFDoc_Environment* const m_pApp; + CPDFSDK_Document* m_pDocument; + FX_BOOL m_bBlocking; + std::set m_FieldEventSet; + v8::Isolate* m_isolate; + bool m_isolateManaged; + v8::Global m_context; + std::vector*> m_StaticObjects; + std::map> m_ConstArrays; + std::set m_observers; +}; + +#endif // FPDFSDK_JAVASCRIPT_CJS_RUNTIME_H_ diff --git a/fpdfsdk/javascript/color.cpp b/fpdfsdk/javascript/color.cpp index 2681a8693e..74c885b682 100644 --- a/fpdfsdk/javascript/color.cpp +++ b/fpdfsdk/javascript/color.cpp @@ -8,15 +8,12 @@ #include -#include "fpdfsdk/include/javascript/IJavaScript.h" -#include "fpdfsdk/javascript/JS_Context.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_EventHandler.h" #include "fpdfsdk/javascript/JS_Object.h" -#include "fpdfsdk/javascript/JS_Runtime.h" #include "fpdfsdk/javascript/JS_Value.h" - -/* -------------------------- color -------------------------- */ +#include "fpdfsdk/javascript/cjs_context.h" +#include "fpdfsdk/javascript/cjs_runtime.h" BEGIN_JS_STATIC_CONST(CJS_Color) END_JS_STATIC_CONST() diff --git a/fpdfsdk/javascript/console.cpp b/fpdfsdk/javascript/console.cpp index 4cce32d54a..a09fe4db17 100644 --- a/fpdfsdk/javascript/console.cpp +++ b/fpdfsdk/javascript/console.cpp @@ -8,14 +8,11 @@ #include -#include "fpdfsdk/include/javascript/IJavaScript.h" -#include "fpdfsdk/javascript/JS_Context.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_EventHandler.h" #include "fpdfsdk/javascript/JS_Object.h" #include "fpdfsdk/javascript/JS_Value.h" - -/* ------------------------ console ------------------------ */ +#include "fpdfsdk/javascript/cjs_context.h" BEGIN_JS_STATIC_CONST(CJS_Console) END_JS_STATIC_CONST() diff --git a/fpdfsdk/javascript/event.cpp b/fpdfsdk/javascript/event.cpp index 7549451e6c..253a802c8f 100644 --- a/fpdfsdk/javascript/event.cpp +++ b/fpdfsdk/javascript/event.cpp @@ -6,15 +6,12 @@ #include "fpdfsdk/javascript/event.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" #include "fpdfsdk/javascript/Field.h" -#include "fpdfsdk/javascript/JS_Context.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_EventHandler.h" #include "fpdfsdk/javascript/JS_Object.h" #include "fpdfsdk/javascript/JS_Value.h" - -/* -------------------------- event -------------------------- */ +#include "fpdfsdk/javascript/cjs_context.h" BEGIN_JS_STATIC_CONST(CJS_Event) END_JS_STATIC_CONST() diff --git a/fpdfsdk/javascript/global.cpp b/fpdfsdk/javascript/global.cpp index 251e95bd48..fe974c7af2 100644 --- a/fpdfsdk/javascript/global.cpp +++ b/fpdfsdk/javascript/global.cpp @@ -9,17 +9,14 @@ #include #include "core/fxcrt/include/fx_ext.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" -#include "fpdfsdk/javascript/JS_Context.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_EventHandler.h" #include "fpdfsdk/javascript/JS_GlobalData.h" #include "fpdfsdk/javascript/JS_Object.h" #include "fpdfsdk/javascript/JS_Value.h" +#include "fpdfsdk/javascript/cjs_context.h" #include "fpdfsdk/javascript/resource.h" -/* ---------------------------- global ---------------------------- */ - // Helper class for compile-time calculation of hash values in order to // avoid having global object initializers. template diff --git a/fpdfsdk/javascript/ijs_context.h b/fpdfsdk/javascript/ijs_context.h new file mode 100644 index 0000000000..365533c091 --- /dev/null +++ b/fpdfsdk/javascript/ijs_context.h @@ -0,0 +1,134 @@ +// Copyright 2016 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef FPDFSDK_JAVASCRIPT_IJS_CONTEXT_H_ +#define FPDFSDK_JAVASCRIPT_IJS_CONTEXT_H_ + +#include "core/fxcrt/include/fx_string.h" +#include "core/fxcrt/include/fx_system.h" + +class CPDF_Bookmark; +class CPDF_FormField; +class CPDFSDK_Annot; +class CPDFSDK_Document; + +// Records the details of an event and triggers JS execution for it. +class IJS_Context { + public: + virtual FX_BOOL RunScript(const CFX_WideString& script, + CFX_WideString* info) = 0; + + virtual void OnApp_Init() = 0; + + virtual void OnDoc_Open(CPDFSDK_Document* pDoc, + const CFX_WideString& strTargetName) = 0; + virtual void OnDoc_WillPrint(CPDFSDK_Document* pDoc) = 0; + virtual void OnDoc_DidPrint(CPDFSDK_Document* pDoc) = 0; + virtual void OnDoc_WillSave(CPDFSDK_Document* pDoc) = 0; + virtual void OnDoc_DidSave(CPDFSDK_Document* pDoc) = 0; + virtual void OnDoc_WillClose(CPDFSDK_Document* pDoc) = 0; + + virtual void OnPage_Open(CPDFSDK_Document* pTarget) = 0; + virtual void OnPage_Close(CPDFSDK_Document* pTarget) = 0; + virtual void OnPage_InView(CPDFSDK_Document* pTarget) = 0; + virtual void OnPage_OutView(CPDFSDK_Document* pTarget) = 0; + + virtual void OnField_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) = 0; + virtual void OnField_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) = 0; + virtual void OnField_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) = 0; + virtual void OnField_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) = 0; + virtual void OnField_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value) = 0; + virtual void OnField_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value) = 0; + + virtual void OnField_Calculate(CPDF_FormField* pSource, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc) = 0; + virtual void OnField_Format(CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit) = 0; + virtual void OnField_Keystroke(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL KeyDown, + FX_BOOL bModifier, + int& nSelEnd, + int& nSelStart, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit, + FX_BOOL bFieldFull, + FX_BOOL& bRc) = 0; + virtual void OnField_Validate(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc) = 0; + + virtual void OnScreen_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_Open(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_Close(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_InView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_OutView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + + virtual void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) = 0; + virtual void OnLink_MouseUp(CPDFSDK_Document* pTarget) = 0; + + virtual void OnMenu_Exec(CPDFSDK_Document* pTarget, + const CFX_WideString&) = 0; + virtual void OnBatchExec(CPDFSDK_Document* pTarget) = 0; + virtual void OnConsole_Exec() = 0; + virtual void OnExternal_Exec() = 0; + + virtual void EnableMessageBox(FX_BOOL bEnable) = 0; + + protected: + virtual ~IJS_Context() {} +}; + +#endif // FPDFSDK_JAVASCRIPT_IJS_CONTEXT_H_ diff --git a/fpdfsdk/javascript/ijs_runtime.h b/fpdfsdk/javascript/ijs_runtime.h new file mode 100644 index 0000000000..d4e9000cfd --- /dev/null +++ b/fpdfsdk/javascript/ijs_runtime.h @@ -0,0 +1,48 @@ +// Copyright 2016 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef FPDFSDK_JAVASCRIPT_IJS_RUNTIME_H_ +#define FPDFSDK_JAVASCRIPT_IJS_RUNTIME_H_ + +#include "core/fxcrt/include/fx_string.h" +#include "core/fxcrt/include/fx_system.h" + +#ifdef PDF_ENABLE_XFA +#include "xfa/fxjse/include/fxjse.h" +#endif // PDF_ENABLE_XFA + +class CPDFDoc_Environment; +class CPDFSDK_Document; +class IJS_Context; + +// Owns the FJXS objects needed to actually execute JS. +class IJS_Runtime { + public: + static void Initialize(unsigned int slot, void* isolate); + static IJS_Runtime* Create(CPDFDoc_Environment* pEnv); + virtual ~IJS_Runtime() {} + + virtual IJS_Context* NewContext() = 0; + virtual void ReleaseContext(IJS_Context* pContext) = 0; + virtual IJS_Context* GetCurrentContext() = 0; + virtual void SetReaderDocument(CPDFSDK_Document* pReaderDoc) = 0; + virtual CPDFSDK_Document* GetReaderDocument() = 0; + virtual int Execute(IJS_Context* cc, + const wchar_t* script, + CFX_WideString* info) = 0; + +#ifdef PDF_ENABLE_XFA + virtual FX_BOOL GetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue) = 0; + virtual FX_BOOL SetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue) = 0; +#endif // PDF_ENABLE_XFA + + protected: + IJS_Runtime() {} +}; + +#endif // FPDFSDK_JAVASCRIPT_IJS_RUNTIME_H_ diff --git a/fpdfsdk/javascript/report.cpp b/fpdfsdk/javascript/report.cpp index ca7e199b0f..69cc336003 100644 --- a/fpdfsdk/javascript/report.cpp +++ b/fpdfsdk/javascript/report.cpp @@ -8,13 +8,10 @@ #include -#include "fpdfsdk/include/javascript/IJavaScript.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_Object.h" #include "fpdfsdk/javascript/JS_Value.h" -/* ---------------------- report ---------------------- */ - BEGIN_JS_STATIC_CONST(CJS_Report) END_JS_STATIC_CONST() diff --git a/fpdfsdk/javascript/util.cpp b/fpdfsdk/javascript/util.cpp index 0f50daf38c..adaa9c794b 100644 --- a/fpdfsdk/javascript/util.cpp +++ b/fpdfsdk/javascript/util.cpp @@ -13,14 +13,13 @@ #include #include "core/fxcrt/include/fx_ext.h" -#include "fpdfsdk/include/javascript/IJavaScript.h" -#include "fpdfsdk/javascript/JS_Context.h" #include "fpdfsdk/javascript/JS_Define.h" #include "fpdfsdk/javascript/JS_EventHandler.h" #include "fpdfsdk/javascript/JS_Object.h" -#include "fpdfsdk/javascript/JS_Runtime.h" #include "fpdfsdk/javascript/JS_Value.h" #include "fpdfsdk/javascript/PublicMethods.h" +#include "fpdfsdk/javascript/cjs_context.h" +#include "fpdfsdk/javascript/cjs_runtime.h" #include "fpdfsdk/javascript/resource.h" #if _FX_OS_ == _FX_ANDROID_ diff --git a/pdfium.gyp b/pdfium.gyp index 7b53772fd4..c592f0dbfd 100644 --- a/pdfium.gyp +++ b/pdfium.gyp @@ -805,7 +805,8 @@ 'target_name': 'javascript', 'type': 'static_library', 'sources': [ - 'fpdfsdk/include/javascript/IJavaScript.h', + 'fpdfsdk/javascript/ijs_context.h', + 'fpdfsdk/javascript/ijs_runtime.h', 'fpdfsdk/javascript/JS_Runtime_Stub.cpp', ], 'conditions': [ @@ -832,8 +833,6 @@ 'fpdfsdk/javascript/Field.h', 'fpdfsdk/javascript/Icon.cpp', 'fpdfsdk/javascript/Icon.h', - 'fpdfsdk/javascript/JS_Context.cpp', - 'fpdfsdk/javascript/JS_Context.h', 'fpdfsdk/javascript/JS_Define.h', 'fpdfsdk/javascript/JS_EventHandler.cpp', 'fpdfsdk/javascript/JS_EventHandler.h', @@ -841,8 +840,6 @@ 'fpdfsdk/javascript/JS_GlobalData.h', 'fpdfsdk/javascript/JS_Object.cpp', 'fpdfsdk/javascript/JS_Object.h', - 'fpdfsdk/javascript/JS_Runtime.cpp', - 'fpdfsdk/javascript/JS_Runtime.h', 'fpdfsdk/javascript/JS_Value.cpp', 'fpdfsdk/javascript/JS_Value.h', 'fpdfsdk/javascript/PublicMethods.cpp', @@ -856,6 +853,10 @@ 'fpdfsdk/javascript/console.cpp', 'fpdfsdk/javascript/console.cpp', 'fpdfsdk/javascript/console.h', + 'fpdfsdk/javascript/cjs_context.cpp', + 'fpdfsdk/javascript/cjs_context.h', + 'fpdfsdk/javascript/cjs_runtime.cpp', + 'fpdfsdk/javascript/cjs_runtime.h', 'fpdfsdk/javascript/event.cpp', 'fpdfsdk/javascript/event.h', 'fpdfsdk/javascript/global.cpp', diff --git a/samples/image_diff_png.cc b/samples/image_diff_png.cc index 93823aa431..18753e2580 100644 --- a/samples/image_diff_png.cc +++ b/samples/image_diff_png.cc @@ -69,7 +69,7 @@ void ConvertRGBAtoRGB(const unsigned char* rgba, int pixel_width, } // namespace -// Decoder -------------------------------------------------------------------- +// Decoder // // This code is based on WebKit libpng interface (PNGImageDecoder), which is // in turn based on the Mozilla png decoder. @@ -355,7 +355,7 @@ bool Decode(const unsigned char* input, size_t input_size, return true; } -// Encoder -------------------------------------------------------------------- +// Encoder // // This section of the code is based on nsPNGEncoder.cpp in Mozilla // (Copyright 2005 Google Inc.) diff --git a/xfa/fxjse/runtime.cpp b/xfa/fxjse/runtime.cpp index a1472c7d8f..83affe550d 100644 --- a/xfa/fxjse/runtime.cpp +++ b/xfa/fxjse/runtime.cpp @@ -9,7 +9,7 @@ #include "fpdfsdk/include/jsapi/fxjs_v8.h" #include "xfa/fxjse/scope_inline.h" -// Duplicates fpdfsdk's JS_Runtime.h, but keeps XFA from depending on it. +// Duplicates fpdfsdk's cjs_runtime.h, but keeps XFA from depending on it. // TODO(tsepez): make a single version of this. class FXJSE_ArrayBufferAllocator : public v8::ArrayBuffer::Allocator { void* Allocate(size_t length) override { return calloc(1, length); } -- cgit v1.2.3