Cleanup JS define methods

This CL moves DefineProps, DefineMethods and DefineConsts to the
CJS_Object and removes from the subclasses. The JSConstructor and
JSDestructor are moved to be templated static methods in JS_Defines.

Change-Id: Ibe5ee063a32ae2332b8affc843d97ee6da21f4ee
Reviewed-on: https://pdfium-review.googlesource.com/16930
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
diff --git a/fpdfsdk/javascript/JS_Object.cpp b/fpdfsdk/javascript/JS_Object.cpp
index 01a4641..b6e63b5 100644
--- a/fpdfsdk/javascript/JS_Object.cpp
+++ b/fpdfsdk/javascript/JS_Object.cpp
@@ -11,7 +11,37 @@
 
 CJS_EmbedObj::CJS_EmbedObj(CJS_Object* pJSObject) : m_pJSObject(pJSObject) {}
 
-CJS_EmbedObj::~CJS_EmbedObj() {
+CJS_EmbedObj::~CJS_EmbedObj() {}
+
+// static
+void CJS_Object::DefineConsts(CFXJS_Engine* pEngine,
+                              int objId,
+                              const JSConstSpec consts[]) {
+  for (size_t i = 0; consts[i].pName != 0; ++i) {
+    pEngine->DefineObjConst(
+        objId, consts[i].pName,
+        consts[i].eType == JSConstSpec::Number
+            ? pEngine->NewNumber(consts[i].number).As<v8::Value>()
+            : pEngine->NewString(consts[i].pStr).As<v8::Value>());
+  }
+}
+
+// static
+void CJS_Object::DefineProps(CFXJS_Engine* pEngine,
+                             int objId,
+                             const JSPropertySpec props[]) {
+  for (size_t i = 0; props[i].pName != 0; ++i) {
+    pEngine->DefineObjProperty(objId, props[i].pName, props[i].pPropGet,
+                               props[i].pPropPut);
+  }
+}
+
+// static
+void CJS_Object::DefineMethods(CFXJS_Engine* pEngine,
+                               int objId,
+                               const JSMethodSpec methods[]) {
+  for (size_t i = 0; methods[i].pName != 0; ++i)
+    pEngine->DefineObjMethod(objId, methods[i].pName, methods[i].pMethodCall);
 }
 
 CJS_Object::CJS_Object(v8::Local<v8::Object> pObject) {