| OLD | NEW |
| 1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 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 "fxjs/cfxjse_context.h" | 7 #include "fxjs/cfxjse_context.h" |
| 8 | 8 |
| 9 #include "fxjs/cfxjse_class.h" | 9 #include "fxjs/cfxjse_class.h" |
| 10 #include "fxjs/cfxjse_value.h" | 10 #include "fxjs/cfxjse_value.h" |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 // static | 149 // static |
| 150 CFXJSE_Context* CFXJSE_Context::Create( | 150 CFXJSE_Context* CFXJSE_Context::Create( |
| 151 v8::Isolate* pIsolate, | 151 v8::Isolate* pIsolate, |
| 152 const FXJSE_CLASS_DESCRIPTOR* lpGlobalClass, | 152 const FXJSE_CLASS_DESCRIPTOR* lpGlobalClass, |
| 153 CFXJSE_HostObject* lpGlobalObject) { | 153 CFXJSE_HostObject* lpGlobalObject) { |
| 154 CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate); | 154 CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate); |
| 155 CFXJSE_Context* pContext = new CFXJSE_Context(pIsolate); | 155 CFXJSE_Context* pContext = new CFXJSE_Context(pIsolate); |
| 156 CFXJSE_Class* lpGlobalClassObj = nullptr; | 156 CFXJSE_Class* lpGlobalClassObj = nullptr; |
| 157 v8::Local<v8::ObjectTemplate> hObjectTemplate; | 157 v8::Local<v8::ObjectTemplate> hObjectTemplate; |
| 158 if (lpGlobalClass) { | 158 if (lpGlobalClass) { |
| 159 lpGlobalClassObj = CFXJSE_Class::Create(pContext, lpGlobalClass, TRUE); | 159 lpGlobalClassObj = CFXJSE_Class::Create(pContext, lpGlobalClass, true); |
| 160 ASSERT(lpGlobalClassObj); | 160 ASSERT(lpGlobalClassObj); |
| 161 v8::Local<v8::FunctionTemplate> hFunctionTemplate = | 161 v8::Local<v8::FunctionTemplate> hFunctionTemplate = |
| 162 v8::Local<v8::FunctionTemplate>::New(pIsolate, | 162 v8::Local<v8::FunctionTemplate>::New(pIsolate, |
| 163 lpGlobalClassObj->m_hTemplate); | 163 lpGlobalClassObj->m_hTemplate); |
| 164 hObjectTemplate = hFunctionTemplate->InstanceTemplate(); | 164 hObjectTemplate = hFunctionTemplate->InstanceTemplate(); |
| 165 } else { | 165 } else { |
| 166 hObjectTemplate = v8::ObjectTemplate::New(pIsolate); | 166 hObjectTemplate = v8::ObjectTemplate::New(pIsolate); |
| 167 hObjectTemplate->SetInternalFieldCount(1); | 167 hObjectTemplate->SetInternalFieldCount(1); |
| 168 } | 168 } |
| 169 hObjectTemplate->Set( | 169 hObjectTemplate->Set( |
| (...skipping 25 matching lines...) Expand all Loading... |
| 195 v8::Local<v8::Object> hGlobalObject = hContext->Global(); | 195 v8::Local<v8::Object> hGlobalObject = hContext->Global(); |
| 196 pValue->ForceSetValue(hGlobalObject); | 196 pValue->ForceSetValue(hGlobalObject); |
| 197 | 197 |
| 198 return pValue; | 198 return pValue; |
| 199 } | 199 } |
| 200 | 200 |
| 201 void CFXJSE_Context::EnableCompatibleMode() { | 201 void CFXJSE_Context::EnableCompatibleMode() { |
| 202 ExecuteScript(szCompatibleModeScript, nullptr, nullptr); | 202 ExecuteScript(szCompatibleModeScript, nullptr, nullptr); |
| 203 } | 203 } |
| 204 | 204 |
| 205 FX_BOOL CFXJSE_Context::ExecuteScript(const FX_CHAR* szScript, | 205 bool CFXJSE_Context::ExecuteScript(const FX_CHAR* szScript, |
| 206 CFXJSE_Value* lpRetValue, | 206 CFXJSE_Value* lpRetValue, |
| 207 CFXJSE_Value* lpNewThisObject) { | 207 CFXJSE_Value* lpNewThisObject) { |
| 208 CFXJSE_ScopeUtil_IsolateHandleContext scope(this); | 208 CFXJSE_ScopeUtil_IsolateHandleContext scope(this); |
| 209 v8::TryCatch trycatch(m_pIsolate); | 209 v8::TryCatch trycatch(m_pIsolate); |
| 210 v8::Local<v8::String> hScriptString = | 210 v8::Local<v8::String> hScriptString = |
| 211 v8::String::NewFromUtf8(m_pIsolate, szScript); | 211 v8::String::NewFromUtf8(m_pIsolate, szScript); |
| 212 if (!lpNewThisObject) { | 212 if (!lpNewThisObject) { |
| 213 v8::Local<v8::Script> hScript = v8::Script::Compile(hScriptString); | 213 v8::Local<v8::Script> hScript = v8::Script::Compile(hScriptString); |
| 214 if (!trycatch.HasCaught()) { | 214 if (!trycatch.HasCaught()) { |
| 215 v8::Local<v8::Value> hValue = hScript->Run(); | 215 v8::Local<v8::Value> hValue = hScript->Run(); |
| 216 if (!trycatch.HasCaught()) { | 216 if (!trycatch.HasCaught()) { |
| 217 if (lpRetValue) { | 217 if (lpRetValue) |
| 218 lpRetValue->m_hValue.Reset(m_pIsolate, hValue); | 218 lpRetValue->m_hValue.Reset(m_pIsolate, hValue); |
| 219 } | 219 return true; |
| 220 return TRUE; | |
| 221 } | 220 } |
| 222 } | 221 } |
| 223 if (lpRetValue) { | 222 if (lpRetValue) { |
| 224 lpRetValue->m_hValue.Reset(m_pIsolate, | 223 lpRetValue->m_hValue.Reset(m_pIsolate, |
| 225 FXJSE_CreateReturnValue(m_pIsolate, trycatch)); | 224 FXJSE_CreateReturnValue(m_pIsolate, trycatch)); |
| 226 } | 225 } |
| 227 return FALSE; | 226 return false; |
| 228 } else { | 227 } |
| 229 v8::Local<v8::Value> hNewThis = | 228 |
| 230 v8::Local<v8::Value>::New(m_pIsolate, lpNewThisObject->m_hValue); | 229 v8::Local<v8::Value> hNewThis = |
| 231 ASSERT(!hNewThis.IsEmpty()); | 230 v8::Local<v8::Value>::New(m_pIsolate, lpNewThisObject->m_hValue); |
| 232 v8::Local<v8::Script> hWrapper = | 231 ASSERT(!hNewThis.IsEmpty()); |
| 233 v8::Script::Compile(v8::String::NewFromUtf8( | 232 v8::Local<v8::Script> hWrapper = v8::Script::Compile(v8::String::NewFromUtf8( |
| 234 m_pIsolate, "(function () { return eval(arguments[0]); })")); | 233 m_pIsolate, "(function () { return eval(arguments[0]); })")); |
| 235 v8::Local<v8::Value> hWrapperValue = hWrapper->Run(); | 234 v8::Local<v8::Value> hWrapperValue = hWrapper->Run(); |
| 236 ASSERT(hWrapperValue->IsFunction()); | 235 ASSERT(hWrapperValue->IsFunction()); |
| 237 v8::Local<v8::Function> hWrapperFn = hWrapperValue.As<v8::Function>(); | 236 v8::Local<v8::Function> hWrapperFn = hWrapperValue.As<v8::Function>(); |
| 237 if (!trycatch.HasCaught()) { |
| 238 v8::Local<v8::Value> rgArgs[] = {hScriptString}; |
| 239 v8::Local<v8::Value> hValue = |
| 240 hWrapperFn->Call(hNewThis.As<v8::Object>(), 1, rgArgs); |
| 238 if (!trycatch.HasCaught()) { | 241 if (!trycatch.HasCaught()) { |
| 239 v8::Local<v8::Value> rgArgs[] = {hScriptString}; | 242 if (lpRetValue) |
| 240 v8::Local<v8::Value> hValue = | 243 lpRetValue->m_hValue.Reset(m_pIsolate, hValue); |
| 241 hWrapperFn->Call(hNewThis.As<v8::Object>(), 1, rgArgs); | 244 return true; |
| 242 if (!trycatch.HasCaught()) { | |
| 243 if (lpRetValue) { | |
| 244 lpRetValue->m_hValue.Reset(m_pIsolate, hValue); | |
| 245 } | |
| 246 return TRUE; | |
| 247 } | |
| 248 } | 245 } |
| 249 if (lpRetValue) { | |
| 250 lpRetValue->m_hValue.Reset(m_pIsolate, | |
| 251 FXJSE_CreateReturnValue(m_pIsolate, trycatch)); | |
| 252 } | |
| 253 return FALSE; | |
| 254 } | 246 } |
| 247 if (lpRetValue) { |
| 248 lpRetValue->m_hValue.Reset(m_pIsolate, |
| 249 FXJSE_CreateReturnValue(m_pIsolate, trycatch)); |
| 250 } |
| 251 return false; |
| 255 } | 252 } |
| OLD | NEW |