Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(421)

Unified Diff: fpdfsdk/src/javascript/JS_Value.cpp

Issue 1641693003: Fix behaviour of app.alert() with a single object argument. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: fpdfsdk/src/javascript/JS_Value.cpp
diff --git a/fpdfsdk/src/javascript/JS_Value.cpp b/fpdfsdk/src/javascript/JS_Value.cpp
index cfa565e4d4e04fc209ebcd65ffa5d8f703fef924..f3ab52d28012a4bec0cf6723710efaebba1ed34a 100644
--- a/fpdfsdk/src/javascript/JS_Value.cpp
+++ b/fpdfsdk/src/javascript/JS_Value.cpp
@@ -7,6 +7,7 @@
#include "JS_Value.h"
#include <time.h>
+#include <algorithm>
#include <cmath>
#include <limits>
@@ -879,3 +880,35 @@ bool JS_PortIsNan(double d) {
double JS_LocalTime(double d) {
return JS_GetDateTime() + _getDaylightSavingTA(d);
}
+
+std::vector<CJS_Value> JS_ExpandKeywordParams(
+ CJS_Runtime* pRuntime,
+ const std::vector<CJS_Value>& originals,
+ size_t nKeywords,
+ ...) {
+ ASSERT(nKeywords);
+
+ std::vector<CJS_Value> 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 ||
Lei Zhang 2016/01/28 02:11:11 Wouldn't we go out of bounds if |originals| is emp
Tom Sepez 2016/01/28 17:07:36 I'm counting on the originals.size() != 1 check to
Lei Zhang 2016/01/28 22:58:55 Ya, I was being stupid. Ignore.
+ originals[0].IsArrayObject())
Lei Zhang 2016/01/28 02:11:11 braces?
Tom Sepez 2016/01/28 17:07:36 Yup.
+ return result;
+
+ v8::Local<v8::Object> 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<v8::Value> 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;
+}

Powered by Google App Engine
This is Rietveld 408576698