From bd9325754999c2c3a01562ea090654f1ab07cc59 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 29 Jan 2016 09:10:41 -0800 Subject: Merge to XFA: Fix behaviour of app.alert() with a single object argument. Original Review URL: https://codereview.chromium.org/1641693003 . (cherry picked from commit 66519af52b61ca158044651d0507d47efb364f87) TBR=thestig@chromium.org Review URL: https://codereview.chromium.org/1639253008 . --- fpdfsdk/src/javascript/JS_Value.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'fpdfsdk/src/javascript/JS_Value.cpp') diff --git a/fpdfsdk/src/javascript/JS_Value.cpp b/fpdfsdk/src/javascript/JS_Value.cpp index cfa565e4d4..c63963a110 100644 --- a/fpdfsdk/src/javascript/JS_Value.cpp +++ b/fpdfsdk/src/javascript/JS_Value.cpp @@ -7,6 +7,7 @@ #include "JS_Value.h" #include +#include #include #include @@ -879,3 +880,35 @@ bool JS_PortIsNan(double d) { double JS_LocalTime(double d) { return JS_GetDateTime() + _getDaylightSavingTA(d); } + +std::vector JS_ExpandKeywordParams( + CJS_Runtime* pRuntime, + const std::vector& originals, + size_t nKeywords, + ...) { + ASSERT(nKeywords); + + std::vector result(nKeywords, CJS_Value(pRuntime)); + size_t size = std::min(originals.size(), nKeywords); + for (size_t i = 0; i < size; ++i) + result[i] = originals[i]; + + if (originals.size() != 1 || originals[0].GetType() != CJS_Value::VT_object || + originals[0].IsArrayObject()) { + return result; + } + v8::Local pObj = originals[0].ToV8Object(); + result[0] = CJS_Value(pRuntime); // Make unknown. + + va_list ap; + va_start(ap, nKeywords); + for (int i = 0; i < nKeywords; ++i) { + const wchar_t* property = va_arg(ap, const wchar_t*); + v8::Local v8Value = + FXJS_GetObjectElement(pRuntime->GetIsolate(), pObj, property); + if (!v8Value->IsUndefined()) + result[i] = CJS_Value(pRuntime, v8Value, CJS_Value::VT_unknown); + } + va_end(ap); + return result; +} -- cgit v1.2.3