diff options
author | Tom Sepez <tsepez@chromium.org> | 2018-04-23 18:02:57 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-04-23 18:02:57 +0000 |
commit | 0784c7317e3aaa2c65d098cf2593b6b49986307d (patch) | |
tree | a264d06dcd9fd0d914324d5bd0a96430cc543b87 /fxjs | |
parent | 9f71afb882a9d1294f8a4392b8553e2c285f51c7 (diff) | |
download | pdfium-0784c7317e3aaa2c65d098cf2593b6b49986307d.tar.xz |
Disable JavaScript entirely if no JSPlatform passed by embedder.
Allows run-time selection of whether to permit JS inside PDF. Previously,
this was a link-time decision only. This requires a little more caution
before we decide that we have the CJS_Runtime, and not the CJS_RuntimeStub
in a few casts.
Adds a kDisableJavaScript option to the form fill embeddertests.
Adds a --disable-javascript flag to the pdfium_test executable.
Also adds a --disable-xfa flag while we're at it.
Change-Id: I8d8ac95f6474459cadba9a60572fbb342e984646
Reviewed-on: https://pdfium-review.googlesource.com/31090
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'fxjs')
-rw-r--r-- | fxjs/cjs_document.cpp | 3 | ||||
-rw-r--r-- | fxjs/cjs_global.cpp | 3 | ||||
-rw-r--r-- | fxjs/cjs_runtime.cpp | 4 | ||||
-rw-r--r-- | fxjs/cjs_runtime.h | 1 | ||||
-rw-r--r-- | fxjs/cjs_runtimestub.cpp | 4 | ||||
-rw-r--r-- | fxjs/cjs_runtimestub.h | 1 | ||||
-rw-r--r-- | fxjs/ijs_runtime.cpp | 8 | ||||
-rw-r--r-- | fxjs/ijs_runtime.h | 8 |
8 files changed, 23 insertions, 9 deletions
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp index 248116b69a..9cfcad313e 100644 --- a/fxjs/cjs_document.cpp +++ b/fxjs/cjs_document.cpp @@ -132,8 +132,7 @@ CJS_Document::CJS_Document(v8::Local<v8::Object> pObject) CJS_Document::~CJS_Document() = default; void CJS_Document::InitInstance(IJS_Runtime* pIRuntime) { - CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime); - SetFormFillEnv(pRuntime->GetFormFillEnv()); + SetFormFillEnv(pIRuntime->GetFormFillEnv()); } // The total number of fields in document. diff --git a/fxjs/cjs_global.cpp b/fxjs/cjs_global.cpp index c8deadf5d5..282b26210f 100644 --- a/fxjs/cjs_global.cpp +++ b/fxjs/cjs_global.cpp @@ -214,8 +214,7 @@ CJS_Global::~CJS_Global() { } void CJS_Global::InitInstance(IJS_Runtime* pIRuntime) { - CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime); - Initial(pRuntime->GetFormFillEnv()); + Initial(pIRuntime->GetFormFillEnv()); } void CJS_Global::Initial(CPDFSDK_FormFillEnvironment* pFormFillEnv) { diff --git a/fxjs/cjs_runtime.cpp b/fxjs/cjs_runtime.cpp index b9b9c03e1b..3a607f1aae 100644 --- a/fxjs/cjs_runtime.cpp +++ b/fxjs/cjs_runtime.cpp @@ -143,6 +143,10 @@ void CJS_Runtime::DefineJSObjects() { CJS_Annot::DefineJSObjects(this); } +CJS_Runtime* CJS_Runtime::AsCJSRuntime() { + return this; +} + IJS_EventContext* CJS_Runtime::NewEventContext() { m_EventContextArray.push_back(pdfium::MakeUnique<CJS_EventContext>(this)); return m_EventContextArray.back().get(); diff --git a/fxjs/cjs_runtime.h b/fxjs/cjs_runtime.h index 0aab84828f..c5e69fbdc8 100644 --- a/fxjs/cjs_runtime.h +++ b/fxjs/cjs_runtime.h @@ -33,6 +33,7 @@ class CJS_Runtime : public IJS_Runtime, ~CJS_Runtime() override; // IJS_Runtime + CJS_Runtime* AsCJSRuntime() override; IJS_EventContext* NewEventContext() override; void ReleaseEventContext(IJS_EventContext* pContext) override; CPDFSDK_FormFillEnvironment* GetFormFillEnv() const override; diff --git a/fxjs/cjs_runtimestub.cpp b/fxjs/cjs_runtimestub.cpp index 98c7679a04..c1e680e5d5 100644 --- a/fxjs/cjs_runtimestub.cpp +++ b/fxjs/cjs_runtimestub.cpp @@ -14,6 +14,10 @@ CJS_RuntimeStub::CJS_RuntimeStub(CPDFSDK_FormFillEnvironment* pFormFillEnv) CJS_RuntimeStub::~CJS_RuntimeStub() = default; +CJS_Runtime* CJS_RuntimeStub::AsCJSRuntime() { + return nullptr; +} + IJS_EventContext* CJS_RuntimeStub::NewEventContext() { if (!m_pContext) m_pContext = pdfium::MakeUnique<CJS_EventContextStub>(); diff --git a/fxjs/cjs_runtimestub.h b/fxjs/cjs_runtimestub.h index ecf3b4eb8a..a9e85fdf03 100644 --- a/fxjs/cjs_runtimestub.h +++ b/fxjs/cjs_runtimestub.h @@ -21,6 +21,7 @@ class CJS_RuntimeStub final : public IJS_Runtime { explicit CJS_RuntimeStub(CPDFSDK_FormFillEnvironment* pFormFillEnv); ~CJS_RuntimeStub() override; + CJS_Runtime* AsCJSRuntime() override; IJS_EventContext* NewEventContext() override; void ReleaseEventContext(IJS_EventContext* pContext) override; CPDFSDK_FormFillEnvironment* GetFormFillEnv() const override; diff --git a/fxjs/ijs_runtime.cpp b/fxjs/ijs_runtime.cpp index 03538cd7b5..79238bfe11 100644 --- a/fxjs/ijs_runtime.cpp +++ b/fxjs/ijs_runtime.cpp @@ -31,8 +31,10 @@ void IJS_Runtime::Destroy() { std::unique_ptr<IJS_Runtime> IJS_Runtime::Create( CPDFSDK_FormFillEnvironment* pFormFillEnv) { #ifdef PDF_ENABLE_V8 - return pdfium::MakeUnique<CJS_Runtime>(pFormFillEnv); -#else - return pdfium::MakeUnique<CJS_RuntimeStub>(pFormFillEnv); + if (pFormFillEnv->IsJSPlatformPresent()) + return pdfium::MakeUnique<CJS_Runtime>(pFormFillEnv); #endif + return pdfium::MakeUnique<CJS_RuntimeStub>(pFormFillEnv); } + +IJS_Runtime::~IJS_Runtime() = default; diff --git a/fxjs/ijs_runtime.h b/fxjs/ijs_runtime.h index b97c65ef90..cde31c6e52 100644 --- a/fxjs/ijs_runtime.h +++ b/fxjs/ijs_runtime.h @@ -16,18 +16,22 @@ #include "fxjs/fxjse.h" #endif // PDF_ENABLE_XFA +class CJS_Runtime; class CPDFSDK_FormFillEnvironment; class IJS_EventContext; -// Owns the FJXS objects needed to actually execute JS. +// Owns the FJXS objects needed to actually execute JS, if possible. This +// virtual interface is backed by either an actual JS runtime, or a stub, +// when JS is not present. class IJS_Runtime { public: static void Initialize(unsigned int slot, void* isolate); static void Destroy(); static std::unique_ptr<IJS_Runtime> Create( CPDFSDK_FormFillEnvironment* pFormFillEnv); - virtual ~IJS_Runtime() {} + virtual ~IJS_Runtime(); + virtual CJS_Runtime* AsCJSRuntime() = 0; virtual IJS_EventContext* NewEventContext() = 0; virtual void ReleaseEventContext(IJS_EventContext* pContext) = 0; virtual CPDFSDK_FormFillEnvironment* GetFormFillEnv() const = 0; |