Don't use array for only one compatible mode script Also, don't invent an enum that has one possible value that is always set. Review-Url: https://codereview.chromium.org/2028343002
diff --git a/xfa/fxfa/parser/xfa_script_imp.cpp b/xfa/fxfa/parser/xfa_script_imp.cpp index 8f579b5..357566e 100644 --- a/xfa/fxfa/parser/xfa_script_imp.cpp +++ b/xfa/fxfa/parser/xfa_script_imp.cpp
@@ -424,8 +424,7 @@ m_pJsContext = FXJSE_Context_Create(m_pIsolate, &GlobalClassDescriptor, m_pDocument->GetRoot()); RemoveBuiltInObjs(m_pJsContext); - FXJSE_Context_EnableCompatibleMode( - m_pJsContext, FXJSE_COMPATIBLEMODEFLAG_CONSTRUCTOREXTRAMETHODS); + FXJSE_Context_EnableCompatibleMode(m_pJsContext); } CFXJSE_Context* CXFA_ScriptContext::CreateVariablesContext( CXFA_Node* pScriptNode, @@ -437,8 +436,7 @@ FXJSE_Context_Create(m_pIsolate, &VariablesClassDescriptor, new CXFA_ThisProxy(pSubform, pScriptNode)); RemoveBuiltInObjs(pVariablesContext); - FXJSE_Context_EnableCompatibleMode( - pVariablesContext, FXJSE_COMPATIBLEMODEFLAG_CONSTRUCTOREXTRAMETHODS); + FXJSE_Context_EnableCompatibleMode(pVariablesContext); m_mapVariableToContext.SetAt(pScriptNode, pVariablesContext); return pVariablesContext; }
diff --git a/xfa/fxjse/context.cpp b/xfa/fxjse/context.cpp index a277d4d..75be76d 100644 --- a/xfa/fxjse/context.cpp +++ b/xfa/fxjse/context.cpp
@@ -10,6 +10,37 @@ #include "xfa/fxjse/scope_inline.h" #include "xfa/fxjse/value.h" +namespace { + +const FX_CHAR szCompatibleModeScript[] = + "(function(global, list) {\n" + " 'use strict';\n" + " var objname;\n" + " for (objname in list) {\n" + " var globalobj = global[objname];\n" + " if (globalobj) {\n" + " list[objname].forEach(function(name) {\n" + " if (!globalobj[name]) {\n" + " Object.defineProperty(globalobj, name, {\n" + " writable: true,\n" + " enumerable: false,\n" + " value: (function(obj) {\n" + " if (arguments.length === 0) {\n" + " throw new TypeError('missing argument 0 when calling " + " function ' + objname + '.' + name);\n" + " }\n" + " return globalobj.prototype[name].apply(obj, " + " Array.prototype.slice.call(arguments, 1));\n" + " })\n" + " });\n" + " }\n" + " });\n" + " }\n" + " }\n" + "}(this, {String: ['substr', 'toUpperCase']}));"; + +} // namespace + v8::Local<v8::Object> FXJSE_GetGlobalObjectFromContext( const v8::Local<v8::Context>& hContext) { return hContext->Global()->GetPrototype().As<v8::Object>(); @@ -73,39 +104,8 @@ return lpValue; } -static const FX_CHAR* szCompatibleModeScripts[] = { - "(function(global, list) {\n" - " 'use strict';\n" - " var objname;\n" - " for (objname in list) {\n" - " var globalobj = global[objname];\n" - " if (globalobj) {\n" - " list[objname].forEach(function(name) {\n" - " if (!globalobj[name]) {\n" - " Object.defineProperty(globalobj, name, {\n" - " writable: true,\n" - " enumerable: false,\n" - " value: (function(obj) {\n" - " if (arguments.length === 0) {\n" - " throw new TypeError('missing argument 0 when calling " - " function ' + objname + '.' + name);\n" - " }\n" - " return globalobj.prototype[name].apply(obj, " - " Array.prototype.slice.call(arguments, 1));\n" - " })\n" - " });\n" - " }\n" - " });\n" - " }\n" - " }\n" - "}(this, {String: ['substr', 'toUpperCase']}));"}; -void FXJSE_Context_EnableCompatibleMode(CFXJSE_Context* pContext, - uint32_t dwCompatibleFlags) { - for (uint32_t i = 0; i < (uint32_t)FXJSE_COMPATIBLEMODEFLAGCOUNT; i++) { - if (dwCompatibleFlags & (1 << i)) { - FXJSE_ExecuteScript(pContext, szCompatibleModeScripts[i], NULL, NULL); - } - } +void FXJSE_Context_EnableCompatibleMode(CFXJSE_Context* pContext) { + FXJSE_ExecuteScript(pContext, szCompatibleModeScript, nullptr, nullptr); } FX_BOOL FXJSE_ExecuteScript(CFXJSE_Context* pContext,
diff --git a/xfa/fxjse/include/fxjse.h b/xfa/fxjse/include/fxjse.h index ab95a6d..8a34ad0 100644 --- a/xfa/fxjse/include/fxjse.h +++ b/xfa/fxjse/include/fxjse.h
@@ -36,11 +36,6 @@ FXJSE_ClassPropType_Method }; -enum FXJSE_CompatibleModeFlags { - FXJSE_COMPATIBLEMODEFLAG_CONSTRUCTOREXTRAMETHODS = (1 << 0), - FXJSE_COMPATIBLEMODEFLAGCOUNT = 1, -}; - struct FXJSE_FUNCTION_DESCRIPTOR { const FX_CHAR* name; FXJSE_FuncCallback callbackProc; @@ -78,9 +73,7 @@ CFXJSE_HostObject* lpGlobalObject); void FXJSE_Context_Release(CFXJSE_Context* pContext); CFXJSE_Value* FXJSE_Context_GetGlobalObject(CFXJSE_Context* pContext); - -void FXJSE_Context_EnableCompatibleMode(CFXJSE_Context* pContext, - uint32_t dwCompatibleFlags); +void FXJSE_Context_EnableCompatibleMode(CFXJSE_Context* pContext); CFXJSE_Class* FXJSE_DefineClass(CFXJSE_Context* pContext, const FXJSE_CLASS_DESCRIPTOR* lpClass);