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

Side by Side Diff: xfa/fxjse/context.cpp

Issue 2028343002: Don't use array for only one compatible mode script (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 6 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 unified diff | Download patch
« no previous file with comments | « xfa/fxfa/parser/xfa_script_imp.cpp ('k') | xfa/fxjse/include/fxjse.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "xfa/fxjse/context.h" 7 #include "xfa/fxjse/context.h"
8 8
9 #include "xfa/fxjse/class.h" 9 #include "xfa/fxjse/class.h"
10 #include "xfa/fxjse/scope_inline.h" 10 #include "xfa/fxjse/scope_inline.h"
11 #include "xfa/fxjse/value.h" 11 #include "xfa/fxjse/value.h"
12 12
13 namespace {
14
15 const FX_CHAR szCompatibleModeScript[] =
Tom Sepez 2016/06/01 22:05:49 note: not CHAR* anymore.
16 "(function(global, list) {\n"
17 " 'use strict';\n"
18 " var objname;\n"
19 " for (objname in list) {\n"
20 " var globalobj = global[objname];\n"
21 " if (globalobj) {\n"
22 " list[objname].forEach(function(name) {\n"
23 " if (!globalobj[name]) {\n"
24 " Object.defineProperty(globalobj, name, {\n"
25 " writable: true,\n"
26 " enumerable: false,\n"
27 " value: (function(obj) {\n"
28 " if (arguments.length === 0) {\n"
29 " throw new TypeError('missing argument 0 when calling "
30 " function ' + objname + '.' + name);\n"
31 " }\n"
32 " return globalobj.prototype[name].apply(obj, "
33 " Array.prototype.slice.call(arguments, 1));\n"
34 " })\n"
35 " });\n"
36 " }\n"
37 " });\n"
38 " }\n"
39 " }\n"
40 "}(this, {String: ['substr', 'toUpperCase']}));";
41
42 } // namespace
43
13 v8::Local<v8::Object> FXJSE_GetGlobalObjectFromContext( 44 v8::Local<v8::Object> FXJSE_GetGlobalObjectFromContext(
14 const v8::Local<v8::Context>& hContext) { 45 const v8::Local<v8::Context>& hContext) {
15 return hContext->Global()->GetPrototype().As<v8::Object>(); 46 return hContext->Global()->GetPrototype().As<v8::Object>();
16 } 47 }
17 48
18 void FXJSE_UpdateObjectBinding(v8::Local<v8::Object>& hObject, 49 void FXJSE_UpdateObjectBinding(v8::Local<v8::Object>& hObject,
19 CFXJSE_HostObject* lpNewBinding) { 50 CFXJSE_HostObject* lpNewBinding) {
20 ASSERT(!hObject.IsEmpty()); 51 ASSERT(!hObject.IsEmpty());
21 ASSERT(hObject->InternalFieldCount() > 0); 52 ASSERT(hObject->InternalFieldCount() > 0);
22 hObject->SetAlignedPointerInInternalField(0, 53 hObject->SetAlignedPointerInInternalField(0,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 97
67 CFXJSE_Value* FXJSE_Context_GetGlobalObject(CFXJSE_Context* pContext) { 98 CFXJSE_Value* FXJSE_Context_GetGlobalObject(CFXJSE_Context* pContext) {
68 if (!pContext) 99 if (!pContext)
69 return nullptr; 100 return nullptr;
70 101
71 CFXJSE_Value* lpValue = new CFXJSE_Value(pContext->GetRuntime()); 102 CFXJSE_Value* lpValue = new CFXJSE_Value(pContext->GetRuntime());
72 pContext->GetGlobalObject(lpValue); 103 pContext->GetGlobalObject(lpValue);
73 return lpValue; 104 return lpValue;
74 } 105 }
75 106
76 static const FX_CHAR* szCompatibleModeScripts[] = { 107 void FXJSE_Context_EnableCompatibleMode(CFXJSE_Context* pContext) {
77 "(function(global, list) {\n" 108 FXJSE_ExecuteScript(pContext, szCompatibleModeScript, nullptr, nullptr);
78 " 'use strict';\n"
79 " var objname;\n"
80 " for (objname in list) {\n"
81 " var globalobj = global[objname];\n"
82 " if (globalobj) {\n"
83 " list[objname].forEach(function(name) {\n"
84 " if (!globalobj[name]) {\n"
85 " Object.defineProperty(globalobj, name, {\n"
86 " writable: true,\n"
87 " enumerable: false,\n"
88 " value: (function(obj) {\n"
89 " if (arguments.length === 0) {\n"
90 " throw new TypeError('missing argument 0 when calling "
91 " function ' + objname + '.' + name);\n"
92 " }\n"
93 " return globalobj.prototype[name].apply(obj, "
94 " Array.prototype.slice.call(arguments, 1));\n"
95 " })\n"
96 " });\n"
97 " }\n"
98 " });\n"
99 " }\n"
100 " }\n"
101 "}(this, {String: ['substr', 'toUpperCase']}));"};
102 void FXJSE_Context_EnableCompatibleMode(CFXJSE_Context* pContext,
103 uint32_t dwCompatibleFlags) {
104 for (uint32_t i = 0; i < (uint32_t)FXJSE_COMPATIBLEMODEFLAGCOUNT; i++) {
105 if (dwCompatibleFlags & (1 << i)) {
106 FXJSE_ExecuteScript(pContext, szCompatibleModeScripts[i], NULL, NULL);
107 }
108 }
109 } 109 }
110 110
111 FX_BOOL FXJSE_ExecuteScript(CFXJSE_Context* pContext, 111 FX_BOOL FXJSE_ExecuteScript(CFXJSE_Context* pContext,
112 const FX_CHAR* szScript, 112 const FX_CHAR* szScript,
113 CFXJSE_Value* pRetValue, 113 CFXJSE_Value* pRetValue,
114 CFXJSE_Value* pNewThisObject) { 114 CFXJSE_Value* pNewThisObject) {
115 return pContext->ExecuteScript(szScript, pRetValue, pNewThisObject); 115 return pContext->ExecuteScript(szScript, pRetValue, pNewThisObject);
116 } 116 }
117 117
118 v8::Local<v8::Object> FXJSE_CreateReturnValue(v8::Isolate* pIsolate, 118 v8::Local<v8::Object> FXJSE_CreateReturnValue(v8::Isolate* pIsolate,
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 return TRUE; 240 return TRUE;
241 } 241 }
242 } 242 }
243 if (lpRetValue) { 243 if (lpRetValue) {
244 lpRetValue->m_hValue.Reset(m_pIsolate, 244 lpRetValue->m_hValue.Reset(m_pIsolate,
245 FXJSE_CreateReturnValue(m_pIsolate, trycatch)); 245 FXJSE_CreateReturnValue(m_pIsolate, trycatch));
246 } 246 }
247 return FALSE; 247 return FALSE;
248 } 248 }
249 } 249 }
OLDNEW
« no previous file with comments | « xfa/fxfa/parser/xfa_script_imp.cpp ('k') | xfa/fxjse/include/fxjse.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698