From 5b3d0208723f21c50b9922bdc500c9d78c359a25 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Tue, 6 Oct 2015 07:50:47 -0700 Subject: Make the vast majority of JS headers private to src/javascript. The fpdfsdk/include/javascript/IJavascript.h is the sole API. This required moving a creaton method to it from JS_Runtime. R=thestig@chromium.org Review URL: https://codereview.chromium.org/1389783002 . --- BUILD.gn | 40 +- fpdfsdk/include/javascript/Consts.h | 116 ----- fpdfsdk/include/javascript/Document.h | 406 ----------------- fpdfsdk/include/javascript/Field.h | 624 -------------------------- fpdfsdk/include/javascript/IJavaScript.h | 4 + fpdfsdk/include/javascript/Icon.h | 39 -- fpdfsdk/include/javascript/JS_Context.h | 137 ------ fpdfsdk/include/javascript/JS_Define.h | 484 --------------------- fpdfsdk/include/javascript/JS_EventHandler.h | 220 ---------- fpdfsdk/include/javascript/JS_GlobalData.h | 107 ----- fpdfsdk/include/javascript/JS_Object.h | 119 ----- fpdfsdk/include/javascript/JS_Runtime.h | 72 --- fpdfsdk/include/javascript/JS_Value.h | 218 ---------- fpdfsdk/include/javascript/PublicMethods.h | 185 -------- fpdfsdk/include/javascript/app.h | 218 ---------- fpdfsdk/include/javascript/color.h | 85 ---- fpdfsdk/include/javascript/console.h | 49 --- fpdfsdk/include/javascript/event.h | 89 ---- fpdfsdk/include/javascript/global.h | 93 ---- fpdfsdk/include/javascript/report.h | 40 -- fpdfsdk/include/javascript/resource.h | 39 -- fpdfsdk/include/javascript/util.h | 68 --- fpdfsdk/src/fsdk_mgr.cpp | 3 +- fpdfsdk/src/javascript/Consts.cpp | 9 +- fpdfsdk/src/javascript/Consts.h | 116 +++++ fpdfsdk/src/javascript/Document.cpp | 25 +- fpdfsdk/src/javascript/Document.h | 406 +++++++++++++++++ fpdfsdk/src/javascript/Field.cpp | 24 +- fpdfsdk/src/javascript/Field.h | 625 +++++++++++++++++++++++++++ fpdfsdk/src/javascript/Icon.cpp | 9 +- fpdfsdk/src/javascript/Icon.h | 39 ++ fpdfsdk/src/javascript/JS_Context.cpp | 9 +- fpdfsdk/src/javascript/JS_Context.h | 137 ++++++ fpdfsdk/src/javascript/JS_Define.h | 485 +++++++++++++++++++++ fpdfsdk/src/javascript/JS_EventHandler.cpp | 17 +- fpdfsdk/src/javascript/JS_EventHandler.h | 220 ++++++++++ fpdfsdk/src/javascript/JS_GlobalData.cpp | 3 +- fpdfsdk/src/javascript/JS_GlobalData.h | 107 +++++ fpdfsdk/src/javascript/JS_Object.cpp | 8 +- fpdfsdk/src/javascript/JS_Object.h | 116 +++++ fpdfsdk/src/javascript/JS_Runtime.cpp | 44 +- fpdfsdk/src/javascript/JS_Runtime.h | 72 +++ fpdfsdk/src/javascript/JS_Value.cpp | 9 +- fpdfsdk/src/javascript/JS_Value.h | 218 ++++++++++ fpdfsdk/src/javascript/PublicMethods.cpp | 25 +- fpdfsdk/src/javascript/PublicMethods.h | 185 ++++++++ fpdfsdk/src/javascript/app.cpp | 20 +- fpdfsdk/src/javascript/app.h | 218 ++++++++++ fpdfsdk/src/javascript/color.cpp | 14 +- fpdfsdk/src/javascript/color.h | 85 ++++ fpdfsdk/src/javascript/console.cpp | 13 +- fpdfsdk/src/javascript/console.h | 49 +++ fpdfsdk/src/javascript/event.cpp | 15 +- fpdfsdk/src/javascript/event.h | 89 ++++ fpdfsdk/src/javascript/global.cpp | 17 +- fpdfsdk/src/javascript/global.h | 93 ++++ fpdfsdk/src/javascript/report.cpp | 9 +- fpdfsdk/src/javascript/report.h | 40 ++ fpdfsdk/src/javascript/resource.cpp | 2 +- fpdfsdk/src/javascript/resource.h | 39 ++ fpdfsdk/src/javascript/util.cpp | 19 +- fpdfsdk/src/javascript/util.h | 68 +++ fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp | 5 +- pdfium.gyp | 47 +- 64 files changed, 3617 insertions(+), 3588 deletions(-) delete mode 100644 fpdfsdk/include/javascript/Consts.h delete mode 100644 fpdfsdk/include/javascript/Document.h delete mode 100644 fpdfsdk/include/javascript/Field.h delete mode 100644 fpdfsdk/include/javascript/Icon.h delete mode 100644 fpdfsdk/include/javascript/JS_Context.h delete mode 100644 fpdfsdk/include/javascript/JS_Define.h delete mode 100644 fpdfsdk/include/javascript/JS_EventHandler.h delete mode 100644 fpdfsdk/include/javascript/JS_GlobalData.h delete mode 100644 fpdfsdk/include/javascript/JS_Object.h delete mode 100644 fpdfsdk/include/javascript/JS_Runtime.h delete mode 100644 fpdfsdk/include/javascript/JS_Value.h delete mode 100644 fpdfsdk/include/javascript/PublicMethods.h delete mode 100644 fpdfsdk/include/javascript/app.h delete mode 100644 fpdfsdk/include/javascript/color.h delete mode 100644 fpdfsdk/include/javascript/console.h delete mode 100644 fpdfsdk/include/javascript/event.h delete mode 100644 fpdfsdk/include/javascript/global.h delete mode 100644 fpdfsdk/include/javascript/report.h delete mode 100644 fpdfsdk/include/javascript/resource.h delete mode 100644 fpdfsdk/include/javascript/util.h create mode 100644 fpdfsdk/src/javascript/Consts.h create mode 100644 fpdfsdk/src/javascript/Document.h create mode 100644 fpdfsdk/src/javascript/Field.h create mode 100644 fpdfsdk/src/javascript/Icon.h create mode 100644 fpdfsdk/src/javascript/JS_Context.h create mode 100644 fpdfsdk/src/javascript/JS_Define.h create mode 100644 fpdfsdk/src/javascript/JS_EventHandler.h create mode 100644 fpdfsdk/src/javascript/JS_GlobalData.h create mode 100644 fpdfsdk/src/javascript/JS_Object.h create mode 100644 fpdfsdk/src/javascript/JS_Runtime.h create mode 100644 fpdfsdk/src/javascript/JS_Value.h create mode 100644 fpdfsdk/src/javascript/PublicMethods.h create mode 100644 fpdfsdk/src/javascript/app.h create mode 100644 fpdfsdk/src/javascript/color.h create mode 100644 fpdfsdk/src/javascript/console.h create mode 100644 fpdfsdk/src/javascript/event.h create mode 100644 fpdfsdk/src/javascript/global.h create mode 100644 fpdfsdk/src/javascript/report.h create mode 100644 fpdfsdk/src/javascript/resource.h create mode 100644 fpdfsdk/src/javascript/util.h diff --git a/BUILD.gn b/BUILD.gn index 84f2fbb19d..8b9ed85a92 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -630,46 +630,46 @@ static_library("pdfwindow") { static_library("javascript") { sources = [ - "fpdfsdk/include/javascript/Consts.h", - "fpdfsdk/include/javascript/Document.h", - "fpdfsdk/include/javascript/Field.h", "fpdfsdk/include/javascript/IJavaScript.h", - "fpdfsdk/include/javascript/Icon.h", - "fpdfsdk/include/javascript/JS_Context.h", - "fpdfsdk/include/javascript/JS_Define.h", - "fpdfsdk/include/javascript/JS_EventHandler.h", - "fpdfsdk/include/javascript/JS_GlobalData.h", - "fpdfsdk/include/javascript/JS_Object.h", - "fpdfsdk/include/javascript/JS_Runtime.h", - "fpdfsdk/include/javascript/JS_Value.h", - "fpdfsdk/include/javascript/PublicMethods.h", - "fpdfsdk/include/javascript/app.h", - "fpdfsdk/include/javascript/color.h", - "fpdfsdk/include/javascript/console.h", - "fpdfsdk/include/javascript/event.h", - "fpdfsdk/include/javascript/global.h", - "fpdfsdk/include/javascript/report.h", - "fpdfsdk/include/javascript/resource.h", - "fpdfsdk/include/javascript/util.h", "fpdfsdk/src/javascript/Consts.cpp", + "fpdfsdk/src/javascript/Consts.h", "fpdfsdk/src/javascript/Document.cpp", + "fpdfsdk/src/javascript/Document.h", "fpdfsdk/src/javascript/Field.cpp", + "fpdfsdk/src/javascript/Field.h", "fpdfsdk/src/javascript/Icon.cpp", + "fpdfsdk/src/javascript/Icon.h", "fpdfsdk/src/javascript/JS_Context.cpp", + "fpdfsdk/src/javascript/JS_Context.h", + "fpdfsdk/src/javascript/JS_Define.h", "fpdfsdk/src/javascript/JS_EventHandler.cpp", + "fpdfsdk/src/javascript/JS_EventHandler.h", "fpdfsdk/src/javascript/JS_GlobalData.cpp", + "fpdfsdk/src/javascript/JS_GlobalData.h", "fpdfsdk/src/javascript/JS_Object.cpp", + "fpdfsdk/src/javascript/JS_Object.h", "fpdfsdk/src/javascript/JS_Runtime.cpp", + "fpdfsdk/src/javascript/JS_Runtime.h", "fpdfsdk/src/javascript/JS_Value.cpp", + "fpdfsdk/src/javascript/JS_Value.h", "fpdfsdk/src/javascript/PublicMethods.cpp", + "fpdfsdk/src/javascript/PublicMethods.h", "fpdfsdk/src/javascript/app.cpp", + "fpdfsdk/src/javascript/app.h", "fpdfsdk/src/javascript/color.cpp", + "fpdfsdk/src/javascript/color.h", "fpdfsdk/src/javascript/console.cpp", + "fpdfsdk/src/javascript/console.h", "fpdfsdk/src/javascript/event.cpp", + "fpdfsdk/src/javascript/event.h", "fpdfsdk/src/javascript/global.cpp", + "fpdfsdk/src/javascript/global.h", "fpdfsdk/src/javascript/report.cpp", + "fpdfsdk/src/javascript/report.h", "fpdfsdk/src/javascript/resource.cpp", + "fpdfsdk/src/javascript/resource.h", "fpdfsdk/src/javascript/util.cpp", + "fpdfsdk/src/javascript/util.h", ] configs -= [ "//build/config/compiler:chromium_code" ] diff --git a/fpdfsdk/include/javascript/Consts.h b/fpdfsdk/include/javascript/Consts.h deleted file mode 100644 index c6abd8549a..0000000000 --- a/fpdfsdk/include/javascript/Consts.h +++ /dev/null @@ -1,116 +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_CONSTS_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_CONSTS_H_ - -#include "JS_Define.h" - -/* ------------------------------ border ------------------------------ */ - -class CJS_Border : public CJS_Object { - public: - explicit CJS_Border(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Border() override {} - - DECLARE_JS_CLASS_CONST(); -}; - -/* ------------------------------ display ------------------------------ */ - -class CJS_Display : public CJS_Object { - public: - explicit CJS_Display(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Display() override {} - - DECLARE_JS_CLASS_CONST(); -}; - -/* ------------------------------ font ------------------------------ */ - -class CJS_Font : public CJS_Object { - public: - explicit CJS_Font(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Font() override {} - - DECLARE_JS_CLASS_CONST(); -}; - -/* ------------------------------ highlight ------------------------------ */ - -class CJS_Highlight : public CJS_Object { - public: - explicit CJS_Highlight(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Highlight() override {} - - DECLARE_JS_CLASS_CONST(); -}; - -/* ------------------------------ position ------------------------------ */ - -class CJS_Position : public CJS_Object { - public: - explicit CJS_Position(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Position() override {} - - DECLARE_JS_CLASS_CONST(); -}; - -/* ------------------------------ scaleHow ------------------------------ */ - -class CJS_ScaleHow : public CJS_Object { - public: - explicit CJS_ScaleHow(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_ScaleHow() override {} - - DECLARE_JS_CLASS_CONST(); -}; - -/* ------------------------------ scaleWhen ------------------------------ */ - -class CJS_ScaleWhen : public CJS_Object { - public: - explicit CJS_ScaleWhen(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_ScaleWhen() override {} - - DECLARE_JS_CLASS_CONST(); -}; - -/* ------------------------------ style ------------------------------ */ - -class CJS_Style : public CJS_Object { - public: - explicit CJS_Style(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Style() override {} - - DECLARE_JS_CLASS_CONST(); -}; - -/* ------------------------------ zoomtype ------------------------------ */ - -class CJS_Zoomtype : public CJS_Object { - public: - explicit CJS_Zoomtype(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Zoomtype() override {} - - DECLARE_JS_CLASS_CONST(); -}; - -/* ------------------------------ CJS_GlobalConsts -------------------------- */ - -class CJS_GlobalConsts : public CJS_Object { - public: - static void DefineJSObjects(v8::Isolate* pIsolate); -}; - -/* ------------------------------ CJS_GlobalArrays -------------------------- */ - -class CJS_GlobalArrays : public CJS_Object { - public: - static void DefineJSObjects(v8::Isolate* pIsolate); -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_CONSTS_H_ diff --git a/fpdfsdk/include/javascript/Document.h b/fpdfsdk/include/javascript/Document.h deleted file mode 100644 index 9340000118..0000000000 --- a/fpdfsdk/include/javascript/Document.h +++ /dev/null @@ -1,406 +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_DOCUMENT_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_DOCUMENT_H_ - -#include "JS_Define.h" - -class PrintParamsObj : public CJS_EmbedObj { - public: - PrintParamsObj(CJS_Object* pJSObject); - ~PrintParamsObj() override {} - - public: - FX_BOOL bUI; - int nStart; - int nEnd; - FX_BOOL bSilent; - FX_BOOL bShrinkToFit; - FX_BOOL bPrintAsImage; - FX_BOOL bReverse; - FX_BOOL bAnnotations; -}; - -class CJS_PrintParamsObj : public CJS_Object { - public: - CJS_PrintParamsObj(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_PrintParamsObj() override {} - - DECLARE_JS_CLASS(CJS_PrintParamsObj); -}; - -class Icon; -class Field; - -struct IconElement { - IconElement() : IconName(L""), NextIcon(NULL), IconStream(NULL) {} - virtual ~IconElement() {} - CFX_WideString IconName; - IconElement* NextIcon; - Icon* IconStream; -}; - -class IconTree { - public: - IconTree() : m_pHead(NULL), m_pEnd(NULL), m_iLength(0) {} - - virtual ~IconTree() {} - - public: - void InsertIconElement(IconElement* pNewIcon); - void DeleteIconTree(); - int GetLength(); - IconElement* operator[](int iIndex); - - private: - IconElement* m_pHead; - IconElement* m_pEnd; - int m_iLength; -}; - -struct CJS_DelayData; -struct CJS_DelayAnnot; -struct CJS_AnnotObj; - -class Document : public CJS_EmbedObj { - public: - Document(CJS_Object* pJSObject); - ~Document() override; - - public: - FX_BOOL ADBE(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL author(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL baseURL(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL bookmarkRoot(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL calculate(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL Collab(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL creationDate(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL creator(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL dirty(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL documentFileName(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL external(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL filesize(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL icons(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL info(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL keywords(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL layout(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL modDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL mouseX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL mouseY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL numFields(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL numPages(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL pageNum(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL pageWindowRect(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL path(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL producer(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL subject(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL title(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL zoom(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL zoomType(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - - FX_BOOL addAnnot(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL addField(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL addLink(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL addIcon(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL calculateNow(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL closeDoc(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL createDataObject(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL deletePages(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL exportAsText(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL exportAsFDF(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL exportAsXFDF(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL extractPages(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getAnnot(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getAnnots(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getAnnot3D(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getAnnots3D(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getField(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getIcon(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getLinks(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getNthFieldName(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getOCGs(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getPageBox(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getPageNthWord(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getPageNthWordQuads(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getPageNumWords(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getPrintParams(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getURL(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL importAnFDF(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL importAnXFDF(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL importTextData(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL insertPages(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL mailForm(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL print(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL removeField(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL replacePages(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL resetForm(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL saveAs(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL submitForm(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL mailDoc(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL removeIcon(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - - public: - void AttachDoc(CPDFSDK_Document* pDoc); - CPDFSDK_Document* GetReaderDoc(); - static FX_BOOL ExtractFileName(CPDFSDK_Document* pDoc, - CFX_ByteString& strFileName); - static FX_BOOL ExtractFolderName(CPDFSDK_Document* pDoc, - CFX_ByteString& strFolderName); - void AddDelayData(CJS_DelayData* pData); - void DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex); - void AddDelayAnnotData(CJS_AnnotObj* pData); - void DoAnnotDelay(); - void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; } - CJS_Document* GetCJSDoc() const; - - private: - CFX_WideString ReversalStr(CFX_WideString cbFrom); - CFX_WideString CutString(CFX_WideString cbFrom); - bool IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect); - int CountWords(CPDF_TextObject* pTextObj); - CFX_WideString GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex); - - v8::Isolate* m_isolate; - IconTree* m_pIconTree; - CPDFSDK_Document* m_pDocument; - CFX_WideString m_cwBaseURL; - bool m_bDelay; - CFX_ArrayTemplate m_DelayData; - CFX_ArrayTemplate m_DelayAnnotData; -}; - -class CJS_Document : public CJS_Object { - public: - explicit CJS_Document(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Document() override {} - - // CJS_Object - FX_BOOL InitInstance(IFXJS_Context* cc) override; - - DECLARE_JS_CLASS(CJS_Document); - - JS_STATIC_PROP(ADBE, Document); - JS_STATIC_PROP(author, Document); - JS_STATIC_PROP(baseURL, Document); - JS_STATIC_PROP(bookmarkRoot, Document); - JS_STATIC_PROP(calculate, Document); - JS_STATIC_PROP(Collab, Document); - JS_STATIC_PROP(creationDate, Document); - JS_STATIC_PROP(creator, Document); - JS_STATIC_PROP(delay, Document); - JS_STATIC_PROP(dirty, Document); - JS_STATIC_PROP(documentFileName, Document); - JS_STATIC_PROP(external, Document); - JS_STATIC_PROP(filesize, Document); - JS_STATIC_PROP(icons, Document); - JS_STATIC_PROP(info, Document); - JS_STATIC_PROP(keywords, Document); - JS_STATIC_PROP(layout, Document); - JS_STATIC_PROP(media, Document); - JS_STATIC_PROP(modDate, Document); - JS_STATIC_PROP(mouseX, Document); - JS_STATIC_PROP(mouseY, Document); - JS_STATIC_PROP(numFields, Document); - JS_STATIC_PROP(numPages, Document); - JS_STATIC_PROP(pageNum, Document); - JS_STATIC_PROP(pageWindowRect, Document); - JS_STATIC_PROP(path, Document); - JS_STATIC_PROP(producer, Document); - JS_STATIC_PROP(subject, Document); - JS_STATIC_PROP(title, Document); - JS_STATIC_PROP(zoom, Document); - JS_STATIC_PROP(zoomType, Document); - - JS_STATIC_METHOD(addAnnot, Document); - JS_STATIC_METHOD(addField, Document); - JS_STATIC_METHOD(addLink, Document); - JS_STATIC_METHOD(addIcon, Document); - JS_STATIC_METHOD(calculateNow, Document); - JS_STATIC_METHOD(closeDoc, Document); - JS_STATIC_METHOD(createDataObject, Document); - JS_STATIC_METHOD(deletePages, Document); - JS_STATIC_METHOD(exportAsText, Document); - JS_STATIC_METHOD(exportAsFDF, Document); - JS_STATIC_METHOD(exportAsXFDF, Document); - JS_STATIC_METHOD(extractPages, Document); - JS_STATIC_METHOD(getAnnot, Document); - JS_STATIC_METHOD(getAnnots, Document); - JS_STATIC_METHOD(getAnnot3D, Document); - JS_STATIC_METHOD(getAnnots3D, Document); - JS_STATIC_METHOD(getField, Document); - JS_STATIC_METHOD(getIcon, Document); - JS_STATIC_METHOD(getLinks, Document); - JS_STATIC_METHOD(getNthFieldName, Document); - JS_STATIC_METHOD(getOCGs, Document); - JS_STATIC_METHOD(getPageBox, Document); - JS_STATIC_METHOD(getPageNthWord, Document); - JS_STATIC_METHOD(getPageNthWordQuads, Document); - JS_STATIC_METHOD(getPageNumWords, Document); - JS_STATIC_METHOD(getPrintParams, Document); - JS_STATIC_METHOD(getURL, Document); - JS_STATIC_METHOD(importAnFDF, Document); - JS_STATIC_METHOD(importAnXFDF, Document); - JS_STATIC_METHOD(importTextData, Document); - JS_STATIC_METHOD(insertPages, Document); - JS_STATIC_METHOD(mailForm, Document); - JS_STATIC_METHOD(print, Document); - JS_STATIC_METHOD(removeField, Document); - JS_STATIC_METHOD(replacePages, Document); - JS_STATIC_METHOD(removeIcon, Document); - JS_STATIC_METHOD(resetForm, Document); - JS_STATIC_METHOD(saveAs, Document); - JS_STATIC_METHOD(submitForm, Document); - JS_STATIC_METHOD(mailDoc, Document); -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_DOCUMENT_H_ diff --git a/fpdfsdk/include/javascript/Field.h b/fpdfsdk/include/javascript/Field.h deleted file mode 100644 index 851bc4fc16..0000000000 --- a/fpdfsdk/include/javascript/Field.h +++ /dev/null @@ -1,624 +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_FIELD_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_FIELD_H_ - -#include // For std::wstring. - -#include "../pdfwindow/PWL_Wnd.h" // For CPWL_Color. -#include "JS_Define.h" - -class Document; - -enum FIELD_PROP { - FP_ALIGNMENT, - FP_BORDERSTYLE, - FP_BUTTONALIGNX, - FP_BUTTONALIGNY, - FP_BUTTONFITBOUNDS, - FP_BUTTONPOSITION, - FP_BUTTONSCALEHOW, - FP_BUTTONSCALEWHEN, - FP_CALCORDERINDEX, - FP_CHARLIMIT, - FP_COMB, - FP_COMMITONSELCHANGE, - FP_CURRENTVALUEINDICES, - FP_DEFAULTVALUE, - FP_DONOTSCROLL, - FP_DISPLAY, - FP_FILLCOLOR, - FP_HIDDEN, - FP_HIGHLIGHT, - FP_LINEWIDTH, - FP_MULTILINE, - FP_MULTIPLESELECTION, - FP_PASSWORD, - FP_RECT, - FP_RICHTEXT, - FP_RICHVALUE, - FP_ROTATION, - FP_STROKECOLOR, - FP_STYLE, - FP_TEXTCOLOR, - FP_TEXTFONT, - FP_TEXTSIZE, - FP_USERNAME, - FP_VALUE -}; - -class CJS_WideStringArray { - public: - CJS_WideStringArray() {} - virtual ~CJS_WideStringArray() { - for (int i = 0, sz = m_Data.GetSize(); i < sz; i++) - delete m_Data.GetAt(i); - m_Data.RemoveAll(); - } - - void Add(const CFX_WideString& string) { - m_Data.Add(new CFX_WideString(string)); - } - - int GetSize() const { return m_Data.GetSize(); } - - CFX_WideString GetAt(int i) const { return *m_Data.GetAt(i); } - - private: - CFX_ArrayTemplate m_Data; -}; - -struct CJS_DelayData { - CFX_WideString sFieldName; - int nControlIndex; - enum FIELD_PROP eProp; - int32_t num; - bool b; - CFX_ByteString string; - CFX_WideString widestring; - CPDF_Rect rect; - CPWL_Color color; - CFX_DWordArray wordarray; - CJS_WideStringArray widestringarray; -}; - -class Field : public CJS_EmbedObj { - public: - Field(CJS_Object* pJSObject); - ~Field() override; - - FX_BOOL alignment(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL borderStyle(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL buttonAlignX(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL buttonAlignY(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL buttonFitBounds(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL buttonPosition(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL buttonScaleHow(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL buttonScaleWhen(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL calcOrderIndex(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL charLimit(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL comb(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL commitOnSelChange(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL currentValueIndices(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL defaultStyle(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL defaultValue(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL doNotScroll(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL doNotSpellCheck(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL display(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL doc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL editable(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL exportValues(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL fileSelect(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL fillColor(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL hidden(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL highlight(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL lineWidth(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL multiline(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL multipleSelection(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL numItems(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL page(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL password(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL print(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL radiosInUnison(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL readonly(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL rect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL required(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL richText(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL richValue(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL rotation(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL strokeColor(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL style(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL submitName(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL textColor(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL textFont(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL textSize(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL userName(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL valueAsString(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - - FX_BOOL browseForFileToSubmit(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL buttonGetCaption(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL buttonGetIcon(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL buttonImportIcon(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL buttonSetCaption(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL buttonSetIcon(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL checkThisBox(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL clearItems(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL defaultIsChecked(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL deleteItemAt(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getArray(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getItemAt(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL getLock(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL insertItemAt(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL isBoxChecked(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL isDefaultChecked(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL setAction(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL setFocus(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL setItems(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL setLock(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL signatureGetModifications(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL signatureGetSeedValue(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL signatureInfo(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL signatureSetSeedValue(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL signatureSign(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL signatureValidate(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - - public: - static void SetAlignment(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CFX_ByteString& string); - static void SetBorderStyle(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CFX_ByteString& string); - static void SetButtonAlignX(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - int number); - static void SetButtonAlignY(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - int number); - static void SetButtonFitBounds(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - bool b); - static void SetButtonPosition(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - int number); - static void SetButtonScaleHow(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - int number); - static void SetButtonScaleWhen(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - int number); - static void SetCalcOrderIndex(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - int number); - static void SetCharLimit(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - int number); - static void SetComb(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - bool b); - static void SetCommitOnSelChange(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - bool b); - static void SetCurrentValueIndices(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CFX_DWordArray& array); - static void SetDefaultStyle(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex); - static void SetDefaultValue(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CFX_WideString& string); - static void SetDoNotScroll(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - bool b); - static void SetDisplay(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - int number); - static void SetFillColor(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CPWL_Color& color); - static void SetHidden(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - bool b); - static void SetHighlight(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CFX_ByteString& string); - static void SetLineWidth(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - int number); - static void SetMultiline(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - bool b); - static void SetMultipleSelection(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - bool b); - static void SetPassword(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - bool b); - static void SetRect(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CPDF_Rect& rect); - static void SetRichText(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - bool b); - static void SetRichValue(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex); - static void SetRotation(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - int number); - static void SetStrokeColor(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CPWL_Color& color); - static void SetStyle(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CFX_ByteString& string); - static void SetTextColor(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CPWL_Color& color); - static void SetTextFont(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CFX_ByteString& string); - static void SetTextSize(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - int number); - static void SetUserName(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CFX_WideString& string); - static void SetValue(CPDFSDK_Document* pDocument, - const CFX_WideString& swFieldName, - int nControlIndex, - const CJS_WideStringArray& strArray); - - public: - static void AddField(CPDFSDK_Document* pDocument, - int nPageIndex, - int nFieldType, - const CFX_WideString& sName, - const CPDF_Rect& rcCoords); - - public: - static void UpdateFormField(CPDFSDK_Document* pDocument, - CPDF_FormField* pFormField, - FX_BOOL bChangeMark, - FX_BOOL bResetAP, - FX_BOOL bRefresh); - static void UpdateFormControl(CPDFSDK_Document* pDocument, - CPDF_FormControl* pFormControl, - FX_BOOL bChangeMark, - FX_BOOL bResetAP, - FX_BOOL bRefresh); - - static CPDFSDK_Widget* GetWidget(CPDFSDK_Document* pDocument, - CPDF_FormControl* pFormControl); - static void GetFormFields(CPDFSDK_Document* pDocument, - const CFX_WideString& csFieldName, - CFX_PtrArray& FieldsArray); - - static void DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData); - - public: - FX_BOOL AttachField(Document* pDocument, const CFX_WideString& csFieldName); - void SetDelay(FX_BOOL bDelay); - void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; } - - protected: - void ParseFieldName(const std::wstring& strFieldNameParsed, - std::wstring& strFieldName, - int& iControlNo); - void GetFormFields(const CFX_WideString& csFieldName, - CFX_PtrArray& FieldsArray); - CPDF_FormControl* GetSmartFieldControl(CPDF_FormField* pFormField); - FX_BOOL ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel); - - void AddDelay_Int(enum FIELD_PROP prop, int32_t n); - void AddDelay_Bool(enum FIELD_PROP prop, bool b); - void AddDelay_String(enum FIELD_PROP prop, const CFX_ByteString& string); - void AddDelay_WideString(enum FIELD_PROP prop, const CFX_WideString& string); - void AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect); - void AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color); - void AddDelay_WordArray(enum FIELD_PROP prop, const CFX_DWordArray& array); - void AddDelay_WideStringArray(enum FIELD_PROP prop, - const CJS_WideStringArray& array); - - void DoDelay(); - - public: - Document* m_pJSDoc; - CPDFSDK_Document* m_pDocument; - CFX_WideString m_FieldName; - int m_nFormControlIndex; - FX_BOOL m_bCanSet; - - FX_BOOL m_bDelay; - v8::Isolate* m_isolate; -}; - -class CJS_Field : public CJS_Object { - public: - CJS_Field(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Field(void) override {} - - FX_BOOL InitInstance(IFXJS_Context* cc) override; - - DECLARE_JS_CLASS(CJS_Field); - - JS_STATIC_PROP(alignment, Field); - JS_STATIC_PROP(borderStyle, Field); - JS_STATIC_PROP(buttonAlignX, Field); - JS_STATIC_PROP(buttonAlignY, Field); - JS_STATIC_PROP(buttonFitBounds, Field); - JS_STATIC_PROP(buttonPosition, Field); - JS_STATIC_PROP(buttonScaleHow, Field); - JS_STATIC_PROP(buttonScaleWhen, Field); - JS_STATIC_PROP(calcOrderIndex, Field); - JS_STATIC_PROP(charLimit, Field); - JS_STATIC_PROP(comb, Field); - JS_STATIC_PROP(commitOnSelChange, Field); - JS_STATIC_PROP(currentValueIndices, Field); - JS_STATIC_PROP(defaultStyle, Field); - JS_STATIC_PROP(defaultValue, Field); - JS_STATIC_PROP(doNotScroll, Field); - JS_STATIC_PROP(doNotSpellCheck, Field); - JS_STATIC_PROP(delay, Field); - JS_STATIC_PROP(display, Field); - JS_STATIC_PROP(doc, Field); - JS_STATIC_PROP(editable, Field); - JS_STATIC_PROP(exportValues, Field); - JS_STATIC_PROP(fileSelect, Field); - JS_STATIC_PROP(fillColor, Field); - JS_STATIC_PROP(hidden, Field); - JS_STATIC_PROP(highlight, Field); - JS_STATIC_PROP(lineWidth, Field); - JS_STATIC_PROP(multiline, Field); - JS_STATIC_PROP(multipleSelection, Field); - JS_STATIC_PROP(name, Field); - JS_STATIC_PROP(numItems, Field); - JS_STATIC_PROP(page, Field); - JS_STATIC_PROP(password, Field); - JS_STATIC_PROP(print, Field); - JS_STATIC_PROP(radiosInUnison, Field); - JS_STATIC_PROP(readonly, Field); - JS_STATIC_PROP(rect, Field); - JS_STATIC_PROP(required, Field); - JS_STATIC_PROP(richText, Field); - JS_STATIC_PROP(richValue, Field); - JS_STATIC_PROP(rotation, Field); - JS_STATIC_PROP(strokeColor, Field); - JS_STATIC_PROP(style, Field); - JS_STATIC_PROP(submitName, Field); - JS_STATIC_PROP(textColor, Field); - JS_STATIC_PROP(textFont, Field); - JS_STATIC_PROP(textSize, Field); - JS_STATIC_PROP(type, Field); - JS_STATIC_PROP(userName, Field); - JS_STATIC_PROP(value, Field); - JS_STATIC_PROP(valueAsString, Field); - JS_STATIC_PROP(source, Field); - - JS_STATIC_METHOD(browseForFileToSubmit, Field); - JS_STATIC_METHOD(buttonGetCaption, Field); - JS_STATIC_METHOD(buttonGetIcon, Field); - JS_STATIC_METHOD(buttonImportIcon, Field); - JS_STATIC_METHOD(buttonSetCaption, Field); - JS_STATIC_METHOD(buttonSetIcon, Field); - JS_STATIC_METHOD(checkThisBox, Field); - JS_STATIC_METHOD(clearItems, Field); - JS_STATIC_METHOD(defaultIsChecked, Field); - JS_STATIC_METHOD(deleteItemAt, Field); - JS_STATIC_METHOD(getArray, Field); - JS_STATIC_METHOD(getItemAt, Field); - JS_STATIC_METHOD(getLock, Field); - JS_STATIC_METHOD(insertItemAt, Field); - JS_STATIC_METHOD(isBoxChecked, Field); - JS_STATIC_METHOD(isDefaultChecked, Field); - JS_STATIC_METHOD(setAction, Field); - JS_STATIC_METHOD(setFocus, Field); - JS_STATIC_METHOD(setItems, Field); - JS_STATIC_METHOD(setLock, Field); - JS_STATIC_METHOD(signatureGetModifications, Field); - JS_STATIC_METHOD(signatureGetSeedValue, Field); - JS_STATIC_METHOD(signatureInfo, Field); - JS_STATIC_METHOD(signatureSetSeedValue, Field); - JS_STATIC_METHOD(signatureSign, Field); - JS_STATIC_METHOD(signatureValidate, Field); -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_FIELD_H_ diff --git a/fpdfsdk/include/javascript/IJavaScript.h b/fpdfsdk/include/javascript/IJavaScript.h index 3791b886c4..4aeb76065b 100644 --- a/fpdfsdk/include/javascript/IJavaScript.h +++ b/fpdfsdk/include/javascript/IJavaScript.h @@ -133,6 +133,7 @@ class IFXJS_Context { class IFXJS_Runtime { public: + static IFXJS_Runtime* Create(CPDFDoc_Environment* pEnv); virtual ~IFXJS_Runtime() {} virtual IFXJS_Context* NewContext() = 0; @@ -140,6 +141,9 @@ class IFXJS_Runtime { virtual IFXJS_Context* GetCurrentContext() = 0; virtual void SetReaderDocument(CPDFSDK_Document* pReaderDoc) = 0; virtual CPDFSDK_Document* GetReaderDocument() = 0; + + protected: + IFXJS_Runtime() {} }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_IJAVASCRIPT_H_ diff --git a/fpdfsdk/include/javascript/Icon.h b/fpdfsdk/include/javascript/Icon.h deleted file mode 100644 index 9b6d21b985..0000000000 --- a/fpdfsdk/include/javascript/Icon.h +++ /dev/null @@ -1,39 +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_ICON_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_ICON_H_ - -#include "JS_Define.h" - -class Icon : public CJS_EmbedObj { - public: - Icon(CJS_Object* pJSObject); - ~Icon() override; - - FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - void SetStream(CPDF_Stream* pIconStream); - CPDF_Stream* GetStream(); - void SetIconName(CFX_WideString name); - CFX_WideString GetIconName(); - - private: - CPDF_Stream* m_pIconStream; - CFX_WideString m_swIconName; -}; - -class CJS_Icon : public CJS_Object { - public: - CJS_Icon(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Icon() override {} - - public: - DECLARE_JS_CLASS(CJS_Icon); - - JS_STATIC_PROP(name, Icon); -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_ICON_H_ diff --git a/fpdfsdk/include/javascript/JS_Context.h b/fpdfsdk/include/javascript/JS_Context.h deleted file mode 100644 index d5b1064cfc..0000000000 --- a/fpdfsdk/include/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_INCLUDE_JAVASCRIPT_JS_CONTEXT_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_JS_CONTEXT_H_ - -#include "../../../core/include/fxcrt/fx_system.h" -#include "../../../core/include/fxcrt/fx_string.h" -#include "IJavaScript.h" - -class CJS_EventHandler; -class CJS_Runtime; - -class CJS_Context : public IFXJS_Context { - public: - explicit CJS_Context(CJS_Runtime* pRuntime); - ~CJS_Context() override; - - // IFXJS_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_INCLUDE_JAVASCRIPT_JS_CONTEXT_H_ diff --git a/fpdfsdk/include/javascript/JS_Define.h b/fpdfsdk/include/javascript/JS_Define.h deleted file mode 100644 index 0f93b0b38e..0000000000 --- a/fpdfsdk/include/javascript/JS_Define.h +++ /dev/null @@ -1,484 +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_JS_DEFINE_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_ - -#include "../jsapi/fxjs_v8.h" -#include "resource.h" -#include "JS_Object.h" -#include "JS_Value.h" - -struct JSConstSpec { - const wchar_t* pName; - double number; - const wchar_t* string; - uint8_t t; // 0:double 1:str -}; - -struct JSPropertySpec { - const wchar_t* pName; - v8::AccessorGetterCallback pPropGet; - v8::AccessorSetterCallback pPropPut; -}; - -struct JSMethodSpec { - const wchar_t* pName; - v8::FunctionCallback pMethodCall; -}; - -/* ====================================== PUBLIC DEFINE SPEC - * ============================================== */ -#define JS_WIDESTRING(widestring) L## #widestring - -#define BEGIN_JS_STATIC_CONST(js_class_name) \ - JSConstSpec js_class_name::JS_Class_Consts[] = { -#define JS_STATIC_CONST_ENTRY_NUMBER(const_name, pValue) \ - { const_name, pValue, L"", 0 } \ - , -#define JS_STATIC_CONST_ENTRY_STRING(const_name, pValue) \ - { const_name, 0, pValue, 1 } \ - , -#define END_JS_STATIC_CONST() \ - { 0, 0, 0, 0 } \ - } \ - ; - -#define BEGIN_JS_STATIC_PROP(js_class_name) \ - JSPropertySpec js_class_name::JS_Class_Properties[] = { -#define JS_STATIC_PROP_ENTRY(prop_name) \ - { \ - JS_WIDESTRING(prop_name), get_##prop_name##_static, set_##prop_name##_static \ - } \ - , -#define END_JS_STATIC_PROP() \ - { 0, 0, 0 } \ - } \ - ; - -#define BEGIN_JS_STATIC_METHOD(js_class_name) \ - JSMethodSpec js_class_name::JS_Class_Methods[] = { -#define JS_STATIC_METHOD_ENTRY(method_name) \ - { JS_WIDESTRING(method_name), method_name##_static } \ - , -#define END_JS_STATIC_METHOD() \ - { 0, 0 } \ - } \ - ; - -/* ======================================== PROP CALLBACK - * ============================================ */ - -template -void JSPropGetter(const char* prop_name_string, - const char* class_name_string, - v8::Local property, - const v8::PropertyCallbackInfo& info) { - v8::Isolate* isolate = info.GetIsolate(); - IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); - if (!pRuntime) - return; - IFXJS_Context* pContext = pRuntime->GetCurrentContext(); - CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder()); - C* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); - CFX_WideString sError; - CJS_PropValue value(isolate); - value.StartGetting(); - if (!(pObj->*M)(pContext, value, sError)) { - FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, - sError)); - return; - } - info.GetReturnValue().Set((v8::Local)value); -} - -template -void JSPropSetter(const char* prop_name_string, - const char* class_name_string, - v8::Local property, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - v8::Isolate* isolate = info.GetIsolate(); - IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); - if (!pRuntime) - return; - IFXJS_Context* pContext = pRuntime->GetCurrentContext(); - CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder()); - C* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); - CFX_WideString sError; - CJS_PropValue propValue(CJS_Value(isolate, value, CJS_Value::VT_unknown)); - propValue.StartSetting(); - if (!(pObj->*M)(pContext, propValue, sError)) { - FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, - sError)); - } -} - -#define JS_STATIC_PROP(prop_name, class_name) \ - static void get_##prop_name##_static( \ - v8::Local property, \ - const v8::PropertyCallbackInfo& info) { \ - JSPropGetter(#prop_name, #class_name, \ - property, info); \ - } \ - static void set_##prop_name##_static( \ - v8::Local property, v8::Local value, \ - const v8::PropertyCallbackInfo& info) { \ - JSPropSetter(#prop_name, #class_name, \ - property, value, info); \ - } - -/* ========================================= METHOD CALLBACK - * =========================================== */ - -template -void JSMethod(const char* method_name_string, - const char* class_name_string, - const v8::FunctionCallbackInfo& info) { - v8::Isolate* isolate = info.GetIsolate(); - IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); - if (!pRuntime) - return; - IFXJS_Context* cc = pRuntime->GetCurrentContext(); - CJS_Parameters parameters; - for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { - parameters.push_back(CJS_Value(isolate, info[i], CJS_Value::VT_unknown)); - } - CJS_Value valueRes(isolate); - CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder()); - C* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); - CFX_WideString sError; - if (!(pObj->*M)(cc, parameters, valueRes, sError)) { - FXJS_Error(isolate, JSFormatErrorString(class_name_string, - method_name_string, sError)); - return; - } - info.GetReturnValue().Set(valueRes.ToV8Value()); -} - -#define JS_STATIC_METHOD(method_name, class_name) \ - static void method_name##_static( \ - const v8::FunctionCallbackInfo& info) { \ - JSMethod(#method_name, #class_name, \ - info); \ - } - -#define JS_SPECIAL_STATIC_METHOD(method_name, class_alternate, class_name) \ - static void method_name##_static( \ - const v8::FunctionCallbackInfo& info) { \ - JSMethod( \ - #method_name, #class_name, info); \ - } - -/* ===================================== JS CLASS - * =============================================== */ - -#define DECLARE_JS_CLASS(js_class_name) \ - static void JSConstructor(IFXJS_Context* cc, v8::Local obj, \ - v8::Local global); \ - static void JSDestructor(v8::Local obj); \ - static void DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType); \ - static JSConstSpec JS_Class_Consts[]; \ - static JSPropertySpec JS_Class_Properties[]; \ - static JSMethodSpec JS_Class_Methods[]; \ - static const wchar_t* m_pClassName - -#define IMPLEMENT_JS_CLASS_RICH(js_class_name, class_alternate, class_name) \ - const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ - void js_class_name::JSConstructor(IFXJS_Context* cc, \ - v8::Local obj, \ - v8::Local global) { \ - CJS_Object* pObj = new js_class_name(obj); \ - pObj->SetEmbedObject(new class_alternate(pObj)); \ - FXJS_SetPrivate(NULL, obj, (void*)pObj); \ - pObj->InitInstance(cc); \ - } \ - \ - void js_class_name::JSDestructor(v8::Local obj) { \ - js_class_name* pObj = (js_class_name*)FXJS_GetPrivate(NULL, obj); \ - pObj->ExitInstance(); \ - delete pObj; \ - } \ - \ - void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ - FXJSOBJTYPE eObjType) { \ - int nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::m_pClassName, \ - eObjType, JSConstructor, JSDestructor); \ - for (int i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) { \ - FXJS_DefineObjProperty( \ - pIsolate, nObjDefnID, JS_Class_Properties[i].pName, \ - JS_Class_Properties[i].pPropGet, JS_Class_Properties[i].pPropPut); \ - } \ - for (int i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) { \ - FXJS_DefineObjMethod(pIsolate, nObjDefnID, JS_Class_Methods[i].pName, \ - JS_Class_Methods[i].pMethodCall); \ - } \ - } - -#define IMPLEMENT_JS_CLASS(js_class_name, class_name) \ - IMPLEMENT_JS_CLASS_RICH(js_class_name, class_name, class_name) - -/* ======================================== CONST CLASS - * ============================================ */ - -#define DECLARE_JS_CLASS_CONST() \ - static void DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType); \ - static JSConstSpec JS_Class_Consts[]; \ - static const wchar_t* m_pClassName - -#define IMPLEMENT_JS_CLASS_CONST(js_class_name, class_name) \ - const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ - void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ - FXJSOBJTYPE eObjType) { \ - int nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::m_pClassName, \ - eObjType, NULL, NULL); \ - for (int i = 0; i < FX_ArraySize(JS_Class_Consts) - 1; ++i) { \ - FXJS_DefineObjConst( \ - pIsolate, nObjDefnID, JS_Class_Consts[i].pName, \ - JS_Class_Consts[i].t == 0 \ - ? FXJS_NewNumber(pIsolate, JS_Class_Consts[i].number) \ - : FXJS_NewString(pIsolate, JS_Class_Consts[i].string)); \ - } \ - } - -/* ===================================== SPECIAL JS CLASS - * =============================================== */ - -template -void JSSpecialPropQuery(const char*, - v8::Local property, - const v8::PropertyCallbackInfo& info) { - v8::Isolate* isolate = info.GetIsolate(); - v8::String::Utf8Value utf8_value(property); - CFX_WideString propname = - CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); - CJS_Object* pJSObj = - reinterpret_cast(FXJS_GetPrivate(isolate, info.Holder())); - Alt* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); - FX_BOOL bRet = pObj->QueryProperty(propname.c_str()); - info.GetReturnValue().Set(bRet ? 4 : 0); -} - -template -void JSSpecialPropGet(const char* class_name, - v8::Local property, - const v8::PropertyCallbackInfo& info) { - v8::Isolate* isolate = info.GetIsolate(); - IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); - if (!pRuntime) - return; - IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); - CJS_Object* pJSObj = - reinterpret_cast(FXJS_GetPrivate(isolate, info.Holder())); - Alt* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); - v8::String::Utf8Value utf8_value(property); - CFX_WideString propname = - CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); - CFX_WideString sError; - CJS_PropValue value(isolate); - value.StartGetting(); - if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), value, sError)) { - FXJS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError)); - return; - } - info.GetReturnValue().Set((v8::Local)value); -} - -template -void JSSpecialPropPut(const char* class_name, - v8::Local property, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - v8::Isolate* isolate = info.GetIsolate(); - IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); - if (!pRuntime) - return; - IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); - CJS_Object* pJSObj = - reinterpret_cast(FXJS_GetPrivate(isolate, info.Holder())); - Alt* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); - v8::String::Utf8Value utf8_value(property); - CFX_WideString propname = - CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); - CFX_WideString sError; - CJS_PropValue PropValue(CJS_Value(isolate, value, CJS_Value::VT_unknown)); - PropValue.StartSetting(); - if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), PropValue, sError)) { - FXJS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError)); - } -} - -template -void JSSpecialPropDel(const char* class_name, - v8::Local property, - const v8::PropertyCallbackInfo& info) { - v8::Isolate* isolate = info.GetIsolate(); - IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); - if (!pRuntime) - return; - IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); - CJS_Object* pJSObj = - reinterpret_cast(FXJS_GetPrivate(isolate, info.Holder())); - Alt* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); - v8::String::Utf8Value utf8_value(property); - CFX_WideString propname = - CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); - CFX_WideString sError; - if (!pObj->DelProperty(pRuntimeContext, propname.c_str(), sError)) { - CFX_ByteString cbName; - cbName.Format("%s.%s", class_name, "DelProperty"); - // Probably a missing call to JSFX_Error(). - } -} - -#define DECLARE_SPECIAL_JS_CLASS(js_class_name) \ - static void JSConstructor(IFXJS_Context* cc, v8::Local obj, \ - v8::Local global); \ - static void JSDestructor(v8::Local obj); \ - static JSConstSpec JS_Class_Consts[]; \ - static JSPropertySpec JS_Class_Properties[]; \ - static JSMethodSpec JS_Class_Methods[]; \ - static void DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType); \ - static const wchar_t* m_pClassName; \ - static void queryprop_##js_class_name##_static( \ - v8::Local property, \ - const v8::PropertyCallbackInfo& info); \ - static void getprop_##js_class_name##_static( \ - v8::Local property, \ - const v8::PropertyCallbackInfo& info); \ - static void putprop_##js_class_name##_static( \ - v8::Local property, v8::Local value, \ - const v8::PropertyCallbackInfo& info); \ - static void delprop_##js_class_name##_static( \ - v8::Local property, \ - const v8::PropertyCallbackInfo& info) - -#define IMPLEMENT_SPECIAL_JS_CLASS(js_class_name, class_alternate, class_name) \ - const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ - void js_class_name::queryprop_##js_class_name##_static( \ - v8::Local property, \ - const v8::PropertyCallbackInfo& info) { \ - JSSpecialPropQuery(#class_name, property, info); \ - } \ - void js_class_name::getprop_##js_class_name##_static( \ - v8::Local property, \ - const v8::PropertyCallbackInfo& info) { \ - JSSpecialPropGet(#class_name, property, info); \ - } \ - void js_class_name::putprop_##js_class_name##_static( \ - v8::Local property, v8::Local value, \ - const v8::PropertyCallbackInfo& info) { \ - JSSpecialPropPut(#class_name, property, value, info); \ - } \ - void js_class_name::delprop_##js_class_name##_static( \ - v8::Local property, \ - const v8::PropertyCallbackInfo& info) { \ - JSSpecialPropDel(#class_name, property, info); \ - } \ - void js_class_name::JSConstructor(IFXJS_Context* cc, \ - v8::Local obj, \ - v8::Local global) { \ - CJS_Object* pObj = new js_class_name(obj); \ - pObj->SetEmbedObject(new class_alternate(pObj)); \ - FXJS_SetPrivate(NULL, obj, (void*)pObj); \ - pObj->InitInstance(cc); \ - } \ - \ - void js_class_name::JSDestructor(v8::Local obj) { \ - js_class_name* pObj = (js_class_name*)FXJS_GetPrivate(NULL, obj); \ - ASSERT(pObj != NULL); \ - pObj->ExitInstance(); \ - delete pObj; \ - } \ - \ - void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ - FXJSOBJTYPE eObjType) { \ - int nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::m_pClassName, \ - eObjType, JSConstructor, JSDestructor); \ - for (int i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) { \ - FXJS_DefineObjProperty( \ - pIsolate, nObjDefnID, JS_Class_Properties[i].pName, \ - JS_Class_Properties[i].pPropGet, JS_Class_Properties[i].pPropPut); \ - } \ - \ - for (int i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) { \ - FXJS_DefineObjMethod(pIsolate, nObjDefnID, JS_Class_Methods[i].pName, \ - JS_Class_Methods[i].pMethodCall); \ - } \ - FXJS_DefineObjAllProperties( \ - pIsolate, nObjDefnID, \ - js_class_name::queryprop_##js_class_name##_static, \ - js_class_name::getprop_##js_class_name##_static, \ - js_class_name::putprop_##js_class_name##_static, \ - js_class_name::delprop_##js_class_name##_static); \ - } - -/* ======================================== GLOBAL METHODS - * ============================================ */ - -template -void JSGlobalFunc(const char* func_name_string, - const v8::FunctionCallbackInfo& info) { - v8::Isolate* isolate = info.GetIsolate(); - IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); - if (!pRuntime) - return; - IFXJS_Context* cc = pRuntime->GetCurrentContext(); - CJS_Parameters parameters; - for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { - parameters.push_back(CJS_Value(isolate, info[i], CJS_Value::VT_unknown)); - } - CJS_Value valueRes(isolate); - CFX_WideString sError; - if (!(*F)(cc, parameters, valueRes, sError)) { - FXJS_Error(isolate, JSFormatErrorString(func_name_string, nullptr, sError)); - return; - } - info.GetReturnValue().Set(valueRes.ToV8Value()); -} - -#define JS_STATIC_GLOBAL_FUN(fun_name) \ - static void fun_name##_static( \ - const v8::FunctionCallbackInfo& info) { \ - JSGlobalFunc(#fun_name, info); \ - } - -#define JS_STATIC_DECLARE_GLOBAL_FUN() \ - static JSMethodSpec global_methods[]; \ - static void DefineJSObjects(v8::Isolate* pIsolate) - -#define BEGIN_JS_STATIC_GLOBAL_FUN(js_class_name) \ - JSMethodSpec js_class_name::global_methods[] = { -#define JS_STATIC_GLOBAL_FUN_ENTRY(method_name) \ - JS_STATIC_METHOD_ENTRY(method_name) - -#define END_JS_STATIC_GLOBAL_FUN() END_JS_STATIC_METHOD() - -#define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \ - void js_class_name::DefineJSObjects(v8::Isolate* pIsolate) { \ - for (int i = 0; i < FX_ArraySize(global_methods) - 1; ++i) { \ - FXJS_DefineGlobalMethod(pIsolate, \ - js_class_name::global_methods[i].pName, \ - js_class_name::global_methods[i].pMethodCall); \ - } \ - } - -CJS_Value::Type GET_VALUE_TYPE(v8::Local p); - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_ diff --git a/fpdfsdk/include/javascript/JS_EventHandler.h b/fpdfsdk/include/javascript/JS_EventHandler.h deleted file mode 100644 index e03904897d..0000000000 --- a/fpdfsdk/include/javascript/JS_EventHandler.h +++ /dev/null @@ -1,220 +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_JS_EVENTHANDLER_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_JS_EVENTHANDLER_H_ - -#include "../../../core/include/fxcrt/fx_string.h" -#include "../../../core/include/fxcrt/fx_system.h" - -class CJS_Context; -class CPDFSDK_Annot; -class CPDFSDK_Document; -class CPDF_Bookmark; -class CPDF_FormField; -class Field; - -enum JS_EVENT_T { - JET_UNKNOWN, - JET_APP_INIT, - JET_DOC_OPEN, - JET_DOC_WILLPRINT, - JET_DOC_DIDPRINT, - JET_DOC_WILLSAVE, - JET_DOC_DIDSAVE, - JET_DOC_WILLCLOSE, - JET_PAGE_OPEN, - JET_PAGE_CLOSE, - JET_PAGE_INVIEW, - JET_PAGE_OUTVIEW, - JET_FIELD_MOUSEDOWN, - JET_FIELD_MOUSEUP, - JET_FIELD_MOUSEENTER, - JET_FIELD_MOUSEEXIT, - JET_FIELD_FOCUS, - JET_FIELD_BLUR, - JET_FIELD_KEYSTROKE, - JET_FIELD_VALIDATE, - JET_FIELD_CALCULATE, - JET_FIELD_FORMAT, - JET_SCREEN_FOCUS, - JET_SCREEN_BLUR, - JET_SCREEN_OPEN, - JET_SCREEN_CLOSE, - JET_SCREEN_MOUSEDOWN, - JET_SCREEN_MOUSEUP, - JET_SCREEN_MOUSEENTER, - JET_SCREEN_MOUSEEXIT, - JET_SCREEN_INVIEW, - JET_SCREEN_OUTVIEW, - JET_BATCH_EXEC, - JET_MENU_EXEC, - JET_CONSOLE_EXEC, - JET_EXTERNAL_EXEC, - JET_BOOKMARK_MOUSEUP, - JET_LINK_MOUSEUP -}; - -class CJS_EventHandler { - public: - CJS_EventHandler(CJS_Context* pContext); - virtual ~CJS_EventHandler(); - - void OnApp_Init(); - - void OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName); - void OnDoc_WillPrint(CPDFSDK_Document* pDoc); - void OnDoc_DidPrint(CPDFSDK_Document* pDoc); - void OnDoc_WillSave(CPDFSDK_Document* pDoc); - void OnDoc_DidSave(CPDFSDK_Document* pDoc); - void OnDoc_WillClose(CPDFSDK_Document* pDoc); - - void OnPage_Open(CPDFSDK_Document* pDoc); - void OnPage_Close(CPDFSDK_Document* pDoc); - void OnPage_InView(CPDFSDK_Document* pTarget); - void OnPage_OutView(CPDFSDK_Document* pTarget); - - void OnField_Calculate(CPDF_FormField* pSource, - CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL& bRc); - void OnField_Format(CPDF_FormField* pTarget, - CFX_WideString& Value, - FX_BOOL bWillCommit); - 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); - 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); - - void OnField_MouseDown(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget); - void OnField_MouseEnter(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget); - void OnField_MouseExit(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget); - void OnField_MouseUp(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget); - void OnField_Blur(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget, - const CFX_WideString& Value); - void OnField_Focus(FX_BOOL bModifier, - FX_BOOL bShift, - CPDF_FormField* pTarget, - const CFX_WideString& Value); - - void OnScreen_Focus(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen); - void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - void OnScreen_Close(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen); - void OnScreen_MouseDown(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen); - void OnScreen_MouseUp(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen); - void OnScreen_MouseEnter(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen); - void OnScreen_MouseExit(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen); - void OnScreen_InView(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen); - void OnScreen_OutView(FX_BOOL bModifier, - FX_BOOL bShift, - CPDFSDK_Annot* pScreen); - - void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark); - void OnLink_MouseUp(CPDFSDK_Document* pTarget); - - void OnMenu_Exec(CPDFSDK_Document* pTarget, - const CFX_WideString& strTargetName); - void OnBatchExec(CPDFSDK_Document* pTarget); - void OnConsole_Exec(); - void OnExternal_Exec(); - - public: - void Initial(JS_EVENT_T type); - void Destroy(); - FX_BOOL IsValid(); - - CFX_WideString& Change(); - CFX_WideString ChangeEx(); - int CommitKey(); - FX_BOOL FieldFull(); - FX_BOOL KeyDown(); - FX_BOOL Modifier(); - const FX_WCHAR* Name(); - const FX_WCHAR* Type(); - FX_BOOL& Rc(); - int& SelEnd(); - int& SelStart(); - FX_BOOL Shift(); - Field* Source(); - Field* Target_Field(); - CFX_WideString& Value(); - FX_BOOL WillCommit(); - CFX_WideString TargetName(); - - JS_EVENT_T EventType() { return m_eEventType; } - - public: - CJS_Context* m_pJSContext; - JS_EVENT_T m_eEventType; - FX_BOOL m_bValid; - - CFX_WideString m_strTargetName; - CFX_WideString m_strSourceName; - CFX_WideString* m_pWideStrChange; - CFX_WideString m_WideStrChangeDu; - CFX_WideString m_WideStrChangeEx; - int m_nCommitKey; - FX_BOOL m_bKeyDown; - FX_BOOL m_bModifier; - FX_BOOL m_bShift; - int* m_pISelEnd; - int m_nSelEndDu; - int* m_pISelStart; - int m_nSelStartDu; - FX_BOOL m_bWillCommit; - CFX_WideString* m_pValue; - FX_BOOL m_bFieldFull; - FX_BOOL* m_pbRc; - FX_BOOL m_bRcDu; - - CPDFSDK_Document* m_pSourceDoc; - CPDF_Bookmark* m_pTargetBookMark; - CPDFSDK_Document* m_pTargetDoc; - CPDFSDK_Annot* m_pTargetAnnot; -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_EVENTHANDLER_H_ diff --git a/fpdfsdk/include/javascript/JS_GlobalData.h b/fpdfsdk/include/javascript/JS_GlobalData.h deleted file mode 100644 index 98a963d87b..0000000000 --- a/fpdfsdk/include/javascript/JS_GlobalData.h +++ /dev/null @@ -1,107 +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_JS_GLOBALDATA_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_JS_GLOBALDATA_H_ - -#include "../../../core/include/fxcrt/fx_basic.h" - -#define JS_GLOBALDATA_TYPE_NUMBER 0 -#define JS_GLOBALDATA_TYPE_BOOLEAN 1 -#define JS_GLOBALDATA_TYPE_STRING 2 -#define JS_GLOBALDATA_TYPE_OBJECT 3 -#define JS_GLOBALDATA_TYPE_NULL 4 - -class CJS_KeyValue; -class CPDFDoc_Environment; - -class CJS_GlobalVariableArray { - public: - CJS_GlobalVariableArray(); - virtual ~CJS_GlobalVariableArray(); - - void Add(CJS_KeyValue* p); - int Count() const; - CJS_KeyValue* GetAt(int index) const; - void Copy(const CJS_GlobalVariableArray& array); - - void Empty(); - - private: - CFX_ArrayTemplate array; -}; - -class CJS_KeyValue { - public: - CJS_KeyValue() {} - virtual ~CJS_KeyValue() {} - - CFX_ByteString sKey; - int nType; // 0:int 1:bool 2:string 3:obj - double dData; - bool bData; - CFX_ByteString sData; - CJS_GlobalVariableArray objData; -}; - -class CJS_GlobalData_Element { - public: - CJS_GlobalData_Element() {} - virtual ~CJS_GlobalData_Element() {} - - CJS_KeyValue data; - FX_BOOL bPersistent; -}; - -class CJS_GlobalData { - public: - static CJS_GlobalData* GetRetainedInstance(CPDFDoc_Environment* pApp); - void Release(); - - void SetGlobalVariableNumber(const FX_CHAR* propname, double dData); - void SetGlobalVariableBoolean(const FX_CHAR* propname, bool bData); - void SetGlobalVariableString(const FX_CHAR* propname, - const CFX_ByteString& sData); - void SetGlobalVariableObject(const FX_CHAR* propname, - const CJS_GlobalVariableArray& array); - void SetGlobalVariableNull(const FX_CHAR* propname); - - FX_BOOL SetGlobalVariablePersistent(const FX_CHAR* propname, - FX_BOOL bPersistent); - FX_BOOL DeleteGlobalVariable(const FX_CHAR* propname); - - int32_t GetSize() const; - CJS_GlobalData_Element* GetAt(int index) const; - - private: - static CJS_GlobalData* g_Instance; - - CJS_GlobalData(CPDFDoc_Environment* pApp); - ~CJS_GlobalData(); - - void LoadGlobalPersistentVariables(); - void SaveGlobalPersisitentVariables(); - - CJS_GlobalData_Element* GetGlobalVariable(const FX_CHAR* propname); - int FindGlobalVariable(const FX_CHAR* propname); - - void LoadFileBuffer(const FX_WCHAR* sFilePath, - uint8_t*& pBuffer, - int32_t& nLength); - void WriteFileBuffer(const FX_WCHAR* sFilePath, - const FX_CHAR* pBuffer, - int32_t nLength); - void MakeByteString(const CFX_ByteString& name, - CJS_KeyValue* pData, - CFX_BinaryBuf& sData); - - private: - size_t m_RefCount; - CFX_ArrayTemplate m_arrayGlobalData; - CFX_WideString m_sFilePath; -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_GLOBALDATA_H_ diff --git a/fpdfsdk/include/javascript/JS_Object.h b/fpdfsdk/include/javascript/JS_Object.h deleted file mode 100644 index 6116a83d17..0000000000 --- a/fpdfsdk/include/javascript/JS_Object.h +++ /dev/null @@ -1,119 +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_JS_OBJECT_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_ - -#include - -#include "../../../third_party/base/nonstd_unique_ptr.h" - -#include "../fsdk_define.h" // For FX_UINT -#include "../fsdk_mgr.h" // For CPDFDoc_Environment -#include "../fx_systemhandler.h" // For IFX_SystemHandler -#include "../jsapi/fxjs_v8.h" -#include "JS_Runtime.h" - -class CJS_Context; -class CJS_Object; -class CJS_Timer; - -class CJS_EmbedObj { - public: - explicit CJS_EmbedObj(CJS_Object* pJSObject); - virtual ~CJS_EmbedObj(); - - virtual void TimerProc(CJS_Timer* pTimer) {} - - CJS_Object* GetJSObject() const { return m_pJSObject; } - - int MsgBox(CPDFDoc_Environment* pApp, - const FX_WCHAR* swMsg, - const FX_WCHAR* swTitle, - FX_UINT nType, - FX_UINT nIcon); - void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg); - - protected: - CJS_Object* m_pJSObject; -}; - -class CJS_Object { - public: - explicit CJS_Object(v8::Local pObject); - virtual ~CJS_Object(); - - void MakeWeak(); - void Dispose(); - - virtual FX_BOOL IsType(const FX_CHAR* sClassName) { return TRUE; } - virtual CFX_ByteString GetClassName() { return ""; } - - virtual FX_BOOL InitInstance(IFXJS_Context* cc) { return TRUE; } - virtual FX_BOOL ExitInstance() { return TRUE; } - - v8::Local ToV8Object() { return m_pV8Object.Get(m_pIsolate); } - - // Takes ownership of |pObj|. - void SetEmbedObject(CJS_EmbedObj* pObj) { m_pEmbedObj.reset(pObj); } - CJS_EmbedObj* GetEmbedObject() const { return m_pEmbedObj.get(); } - - static int MsgBox(CPDFDoc_Environment* pApp, - const FX_WCHAR* swMsg, - const FX_WCHAR* swTitle, - FX_UINT nType, - FX_UINT nIcon); - static void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg); - - v8::Isolate* GetIsolate() { return m_pIsolate; } - - protected: - nonstd::unique_ptr m_pEmbedObj; - v8::Global m_pV8Object; - v8::Isolate* m_pIsolate; -}; - -class CJS_Timer : public CJS_Runtime::Observer { - public: - CJS_Timer(CJS_EmbedObj* pObj, - CPDFDoc_Environment* pApp, - CJS_Runtime* pRuntime, - int nType, - const CFX_WideString& script, - FX_DWORD dwElapse, - FX_DWORD dwTimeOut); - ~CJS_Timer() override; - - void KillJSTimer(); - - int GetType() const { return m_nType; } - FX_DWORD GetTimeOut() const { return m_dwTimeOut; } - CJS_Runtime* GetRuntime() const { return m_bValid ? m_pRuntime : nullptr; } - CFX_WideString GetJScript() const { return m_swJScript; } - - static void TimerProc(int idEvent); - - private: - using TimerMap = std::map; - static TimerMap* GetGlobalTimerMap(); - - // CJS_Runtime::Observer - void OnDestroyed() override; - - FX_DWORD m_nTimerID; - CJS_EmbedObj* const m_pEmbedObj; - bool m_bProcessing; - bool m_bValid; - - // data - const int m_nType; // 0:Interval; 1:TimeOut - const FX_DWORD m_dwTimeOut; - const CFX_WideString m_swJScript; - CJS_Runtime* const m_pRuntime; - CPDFDoc_Environment* const m_pApp; -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_ diff --git a/fpdfsdk/include/javascript/JS_Runtime.h b/fpdfsdk/include/javascript/JS_Runtime.h deleted file mode 100644 index 6fdc4b0708..0000000000 --- a/fpdfsdk/include/javascript/JS_Runtime.h +++ /dev/null @@ -1,72 +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_JS_RUNTIME_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_ - -#include -#include - -#include "../../../core/include/fxcrt/fx_basic.h" -#include "../jsapi/fxjs_v8.h" -#include "IJavaScript.h" -#include "JS_EventHandler.h" - -class CJS_Context; - -class CJS_Runtime : public IFXJS_Runtime { - public: - class Observer { - public: - virtual void OnDestroyed() = 0; - - protected: - virtual ~Observer() {} - }; - - using FieldEvent = std::pair; - - explicit CJS_Runtime(CPDFDoc_Environment* pApp); - ~CJS_Runtime() override; - - // IFXJS_Runtime - IFXJS_Context* NewContext() override; - void ReleaseContext(IFXJS_Context* pContext) override; - IFXJS_Context* GetCurrentContext() override; - void SetReaderDocument(CPDFSDK_Document* pReaderDoc) override; - CPDFSDK_Document* GetReaderDocument() override { return m_pDocument; } - - 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 AddObserver(Observer* observer); - void RemoveObserver(Observer* observer); - - private: - void DefineJSObjects(); - - CFX_ArrayTemplate m_ContextArray; - CPDFDoc_Environment* 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::set m_observers; -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_ diff --git a/fpdfsdk/include/javascript/JS_Value.h b/fpdfsdk/include/javascript/JS_Value.h deleted file mode 100644 index 384e772572..0000000000 --- a/fpdfsdk/include/javascript/JS_Value.h +++ /dev/null @@ -1,218 +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_JS_VALUE_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_ - -#include "../../../core/include/fxcrt/fx_basic.h" -#include "../jsapi/fxjs_v8.h" - -class CJS_Array; -class CJS_Date; -class CJS_Document; -class CJS_Object; - -class CJS_Value { - public: - enum Type { - VT_unknown, - VT_string, - VT_number, - VT_boolean, - VT_date, - VT_object, - VT_fxobject, - VT_null, - VT_undefined - }; - - CJS_Value(v8::Isolate* isolate); - CJS_Value(v8::Isolate* isolate, v8::Local pValue, Type t); - CJS_Value(v8::Isolate* isolate, const int& iValue); - CJS_Value(v8::Isolate* isolate, const double& dValue); - CJS_Value(v8::Isolate* isolate, const float& fValue); - CJS_Value(v8::Isolate* isolate, const bool& bValue); - CJS_Value(v8::Isolate* isolate, v8::Local); - CJS_Value(v8::Isolate* isolate, CJS_Object*); - CJS_Value(v8::Isolate* isolate, CJS_Document*); - CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr); - CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr); - CJS_Value(v8::Isolate* isolate, CJS_Array& array); - - ~CJS_Value(); - - void SetNull(); - void Attach(v8::Local pValue, Type t); - void Attach(CJS_Value* pValue); - void Detach(); - - Type GetType() const; - int ToInt() const; - bool ToBool() const; - double ToDouble() const; - float ToFloat() const; - CJS_Object* ToCJSObject() const; - CFX_WideString ToCFXWideString() const; - CFX_ByteString ToCFXByteString() const; - v8::Local ToV8Object() const; - v8::Local ToV8Array() const; - v8::Local ToV8Value() const; - - void operator=(int iValue); - void operator=(bool bValue); - void operator=(double); - void operator=(float); - void operator=(CJS_Object*); - void operator=(CJS_Document*); - void operator=(v8::Local); - void operator=(CJS_Array&); - void operator=(CJS_Date&); - void operator=(const FX_WCHAR* pWstr); - void operator=(const FX_CHAR* pStr); - void operator=(CJS_Value value); - - FX_BOOL IsArrayObject() const; - FX_BOOL IsDateObject() const; - FX_BOOL ConvertToArray(CJS_Array&) const; - FX_BOOL ConvertToDate(CJS_Date&) const; - - v8::Isolate* GetIsolate() { return m_isolate; } - - protected: - Type m_eType; - v8::Local m_pValue; - v8::Isolate* m_isolate; -}; - -class CJS_Parameters : public CFX_ArrayTemplate { - public: - void push_back(const CJS_Value& newElement) { - CFX_ArrayTemplate::Add(newElement); - } - int size() const { return CFX_ArrayTemplate::GetSize(); } -}; - -class CJS_PropValue : public CJS_Value { - public: - CJS_PropValue(const CJS_Value&); - CJS_PropValue(v8::Isolate* isolate); - ~CJS_PropValue(); - - public: - FX_BOOL IsSetting(); - FX_BOOL IsGetting(); - void operator<<(int); - void operator>>(int&) const; - void operator<<(bool); - void operator>>(bool&) const; - void operator<<(double); - void operator>>(double&) const; - void operator<<(CJS_Object* pObj); - void operator>>(CJS_Object*& ppObj) const; - void operator<<(CJS_Document* pJsDoc); - void operator>>(CJS_Document*& ppJsDoc) const; - void operator<<(CFX_ByteString); - void operator>>(CFX_ByteString&) const; - void operator<<(CFX_WideString); - void operator>>(CFX_WideString&) const; - void operator<<(const FX_WCHAR* c_string); - void operator<<(v8::Local); - void operator>>(v8::Local&) const; - void operator>>(CJS_Array& array) const; - void operator<<(CJS_Array& array); - void operator<<(CJS_Date& date); - void operator>>(CJS_Date& date) const; - operator v8::Local() const; - void StartSetting(); - void StartGetting(); - - private: - FX_BOOL m_bIsSetting; -}; - -class CJS_Array { - public: - CJS_Array(v8::Isolate* isolate); - virtual ~CJS_Array(); - - void Attach(v8::Local pArray); - void GetElement(unsigned index, CJS_Value& value); - void SetElement(unsigned index, CJS_Value value); - int GetLength(); - FX_BOOL IsAttached(); - operator v8::Local(); - - v8::Isolate* GetIsolate() { return m_isolate; } - - private: - v8::Local m_pArray; - v8::Isolate* m_isolate; -}; - -class CJS_Date { - friend class CJS_Value; - - public: - CJS_Date(v8::Isolate* isolate); - CJS_Date(v8::Isolate* isolate, double dMsec_time); - CJS_Date(v8::Isolate* isolate, - int year, - int mon, - int day, - int hour, - int min, - int sec); - virtual ~CJS_Date(); - void Attach(v8::Local pDate); - - int GetYear(); - void SetYear(int iYear); - - int GetMonth(); - void SetMonth(int iMonth); - - int GetDay(); - void SetDay(int iDay); - - int GetHours(); - void SetHours(int iHours); - - int GetMinutes(); - void SetMinutes(int minutes); - - int GetSeconds(); - void SetSeconds(int seconds); - - operator v8::Local(); - operator double() const; - - CFX_WideString ToString() const; - - static double - MakeDate(int year, int mon, int mday, int hour, int min, int sec, int ms); - - FX_BOOL IsValidDate(); - - protected: - v8::Local m_pDate; - v8::Isolate* m_isolate; -}; - -double JS_GetDateTime(); -int JS_GetYearFromTime(double dt); -int JS_GetMonthFromTime(double dt); -int JS_GetDayFromTime(double dt); -int JS_GetHourFromTime(double dt); -int JS_GetMinFromTime(double dt); -int JS_GetSecFromTime(double dt); -double JS_DateParse(const wchar_t* string); -double JS_MakeDay(int nYear, int nMonth, int nDay); -double JS_MakeTime(int nHour, int nMin, int nSec, int nMs); -double JS_MakeDate(double day, double time); -bool JS_PortIsNan(double d); -double JS_LocalTime(double d); - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_ diff --git a/fpdfsdk/include/javascript/PublicMethods.h b/fpdfsdk/include/javascript/PublicMethods.h deleted file mode 100644 index 02ace4a4c4..0000000000 --- a/fpdfsdk/include/javascript/PublicMethods.h +++ /dev/null @@ -1,185 +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_PUBLICMETHODS_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_PUBLICMETHODS_H_ - -#include "JS_Define.h" - -class CJS_PublicMethods : public CJS_Object { - public: - CJS_PublicMethods(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_PublicMethods() override {} - - public: - static FX_BOOL AFNumber_Format(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFNumber_Keystroke(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFPercent_Format(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFPercent_Keystroke(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFDate_FormatEx(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFDate_KeystrokeEx(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFDate_Format(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFDate_Keystroke(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFTime_FormatEx(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); // - static FX_BOOL AFTime_KeystrokeEx(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFTime_Format(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFTime_Keystroke(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFSpecial_Format(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFSpecial_Keystroke(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFSpecial_KeystrokeEx(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); // - static FX_BOOL AFSimple(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFMakeNumber(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFSimple_Calculate(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFRange_Validate(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFMergeChange(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFParseDateEx(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - static FX_BOOL AFExtractNums(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - - public: - JS_STATIC_GLOBAL_FUN(AFNumber_Format); - JS_STATIC_GLOBAL_FUN(AFNumber_Keystroke); - JS_STATIC_GLOBAL_FUN(AFPercent_Format); - JS_STATIC_GLOBAL_FUN(AFPercent_Keystroke); - JS_STATIC_GLOBAL_FUN(AFDate_FormatEx); - JS_STATIC_GLOBAL_FUN(AFDate_KeystrokeEx); - JS_STATIC_GLOBAL_FUN(AFDate_Format); - JS_STATIC_GLOBAL_FUN(AFDate_Keystroke); - JS_STATIC_GLOBAL_FUN(AFTime_FormatEx); - JS_STATIC_GLOBAL_FUN(AFTime_KeystrokeEx); - JS_STATIC_GLOBAL_FUN(AFTime_Format); - JS_STATIC_GLOBAL_FUN(AFTime_Keystroke); - JS_STATIC_GLOBAL_FUN(AFSpecial_Format); - JS_STATIC_GLOBAL_FUN(AFSpecial_Keystroke); - JS_STATIC_GLOBAL_FUN(AFSpecial_KeystrokeEx); - JS_STATIC_GLOBAL_FUN(AFSimple); - JS_STATIC_GLOBAL_FUN(AFMakeNumber); - JS_STATIC_GLOBAL_FUN(AFSimple_Calculate); - JS_STATIC_GLOBAL_FUN(AFRange_Validate); - JS_STATIC_GLOBAL_FUN(AFMergeChange); - JS_STATIC_GLOBAL_FUN(AFParseDateEx); - JS_STATIC_GLOBAL_FUN(AFExtractNums); - - JS_STATIC_DECLARE_GLOBAL_FUN(); - - public: - static int ParseStringInteger(const CFX_WideString& string, - int nStart, - int& nSkip, - int nMaxStep); - static CFX_WideString ParseStringString(const CFX_WideString& string, - int nStart, - int& nSkip); - static double MakeRegularDate(const CFX_WideString& value, - const CFX_WideString& format, - FX_BOOL& bWrongFormat); - static CFX_WideString MakeFormatDate(double dDate, - const CFX_WideString& format); - static FX_BOOL ConvertStringToNumber(const FX_WCHAR* swSource, - double& dRet, - FX_BOOL& bDot); - static double ParseStringToNumber(const FX_WCHAR* swSource); - static double ParseNormalDate(const CFX_WideString& value, - FX_BOOL& bWrongFormat); - static double MakeInterDate(CFX_WideString strValue); - static double ParseNumber(const FX_WCHAR* swSource, - FX_BOOL& bAllDigits, - FX_BOOL& bDot, - FX_BOOL& bSign, - FX_BOOL& bKXJS); - - public: - static CFX_WideString StrLTrim(const FX_WCHAR* pStr); - static CFX_WideString StrRTrim(const FX_WCHAR* pStr); - static CFX_WideString StrTrim(const FX_WCHAR* pStr); - - static CFX_ByteString StrLTrim(const FX_CHAR* pStr); - static CFX_ByteString StrRTrim(const FX_CHAR* pStr); - static CFX_ByteString StrTrim(const FX_CHAR* pStr); - - static FX_BOOL IsNumber(const FX_CHAR* string); - static FX_BOOL IsNumber(const FX_WCHAR* string); - - static FX_BOOL IsDigit(char ch); - static FX_BOOL IsDigit(wchar_t ch); - static FX_BOOL IsAlphabetic(wchar_t ch); - static FX_BOOL IsAlphaNumeric(wchar_t ch); - - static FX_BOOL maskSatisfied(wchar_t c_Change, wchar_t c_Mask); - static FX_BOOL isReservedMaskChar(wchar_t ch); - - static double AF_Simple(const FX_WCHAR* sFuction, - double dValue1, - double dValue2); - static CJS_Array AF_MakeArrayFromList(v8::Isolate* isolate, CJS_Value val); -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_PUBLICMETHODS_H_ diff --git a/fpdfsdk/include/javascript/app.h b/fpdfsdk/include/javascript/app.h deleted file mode 100644 index 1ab02c5eac..0000000000 --- a/fpdfsdk/include/javascript/app.h +++ /dev/null @@ -1,218 +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_APP_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_APP_H_ - -#include "JS_Define.h" - -class CJS_Runtime; - -/* ---------------------------- TimerObj ---------------------------- */ - -class CJS_Timer; - -class TimerObj : public CJS_EmbedObj { - public: - TimerObj(CJS_Object* pJSObject); - ~TimerObj() override; - - public: - void SetTimer(CJS_Timer* pTimer); - CJS_Timer* GetTimer() const; - - private: - CJS_Timer* m_pTimer; -}; - -class CJS_TimerObj : public CJS_Object { - public: - CJS_TimerObj(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_TimerObj() override {} - - DECLARE_JS_CLASS(CJS_TimerObj); -}; - -class app : public CJS_EmbedObj { - public: - app(CJS_Object* pJSObject); - ~app() override; - - public: - FX_BOOL activeDocs(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL calculate(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL formsVersion(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL fs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL fullscreen(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL language(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL platform(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL runtimeHighlight(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL viewerType(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL viewerVariation(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL viewerVersion(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - - FX_BOOL alert(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL beep(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL browseForDoc(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL clearInterval(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL clearTimeOut(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL execDialog(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL execMenuItem(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL findComponent(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL goBack(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL goForward(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL launchURL(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL mailMsg(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL newFDF(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL newDoc(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL openDoc(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL openFDF(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL popUpMenuEx(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL popUpMenu(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL response(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL setInterval(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL setTimeOut(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - - static CFX_WideString SysPathToPDFPath(const CFX_WideString& sOldPath); - - private: - // CJS_EmbedObj - void TimerProc(CJS_Timer* pTimer) override; - void RunJsScript(CJS_Runtime* pRuntime, const CFX_WideString& wsScript); - - bool m_bCalculate; - bool m_bRuntimeHighLight; - CFX_ArrayTemplate m_aTimer; -}; - -class CJS_App : public CJS_Object { - public: - explicit CJS_App(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_App() override {} - - DECLARE_JS_CLASS(CJS_App); - - JS_STATIC_PROP(activeDocs, app); - JS_STATIC_PROP(calculate, app); - JS_STATIC_PROP(formsVersion, app); - JS_STATIC_PROP(fs, app); - JS_STATIC_PROP(fullscreen, app); - JS_STATIC_PROP(language, app); - JS_STATIC_PROP(media, app); - JS_STATIC_PROP(platform, app); - JS_STATIC_PROP(runtimeHighlight, app); - JS_STATIC_PROP(viewerType, app); - JS_STATIC_PROP(viewerVariation, app); - JS_STATIC_PROP(viewerVersion, app); - - JS_STATIC_METHOD(alert, app); - JS_STATIC_METHOD(beep, app); - JS_STATIC_METHOD(browseForDoc, app); - JS_STATIC_METHOD(clearInterval, app); - JS_STATIC_METHOD(clearTimeOut, app); - JS_STATIC_METHOD(execDialog, app); - JS_STATIC_METHOD(execMenuItem, app); - JS_STATIC_METHOD(findComponent, app); - JS_STATIC_METHOD(goBack, app); - JS_STATIC_METHOD(goForward, app); - JS_STATIC_METHOD(launchURL, app); - JS_STATIC_METHOD(mailMsg, app); - JS_STATIC_METHOD(newFDF, app); - JS_STATIC_METHOD(newDoc, app); - JS_STATIC_METHOD(openDoc, app); - JS_STATIC_METHOD(openFDF, app); - JS_STATIC_METHOD(popUpMenuEx, app); - JS_STATIC_METHOD(popUpMenu, app); - JS_STATIC_METHOD(response, app); - JS_STATIC_METHOD(setInterval, app); - JS_STATIC_METHOD(setTimeOut, app); -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_APP_H_ diff --git a/fpdfsdk/include/javascript/color.h b/fpdfsdk/include/javascript/color.h deleted file mode 100644 index 8008575a70..0000000000 --- a/fpdfsdk/include/javascript/color.h +++ /dev/null @@ -1,85 +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_COLOR_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_COLOR_H_ - -#include "../pdfwindow/PWL_Wnd.h" // For CPWL_Color. -#include "JS_Define.h" - -class color : public CJS_EmbedObj { - public: - color(CJS_Object* pJSObject); - ~color() override; - - FX_BOOL black(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL blue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL cyan(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL dkGray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL gray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL green(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL ltGray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL magenta(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL red(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL transparent(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL white(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL yellow(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - - FX_BOOL convert(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL equal(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - - public: - static void ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array); - static void ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color); - - private: - CPWL_Color m_crTransparent; - CPWL_Color m_crBlack; - CPWL_Color m_crWhite; - CPWL_Color m_crRed; - CPWL_Color m_crGreen; - CPWL_Color m_crBlue; - CPWL_Color m_crCyan; - CPWL_Color m_crMagenta; - CPWL_Color m_crYellow; - CPWL_Color m_crDKGray; - CPWL_Color m_crGray; - CPWL_Color m_crLTGray; -}; - -class CJS_Color : public CJS_Object { - public: - CJS_Color(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Color() override {} - - DECLARE_JS_CLASS(CJS_Color); - - JS_STATIC_PROP(black, color); - JS_STATIC_PROP(blue, color); - JS_STATIC_PROP(cyan, color); - JS_STATIC_PROP(dkGray, color); - JS_STATIC_PROP(gray, color); - JS_STATIC_PROP(green, color); - JS_STATIC_PROP(ltGray, color); - JS_STATIC_PROP(magenta, color); - JS_STATIC_PROP(red, color); - JS_STATIC_PROP(transparent, color); - JS_STATIC_PROP(white, color); - JS_STATIC_PROP(yellow, color); - - JS_STATIC_METHOD(convert, color); - JS_STATIC_METHOD(equal, color); -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_COLOR_H_ diff --git a/fpdfsdk/include/javascript/console.h b/fpdfsdk/include/javascript/console.h deleted file mode 100644 index 1571d109f1..0000000000 --- a/fpdfsdk/include/javascript/console.h +++ /dev/null @@ -1,49 +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_CONSOLE_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_CONSOLE_H_ - -#include "JS_Define.h" - -class console : public CJS_EmbedObj { - public: - console(CJS_Object* pJSObject); - ~console() override; - - public: - FX_BOOL clear(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL hide(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL println(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL show(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); -}; - -class CJS_Console : public CJS_Object { - public: - CJS_Console(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Console() override {} - - DECLARE_JS_CLASS(CJS_Console); - - JS_STATIC_METHOD(clear, console); - JS_STATIC_METHOD(hide, console); - JS_STATIC_METHOD(println, console); - JS_STATIC_METHOD(show, console); -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_CONSOLE_H_ diff --git a/fpdfsdk/include/javascript/event.h b/fpdfsdk/include/javascript/event.h deleted file mode 100644 index a934d54e62..0000000000 --- a/fpdfsdk/include/javascript/event.h +++ /dev/null @@ -1,89 +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_EVENT_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_EVENT_H_ - -#include "JS_Define.h" - -class event : public CJS_EmbedObj { - public: - event(CJS_Object* pJSObject); - ~event() override; - - public: - FX_BOOL change(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL changeEx(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL commitKey(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL fieldFull(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL keyDown(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL modifier(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL rc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL richChange(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL richChangeEx(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL richValue(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL selEnd(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL selStart(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL shift(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL target(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL targetName(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL willCommit(IFXJS_Context* cc, - CJS_PropValue& vp, - CFX_WideString& sError); -}; - -class CJS_Event : public CJS_Object { - public: - CJS_Event(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Event() override {} - - DECLARE_JS_CLASS(CJS_Event); - - JS_STATIC_PROP(change, event); - JS_STATIC_PROP(changeEx, event); - JS_STATIC_PROP(commitKey, event); - JS_STATIC_PROP(fieldFull, event); - JS_STATIC_PROP(keyDown, event); - JS_STATIC_PROP(modifier, event); - JS_STATIC_PROP(name, event); - JS_STATIC_PROP(rc, event); - JS_STATIC_PROP(richChange, event); - JS_STATIC_PROP(richChangeEx, event); - JS_STATIC_PROP(richValue, event); - JS_STATIC_PROP(selEnd, event); - JS_STATIC_PROP(selStart, event); - JS_STATIC_PROP(shift, event); - JS_STATIC_PROP(source, event); - JS_STATIC_PROP(target, event); - JS_STATIC_PROP(targetName, event); - JS_STATIC_PROP(type, event); - JS_STATIC_PROP(value, event); - JS_STATIC_PROP(willCommit, event); -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_EVENT_H_ diff --git a/fpdfsdk/include/javascript/global.h b/fpdfsdk/include/javascript/global.h deleted file mode 100644 index 10300a25ab..0000000000 --- a/fpdfsdk/include/javascript/global.h +++ /dev/null @@ -1,93 +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_GLOBAL_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_GLOBAL_H_ - -#include - -#include "JS_Define.h" - -class CJS_GlobalData; -class CJS_GlobalVariableArray; -class CJS_KeyValue; - -struct JSGlobalData { - JSGlobalData() { - nType = 0; - dData = 0; - bData = FALSE; - sData = ""; - bPersistent = FALSE; - bDeleted = FALSE; - } - - ~JSGlobalData() { pData.Reset(); } - int nType; // 0:int 1:bool 2:string 3:obj - double dData; - bool bData; - CFX_ByteString sData; - v8::Global pData; - bool bPersistent; - bool bDeleted; -}; - -class JSGlobalAlternate : public CJS_EmbedObj { - public: - JSGlobalAlternate(CJS_Object* pJSObject); - ~JSGlobalAlternate() override; - - FX_BOOL setPersistent(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL QueryProperty(const FX_WCHAR* propname); - FX_BOOL DoProperty(IFXJS_Context* cc, - const FX_WCHAR* propname, - CJS_PropValue& vp, - CFX_WideString& sError); - FX_BOOL DelProperty(IFXJS_Context* cc, - const FX_WCHAR* propname, - CFX_WideString& sError); - void Initial(CPDFDoc_Environment* pApp); - - private: - void UpdateGlobalPersistentVariables(); - void CommitGlobalPersisitentVariables(); - void DestroyGlobalPersisitentVariables(); - FX_BOOL SetGlobalVariables(const FX_CHAR* propname, - int nType, - double dData, - bool bData, - const CFX_ByteString& sData, - v8::Local pData, - bool bDefaultPersistent); - - void ObjectToArray(v8::Local pObj, - CJS_GlobalVariableArray& array); - void PutObjectProperty(v8::Local obj, CJS_KeyValue* pData); - - private: - std::map m_mapGlobal; - CFX_WideString m_sFilePath; - CJS_GlobalData* m_pGlobalData; - CPDFDoc_Environment* m_pApp; -}; - -class CJS_Global : public CJS_Object { - public: - explicit CJS_Global(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Global() override {} - - // CJS_Object - FX_BOOL InitInstance(IFXJS_Context* cc) override; - - DECLARE_SPECIAL_JS_CLASS(CJS_Global); - - JS_SPECIAL_STATIC_METHOD(setPersistent, JSGlobalAlternate, global); -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_GLOBAL_H_ diff --git a/fpdfsdk/include/javascript/report.h b/fpdfsdk/include/javascript/report.h deleted file mode 100644 index 5b17dabc50..0000000000 --- a/fpdfsdk/include/javascript/report.h +++ /dev/null @@ -1,40 +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_REPORT_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_REPORT_H_ - -#include "JS_Define.h" - -class Report : public CJS_EmbedObj { - public: - Report(CJS_Object* pJSObject); - ~Report() override; - - public: - FX_BOOL save(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL writeText(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); -}; - -class CJS_Report : public CJS_Object { - public: - CJS_Report(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Report() override {} - - public: - DECLARE_JS_CLASS(CJS_Report); - - JS_STATIC_METHOD(save, Report) - JS_STATIC_METHOD(writeText, Report); -}; - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_REPORT_H_ diff --git a/fpdfsdk/include/javascript/resource.h b/fpdfsdk/include/javascript/resource.h deleted file mode 100644 index 80629cf2ae..0000000000 --- a/fpdfsdk/include/javascript/resource.h +++ /dev/null @@ -1,39 +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_RESOURCE_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_RESOURCE_H_ - -#include "../../../core/include/fxcrt/fx_string.h" // For CFX_WideString. -#include "../fsdk_define.h" // For FX_UINT. - -class CJS_Context; - -#define IDS_STRING_JSALERT 25613 -#define IDS_STRING_JSPARAMERROR 25614 -#define IDS_STRING_JSAFNUMBER_KEYSTROKE 25615 -#define IDS_STRING_JSPARAM_TOOLONG 25617 -#define IDS_STRING_JSPARSEDATE 25618 -#define IDS_STRING_JSRANGE1 25619 -#define IDS_STRING_JSRANGE2 25620 -#define IDS_STRING_JSRANGE3 25621 -#define IDS_STRING_NOTSUPPORT 25627 -#define IDS_STRING_JSBUSY 25628 -#define IDS_STRING_JSEVENT 25629 -#define IDS_STRING_RUN 25630 -#define IDS_STRING_JSPRINT1 25632 -#define IDS_STRING_JSPRINT2 25633 -#define IDS_STRING_JSNOGLOBAL 25635 -#define IDS_STRING_JSREADONLY 25636 -#define IDS_STRING_JSTYPEERROR 25637 -#define IDS_STRING_JSVALUEERROR 25638 - -CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id); -CFX_WideString JSFormatErrorString(const char* class_name, - const char* property_name, - const CFX_WideString& details); - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_RESOURCE_H_ diff --git a/fpdfsdk/include/javascript/util.h b/fpdfsdk/include/javascript/util.h deleted file mode 100644 index d7a1ef7b8c..0000000000 --- a/fpdfsdk/include/javascript/util.h +++ /dev/null @@ -1,68 +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_UTIL_H_ -#define FPDFSDK_INCLUDE_JAVASCRIPT_UTIL_H_ - -#include // For std::wstring. - -#include "JS_Define.h" - -class util : public CJS_EmbedObj { - public: - util(CJS_Object* pJSObject); - ~util() override; - - public: - FX_BOOL printd(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL printf(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL printx(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL scand(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - FX_BOOL byteToChar(IFXJS_Context* cc, - const CJS_Parameters& params, - CJS_Value& vRet, - CFX_WideString& sError); - - public: - static void printd(const std::wstring& cFormat, - CJS_Date Date, - bool bXFAPicture, - std::wstring& cPurpose); - static void printx(const std::string& cFormat, - const std::string& cSource, - std::string& cPurpose); - static int ParstDataType(std::wstring* sFormat); -}; - -class CJS_Util : public CJS_Object { - public: - CJS_Util(v8::Local pObject) : CJS_Object(pObject) {} - ~CJS_Util() override {} - - DECLARE_JS_CLASS(CJS_Util); - - JS_STATIC_METHOD(printd, util); - JS_STATIC_METHOD(printf, util); - JS_STATIC_METHOD(printx, util); - JS_STATIC_METHOD(scand, util); - JS_STATIC_METHOD(byteToChar, util); -}; - -int64_t FX_atoi64(const char* nptr); - -#endif // FPDFSDK_INCLUDE_JAVASCRIPT_UTIL_H_ diff --git a/fpdfsdk/src/fsdk_mgr.cpp b/fpdfsdk/src/fsdk_mgr.cpp index 5b94aef600..6123dc8c9b 100644 --- a/fpdfsdk/src/fsdk_mgr.cpp +++ b/fpdfsdk/src/fsdk_mgr.cpp @@ -10,7 +10,6 @@ #include "../include/fsdk_mgr.h" #include "../include/formfiller/FFL_FormFiller.h" #include "../include/javascript/IJavaScript.h" -#include "../include/javascript/JS_Runtime.h" #if _FX_OS_ == _FX_ANDROID_ #include "time.h" @@ -374,7 +373,7 @@ IFXJS_Runtime* CPDFDoc_Environment::GetJSRuntime() { if (!IsJSInitiated()) return NULL; if (!m_pJSRuntime) - m_pJSRuntime.reset(new CJS_Runtime(this)); + m_pJSRuntime.reset(IFXJS_Runtime::Create(this)); return m_pJSRuntime.get(); } diff --git a/fpdfsdk/src/javascript/Consts.cpp b/fpdfsdk/src/javascript/Consts.cpp index fcdc5eabe2..3381978caf 100644 --- a/fpdfsdk/src/javascript/Consts.cpp +++ b/fpdfsdk/src/javascript/Consts.cpp @@ -4,11 +4,12 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "Consts.h" + #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/Consts.h" +#include "JS_Define.h" +#include "JS_Object.h" +#include "JS_Value.h" /* ------------------------------ border ------------------------------ */ diff --git a/fpdfsdk/src/javascript/Consts.h b/fpdfsdk/src/javascript/Consts.h new file mode 100644 index 0000000000..a1d36f8877 --- /dev/null +++ b/fpdfsdk/src/javascript/Consts.h @@ -0,0 +1,116 @@ +// 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_SRC_JAVASCRIPT_CONSTS_H_ +#define FPDFSDK_SRC_JAVASCRIPT_CONSTS_H_ + +#include "JS_Define.h" + +/* ------------------------------ border ------------------------------ */ + +class CJS_Border : public CJS_Object { + public: + explicit CJS_Border(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Border() override {} + + DECLARE_JS_CLASS_CONST(); +}; + +/* ------------------------------ display ------------------------------ */ + +class CJS_Display : public CJS_Object { + public: + explicit CJS_Display(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Display() override {} + + DECLARE_JS_CLASS_CONST(); +}; + +/* ------------------------------ font ------------------------------ */ + +class CJS_Font : public CJS_Object { + public: + explicit CJS_Font(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Font() override {} + + DECLARE_JS_CLASS_CONST(); +}; + +/* ------------------------------ highlight ------------------------------ */ + +class CJS_Highlight : public CJS_Object { + public: + explicit CJS_Highlight(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Highlight() override {} + + DECLARE_JS_CLASS_CONST(); +}; + +/* ------------------------------ position ------------------------------ */ + +class CJS_Position : public CJS_Object { + public: + explicit CJS_Position(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Position() override {} + + DECLARE_JS_CLASS_CONST(); +}; + +/* ------------------------------ scaleHow ------------------------------ */ + +class CJS_ScaleHow : public CJS_Object { + public: + explicit CJS_ScaleHow(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_ScaleHow() override {} + + DECLARE_JS_CLASS_CONST(); +}; + +/* ------------------------------ scaleWhen ------------------------------ */ + +class CJS_ScaleWhen : public CJS_Object { + public: + explicit CJS_ScaleWhen(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_ScaleWhen() override {} + + DECLARE_JS_CLASS_CONST(); +}; + +/* ------------------------------ style ------------------------------ */ + +class CJS_Style : public CJS_Object { + public: + explicit CJS_Style(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Style() override {} + + DECLARE_JS_CLASS_CONST(); +}; + +/* ------------------------------ zoomtype ------------------------------ */ + +class CJS_Zoomtype : public CJS_Object { + public: + explicit CJS_Zoomtype(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Zoomtype() override {} + + DECLARE_JS_CLASS_CONST(); +}; + +/* ------------------------------ CJS_GlobalConsts -------------------------- */ + +class CJS_GlobalConsts : public CJS_Object { + public: + static void DefineJSObjects(v8::Isolate* pIsolate); +}; + +/* ------------------------------ CJS_GlobalArrays -------------------------- */ + +class CJS_GlobalArrays : public CJS_Object { + public: + static void DefineJSObjects(v8::Isolate* pIsolate); +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_CONSTS_H_ diff --git a/fpdfsdk/src/javascript/Document.cpp b/fpdfsdk/src/javascript/Document.cpp index 98ac88a9b1..748aad3a15 100644 --- a/fpdfsdk/src/javascript/Document.cpp +++ b/fpdfsdk/src/javascript/Document.cpp @@ -4,20 +4,21 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -#include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/Document.h" -#include "../../include/javascript/JS_EventHandler.h" -#include "../../include/javascript/JS_Context.h" -#include "../../include/javascript/JS_Runtime.h" -#include "../../include/javascript/app.h" -#include "../../include/javascript/Field.h" -#include "../../include/javascript/Icon.h" -#include "../../include/javascript/resource.h" +#include "Document.h" #include "../../../third_party/base/numerics/safe_math.h" +#include "../../include/fsdk_mgr.h" // For CPDFDoc_Environment. +#include "../../include/javascript/IJavaScript.h" +#include "Field.h" +#include "Icon.h" +#include "JS_Context.h" +#include "JS_Define.h" +#include "JS_EventHandler.h" +#include "JS_Object.h" +#include "JS_Runtime.h" +#include "JS_Value.h" +#include "app.h" +#include "resource.h" static v8::Isolate* GetIsolate(IFXJS_Context* cc) { CJS_Context* pContext = (CJS_Context*)cc; diff --git a/fpdfsdk/src/javascript/Document.h b/fpdfsdk/src/javascript/Document.h new file mode 100644 index 0000000000..6c403e383b --- /dev/null +++ b/fpdfsdk/src/javascript/Document.h @@ -0,0 +1,406 @@ +// 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_SRC_JAVASCRIPT_DOCUMENT_H_ +#define FPDFSDK_SRC_JAVASCRIPT_DOCUMENT_H_ + +#include "JS_Define.h" + +class PrintParamsObj : public CJS_EmbedObj { + public: + PrintParamsObj(CJS_Object* pJSObject); + ~PrintParamsObj() override {} + + public: + FX_BOOL bUI; + int nStart; + int nEnd; + FX_BOOL bSilent; + FX_BOOL bShrinkToFit; + FX_BOOL bPrintAsImage; + FX_BOOL bReverse; + FX_BOOL bAnnotations; +}; + +class CJS_PrintParamsObj : public CJS_Object { + public: + CJS_PrintParamsObj(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_PrintParamsObj() override {} + + DECLARE_JS_CLASS(CJS_PrintParamsObj); +}; + +class Icon; +class Field; + +struct IconElement { + IconElement() : IconName(L""), NextIcon(NULL), IconStream(NULL) {} + virtual ~IconElement() {} + CFX_WideString IconName; + IconElement* NextIcon; + Icon* IconStream; +}; + +class IconTree { + public: + IconTree() : m_pHead(NULL), m_pEnd(NULL), m_iLength(0) {} + + virtual ~IconTree() {} + + public: + void InsertIconElement(IconElement* pNewIcon); + void DeleteIconTree(); + int GetLength(); + IconElement* operator[](int iIndex); + + private: + IconElement* m_pHead; + IconElement* m_pEnd; + int m_iLength; +}; + +struct CJS_DelayData; +struct CJS_DelayAnnot; +struct CJS_AnnotObj; + +class Document : public CJS_EmbedObj { + public: + Document(CJS_Object* pJSObject); + ~Document() override; + + public: + FX_BOOL ADBE(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL author(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL baseURL(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL bookmarkRoot(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL calculate(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL Collab(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL creationDate(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL creator(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL dirty(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL documentFileName(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL external(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL filesize(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL icons(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL info(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL keywords(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL layout(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL modDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL mouseX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL mouseY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL numFields(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL numPages(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL pageNum(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL pageWindowRect(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL path(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL producer(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL subject(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL title(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL zoom(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL zoomType(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + + FX_BOOL addAnnot(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL addField(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL addLink(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL addIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL calculateNow(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL closeDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL createDataObject(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL deletePages(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL exportAsText(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL exportAsFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL exportAsXFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL extractPages(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getAnnot(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getAnnots(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getAnnot3D(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getAnnots3D(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getField(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getLinks(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getNthFieldName(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getOCGs(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getPageBox(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getPageNthWord(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getPageNthWordQuads(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getPageNumWords(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getPrintParams(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getURL(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL importAnFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL importAnXFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL importTextData(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL insertPages(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL mailForm(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL print(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL removeField(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL replacePages(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL resetForm(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL saveAs(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL submitForm(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL mailDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL removeIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + + public: + void AttachDoc(CPDFSDK_Document* pDoc); + CPDFSDK_Document* GetReaderDoc(); + static FX_BOOL ExtractFileName(CPDFSDK_Document* pDoc, + CFX_ByteString& strFileName); + static FX_BOOL ExtractFolderName(CPDFSDK_Document* pDoc, + CFX_ByteString& strFolderName); + void AddDelayData(CJS_DelayData* pData); + void DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex); + void AddDelayAnnotData(CJS_AnnotObj* pData); + void DoAnnotDelay(); + void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; } + CJS_Document* GetCJSDoc() const; + + private: + CFX_WideString ReversalStr(CFX_WideString cbFrom); + CFX_WideString CutString(CFX_WideString cbFrom); + bool IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect); + int CountWords(CPDF_TextObject* pTextObj); + CFX_WideString GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex); + + v8::Isolate* m_isolate; + IconTree* m_pIconTree; + CPDFSDK_Document* m_pDocument; + CFX_WideString m_cwBaseURL; + bool m_bDelay; + CFX_ArrayTemplate m_DelayData; + CFX_ArrayTemplate m_DelayAnnotData; +}; + +class CJS_Document : public CJS_Object { + public: + explicit CJS_Document(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Document() override {} + + // CJS_Object + FX_BOOL InitInstance(IFXJS_Context* cc) override; + + DECLARE_JS_CLASS(CJS_Document); + + JS_STATIC_PROP(ADBE, Document); + JS_STATIC_PROP(author, Document); + JS_STATIC_PROP(baseURL, Document); + JS_STATIC_PROP(bookmarkRoot, Document); + JS_STATIC_PROP(calculate, Document); + JS_STATIC_PROP(Collab, Document); + JS_STATIC_PROP(creationDate, Document); + JS_STATIC_PROP(creator, Document); + JS_STATIC_PROP(delay, Document); + JS_STATIC_PROP(dirty, Document); + JS_STATIC_PROP(documentFileName, Document); + JS_STATIC_PROP(external, Document); + JS_STATIC_PROP(filesize, Document); + JS_STATIC_PROP(icons, Document); + JS_STATIC_PROP(info, Document); + JS_STATIC_PROP(keywords, Document); + JS_STATIC_PROP(layout, Document); + JS_STATIC_PROP(media, Document); + JS_STATIC_PROP(modDate, Document); + JS_STATIC_PROP(mouseX, Document); + JS_STATIC_PROP(mouseY, Document); + JS_STATIC_PROP(numFields, Document); + JS_STATIC_PROP(numPages, Document); + JS_STATIC_PROP(pageNum, Document); + JS_STATIC_PROP(pageWindowRect, Document); + JS_STATIC_PROP(path, Document); + JS_STATIC_PROP(producer, Document); + JS_STATIC_PROP(subject, Document); + JS_STATIC_PROP(title, Document); + JS_STATIC_PROP(zoom, Document); + JS_STATIC_PROP(zoomType, Document); + + JS_STATIC_METHOD(addAnnot, Document); + JS_STATIC_METHOD(addField, Document); + JS_STATIC_METHOD(addLink, Document); + JS_STATIC_METHOD(addIcon, Document); + JS_STATIC_METHOD(calculateNow, Document); + JS_STATIC_METHOD(closeDoc, Document); + JS_STATIC_METHOD(createDataObject, Document); + JS_STATIC_METHOD(deletePages, Document); + JS_STATIC_METHOD(exportAsText, Document); + JS_STATIC_METHOD(exportAsFDF, Document); + JS_STATIC_METHOD(exportAsXFDF, Document); + JS_STATIC_METHOD(extractPages, Document); + JS_STATIC_METHOD(getAnnot, Document); + JS_STATIC_METHOD(getAnnots, Document); + JS_STATIC_METHOD(getAnnot3D, Document); + JS_STATIC_METHOD(getAnnots3D, Document); + JS_STATIC_METHOD(getField, Document); + JS_STATIC_METHOD(getIcon, Document); + JS_STATIC_METHOD(getLinks, Document); + JS_STATIC_METHOD(getNthFieldName, Document); + JS_STATIC_METHOD(getOCGs, Document); + JS_STATIC_METHOD(getPageBox, Document); + JS_STATIC_METHOD(getPageNthWord, Document); + JS_STATIC_METHOD(getPageNthWordQuads, Document); + JS_STATIC_METHOD(getPageNumWords, Document); + JS_STATIC_METHOD(getPrintParams, Document); + JS_STATIC_METHOD(getURL, Document); + JS_STATIC_METHOD(importAnFDF, Document); + JS_STATIC_METHOD(importAnXFDF, Document); + JS_STATIC_METHOD(importTextData, Document); + JS_STATIC_METHOD(insertPages, Document); + JS_STATIC_METHOD(mailForm, Document); + JS_STATIC_METHOD(print, Document); + JS_STATIC_METHOD(removeField, Document); + JS_STATIC_METHOD(replacePages, Document); + JS_STATIC_METHOD(removeIcon, Document); + JS_STATIC_METHOD(resetForm, Document); + JS_STATIC_METHOD(saveAs, Document); + JS_STATIC_METHOD(submitForm, Document); + JS_STATIC_METHOD(mailDoc, Document); +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_DOCUMENT_H_ diff --git a/fpdfsdk/src/javascript/Field.cpp b/fpdfsdk/src/javascript/Field.cpp index 27015268ce..7026530d72 100644 --- a/fpdfsdk/src/javascript/Field.cpp +++ b/fpdfsdk/src/javascript/Field.cpp @@ -4,18 +4,20 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "Field.h" + +#include "../../include/fsdk_mgr.h" // For CPDFDoc_Environment. #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/Field.h" -#include "../../include/javascript/JS_EventHandler.h" -#include "../../include/javascript/JS_Context.h" -#include "../../include/javascript/JS_Runtime.h" -#include "../../include/javascript/Document.h" -#include "../../include/javascript/color.h" -#include "../../include/javascript/PublicMethods.h" -#include "../../include/javascript/Icon.h" +#include "Document.h" +#include "Icon.h" +#include "JS_Context.h" +#include "JS_Define.h" +#include "JS_EventHandler.h" +#include "JS_Object.h" +#include "JS_Runtime.h" +#include "JS_Value.h" +#include "PublicMethods.h" +#include "color.h" /* ---------------------- Field ---------------------- */ diff --git a/fpdfsdk/src/javascript/Field.h b/fpdfsdk/src/javascript/Field.h new file mode 100644 index 0000000000..a62bf39a9a --- /dev/null +++ b/fpdfsdk/src/javascript/Field.h @@ -0,0 +1,625 @@ +// 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_SRC_JAVASCRIPT_FIELD_H_ +#define FPDFSDK_SRC_JAVASCRIPT_FIELD_H_ + +#include // For std::wstring. + +#include "../../include/pdfwindow/PWL_Wnd.h" // For CPWL_Color. +#include "JS_Define.h" + +class CPDFSDK_Widget; +class Document; + +enum FIELD_PROP { + FP_ALIGNMENT, + FP_BORDERSTYLE, + FP_BUTTONALIGNX, + FP_BUTTONALIGNY, + FP_BUTTONFITBOUNDS, + FP_BUTTONPOSITION, + FP_BUTTONSCALEHOW, + FP_BUTTONSCALEWHEN, + FP_CALCORDERINDEX, + FP_CHARLIMIT, + FP_COMB, + FP_COMMITONSELCHANGE, + FP_CURRENTVALUEINDICES, + FP_DEFAULTVALUE, + FP_DONOTSCROLL, + FP_DISPLAY, + FP_FILLCOLOR, + FP_HIDDEN, + FP_HIGHLIGHT, + FP_LINEWIDTH, + FP_MULTILINE, + FP_MULTIPLESELECTION, + FP_PASSWORD, + FP_RECT, + FP_RICHTEXT, + FP_RICHVALUE, + FP_ROTATION, + FP_STROKECOLOR, + FP_STYLE, + FP_TEXTCOLOR, + FP_TEXTFONT, + FP_TEXTSIZE, + FP_USERNAME, + FP_VALUE +}; + +class CJS_WideStringArray { + public: + CJS_WideStringArray() {} + virtual ~CJS_WideStringArray() { + for (int i = 0, sz = m_Data.GetSize(); i < sz; i++) + delete m_Data.GetAt(i); + m_Data.RemoveAll(); + } + + void Add(const CFX_WideString& string) { + m_Data.Add(new CFX_WideString(string)); + } + + int GetSize() const { return m_Data.GetSize(); } + + CFX_WideString GetAt(int i) const { return *m_Data.GetAt(i); } + + private: + CFX_ArrayTemplate m_Data; +}; + +struct CJS_DelayData { + CFX_WideString sFieldName; + int nControlIndex; + enum FIELD_PROP eProp; + int32_t num; + bool b; + CFX_ByteString string; + CFX_WideString widestring; + CPDF_Rect rect; + CPWL_Color color; + CFX_DWordArray wordarray; + CJS_WideStringArray widestringarray; +}; + +class Field : public CJS_EmbedObj { + public: + Field(CJS_Object* pJSObject); + ~Field() override; + + FX_BOOL alignment(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL borderStyle(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL buttonAlignX(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL buttonAlignY(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL buttonFitBounds(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL buttonPosition(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL buttonScaleHow(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL buttonScaleWhen(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL calcOrderIndex(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL charLimit(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL comb(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL commitOnSelChange(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL currentValueIndices(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL defaultStyle(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL defaultValue(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL doNotScroll(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL doNotSpellCheck(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL display(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL doc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL editable(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL exportValues(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL fileSelect(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL fillColor(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL hidden(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL highlight(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL lineWidth(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL multiline(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL multipleSelection(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL numItems(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL page(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL password(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL print(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL radiosInUnison(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL readonly(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL rect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL required(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL richText(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL richValue(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL rotation(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL strokeColor(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL style(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL submitName(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL textColor(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL textFont(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL textSize(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL userName(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL valueAsString(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + + FX_BOOL browseForFileToSubmit(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL buttonGetCaption(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL buttonGetIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL buttonImportIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL buttonSetCaption(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL buttonSetIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL checkThisBox(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL clearItems(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL defaultIsChecked(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL deleteItemAt(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getArray(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getItemAt(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getLock(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL insertItemAt(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL isBoxChecked(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL isDefaultChecked(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL setAction(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL setFocus(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL setItems(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL setLock(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL signatureGetModifications(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL signatureGetSeedValue(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL signatureInfo(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL signatureSetSeedValue(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL signatureSign(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL signatureValidate(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + + public: + static void SetAlignment(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string); + static void SetBorderStyle(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string); + static void SetButtonAlignX(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetButtonAlignY(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetButtonFitBounds(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetButtonPosition(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetButtonScaleHow(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetButtonScaleWhen(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetCalcOrderIndex(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetCharLimit(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetComb(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetCommitOnSelChange(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetCurrentValueIndices(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_DWordArray& array); + static void SetDefaultStyle(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex); + static void SetDefaultValue(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_WideString& string); + static void SetDoNotScroll(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetDisplay(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetFillColor(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CPWL_Color& color); + static void SetHidden(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetHighlight(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string); + static void SetLineWidth(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetMultiline(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetMultipleSelection(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetPassword(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetRect(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CPDF_Rect& rect); + static void SetRichText(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetRichValue(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex); + static void SetRotation(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetStrokeColor(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CPWL_Color& color); + static void SetStyle(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string); + static void SetTextColor(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CPWL_Color& color); + static void SetTextFont(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string); + static void SetTextSize(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetUserName(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_WideString& string); + static void SetValue(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CJS_WideStringArray& strArray); + + public: + static void AddField(CPDFSDK_Document* pDocument, + int nPageIndex, + int nFieldType, + const CFX_WideString& sName, + const CPDF_Rect& rcCoords); + + public: + static void UpdateFormField(CPDFSDK_Document* pDocument, + CPDF_FormField* pFormField, + FX_BOOL bChangeMark, + FX_BOOL bResetAP, + FX_BOOL bRefresh); + static void UpdateFormControl(CPDFSDK_Document* pDocument, + CPDF_FormControl* pFormControl, + FX_BOOL bChangeMark, + FX_BOOL bResetAP, + FX_BOOL bRefresh); + + static CPDFSDK_Widget* GetWidget(CPDFSDK_Document* pDocument, + CPDF_FormControl* pFormControl); + static void GetFormFields(CPDFSDK_Document* pDocument, + const CFX_WideString& csFieldName, + CFX_PtrArray& FieldsArray); + + static void DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData); + + public: + FX_BOOL AttachField(Document* pDocument, const CFX_WideString& csFieldName); + void SetDelay(FX_BOOL bDelay); + void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; } + + protected: + void ParseFieldName(const std::wstring& strFieldNameParsed, + std::wstring& strFieldName, + int& iControlNo); + void GetFormFields(const CFX_WideString& csFieldName, + CFX_PtrArray& FieldsArray); + CPDF_FormControl* GetSmartFieldControl(CPDF_FormField* pFormField); + FX_BOOL ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel); + + void AddDelay_Int(enum FIELD_PROP prop, int32_t n); + void AddDelay_Bool(enum FIELD_PROP prop, bool b); + void AddDelay_String(enum FIELD_PROP prop, const CFX_ByteString& string); + void AddDelay_WideString(enum FIELD_PROP prop, const CFX_WideString& string); + void AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect); + void AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color); + void AddDelay_WordArray(enum FIELD_PROP prop, const CFX_DWordArray& array); + void AddDelay_WideStringArray(enum FIELD_PROP prop, + const CJS_WideStringArray& array); + + void DoDelay(); + + public: + Document* m_pJSDoc; + CPDFSDK_Document* m_pDocument; + CFX_WideString m_FieldName; + int m_nFormControlIndex; + FX_BOOL m_bCanSet; + + FX_BOOL m_bDelay; + v8::Isolate* m_isolate; +}; + +class CJS_Field : public CJS_Object { + public: + CJS_Field(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Field(void) override {} + + FX_BOOL InitInstance(IFXJS_Context* cc) override; + + DECLARE_JS_CLASS(CJS_Field); + + JS_STATIC_PROP(alignment, Field); + JS_STATIC_PROP(borderStyle, Field); + JS_STATIC_PROP(buttonAlignX, Field); + JS_STATIC_PROP(buttonAlignY, Field); + JS_STATIC_PROP(buttonFitBounds, Field); + JS_STATIC_PROP(buttonPosition, Field); + JS_STATIC_PROP(buttonScaleHow, Field); + JS_STATIC_PROP(buttonScaleWhen, Field); + JS_STATIC_PROP(calcOrderIndex, Field); + JS_STATIC_PROP(charLimit, Field); + JS_STATIC_PROP(comb, Field); + JS_STATIC_PROP(commitOnSelChange, Field); + JS_STATIC_PROP(currentValueIndices, Field); + JS_STATIC_PROP(defaultStyle, Field); + JS_STATIC_PROP(defaultValue, Field); + JS_STATIC_PROP(doNotScroll, Field); + JS_STATIC_PROP(doNotSpellCheck, Field); + JS_STATIC_PROP(delay, Field); + JS_STATIC_PROP(display, Field); + JS_STATIC_PROP(doc, Field); + JS_STATIC_PROP(editable, Field); + JS_STATIC_PROP(exportValues, Field); + JS_STATIC_PROP(fileSelect, Field); + JS_STATIC_PROP(fillColor, Field); + JS_STATIC_PROP(hidden, Field); + JS_STATIC_PROP(highlight, Field); + JS_STATIC_PROP(lineWidth, Field); + JS_STATIC_PROP(multiline, Field); + JS_STATIC_PROP(multipleSelection, Field); + JS_STATIC_PROP(name, Field); + JS_STATIC_PROP(numItems, Field); + JS_STATIC_PROP(page, Field); + JS_STATIC_PROP(password, Field); + JS_STATIC_PROP(print, Field); + JS_STATIC_PROP(radiosInUnison, Field); + JS_STATIC_PROP(readonly, Field); + JS_STATIC_PROP(rect, Field); + JS_STATIC_PROP(required, Field); + JS_STATIC_PROP(richText, Field); + JS_STATIC_PROP(richValue, Field); + JS_STATIC_PROP(rotation, Field); + JS_STATIC_PROP(strokeColor, Field); + JS_STATIC_PROP(style, Field); + JS_STATIC_PROP(submitName, Field); + JS_STATIC_PROP(textColor, Field); + JS_STATIC_PROP(textFont, Field); + JS_STATIC_PROP(textSize, Field); + JS_STATIC_PROP(type, Field); + JS_STATIC_PROP(userName, Field); + JS_STATIC_PROP(value, Field); + JS_STATIC_PROP(valueAsString, Field); + JS_STATIC_PROP(source, Field); + + JS_STATIC_METHOD(browseForFileToSubmit, Field); + JS_STATIC_METHOD(buttonGetCaption, Field); + JS_STATIC_METHOD(buttonGetIcon, Field); + JS_STATIC_METHOD(buttonImportIcon, Field); + JS_STATIC_METHOD(buttonSetCaption, Field); + JS_STATIC_METHOD(buttonSetIcon, Field); + JS_STATIC_METHOD(checkThisBox, Field); + JS_STATIC_METHOD(clearItems, Field); + JS_STATIC_METHOD(defaultIsChecked, Field); + JS_STATIC_METHOD(deleteItemAt, Field); + JS_STATIC_METHOD(getArray, Field); + JS_STATIC_METHOD(getItemAt, Field); + JS_STATIC_METHOD(getLock, Field); + JS_STATIC_METHOD(insertItemAt, Field); + JS_STATIC_METHOD(isBoxChecked, Field); + JS_STATIC_METHOD(isDefaultChecked, Field); + JS_STATIC_METHOD(setAction, Field); + JS_STATIC_METHOD(setFocus, Field); + JS_STATIC_METHOD(setItems, Field); + JS_STATIC_METHOD(setLock, Field); + JS_STATIC_METHOD(signatureGetModifications, Field); + JS_STATIC_METHOD(signatureGetSeedValue, Field); + JS_STATIC_METHOD(signatureInfo, Field); + JS_STATIC_METHOD(signatureSetSeedValue, Field); + JS_STATIC_METHOD(signatureSign, Field); + JS_STATIC_METHOD(signatureValidate, Field); +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_FIELD_H_ diff --git a/fpdfsdk/src/javascript/Icon.cpp b/fpdfsdk/src/javascript/Icon.cpp index 4468fac90e..044a38ee2e 100644 --- a/fpdfsdk/src/javascript/Icon.cpp +++ b/fpdfsdk/src/javascript/Icon.cpp @@ -4,11 +4,12 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "Icon.h" + #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/Icon.h" +#include "JS_Define.h" +#include "JS_Object.h" +#include "JS_Value.h" /* ---------------------- Icon ---------------------- */ diff --git a/fpdfsdk/src/javascript/Icon.h b/fpdfsdk/src/javascript/Icon.h new file mode 100644 index 0000000000..b03048b47b --- /dev/null +++ b/fpdfsdk/src/javascript/Icon.h @@ -0,0 +1,39 @@ +// 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_SRC_JAVASCRIPT_ICON_H_ +#define FPDFSDK_SRC_JAVASCRIPT_ICON_H_ + +#include "JS_Define.h" + +class Icon : public CJS_EmbedObj { + public: + Icon(CJS_Object* pJSObject); + ~Icon() override; + + FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + void SetStream(CPDF_Stream* pIconStream); + CPDF_Stream* GetStream(); + void SetIconName(CFX_WideString name); + CFX_WideString GetIconName(); + + private: + CPDF_Stream* m_pIconStream; + CFX_WideString m_swIconName; +}; + +class CJS_Icon : public CJS_Object { + public: + CJS_Icon(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Icon() override {} + + public: + DECLARE_JS_CLASS(CJS_Icon); + + JS_STATIC_PROP(name, Icon); +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_ICON_H_ diff --git a/fpdfsdk/src/javascript/JS_Context.cpp b/fpdfsdk/src/javascript/JS_Context.cpp index fc7d974395..b67096d9bc 100644 --- a/fpdfsdk/src/javascript/JS_Context.cpp +++ b/fpdfsdk/src/javascript/JS_Context.cpp @@ -4,11 +4,12 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "JS_Context.h" + #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Context.h" -#include "../../include/javascript/JS_EventHandler.h" -#include "../../include/javascript/JS_Runtime.h" -#include "../../include/javascript/resource.h" +#include "JS_EventHandler.h" +#include "JS_Runtime.h" +#include "resource.h" /* -------------------------- CJS_Context -------------------------- */ diff --git a/fpdfsdk/src/javascript/JS_Context.h b/fpdfsdk/src/javascript/JS_Context.h new file mode 100644 index 0000000000..b1e1bcee2c --- /dev/null +++ b/fpdfsdk/src/javascript/JS_Context.h @@ -0,0 +1,137 @@ +// 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_SRC_JAVASCRIPT_JS_CONTEXT_H_ +#define FPDFSDK_SRC_JAVASCRIPT_JS_CONTEXT_H_ + +#include "../../../core/include/fxcrt/fx_system.h" +#include "../../../core/include/fxcrt/fx_string.h" +#include "../../include/javascript/IJavaScript.h" + +class CJS_EventHandler; +class CJS_Runtime; + +class CJS_Context : public IFXJS_Context { + public: + explicit CJS_Context(CJS_Runtime* pRuntime); + ~CJS_Context() override; + + // IFXJS_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_SRC_JAVASCRIPT_JS_CONTEXT_H_ diff --git a/fpdfsdk/src/javascript/JS_Define.h b/fpdfsdk/src/javascript/JS_Define.h new file mode 100644 index 0000000000..5e98b4f0ea --- /dev/null +++ b/fpdfsdk/src/javascript/JS_Define.h @@ -0,0 +1,485 @@ +// 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_SRC_JAVASCRIPT_JS_DEFINE_H_ +#define FPDFSDK_SRC_JAVASCRIPT_JS_DEFINE_H_ + +#include "../../include/jsapi/fxjs_v8.h" +#include "resource.h" +#include "JS_Object.h" +#include "JS_Value.h" + +struct JSConstSpec { + const wchar_t* pName; + double number; + const wchar_t* string; + uint8_t t; // 0:double 1:str +}; + +struct JSPropertySpec { + const wchar_t* pName; + v8::AccessorGetterCallback pPropGet; + v8::AccessorSetterCallback pPropPut; +}; + +struct JSMethodSpec { + const wchar_t* pName; + v8::FunctionCallback pMethodCall; +}; + +/* ====================================== PUBLIC DEFINE SPEC + * ============================================== */ +#define JS_WIDESTRING(widestring) L## #widestring + +#define BEGIN_JS_STATIC_CONST(js_class_name) \ + JSConstSpec js_class_name::JS_Class_Consts[] = { +#define JS_STATIC_CONST_ENTRY_NUMBER(const_name, pValue) \ + { const_name, pValue, L"", 0 } \ + , +#define JS_STATIC_CONST_ENTRY_STRING(const_name, pValue) \ + { const_name, 0, pValue, 1 } \ + , +#define END_JS_STATIC_CONST() \ + { 0, 0, 0, 0 } \ + } \ + ; + +#define BEGIN_JS_STATIC_PROP(js_class_name) \ + JSPropertySpec js_class_name::JS_Class_Properties[] = { +#define JS_STATIC_PROP_ENTRY(prop_name) \ + { \ + JS_WIDESTRING(prop_name), get_##prop_name##_static, \ + set_##prop_name##_static \ + } \ + , +#define END_JS_STATIC_PROP() \ + { 0, 0, 0 } \ + } \ + ; + +#define BEGIN_JS_STATIC_METHOD(js_class_name) \ + JSMethodSpec js_class_name::JS_Class_Methods[] = { +#define JS_STATIC_METHOD_ENTRY(method_name) \ + { JS_WIDESTRING(method_name), method_name##_static } \ + , +#define END_JS_STATIC_METHOD() \ + { 0, 0 } \ + } \ + ; + +/* ======================================== PROP CALLBACK + * ============================================ */ + +template +void JSPropGetter(const char* prop_name_string, + const char* class_name_string, + v8::Local property, + const v8::PropertyCallbackInfo& info) { + v8::Isolate* isolate = info.GetIsolate(); + IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); + if (!pRuntime) + return; + IFXJS_Context* pContext = pRuntime->GetCurrentContext(); + CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder()); + C* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); + CFX_WideString sError; + CJS_PropValue value(isolate); + value.StartGetting(); + if (!(pObj->*M)(pContext, value, sError)) { + FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, + sError)); + return; + } + info.GetReturnValue().Set((v8::Local)value); +} + +template +void JSPropSetter(const char* prop_name_string, + const char* class_name_string, + v8::Local property, + v8::Local value, + const v8::PropertyCallbackInfo& info) { + v8::Isolate* isolate = info.GetIsolate(); + IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); + if (!pRuntime) + return; + IFXJS_Context* pContext = pRuntime->GetCurrentContext(); + CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder()); + C* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); + CFX_WideString sError; + CJS_PropValue propValue(CJS_Value(isolate, value, CJS_Value::VT_unknown)); + propValue.StartSetting(); + if (!(pObj->*M)(pContext, propValue, sError)) { + FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, + sError)); + } +} + +#define JS_STATIC_PROP(prop_name, class_name) \ + static void get_##prop_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info) { \ + JSPropGetter(#prop_name, #class_name, \ + property, info); \ + } \ + static void set_##prop_name##_static( \ + v8::Local property, v8::Local value, \ + const v8::PropertyCallbackInfo& info) { \ + JSPropSetter(#prop_name, #class_name, \ + property, value, info); \ + } + +/* ========================================= METHOD CALLBACK + * =========================================== */ + +template +void JSMethod(const char* method_name_string, + const char* class_name_string, + const v8::FunctionCallbackInfo& info) { + v8::Isolate* isolate = info.GetIsolate(); + IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); + if (!pRuntime) + return; + IFXJS_Context* cc = pRuntime->GetCurrentContext(); + CJS_Parameters parameters; + for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { + parameters.push_back(CJS_Value(isolate, info[i], CJS_Value::VT_unknown)); + } + CJS_Value valueRes(isolate); + CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder()); + C* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); + CFX_WideString sError; + if (!(pObj->*M)(cc, parameters, valueRes, sError)) { + FXJS_Error(isolate, JSFormatErrorString(class_name_string, + method_name_string, sError)); + return; + } + info.GetReturnValue().Set(valueRes.ToV8Value()); +} + +#define JS_STATIC_METHOD(method_name, class_name) \ + static void method_name##_static( \ + const v8::FunctionCallbackInfo& info) { \ + JSMethod(#method_name, #class_name, \ + info); \ + } + +#define JS_SPECIAL_STATIC_METHOD(method_name, class_alternate, class_name) \ + static void method_name##_static( \ + const v8::FunctionCallbackInfo& info) { \ + JSMethod( \ + #method_name, #class_name, info); \ + } + +/* ===================================== JS CLASS + * =============================================== */ + +#define DECLARE_JS_CLASS(js_class_name) \ + static void JSConstructor(IFXJS_Context* cc, v8::Local obj, \ + v8::Local global); \ + static void JSDestructor(v8::Local obj); \ + static void DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType); \ + static JSConstSpec JS_Class_Consts[]; \ + static JSPropertySpec JS_Class_Properties[]; \ + static JSMethodSpec JS_Class_Methods[]; \ + static const wchar_t* m_pClassName + +#define IMPLEMENT_JS_CLASS_RICH(js_class_name, class_alternate, class_name) \ + const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ + void js_class_name::JSConstructor(IFXJS_Context* cc, \ + v8::Local obj, \ + v8::Local global) { \ + CJS_Object* pObj = new js_class_name(obj); \ + pObj->SetEmbedObject(new class_alternate(pObj)); \ + FXJS_SetPrivate(NULL, obj, (void*)pObj); \ + pObj->InitInstance(cc); \ + } \ + \ + void js_class_name::JSDestructor(v8::Local obj) { \ + js_class_name* pObj = (js_class_name*)FXJS_GetPrivate(NULL, obj); \ + pObj->ExitInstance(); \ + delete pObj; \ + } \ + \ + void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ + FXJSOBJTYPE eObjType) { \ + int nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::m_pClassName, \ + eObjType, JSConstructor, JSDestructor); \ + for (int i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) { \ + FXJS_DefineObjProperty( \ + pIsolate, nObjDefnID, JS_Class_Properties[i].pName, \ + JS_Class_Properties[i].pPropGet, JS_Class_Properties[i].pPropPut); \ + } \ + for (int i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) { \ + FXJS_DefineObjMethod(pIsolate, nObjDefnID, JS_Class_Methods[i].pName, \ + JS_Class_Methods[i].pMethodCall); \ + } \ + } + +#define IMPLEMENT_JS_CLASS(js_class_name, class_name) \ + IMPLEMENT_JS_CLASS_RICH(js_class_name, class_name, class_name) + +/* ======================================== CONST CLASS + * ============================================ */ + +#define DECLARE_JS_CLASS_CONST() \ + static void DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType); \ + static JSConstSpec JS_Class_Consts[]; \ + static const wchar_t* m_pClassName + +#define IMPLEMENT_JS_CLASS_CONST(js_class_name, class_name) \ + const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ + void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ + FXJSOBJTYPE eObjType) { \ + int nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::m_pClassName, \ + eObjType, NULL, NULL); \ + for (int i = 0; i < FX_ArraySize(JS_Class_Consts) - 1; ++i) { \ + FXJS_DefineObjConst( \ + pIsolate, nObjDefnID, JS_Class_Consts[i].pName, \ + JS_Class_Consts[i].t == 0 \ + ? FXJS_NewNumber(pIsolate, JS_Class_Consts[i].number) \ + : FXJS_NewString(pIsolate, JS_Class_Consts[i].string)); \ + } \ + } + +/* ===================================== SPECIAL JS CLASS + * =============================================== */ + +template +void JSSpecialPropQuery(const char*, + v8::Local property, + const v8::PropertyCallbackInfo& info) { + v8::Isolate* isolate = info.GetIsolate(); + v8::String::Utf8Value utf8_value(property); + CFX_WideString propname = + CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); + CJS_Object* pJSObj = + reinterpret_cast(FXJS_GetPrivate(isolate, info.Holder())); + Alt* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); + FX_BOOL bRet = pObj->QueryProperty(propname.c_str()); + info.GetReturnValue().Set(bRet ? 4 : 0); +} + +template +void JSSpecialPropGet(const char* class_name, + v8::Local property, + const v8::PropertyCallbackInfo& info) { + v8::Isolate* isolate = info.GetIsolate(); + IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); + if (!pRuntime) + return; + IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); + CJS_Object* pJSObj = + reinterpret_cast(FXJS_GetPrivate(isolate, info.Holder())); + Alt* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); + v8::String::Utf8Value utf8_value(property); + CFX_WideString propname = + CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); + CFX_WideString sError; + CJS_PropValue value(isolate); + value.StartGetting(); + if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), value, sError)) { + FXJS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError)); + return; + } + info.GetReturnValue().Set((v8::Local)value); +} + +template +void JSSpecialPropPut(const char* class_name, + v8::Local property, + v8::Local value, + const v8::PropertyCallbackInfo& info) { + v8::Isolate* isolate = info.GetIsolate(); + IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); + if (!pRuntime) + return; + IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); + CJS_Object* pJSObj = + reinterpret_cast(FXJS_GetPrivate(isolate, info.Holder())); + Alt* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); + v8::String::Utf8Value utf8_value(property); + CFX_WideString propname = + CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); + CFX_WideString sError; + CJS_PropValue PropValue(CJS_Value(isolate, value, CJS_Value::VT_unknown)); + PropValue.StartSetting(); + if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), PropValue, sError)) { + FXJS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError)); + } +} + +template +void JSSpecialPropDel(const char* class_name, + v8::Local property, + const v8::PropertyCallbackInfo& info) { + v8::Isolate* isolate = info.GetIsolate(); + IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); + if (!pRuntime) + return; + IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); + CJS_Object* pJSObj = + reinterpret_cast(FXJS_GetPrivate(isolate, info.Holder())); + Alt* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); + v8::String::Utf8Value utf8_value(property); + CFX_WideString propname = + CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); + CFX_WideString sError; + if (!pObj->DelProperty(pRuntimeContext, propname.c_str(), sError)) { + CFX_ByteString cbName; + cbName.Format("%s.%s", class_name, "DelProperty"); + // Probably a missing call to JSFX_Error(). + } +} + +#define DECLARE_SPECIAL_JS_CLASS(js_class_name) \ + static void JSConstructor(IFXJS_Context* cc, v8::Local obj, \ + v8::Local global); \ + static void JSDestructor(v8::Local obj); \ + static JSConstSpec JS_Class_Consts[]; \ + static JSPropertySpec JS_Class_Properties[]; \ + static JSMethodSpec JS_Class_Methods[]; \ + static void DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType); \ + static const wchar_t* m_pClassName; \ + static void queryprop_##js_class_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info); \ + static void getprop_##js_class_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info); \ + static void putprop_##js_class_name##_static( \ + v8::Local property, v8::Local value, \ + const v8::PropertyCallbackInfo& info); \ + static void delprop_##js_class_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info) + +#define IMPLEMENT_SPECIAL_JS_CLASS(js_class_name, class_alternate, class_name) \ + const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ + void js_class_name::queryprop_##js_class_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info) { \ + JSSpecialPropQuery(#class_name, property, info); \ + } \ + void js_class_name::getprop_##js_class_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info) { \ + JSSpecialPropGet(#class_name, property, info); \ + } \ + void js_class_name::putprop_##js_class_name##_static( \ + v8::Local property, v8::Local value, \ + const v8::PropertyCallbackInfo& info) { \ + JSSpecialPropPut(#class_name, property, value, info); \ + } \ + void js_class_name::delprop_##js_class_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info) { \ + JSSpecialPropDel(#class_name, property, info); \ + } \ + void js_class_name::JSConstructor(IFXJS_Context* cc, \ + v8::Local obj, \ + v8::Local global) { \ + CJS_Object* pObj = new js_class_name(obj); \ + pObj->SetEmbedObject(new class_alternate(pObj)); \ + FXJS_SetPrivate(NULL, obj, (void*)pObj); \ + pObj->InitInstance(cc); \ + } \ + \ + void js_class_name::JSDestructor(v8::Local obj) { \ + js_class_name* pObj = (js_class_name*)FXJS_GetPrivate(NULL, obj); \ + ASSERT(pObj != NULL); \ + pObj->ExitInstance(); \ + delete pObj; \ + } \ + \ + void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ + FXJSOBJTYPE eObjType) { \ + int nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::m_pClassName, \ + eObjType, JSConstructor, JSDestructor); \ + for (int i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) { \ + FXJS_DefineObjProperty( \ + pIsolate, nObjDefnID, JS_Class_Properties[i].pName, \ + JS_Class_Properties[i].pPropGet, JS_Class_Properties[i].pPropPut); \ + } \ + \ + for (int i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) { \ + FXJS_DefineObjMethod(pIsolate, nObjDefnID, JS_Class_Methods[i].pName, \ + JS_Class_Methods[i].pMethodCall); \ + } \ + FXJS_DefineObjAllProperties( \ + pIsolate, nObjDefnID, \ + js_class_name::queryprop_##js_class_name##_static, \ + js_class_name::getprop_##js_class_name##_static, \ + js_class_name::putprop_##js_class_name##_static, \ + js_class_name::delprop_##js_class_name##_static); \ + } + +/* ======================================== GLOBAL METHODS + * ============================================ */ + +template +void JSGlobalFunc(const char* func_name_string, + const v8::FunctionCallbackInfo& info) { + v8::Isolate* isolate = info.GetIsolate(); + IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate); + if (!pRuntime) + return; + IFXJS_Context* cc = pRuntime->GetCurrentContext(); + CJS_Parameters parameters; + for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { + parameters.push_back(CJS_Value(isolate, info[i], CJS_Value::VT_unknown)); + } + CJS_Value valueRes(isolate); + CFX_WideString sError; + if (!(*F)(cc, parameters, valueRes, sError)) { + FXJS_Error(isolate, JSFormatErrorString(func_name_string, nullptr, sError)); + return; + } + info.GetReturnValue().Set(valueRes.ToV8Value()); +} + +#define JS_STATIC_GLOBAL_FUN(fun_name) \ + static void fun_name##_static( \ + const v8::FunctionCallbackInfo& info) { \ + JSGlobalFunc(#fun_name, info); \ + } + +#define JS_STATIC_DECLARE_GLOBAL_FUN() \ + static JSMethodSpec global_methods[]; \ + static void DefineJSObjects(v8::Isolate* pIsolate) + +#define BEGIN_JS_STATIC_GLOBAL_FUN(js_class_name) \ + JSMethodSpec js_class_name::global_methods[] = { +#define JS_STATIC_GLOBAL_FUN_ENTRY(method_name) \ + JS_STATIC_METHOD_ENTRY(method_name) + +#define END_JS_STATIC_GLOBAL_FUN() END_JS_STATIC_METHOD() + +#define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \ + void js_class_name::DefineJSObjects(v8::Isolate* pIsolate) { \ + for (int i = 0; i < FX_ArraySize(global_methods) - 1; ++i) { \ + FXJS_DefineGlobalMethod(pIsolate, \ + js_class_name::global_methods[i].pName, \ + js_class_name::global_methods[i].pMethodCall); \ + } \ + } + +CJS_Value::Type GET_VALUE_TYPE(v8::Local p); + +#endif // FPDFSDK_SRC_JAVASCRIPT_JS_DEFINE_H_ diff --git a/fpdfsdk/src/javascript/JS_EventHandler.cpp b/fpdfsdk/src/javascript/JS_EventHandler.cpp index 64a6168e83..42d61f4c1e 100644 --- a/fpdfsdk/src/javascript/JS_EventHandler.cpp +++ b/fpdfsdk/src/javascript/JS_EventHandler.cpp @@ -4,15 +4,16 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "JS_EventHandler.h" + #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_EventHandler.h" -#include "../../include/javascript/JS_Context.h" -#include "../../include/javascript/JS_Runtime.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/Document.h" -#include "../../include/javascript/Field.h" +#include "Document.h" +#include "Field.h" +#include "JS_Context.h" +#include "JS_Define.h" +#include "JS_Object.h" +#include "JS_Runtime.h" +#include "JS_Value.h" /* ---------------------------- CJS_EventHandler ---------------------------- */ diff --git a/fpdfsdk/src/javascript/JS_EventHandler.h b/fpdfsdk/src/javascript/JS_EventHandler.h new file mode 100644 index 0000000000..5b67ec4baf --- /dev/null +++ b/fpdfsdk/src/javascript/JS_EventHandler.h @@ -0,0 +1,220 @@ +// 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_SRC_JAVASCRIPT_JS_EVENTHANDLER_H_ +#define FPDFSDK_SRC_JAVASCRIPT_JS_EVENTHANDLER_H_ + +#include "../../../core/include/fxcrt/fx_string.h" +#include "../../../core/include/fxcrt/fx_system.h" + +class CJS_Context; +class CPDFSDK_Annot; +class CPDFSDK_Document; +class CPDF_Bookmark; +class CPDF_FormField; +class Field; + +enum JS_EVENT_T { + JET_UNKNOWN, + JET_APP_INIT, + JET_DOC_OPEN, + JET_DOC_WILLPRINT, + JET_DOC_DIDPRINT, + JET_DOC_WILLSAVE, + JET_DOC_DIDSAVE, + JET_DOC_WILLCLOSE, + JET_PAGE_OPEN, + JET_PAGE_CLOSE, + JET_PAGE_INVIEW, + JET_PAGE_OUTVIEW, + JET_FIELD_MOUSEDOWN, + JET_FIELD_MOUSEUP, + JET_FIELD_MOUSEENTER, + JET_FIELD_MOUSEEXIT, + JET_FIELD_FOCUS, + JET_FIELD_BLUR, + JET_FIELD_KEYSTROKE, + JET_FIELD_VALIDATE, + JET_FIELD_CALCULATE, + JET_FIELD_FORMAT, + JET_SCREEN_FOCUS, + JET_SCREEN_BLUR, + JET_SCREEN_OPEN, + JET_SCREEN_CLOSE, + JET_SCREEN_MOUSEDOWN, + JET_SCREEN_MOUSEUP, + JET_SCREEN_MOUSEENTER, + JET_SCREEN_MOUSEEXIT, + JET_SCREEN_INVIEW, + JET_SCREEN_OUTVIEW, + JET_BATCH_EXEC, + JET_MENU_EXEC, + JET_CONSOLE_EXEC, + JET_EXTERNAL_EXEC, + JET_BOOKMARK_MOUSEUP, + JET_LINK_MOUSEUP +}; + +class CJS_EventHandler { + public: + CJS_EventHandler(CJS_Context* pContext); + virtual ~CJS_EventHandler(); + + void OnApp_Init(); + + void OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName); + void OnDoc_WillPrint(CPDFSDK_Document* pDoc); + void OnDoc_DidPrint(CPDFSDK_Document* pDoc); + void OnDoc_WillSave(CPDFSDK_Document* pDoc); + void OnDoc_DidSave(CPDFSDK_Document* pDoc); + void OnDoc_WillClose(CPDFSDK_Document* pDoc); + + void OnPage_Open(CPDFSDK_Document* pDoc); + void OnPage_Close(CPDFSDK_Document* pDoc); + void OnPage_InView(CPDFSDK_Document* pTarget); + void OnPage_OutView(CPDFSDK_Document* pTarget); + + void OnField_Calculate(CPDF_FormField* pSource, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc); + void OnField_Format(CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit); + 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); + 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); + + void OnField_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget); + void OnField_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget); + void OnField_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget); + void OnField_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget); + void OnField_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value); + void OnField_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value); + + void OnScreen_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); + void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); + void OnScreen_Close(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_InView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_OutView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + + void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark); + void OnLink_MouseUp(CPDFSDK_Document* pTarget); + + void OnMenu_Exec(CPDFSDK_Document* pTarget, + const CFX_WideString& strTargetName); + void OnBatchExec(CPDFSDK_Document* pTarget); + void OnConsole_Exec(); + void OnExternal_Exec(); + + public: + void Initial(JS_EVENT_T type); + void Destroy(); + FX_BOOL IsValid(); + + CFX_WideString& Change(); + CFX_WideString ChangeEx(); + int CommitKey(); + FX_BOOL FieldFull(); + FX_BOOL KeyDown(); + FX_BOOL Modifier(); + const FX_WCHAR* Name(); + const FX_WCHAR* Type(); + FX_BOOL& Rc(); + int& SelEnd(); + int& SelStart(); + FX_BOOL Shift(); + Field* Source(); + Field* Target_Field(); + CFX_WideString& Value(); + FX_BOOL WillCommit(); + CFX_WideString TargetName(); + + JS_EVENT_T EventType() { return m_eEventType; } + + public: + CJS_Context* m_pJSContext; + JS_EVENT_T m_eEventType; + FX_BOOL m_bValid; + + CFX_WideString m_strTargetName; + CFX_WideString m_strSourceName; + CFX_WideString* m_pWideStrChange; + CFX_WideString m_WideStrChangeDu; + CFX_WideString m_WideStrChangeEx; + int m_nCommitKey; + FX_BOOL m_bKeyDown; + FX_BOOL m_bModifier; + FX_BOOL m_bShift; + int* m_pISelEnd; + int m_nSelEndDu; + int* m_pISelStart; + int m_nSelStartDu; + FX_BOOL m_bWillCommit; + CFX_WideString* m_pValue; + FX_BOOL m_bFieldFull; + FX_BOOL* m_pbRc; + FX_BOOL m_bRcDu; + + CPDFSDK_Document* m_pSourceDoc; + CPDF_Bookmark* m_pTargetBookMark; + CPDFSDK_Document* m_pTargetDoc; + CPDFSDK_Annot* m_pTargetAnnot; +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_JS_EVENTHANDLER_H_ diff --git a/fpdfsdk/src/javascript/JS_GlobalData.cpp b/fpdfsdk/src/javascript/JS_GlobalData.cpp index 7f2c9ecf55..cf51f9f73d 100644 --- a/fpdfsdk/src/javascript/JS_GlobalData.cpp +++ b/fpdfsdk/src/javascript/JS_GlobalData.cpp @@ -4,9 +4,10 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "JS_GlobalData.h" + #include "../../../core/include/fdrm/fx_crypt.h" #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_GlobalData.h" #define JS_MAXGLOBALDATA (1024 * 4 - 8) diff --git a/fpdfsdk/src/javascript/JS_GlobalData.h b/fpdfsdk/src/javascript/JS_GlobalData.h new file mode 100644 index 0000000000..606fe4b409 --- /dev/null +++ b/fpdfsdk/src/javascript/JS_GlobalData.h @@ -0,0 +1,107 @@ +// 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_SRC_JAVASCRIPT_JS_GLOBALDATA_H_ +#define FPDFSDK_SRC_JAVASCRIPT_JS_GLOBALDATA_H_ + +#include "../../../core/include/fxcrt/fx_basic.h" + +#define JS_GLOBALDATA_TYPE_NUMBER 0 +#define JS_GLOBALDATA_TYPE_BOOLEAN 1 +#define JS_GLOBALDATA_TYPE_STRING 2 +#define JS_GLOBALDATA_TYPE_OBJECT 3 +#define JS_GLOBALDATA_TYPE_NULL 4 + +class CJS_KeyValue; +class CPDFDoc_Environment; + +class CJS_GlobalVariableArray { + public: + CJS_GlobalVariableArray(); + virtual ~CJS_GlobalVariableArray(); + + void Add(CJS_KeyValue* p); + int Count() const; + CJS_KeyValue* GetAt(int index) const; + void Copy(const CJS_GlobalVariableArray& array); + + void Empty(); + + private: + CFX_ArrayTemplate array; +}; + +class CJS_KeyValue { + public: + CJS_KeyValue() {} + virtual ~CJS_KeyValue() {} + + CFX_ByteString sKey; + int nType; // 0:int 1:bool 2:string 3:obj + double dData; + bool bData; + CFX_ByteString sData; + CJS_GlobalVariableArray objData; +}; + +class CJS_GlobalData_Element { + public: + CJS_GlobalData_Element() {} + virtual ~CJS_GlobalData_Element() {} + + CJS_KeyValue data; + FX_BOOL bPersistent; +}; + +class CJS_GlobalData { + public: + static CJS_GlobalData* GetRetainedInstance(CPDFDoc_Environment* pApp); + void Release(); + + void SetGlobalVariableNumber(const FX_CHAR* propname, double dData); + void SetGlobalVariableBoolean(const FX_CHAR* propname, bool bData); + void SetGlobalVariableString(const FX_CHAR* propname, + const CFX_ByteString& sData); + void SetGlobalVariableObject(const FX_CHAR* propname, + const CJS_GlobalVariableArray& array); + void SetGlobalVariableNull(const FX_CHAR* propname); + + FX_BOOL SetGlobalVariablePersistent(const FX_CHAR* propname, + FX_BOOL bPersistent); + FX_BOOL DeleteGlobalVariable(const FX_CHAR* propname); + + int32_t GetSize() const; + CJS_GlobalData_Element* GetAt(int index) const; + + private: + static CJS_GlobalData* g_Instance; + + CJS_GlobalData(CPDFDoc_Environment* pApp); + ~CJS_GlobalData(); + + void LoadGlobalPersistentVariables(); + void SaveGlobalPersisitentVariables(); + + CJS_GlobalData_Element* GetGlobalVariable(const FX_CHAR* propname); + int FindGlobalVariable(const FX_CHAR* propname); + + void LoadFileBuffer(const FX_WCHAR* sFilePath, + uint8_t*& pBuffer, + int32_t& nLength); + void WriteFileBuffer(const FX_WCHAR* sFilePath, + const FX_CHAR* pBuffer, + int32_t nLength); + void MakeByteString(const CFX_ByteString& name, + CJS_KeyValue* pData, + CFX_BinaryBuf& sData); + + private: + size_t m_RefCount; + CFX_ArrayTemplate m_arrayGlobalData; + CFX_WideString m_sFilePath; +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_JS_GLOBALDATA_H_ diff --git a/fpdfsdk/src/javascript/JS_Object.cpp b/fpdfsdk/src/javascript/JS_Object.cpp index 7898f48516..0556c4ea47 100644 --- a/fpdfsdk/src/javascript/JS_Object.cpp +++ b/fpdfsdk/src/javascript/JS_Object.cpp @@ -4,10 +4,12 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "JS_Object.h" + +#include "../../include/fsdk_mgr.h" // For CPDFDoc_Environment. #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Context.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" +#include "JS_Context.h" +#include "JS_Define.h" namespace { diff --git a/fpdfsdk/src/javascript/JS_Object.h b/fpdfsdk/src/javascript/JS_Object.h new file mode 100644 index 0000000000..82d1da9ee9 --- /dev/null +++ b/fpdfsdk/src/javascript/JS_Object.h @@ -0,0 +1,116 @@ +// 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_SRC_JAVASCRIPT_JS_OBJECT_H_ +#define FPDFSDK_SRC_JAVASCRIPT_JS_OBJECT_H_ + +#include + +#include "../../../third_party/base/nonstd_unique_ptr.h" +#include "../../include/fsdk_define.h" // For FX_UINT +#include "../../include/jsapi/fxjs_v8.h" +#include "JS_Runtime.h" + +class CJS_Context; +class CJS_Object; +class CJS_Timer; +class CPDFDoc_Environment; +class CJS_EmbedObj { + public: + explicit CJS_EmbedObj(CJS_Object* pJSObject); + virtual ~CJS_EmbedObj(); + + virtual void TimerProc(CJS_Timer* pTimer) {} + + CJS_Object* GetJSObject() const { return m_pJSObject; } + + int MsgBox(CPDFDoc_Environment* pApp, + const FX_WCHAR* swMsg, + const FX_WCHAR* swTitle, + FX_UINT nType, + FX_UINT nIcon); + void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg); + + protected: + CJS_Object* m_pJSObject; +}; + +class CJS_Object { + public: + explicit CJS_Object(v8::Local pObject); + virtual ~CJS_Object(); + + void MakeWeak(); + void Dispose(); + + virtual FX_BOOL IsType(const FX_CHAR* sClassName) { return TRUE; } + virtual CFX_ByteString GetClassName() { return ""; } + + virtual FX_BOOL InitInstance(IFXJS_Context* cc) { return TRUE; } + virtual FX_BOOL ExitInstance() { return TRUE; } + + v8::Local ToV8Object() { return m_pV8Object.Get(m_pIsolate); } + + // Takes ownership of |pObj|. + void SetEmbedObject(CJS_EmbedObj* pObj) { m_pEmbedObj.reset(pObj); } + CJS_EmbedObj* GetEmbedObject() const { return m_pEmbedObj.get(); } + + static int MsgBox(CPDFDoc_Environment* pApp, + const FX_WCHAR* swMsg, + const FX_WCHAR* swTitle, + FX_UINT nType, + FX_UINT nIcon); + static void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg); + + v8::Isolate* GetIsolate() { return m_pIsolate; } + + protected: + nonstd::unique_ptr m_pEmbedObj; + v8::Global m_pV8Object; + v8::Isolate* m_pIsolate; +}; + +class CJS_Timer : public CJS_Runtime::Observer { + public: + CJS_Timer(CJS_EmbedObj* pObj, + CPDFDoc_Environment* pApp, + CJS_Runtime* pRuntime, + int nType, + const CFX_WideString& script, + FX_DWORD dwElapse, + FX_DWORD dwTimeOut); + ~CJS_Timer() override; + + void KillJSTimer(); + + int GetType() const { return m_nType; } + FX_DWORD GetTimeOut() const { return m_dwTimeOut; } + CJS_Runtime* GetRuntime() const { return m_bValid ? m_pRuntime : nullptr; } + CFX_WideString GetJScript() const { return m_swJScript; } + + static void TimerProc(int idEvent); + + private: + using TimerMap = std::map; + static TimerMap* GetGlobalTimerMap(); + + // CJS_Runtime::Observer + void OnDestroyed() override; + + FX_DWORD m_nTimerID; + CJS_EmbedObj* const m_pEmbedObj; + bool m_bProcessing; + bool m_bValid; + + // data + const int m_nType; // 0:Interval; 1:TimeOut + const FX_DWORD m_dwTimeOut; + const CFX_WideString m_swJScript; + CJS_Runtime* const m_pRuntime; + CPDFDoc_Environment* const m_pApp; +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_JS_OBJECT_H_ diff --git a/fpdfsdk/src/javascript/JS_Runtime.cpp b/fpdfsdk/src/javascript/JS_Runtime.cpp index fe197c5517..2daa62608b 100644 --- a/fpdfsdk/src/javascript/JS_Runtime.cpp +++ b/fpdfsdk/src/javascript/JS_Runtime.cpp @@ -4,29 +4,35 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "JS_Runtime.h" + +#include "../../include/fsdk_mgr.h" // For CPDFDoc_Environment. #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_EventHandler.h" -#include "../../include/javascript/JS_Runtime.h" -#include "../../include/javascript/JS_Context.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/app.h" -#include "../../include/javascript/color.h" -#include "../../include/javascript/Consts.h" -#include "../../include/javascript/Document.h" -#include "../../include/javascript/event.h" -#include "../../include/javascript/Field.h" -#include "../../include/javascript/Icon.h" -#include "../../include/javascript/PublicMethods.h" -#include "../../include/javascript/report.h" -#include "../../include/javascript/util.h" -#include "../../include/javascript/JS_GlobalData.h" -#include "../../include/javascript/global.h" -#include "../../include/javascript/console.h" +#include "Consts.h" +#include "Document.h" +#include "Field.h" +#include "Icon.h" +#include "JS_Context.h" +#include "JS_Define.h" +#include "JS_EventHandler.h" +#include "JS_GlobalData.h" +#include "JS_Object.h" +#include "JS_Value.h" +#include "PublicMethods.h" +#include "app.h" +#include "color.h" +#include "console.h" +#include "event.h" +#include "global.h" +#include "report.h" +#include "util.h" /* ------------------------------ CJS_Runtime ------------------------------ */ +IFXJS_Runtime* IFXJS_Runtime::Create(CPDFDoc_Environment* pEnv) { + return new CJS_Runtime(pEnv); +} + CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp) : m_pApp(pApp), m_pDocument(NULL), diff --git a/fpdfsdk/src/javascript/JS_Runtime.h b/fpdfsdk/src/javascript/JS_Runtime.h new file mode 100644 index 0000000000..ac8c532b53 --- /dev/null +++ b/fpdfsdk/src/javascript/JS_Runtime.h @@ -0,0 +1,72 @@ +// 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_SRC_JAVASCRIPT_JS_RUNTIME_H_ +#define FPDFSDK_SRC_JAVASCRIPT_JS_RUNTIME_H_ + +#include +#include + +#include "../../../core/include/fxcrt/fx_basic.h" +#include "../../include/javascript/IJavaScript.h" +#include "../../include/jsapi/fxjs_v8.h" +#include "JS_EventHandler.h" + +class CJS_Context; + +class CJS_Runtime : public IFXJS_Runtime { + public: + class Observer { + public: + virtual void OnDestroyed() = 0; + + protected: + virtual ~Observer() {} + }; + + using FieldEvent = std::pair; + + explicit CJS_Runtime(CPDFDoc_Environment* pApp); + ~CJS_Runtime() override; + + // IFXJS_Runtime + IFXJS_Context* NewContext() override; + void ReleaseContext(IFXJS_Context* pContext) override; + IFXJS_Context* GetCurrentContext() override; + void SetReaderDocument(CPDFSDK_Document* pReaderDoc) override; + CPDFSDK_Document* GetReaderDocument() override { return m_pDocument; } + + 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 AddObserver(Observer* observer); + void RemoveObserver(Observer* observer); + + private: + void DefineJSObjects(); + + CFX_ArrayTemplate m_ContextArray; + CPDFDoc_Environment* 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::set m_observers; +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_JS_RUNTIME_H_ diff --git a/fpdfsdk/src/javascript/JS_Value.cpp b/fpdfsdk/src/javascript/JS_Value.cpp index f4aecba94e..94b5ff6e8c 100644 --- a/fpdfsdk/src/javascript/JS_Value.cpp +++ b/fpdfsdk/src/javascript/JS_Value.cpp @@ -4,14 +4,15 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "JS_Value.h" + #include #include #include -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/Document.h" +#include "Document.h" +#include "JS_Define.h" +#include "JS_Object.h" static const FX_DWORD g_nan[2] = {0, 0x7FF80000}; static double GetNan() { diff --git a/fpdfsdk/src/javascript/JS_Value.h b/fpdfsdk/src/javascript/JS_Value.h new file mode 100644 index 0000000000..fdcc66279f --- /dev/null +++ b/fpdfsdk/src/javascript/JS_Value.h @@ -0,0 +1,218 @@ +// 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_SRC_JAVASCRIPT_JS_VALUE_H_ +#define FPDFSDK_SRC_JAVASCRIPT_JS_VALUE_H_ + +#include "../../../core/include/fxcrt/fx_basic.h" +#include "../../include/jsapi/fxjs_v8.h" + +class CJS_Array; +class CJS_Date; +class CJS_Document; +class CJS_Object; + +class CJS_Value { + public: + enum Type { + VT_unknown, + VT_string, + VT_number, + VT_boolean, + VT_date, + VT_object, + VT_fxobject, + VT_null, + VT_undefined + }; + + CJS_Value(v8::Isolate* isolate); + CJS_Value(v8::Isolate* isolate, v8::Local pValue, Type t); + CJS_Value(v8::Isolate* isolate, const int& iValue); + CJS_Value(v8::Isolate* isolate, const double& dValue); + CJS_Value(v8::Isolate* isolate, const float& fValue); + CJS_Value(v8::Isolate* isolate, const bool& bValue); + CJS_Value(v8::Isolate* isolate, v8::Local); + CJS_Value(v8::Isolate* isolate, CJS_Object*); + CJS_Value(v8::Isolate* isolate, CJS_Document*); + CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr); + CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr); + CJS_Value(v8::Isolate* isolate, CJS_Array& array); + + ~CJS_Value(); + + void SetNull(); + void Attach(v8::Local pValue, Type t); + void Attach(CJS_Value* pValue); + void Detach(); + + Type GetType() const; + int ToInt() const; + bool ToBool() const; + double ToDouble() const; + float ToFloat() const; + CJS_Object* ToCJSObject() const; + CFX_WideString ToCFXWideString() const; + CFX_ByteString ToCFXByteString() const; + v8::Local ToV8Object() const; + v8::Local ToV8Array() const; + v8::Local ToV8Value() const; + + void operator=(int iValue); + void operator=(bool bValue); + void operator=(double); + void operator=(float); + void operator=(CJS_Object*); + void operator=(CJS_Document*); + void operator=(v8::Local); + void operator=(CJS_Array&); + void operator=(CJS_Date&); + void operator=(const FX_WCHAR* pWstr); + void operator=(const FX_CHAR* pStr); + void operator=(CJS_Value value); + + FX_BOOL IsArrayObject() const; + FX_BOOL IsDateObject() const; + FX_BOOL ConvertToArray(CJS_Array&) const; + FX_BOOL ConvertToDate(CJS_Date&) const; + + v8::Isolate* GetIsolate() { return m_isolate; } + + protected: + Type m_eType; + v8::Local m_pValue; + v8::Isolate* m_isolate; +}; + +class CJS_Parameters : public CFX_ArrayTemplate { + public: + void push_back(const CJS_Value& newElement) { + CFX_ArrayTemplate::Add(newElement); + } + int size() const { return CFX_ArrayTemplate::GetSize(); } +}; + +class CJS_PropValue : public CJS_Value { + public: + CJS_PropValue(const CJS_Value&); + CJS_PropValue(v8::Isolate* isolate); + ~CJS_PropValue(); + + public: + FX_BOOL IsSetting(); + FX_BOOL IsGetting(); + void operator<<(int); + void operator>>(int&) const; + void operator<<(bool); + void operator>>(bool&) const; + void operator<<(double); + void operator>>(double&) const; + void operator<<(CJS_Object* pObj); + void operator>>(CJS_Object*& ppObj) const; + void operator<<(CJS_Document* pJsDoc); + void operator>>(CJS_Document*& ppJsDoc) const; + void operator<<(CFX_ByteString); + void operator>>(CFX_ByteString&) const; + void operator<<(CFX_WideString); + void operator>>(CFX_WideString&) const; + void operator<<(const FX_WCHAR* c_string); + void operator<<(v8::Local); + void operator>>(v8::Local&) const; + void operator>>(CJS_Array& array) const; + void operator<<(CJS_Array& array); + void operator<<(CJS_Date& date); + void operator>>(CJS_Date& date) const; + operator v8::Local() const; + void StartSetting(); + void StartGetting(); + + private: + FX_BOOL m_bIsSetting; +}; + +class CJS_Array { + public: + CJS_Array(v8::Isolate* isolate); + virtual ~CJS_Array(); + + void Attach(v8::Local pArray); + void GetElement(unsigned index, CJS_Value& value); + void SetElement(unsigned index, CJS_Value value); + int GetLength(); + FX_BOOL IsAttached(); + operator v8::Local(); + + v8::Isolate* GetIsolate() { return m_isolate; } + + private: + v8::Local m_pArray; + v8::Isolate* m_isolate; +}; + +class CJS_Date { + friend class CJS_Value; + + public: + CJS_Date(v8::Isolate* isolate); + CJS_Date(v8::Isolate* isolate, double dMsec_time); + CJS_Date(v8::Isolate* isolate, + int year, + int mon, + int day, + int hour, + int min, + int sec); + virtual ~CJS_Date(); + void Attach(v8::Local pDate); + + int GetYear(); + void SetYear(int iYear); + + int GetMonth(); + void SetMonth(int iMonth); + + int GetDay(); + void SetDay(int iDay); + + int GetHours(); + void SetHours(int iHours); + + int GetMinutes(); + void SetMinutes(int minutes); + + int GetSeconds(); + void SetSeconds(int seconds); + + operator v8::Local(); + operator double() const; + + CFX_WideString ToString() const; + + static double + MakeDate(int year, int mon, int mday, int hour, int min, int sec, int ms); + + FX_BOOL IsValidDate(); + + protected: + v8::Local m_pDate; + v8::Isolate* m_isolate; +}; + +double JS_GetDateTime(); +int JS_GetYearFromTime(double dt); +int JS_GetMonthFromTime(double dt); +int JS_GetDayFromTime(double dt); +int JS_GetHourFromTime(double dt); +int JS_GetMinFromTime(double dt); +int JS_GetSecFromTime(double dt); +double JS_DateParse(const wchar_t* string); +double JS_MakeDay(int nYear, int nMonth, int nDay); +double JS_MakeTime(int nHour, int nMin, int nSec, int nMs); +double JS_MakeDate(double day, double time); +bool JS_PortIsNan(double d); +double JS_LocalTime(double d); + +#endif // FPDFSDK_SRC_JAVASCRIPT_JS_VALUE_H_ diff --git a/fpdfsdk/src/javascript/PublicMethods.cpp b/fpdfsdk/src/javascript/PublicMethods.cpp index 5b923ca4fc..974049838f 100644 --- a/fpdfsdk/src/javascript/PublicMethods.cpp +++ b/fpdfsdk/src/javascript/PublicMethods.cpp @@ -4,19 +4,20 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "PublicMethods.h" + +#include "../../include/fsdk_mgr.h" // For CPDFDoc_Environment. #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/PublicMethods.h" -#include "../../include/javascript/JS_EventHandler.h" -#include "../../include/javascript/resource.h" -#include "../../include/javascript/JS_Context.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/util.h" -#include "../../include/javascript/Field.h" -#include "../../include/javascript/color.h" -#include "../../include/javascript/JS_Runtime.h" +#include "Field.h" +#include "JS_Context.h" +#include "JS_Define.h" +#include "JS_EventHandler.h" +#include "JS_Object.h" +#include "JS_Runtime.h" +#include "JS_Value.h" +#include "color.h" +#include "resource.h" +#include "util.h" static v8::Isolate* GetIsolate(IFXJS_Context* cc) { CJS_Context* pContext = (CJS_Context*)cc; diff --git a/fpdfsdk/src/javascript/PublicMethods.h b/fpdfsdk/src/javascript/PublicMethods.h new file mode 100644 index 0000000000..47885b428b --- /dev/null +++ b/fpdfsdk/src/javascript/PublicMethods.h @@ -0,0 +1,185 @@ +// 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_SRC_JAVASCRIPT_PUBLICMETHODS_H_ +#define FPDFSDK_SRC_JAVASCRIPT_PUBLICMETHODS_H_ + +#include "JS_Define.h" + +class CJS_PublicMethods : public CJS_Object { + public: + CJS_PublicMethods(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_PublicMethods() override {} + + public: + static FX_BOOL AFNumber_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFNumber_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFPercent_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFPercent_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFDate_FormatEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFDate_KeystrokeEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFDate_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFDate_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFTime_FormatEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); // + static FX_BOOL AFTime_KeystrokeEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFTime_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFTime_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFSpecial_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFSpecial_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFSpecial_KeystrokeEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); // + static FX_BOOL AFSimple(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFMakeNumber(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFSimple_Calculate(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFRange_Validate(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFMergeChange(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFParseDateEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFExtractNums(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + + public: + JS_STATIC_GLOBAL_FUN(AFNumber_Format); + JS_STATIC_GLOBAL_FUN(AFNumber_Keystroke); + JS_STATIC_GLOBAL_FUN(AFPercent_Format); + JS_STATIC_GLOBAL_FUN(AFPercent_Keystroke); + JS_STATIC_GLOBAL_FUN(AFDate_FormatEx); + JS_STATIC_GLOBAL_FUN(AFDate_KeystrokeEx); + JS_STATIC_GLOBAL_FUN(AFDate_Format); + JS_STATIC_GLOBAL_FUN(AFDate_Keystroke); + JS_STATIC_GLOBAL_FUN(AFTime_FormatEx); + JS_STATIC_GLOBAL_FUN(AFTime_KeystrokeEx); + JS_STATIC_GLOBAL_FUN(AFTime_Format); + JS_STATIC_GLOBAL_FUN(AFTime_Keystroke); + JS_STATIC_GLOBAL_FUN(AFSpecial_Format); + JS_STATIC_GLOBAL_FUN(AFSpecial_Keystroke); + JS_STATIC_GLOBAL_FUN(AFSpecial_KeystrokeEx); + JS_STATIC_GLOBAL_FUN(AFSimple); + JS_STATIC_GLOBAL_FUN(AFMakeNumber); + JS_STATIC_GLOBAL_FUN(AFSimple_Calculate); + JS_STATIC_GLOBAL_FUN(AFRange_Validate); + JS_STATIC_GLOBAL_FUN(AFMergeChange); + JS_STATIC_GLOBAL_FUN(AFParseDateEx); + JS_STATIC_GLOBAL_FUN(AFExtractNums); + + JS_STATIC_DECLARE_GLOBAL_FUN(); + + public: + static int ParseStringInteger(const CFX_WideString& string, + int nStart, + int& nSkip, + int nMaxStep); + static CFX_WideString ParseStringString(const CFX_WideString& string, + int nStart, + int& nSkip); + static double MakeRegularDate(const CFX_WideString& value, + const CFX_WideString& format, + FX_BOOL& bWrongFormat); + static CFX_WideString MakeFormatDate(double dDate, + const CFX_WideString& format); + static FX_BOOL ConvertStringToNumber(const FX_WCHAR* swSource, + double& dRet, + FX_BOOL& bDot); + static double ParseStringToNumber(const FX_WCHAR* swSource); + static double ParseNormalDate(const CFX_WideString& value, + FX_BOOL& bWrongFormat); + static double MakeInterDate(CFX_WideString strValue); + static double ParseNumber(const FX_WCHAR* swSource, + FX_BOOL& bAllDigits, + FX_BOOL& bDot, + FX_BOOL& bSign, + FX_BOOL& bKXJS); + + public: + static CFX_WideString StrLTrim(const FX_WCHAR* pStr); + static CFX_WideString StrRTrim(const FX_WCHAR* pStr); + static CFX_WideString StrTrim(const FX_WCHAR* pStr); + + static CFX_ByteString StrLTrim(const FX_CHAR* pStr); + static CFX_ByteString StrRTrim(const FX_CHAR* pStr); + static CFX_ByteString StrTrim(const FX_CHAR* pStr); + + static FX_BOOL IsNumber(const FX_CHAR* string); + static FX_BOOL IsNumber(const FX_WCHAR* string); + + static FX_BOOL IsDigit(char ch); + static FX_BOOL IsDigit(wchar_t ch); + static FX_BOOL IsAlphabetic(wchar_t ch); + static FX_BOOL IsAlphaNumeric(wchar_t ch); + + static FX_BOOL maskSatisfied(wchar_t c_Change, wchar_t c_Mask); + static FX_BOOL isReservedMaskChar(wchar_t ch); + + static double AF_Simple(const FX_WCHAR* sFuction, + double dValue1, + double dValue2); + static CJS_Array AF_MakeArrayFromList(v8::Isolate* isolate, CJS_Value val); +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_PUBLICMETHODS_H_ diff --git a/fpdfsdk/src/javascript/app.cpp b/fpdfsdk/src/javascript/app.cpp index bac87ea657..a2e1af4dca 100644 --- a/fpdfsdk/src/javascript/app.cpp +++ b/fpdfsdk/src/javascript/app.cpp @@ -4,17 +4,19 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "app.h" + #include "../../../third_party/base/nonstd_unique_ptr.h" +#include "../../include/fsdk_mgr.h" // For CPDFDoc_Environment. #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/app.h" -#include "../../include/javascript/JS_EventHandler.h" -#include "../../include/javascript/resource.h" -#include "../../include/javascript/JS_Context.h" -#include "../../include/javascript/JS_Runtime.h" -#include "../../include/javascript/Document.h" +#include "Document.h" +#include "JS_Context.h" +#include "JS_Define.h" +#include "JS_EventHandler.h" +#include "JS_Object.h" +#include "JS_Runtime.h" +#include "JS_Value.h" +#include "resource.h" static v8::Isolate* GetIsolate(IFXJS_Context* cc) { CJS_Context* pContext = (CJS_Context*)cc; diff --git a/fpdfsdk/src/javascript/app.h b/fpdfsdk/src/javascript/app.h new file mode 100644 index 0000000000..7824a1e99e --- /dev/null +++ b/fpdfsdk/src/javascript/app.h @@ -0,0 +1,218 @@ +// 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_SRC_JAVASCRIPT_APP_H_ +#define FPDFSDK_SRC_JAVASCRIPT_APP_H_ + +#include "JS_Define.h" + +class CJS_Runtime; + +/* ---------------------------- TimerObj ---------------------------- */ + +class CJS_Timer; + +class TimerObj : public CJS_EmbedObj { + public: + TimerObj(CJS_Object* pJSObject); + ~TimerObj() override; + + public: + void SetTimer(CJS_Timer* pTimer); + CJS_Timer* GetTimer() const; + + private: + CJS_Timer* m_pTimer; +}; + +class CJS_TimerObj : public CJS_Object { + public: + CJS_TimerObj(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_TimerObj() override {} + + DECLARE_JS_CLASS(CJS_TimerObj); +}; + +class app : public CJS_EmbedObj { + public: + app(CJS_Object* pJSObject); + ~app() override; + + public: + FX_BOOL activeDocs(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL calculate(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL formsVersion(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL fs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL fullscreen(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL language(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL platform(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL runtimeHighlight(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL viewerType(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL viewerVariation(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL viewerVersion(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + + FX_BOOL alert(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL beep(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL browseForDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL clearInterval(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL clearTimeOut(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL execDialog(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL execMenuItem(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL findComponent(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL goBack(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL goForward(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL launchURL(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL mailMsg(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL newFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL newDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL openDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL openFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL popUpMenuEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL popUpMenu(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL response(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL setInterval(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL setTimeOut(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + + static CFX_WideString SysPathToPDFPath(const CFX_WideString& sOldPath); + + private: + // CJS_EmbedObj + void TimerProc(CJS_Timer* pTimer) override; + void RunJsScript(CJS_Runtime* pRuntime, const CFX_WideString& wsScript); + + bool m_bCalculate; + bool m_bRuntimeHighLight; + CFX_ArrayTemplate m_aTimer; +}; + +class CJS_App : public CJS_Object { + public: + explicit CJS_App(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_App() override {} + + DECLARE_JS_CLASS(CJS_App); + + JS_STATIC_PROP(activeDocs, app); + JS_STATIC_PROP(calculate, app); + JS_STATIC_PROP(formsVersion, app); + JS_STATIC_PROP(fs, app); + JS_STATIC_PROP(fullscreen, app); + JS_STATIC_PROP(language, app); + JS_STATIC_PROP(media, app); + JS_STATIC_PROP(platform, app); + JS_STATIC_PROP(runtimeHighlight, app); + JS_STATIC_PROP(viewerType, app); + JS_STATIC_PROP(viewerVariation, app); + JS_STATIC_PROP(viewerVersion, app); + + JS_STATIC_METHOD(alert, app); + JS_STATIC_METHOD(beep, app); + JS_STATIC_METHOD(browseForDoc, app); + JS_STATIC_METHOD(clearInterval, app); + JS_STATIC_METHOD(clearTimeOut, app); + JS_STATIC_METHOD(execDialog, app); + JS_STATIC_METHOD(execMenuItem, app); + JS_STATIC_METHOD(findComponent, app); + JS_STATIC_METHOD(goBack, app); + JS_STATIC_METHOD(goForward, app); + JS_STATIC_METHOD(launchURL, app); + JS_STATIC_METHOD(mailMsg, app); + JS_STATIC_METHOD(newFDF, app); + JS_STATIC_METHOD(newDoc, app); + JS_STATIC_METHOD(openDoc, app); + JS_STATIC_METHOD(openFDF, app); + JS_STATIC_METHOD(popUpMenuEx, app); + JS_STATIC_METHOD(popUpMenu, app); + JS_STATIC_METHOD(response, app); + JS_STATIC_METHOD(setInterval, app); + JS_STATIC_METHOD(setTimeOut, app); +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_APP_H_ diff --git a/fpdfsdk/src/javascript/color.cpp b/fpdfsdk/src/javascript/color.cpp index cac390791f..da6fc60076 100644 --- a/fpdfsdk/src/javascript/color.cpp +++ b/fpdfsdk/src/javascript/color.cpp @@ -4,15 +4,15 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -#include "../../include/javascript/color.h" +#include "color.h" #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/JS_EventHandler.h" -#include "../../include/javascript/JS_Context.h" -#include "../../include/javascript/JS_Runtime.h" +#include "JS_Define.h" +#include "JS_Object.h" +#include "JS_Value.h" +#include "JS_EventHandler.h" +#include "JS_Context.h" +#include "JS_Runtime.h" static v8::Isolate* GetIsolate(IFXJS_Context* cc) { CJS_Context* pContext = (CJS_Context*)cc; diff --git a/fpdfsdk/src/javascript/color.h b/fpdfsdk/src/javascript/color.h new file mode 100644 index 0000000000..9dec19174e --- /dev/null +++ b/fpdfsdk/src/javascript/color.h @@ -0,0 +1,85 @@ +// 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_SRC_JAVASCRIPT_COLOR_H_ +#define FPDFSDK_SRC_JAVASCRIPT_COLOR_H_ + +#include "../../include/pdfwindow/PWL_Wnd.h" // For CPWL_Color. +#include "JS_Define.h" + +class color : public CJS_EmbedObj { + public: + color(CJS_Object* pJSObject); + ~color() override; + + FX_BOOL black(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL blue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL cyan(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL dkGray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL gray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL green(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL ltGray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL magenta(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL red(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL transparent(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL white(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL yellow(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + + FX_BOOL convert(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL equal(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + + public: + static void ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array); + static void ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color); + + private: + CPWL_Color m_crTransparent; + CPWL_Color m_crBlack; + CPWL_Color m_crWhite; + CPWL_Color m_crRed; + CPWL_Color m_crGreen; + CPWL_Color m_crBlue; + CPWL_Color m_crCyan; + CPWL_Color m_crMagenta; + CPWL_Color m_crYellow; + CPWL_Color m_crDKGray; + CPWL_Color m_crGray; + CPWL_Color m_crLTGray; +}; + +class CJS_Color : public CJS_Object { + public: + CJS_Color(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Color() override {} + + DECLARE_JS_CLASS(CJS_Color); + + JS_STATIC_PROP(black, color); + JS_STATIC_PROP(blue, color); + JS_STATIC_PROP(cyan, color); + JS_STATIC_PROP(dkGray, color); + JS_STATIC_PROP(gray, color); + JS_STATIC_PROP(green, color); + JS_STATIC_PROP(ltGray, color); + JS_STATIC_PROP(magenta, color); + JS_STATIC_PROP(red, color); + JS_STATIC_PROP(transparent, color); + JS_STATIC_PROP(white, color); + JS_STATIC_PROP(yellow, color); + + JS_STATIC_METHOD(convert, color); + JS_STATIC_METHOD(equal, color); +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_COLOR_H_ diff --git a/fpdfsdk/src/javascript/console.cpp b/fpdfsdk/src/javascript/console.cpp index 519cecc5b4..a44d239552 100644 --- a/fpdfsdk/src/javascript/console.cpp +++ b/fpdfsdk/src/javascript/console.cpp @@ -4,13 +4,14 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "console.h" + #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/console.h" -#include "../../include/javascript/JS_EventHandler.h" -#include "../../include/javascript/JS_Context.h" +#include "JS_Define.h" +#include "JS_Object.h" +#include "JS_Value.h" +#include "JS_EventHandler.h" +#include "JS_Context.h" /* ------------------------ console ------------------------ */ diff --git a/fpdfsdk/src/javascript/console.h b/fpdfsdk/src/javascript/console.h new file mode 100644 index 0000000000..747bc15098 --- /dev/null +++ b/fpdfsdk/src/javascript/console.h @@ -0,0 +1,49 @@ +// 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_SRC_JAVASCRIPT_CONSOLE_H_ +#define FPDFSDK_SRC_JAVASCRIPT_CONSOLE_H_ + +#include "JS_Define.h" + +class console : public CJS_EmbedObj { + public: + console(CJS_Object* pJSObject); + ~console() override; + + public: + FX_BOOL clear(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL hide(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL println(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL show(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); +}; + +class CJS_Console : public CJS_Object { + public: + CJS_Console(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Console() override {} + + DECLARE_JS_CLASS(CJS_Console); + + JS_STATIC_METHOD(clear, console); + JS_STATIC_METHOD(hide, console); + JS_STATIC_METHOD(println, console); + JS_STATIC_METHOD(show, console); +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_CONSOLE_H_ diff --git a/fpdfsdk/src/javascript/event.cpp b/fpdfsdk/src/javascript/event.cpp index 7031be8c38..0d02503c96 100644 --- a/fpdfsdk/src/javascript/event.cpp +++ b/fpdfsdk/src/javascript/event.cpp @@ -4,14 +4,15 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "event.h" + #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/JS_EventHandler.h" -#include "../../include/javascript/JS_Context.h" -#include "../../include/javascript/event.h" -#include "../../include/javascript/Field.h" +#include "JS_Define.h" +#include "JS_Object.h" +#include "JS_Value.h" +#include "JS_EventHandler.h" +#include "JS_Context.h" +#include "Field.h" /* -------------------------- event -------------------------- */ diff --git a/fpdfsdk/src/javascript/event.h b/fpdfsdk/src/javascript/event.h new file mode 100644 index 0000000000..29ff3bc290 --- /dev/null +++ b/fpdfsdk/src/javascript/event.h @@ -0,0 +1,89 @@ +// 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_SRC_JAVASCRIPT_EVENT_H_ +#define FPDFSDK_SRC_JAVASCRIPT_EVENT_H_ + +#include "JS_Define.h" + +class event : public CJS_EmbedObj { + public: + event(CJS_Object* pJSObject); + ~event() override; + + public: + FX_BOOL change(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL changeEx(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL commitKey(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL fieldFull(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL keyDown(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL modifier(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL rc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL richChange(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL richChangeEx(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL richValue(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL selEnd(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL selStart(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL shift(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL target(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL targetName(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL willCommit(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); +}; + +class CJS_Event : public CJS_Object { + public: + CJS_Event(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Event() override {} + + DECLARE_JS_CLASS(CJS_Event); + + JS_STATIC_PROP(change, event); + JS_STATIC_PROP(changeEx, event); + JS_STATIC_PROP(commitKey, event); + JS_STATIC_PROP(fieldFull, event); + JS_STATIC_PROP(keyDown, event); + JS_STATIC_PROP(modifier, event); + JS_STATIC_PROP(name, event); + JS_STATIC_PROP(rc, event); + JS_STATIC_PROP(richChange, event); + JS_STATIC_PROP(richChangeEx, event); + JS_STATIC_PROP(richValue, event); + JS_STATIC_PROP(selEnd, event); + JS_STATIC_PROP(selStart, event); + JS_STATIC_PROP(shift, event); + JS_STATIC_PROP(source, event); + JS_STATIC_PROP(target, event); + JS_STATIC_PROP(targetName, event); + JS_STATIC_PROP(type, event); + JS_STATIC_PROP(value, event); + JS_STATIC_PROP(willCommit, event); +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_EVENT_H_ diff --git a/fpdfsdk/src/javascript/global.cpp b/fpdfsdk/src/javascript/global.cpp index 5182ae6701..bcd40422aa 100644 --- a/fpdfsdk/src/javascript/global.cpp +++ b/fpdfsdk/src/javascript/global.cpp @@ -4,16 +4,17 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "global.h" + #include "../../../core/include/fxcrt/fx_ext.h" #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Context.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_EventHandler.h" -#include "../../include/javascript/JS_GlobalData.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/global.h" -#include "../../include/javascript/resource.h" +#include "JS_Context.h" +#include "JS_Define.h" +#include "JS_EventHandler.h" +#include "JS_GlobalData.h" +#include "JS_Object.h" +#include "JS_Value.h" +#include "resource.h" /* ---------------------------- global ---------------------------- */ diff --git a/fpdfsdk/src/javascript/global.h b/fpdfsdk/src/javascript/global.h new file mode 100644 index 0000000000..03b6e76bc8 --- /dev/null +++ b/fpdfsdk/src/javascript/global.h @@ -0,0 +1,93 @@ +// 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_SRC_JAVASCRIPT_GLOBAL_H_ +#define FPDFSDK_SRC_JAVASCRIPT_GLOBAL_H_ + +#include + +#include "JS_Define.h" + +class CJS_GlobalData; +class CJS_GlobalVariableArray; +class CJS_KeyValue; + +struct JSGlobalData { + JSGlobalData() { + nType = 0; + dData = 0; + bData = FALSE; + sData = ""; + bPersistent = FALSE; + bDeleted = FALSE; + } + + ~JSGlobalData() { pData.Reset(); } + int nType; // 0:int 1:bool 2:string 3:obj + double dData; + bool bData; + CFX_ByteString sData; + v8::Global pData; + bool bPersistent; + bool bDeleted; +}; + +class JSGlobalAlternate : public CJS_EmbedObj { + public: + JSGlobalAlternate(CJS_Object* pJSObject); + ~JSGlobalAlternate() override; + + FX_BOOL setPersistent(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL QueryProperty(const FX_WCHAR* propname); + FX_BOOL DoProperty(IFXJS_Context* cc, + const FX_WCHAR* propname, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL DelProperty(IFXJS_Context* cc, + const FX_WCHAR* propname, + CFX_WideString& sError); + void Initial(CPDFDoc_Environment* pApp); + + private: + void UpdateGlobalPersistentVariables(); + void CommitGlobalPersisitentVariables(); + void DestroyGlobalPersisitentVariables(); + FX_BOOL SetGlobalVariables(const FX_CHAR* propname, + int nType, + double dData, + bool bData, + const CFX_ByteString& sData, + v8::Local pData, + bool bDefaultPersistent); + + void ObjectToArray(v8::Local pObj, + CJS_GlobalVariableArray& array); + void PutObjectProperty(v8::Local obj, CJS_KeyValue* pData); + + private: + std::map m_mapGlobal; + CFX_WideString m_sFilePath; + CJS_GlobalData* m_pGlobalData; + CPDFDoc_Environment* m_pApp; +}; + +class CJS_Global : public CJS_Object { + public: + explicit CJS_Global(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Global() override {} + + // CJS_Object + FX_BOOL InitInstance(IFXJS_Context* cc) override; + + DECLARE_SPECIAL_JS_CLASS(CJS_Global); + + JS_SPECIAL_STATIC_METHOD(setPersistent, JSGlobalAlternate, global); +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_GLOBAL_H_ diff --git a/fpdfsdk/src/javascript/report.cpp b/fpdfsdk/src/javascript/report.cpp index d3877924c3..629b74972c 100644 --- a/fpdfsdk/src/javascript/report.cpp +++ b/fpdfsdk/src/javascript/report.cpp @@ -4,11 +4,12 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "report.h" + #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/report.h" +#include "JS_Define.h" +#include "JS_Object.h" +#include "JS_Value.h" /* ---------------------- report ---------------------- */ diff --git a/fpdfsdk/src/javascript/report.h b/fpdfsdk/src/javascript/report.h new file mode 100644 index 0000000000..0b4be6d6d7 --- /dev/null +++ b/fpdfsdk/src/javascript/report.h @@ -0,0 +1,40 @@ +// 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_SRC_JAVASCRIPT_REPORT_H_ +#define FPDFSDK_SRC_JAVASCRIPT_REPORT_H_ + +#include "JS_Define.h" + +class Report : public CJS_EmbedObj { + public: + Report(CJS_Object* pJSObject); + ~Report() override; + + public: + FX_BOOL save(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL writeText(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); +}; + +class CJS_Report : public CJS_Object { + public: + CJS_Report(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Report() override {} + + public: + DECLARE_JS_CLASS(CJS_Report); + + JS_STATIC_METHOD(save, Report) + JS_STATIC_METHOD(writeText, Report); +}; + +#endif // FPDFSDK_SRC_JAVASCRIPT_REPORT_H_ diff --git a/fpdfsdk/src/javascript/resource.cpp b/fpdfsdk/src/javascript/resource.cpp index 5b6bd48703..d99e7ce95a 100644 --- a/fpdfsdk/src/javascript/resource.cpp +++ b/fpdfsdk/src/javascript/resource.cpp @@ -4,7 +4,7 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -#include "../../include/javascript/resource.h" +#include "resource.h" CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id) { switch (id) { diff --git a/fpdfsdk/src/javascript/resource.h b/fpdfsdk/src/javascript/resource.h new file mode 100644 index 0000000000..fcefcd486f --- /dev/null +++ b/fpdfsdk/src/javascript/resource.h @@ -0,0 +1,39 @@ +// 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_SRC_JAVASCRIPT_RESOURCE_H_ +#define FPDFSDK_SRC_JAVASCRIPT_RESOURCE_H_ + +#include "../../../core/include/fxcrt/fx_string.h" // For CFX_WideString. +#include "../../include/fsdk_define.h" // For FX_UINT. + +class CJS_Context; + +#define IDS_STRING_JSALERT 25613 +#define IDS_STRING_JSPARAMERROR 25614 +#define IDS_STRING_JSAFNUMBER_KEYSTROKE 25615 +#define IDS_STRING_JSPARAM_TOOLONG 25617 +#define IDS_STRING_JSPARSEDATE 25618 +#define IDS_STRING_JSRANGE1 25619 +#define IDS_STRING_JSRANGE2 25620 +#define IDS_STRING_JSRANGE3 25621 +#define IDS_STRING_NOTSUPPORT 25627 +#define IDS_STRING_JSBUSY 25628 +#define IDS_STRING_JSEVENT 25629 +#define IDS_STRING_RUN 25630 +#define IDS_STRING_JSPRINT1 25632 +#define IDS_STRING_JSPRINT2 25633 +#define IDS_STRING_JSNOGLOBAL 25635 +#define IDS_STRING_JSREADONLY 25636 +#define IDS_STRING_JSTYPEERROR 25637 +#define IDS_STRING_JSVALUEERROR 25638 + +CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id); +CFX_WideString JSFormatErrorString(const char* class_name, + const char* property_name, + const CFX_WideString& details); + +#endif // FPDFSDK_SRC_JAVASCRIPT_RESOURCE_H_ diff --git a/fpdfsdk/src/javascript/util.cpp b/fpdfsdk/src/javascript/util.cpp index 6afddf74b5..c83aa6f5bc 100644 --- a/fpdfsdk/src/javascript/util.cpp +++ b/fpdfsdk/src/javascript/util.cpp @@ -4,16 +4,17 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include "util.h" + #include "../../include/javascript/IJavaScript.h" -#include "../../include/javascript/JS_Define.h" -#include "../../include/javascript/JS_Object.h" -#include "../../include/javascript/JS_Value.h" -#include "../../include/javascript/util.h" -#include "../../include/javascript/PublicMethods.h" -#include "../../include/javascript/resource.h" -#include "../../include/javascript/JS_Context.h" -#include "../../include/javascript/JS_EventHandler.h" -#include "../../include/javascript/JS_Runtime.h" +#include "JS_Context.h" +#include "JS_Define.h" +#include "JS_EventHandler.h" +#include "JS_Object.h" +#include "JS_Runtime.h" +#include "JS_Value.h" +#include "PublicMethods.h" +#include "resource.h" #if _FX_OS_ == _FX_ANDROID_ #include diff --git a/fpdfsdk/src/javascript/util.h b/fpdfsdk/src/javascript/util.h new file mode 100644 index 0000000000..c88462c349 --- /dev/null +++ b/fpdfsdk/src/javascript/util.h @@ -0,0 +1,68 @@ +// 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_SRC_JAVASCRIPT_UTIL_H_ +#define FPDFSDK_SRC_JAVASCRIPT_UTIL_H_ + +#include // For std::wstring. + +#include "JS_Define.h" + +class util : public CJS_EmbedObj { + public: + util(CJS_Object* pJSObject); + ~util() override; + + public: + FX_BOOL printd(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL printf(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL printx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL scand(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL byteToChar(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + + public: + static void printd(const std::wstring& cFormat, + CJS_Date Date, + bool bXFAPicture, + std::wstring& cPurpose); + static void printx(const std::string& cFormat, + const std::string& cSource, + std::string& cPurpose); + static int ParstDataType(std::wstring* sFormat); +}; + +class CJS_Util : public CJS_Object { + public: + CJS_Util(v8::Local pObject) : CJS_Object(pObject) {} + ~CJS_Util() override {} + + DECLARE_JS_CLASS(CJS_Util); + + JS_STATIC_METHOD(printd, util); + JS_STATIC_METHOD(printf, util); + JS_STATIC_METHOD(printx, util); + JS_STATIC_METHOD(scand, util); + JS_STATIC_METHOD(byteToChar, util); +}; + +int64_t FX_atoi64(const char* nptr); + +#endif // FPDFSDK_SRC_JAVASCRIPT_UTIL_H_ diff --git a/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp b/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp index 1c660397d1..394933a9ff 100644 --- a/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp +++ b/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp @@ -2,10 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "../../../third_party/base/nonstd_unique_ptr.h" #include "../../../core/include/fpdfapi/fpdf_parser.h" #include "../../../testing/embedder_test.h" -#include "../../include/fsdk_mgr.h" -#include "../../include/javascript/JS_Runtime.h" #include "../../include/jsapi/fxjs_v8.h" #include "testing/gtest/include/gtest/gtest.h" @@ -49,7 +48,7 @@ class FXJSV8Embeddertest : public EmbedderTest { private: v8::Isolate* m_pIsolate; v8::Global m_pPersistentContext; - nonstd::unique_ptr m_pAllocator; + nonstd::unique_ptr m_pAllocator; }; TEST_F(FXJSV8Embeddertest, Getters) { diff --git a/pdfium.gyp b/pdfium.gyp index 5acc62e9ee..b12d17fdf2 100644 --- a/pdfium.gyp +++ b/pdfium.gyp @@ -623,46 +623,49 @@ ], 'ldflags': [ '-L<(PRODUCT_DIR)',], 'sources': [ - 'fpdfsdk/include/javascript/app.h', - 'fpdfsdk/include/javascript/color.h', - 'fpdfsdk/include/javascript/console.h', - 'fpdfsdk/include/javascript/Consts.h', - 'fpdfsdk/include/javascript/Document.h', - 'fpdfsdk/include/javascript/event.h', - 'fpdfsdk/include/javascript/Field.h', - 'fpdfsdk/include/javascript/global.h', - 'fpdfsdk/include/javascript/Icon.h', 'fpdfsdk/include/javascript/IJavaScript.h', - 'fpdfsdk/include/javascript/JS_Context.h', - 'fpdfsdk/include/javascript/JS_Define.h', - 'fpdfsdk/include/javascript/JS_EventHandler.h', - 'fpdfsdk/include/javascript/JS_GlobalData.h', - 'fpdfsdk/include/javascript/JS_Object.h', - 'fpdfsdk/include/javascript/JS_Runtime.h', - 'fpdfsdk/include/javascript/JS_Value.h', - 'fpdfsdk/include/javascript/PublicMethods.h', - 'fpdfsdk/include/javascript/report.h', - 'fpdfsdk/include/javascript/resource.h', - 'fpdfsdk/include/javascript/util.h', 'fpdfsdk/src/javascript/app.cpp', 'fpdfsdk/src/javascript/color.cpp', 'fpdfsdk/src/javascript/console.cpp', 'fpdfsdk/src/javascript/Consts.cpp', + 'fpdfsdk/src/javascript/Consts.h', 'fpdfsdk/src/javascript/Document.cpp', - 'fpdfsdk/src/javascript/event.cpp', + 'fpdfsdk/src/javascript/Document.h', 'fpdfsdk/src/javascript/Field.cpp', - 'fpdfsdk/src/javascript/global.cpp', + 'fpdfsdk/src/javascript/Field.h', 'fpdfsdk/src/javascript/Icon.cpp', + 'fpdfsdk/src/javascript/Icon.h', 'fpdfsdk/src/javascript/JS_Context.cpp', + 'fpdfsdk/src/javascript/JS_Context.h', + 'fpdfsdk/src/javascript/JS_Define.h', 'fpdfsdk/src/javascript/JS_EventHandler.cpp', + 'fpdfsdk/src/javascript/JS_EventHandler.h', 'fpdfsdk/src/javascript/JS_GlobalData.cpp', + 'fpdfsdk/src/javascript/JS_GlobalData.h', 'fpdfsdk/src/javascript/JS_Object.cpp', + 'fpdfsdk/src/javascript/JS_Object.h', 'fpdfsdk/src/javascript/JS_Runtime.cpp', + 'fpdfsdk/src/javascript/JS_Runtime.h', 'fpdfsdk/src/javascript/JS_Value.cpp', + 'fpdfsdk/src/javascript/JS_Value.h', 'fpdfsdk/src/javascript/PublicMethods.cpp', + 'fpdfsdk/src/javascript/PublicMethods.h', + 'fpdfsdk/src/javascript/app.cpp', + 'fpdfsdk/src/javascript/app.h', + 'fpdfsdk/src/javascript/color.cpp', + 'fpdfsdk/src/javascript/color.h', + 'fpdfsdk/src/javascript/console.cpp', + 'fpdfsdk/src/javascript/console.h', + 'fpdfsdk/src/javascript/event.cpp', + 'fpdfsdk/src/javascript/event.h', + 'fpdfsdk/src/javascript/global.cpp', + 'fpdfsdk/src/javascript/global.h', 'fpdfsdk/src/javascript/report.cpp', + 'fpdfsdk/src/javascript/report.h', 'fpdfsdk/src/javascript/resource.cpp', + 'fpdfsdk/src/javascript/resource.h', 'fpdfsdk/src/javascript/util.cpp', + 'fpdfsdk/src/javascript/util.h', ], }, { -- cgit v1.2.3