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

Side by Side Diff: fxjse/class.cpp

Issue 2123153002: Remove prototypes from v8 functions that aren't constructors (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: updates Created 4 years, 5 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 | « fpdfsdk/jsapi/fxjs_v8.cpp ('k') | no next file » | 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 "fxjse/include/cfxjse_class.h" 7 #include "fxjse/include/cfxjse_class.h"
8 8
9 #include "fxjse/context.h" 9 #include "fxjse/context.h"
10 #include "fxjse/include/cfxjse_arguments.h" 10 #include "fxjse/include/cfxjse_arguments.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 new CFXJSE_Value(info.GetIsolate())); 97 new CFXJSE_Value(info.GetIsolate()));
98 std::unique_ptr<CFXJSE_Value> lpPropValue( 98 std::unique_ptr<CFXJSE_Value> lpPropValue(
99 new CFXJSE_Value(info.GetIsolate())); 99 new CFXJSE_Value(info.GetIsolate()));
100 lpThisValue->ForceSetValue(info.This()); 100 lpThisValue->ForceSetValue(info.This());
101 lpPropValue->ForceSetValue(value); 101 lpPropValue->ForceSetValue(value);
102 lpPropertyInfo->setProc(lpThisValue.get(), szPropertyName, lpPropValue.get()); 102 lpPropertyInfo->setProc(lpThisValue.get(), szPropertyName, lpPropValue.get());
103 } 103 }
104 104
105 static void FXJSE_V8ConstructorCallback_Wrapper( 105 static void FXJSE_V8ConstructorCallback_Wrapper(
106 const v8::FunctionCallbackInfo<v8::Value>& info) { 106 const v8::FunctionCallbackInfo<v8::Value>& info) {
107 if (!info.IsConstructCall()) {
108 return;
109 }
107 const FXJSE_CLASS_DESCRIPTOR* lpClassDefinition = 110 const FXJSE_CLASS_DESCRIPTOR* lpClassDefinition =
108 static_cast<FXJSE_CLASS_DESCRIPTOR*>( 111 static_cast<FXJSE_CLASS_DESCRIPTOR*>(
109 info.Data().As<v8::External>()->Value()); 112 info.Data().As<v8::External>()->Value());
110 if (!lpClassDefinition) { 113 if (!lpClassDefinition) {
111 return; 114 return;
112 } 115 }
113 ASSERT(info.This()->InternalFieldCount()); 116 ASSERT(info.This()->InternalFieldCount());
114 info.This()->SetAlignedPointerInInternalField(0, NULL); 117 info.This()->SetAlignedPointerInInternalField(0, NULL);
115 } 118 }
116 119
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 lpClassDefinition->properties[i].setProc 224 lpClassDefinition->properties[i].setProc
222 ? FXJSE_V8SetterCallback_Wrapper 225 ? FXJSE_V8SetterCallback_Wrapper
223 : NULL, 226 : NULL,
224 v8::External::New(pIsolate, const_cast<FXJSE_PROPERTY_DESCRIPTOR*>( 227 v8::External::New(pIsolate, const_cast<FXJSE_PROPERTY_DESCRIPTOR*>(
225 lpClassDefinition->properties + i)), 228 lpClassDefinition->properties + i)),
226 static_cast<v8::PropertyAttribute>(v8::DontDelete)); 229 static_cast<v8::PropertyAttribute>(v8::DontDelete));
227 } 230 }
228 } 231 }
229 if (lpClassDefinition->methNum) { 232 if (lpClassDefinition->methNum) {
230 for (int32_t i = 0; i < lpClassDefinition->methNum; i++) { 233 for (int32_t i = 0; i < lpClassDefinition->methNum; i++) {
234 v8::Local<v8::FunctionTemplate> fun = v8::FunctionTemplate::New(
235 pIsolate, FXJSE_V8FunctionCallback_Wrapper,
236 v8::External::New(pIsolate, const_cast<FXJSE_FUNCTION_DESCRIPTOR*>(
237 lpClassDefinition->methods + i)));
238 fun->RemovePrototype();
231 hObjectTemplate->Set( 239 hObjectTemplate->Set(
232 v8::String::NewFromUtf8(pIsolate, lpClassDefinition->methods[i].name), 240 v8::String::NewFromUtf8(pIsolate, lpClassDefinition->methods[i].name),
233 v8::FunctionTemplate::New( 241 fun,
234 pIsolate, FXJSE_V8FunctionCallback_Wrapper,
235 v8::External::New(pIsolate,
236 const_cast<FXJSE_FUNCTION_DESCRIPTOR*>(
237 lpClassDefinition->methods + i))),
238 static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete)); 242 static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete));
239 } 243 }
240 } 244 }
241 if (lpClassDefinition->constructor) { 245 if (lpClassDefinition->constructor) {
242 if (bIsJSGlobal) { 246 if (bIsJSGlobal) {
243 hObjectTemplate->Set( 247 hObjectTemplate->Set(
244 v8::String::NewFromUtf8(pIsolate, lpClassDefinition->name), 248 v8::String::NewFromUtf8(pIsolate, lpClassDefinition->name),
245 v8::FunctionTemplate::New( 249 v8::FunctionTemplate::New(
246 pIsolate, FXJSE_V8ClassGlobalConstructorCallback_Wrapper, 250 pIsolate, FXJSE_V8ClassGlobalConstructorCallback_Wrapper,
247 v8::External::New(pIsolate, const_cast<FXJSE_CLASS_DESCRIPTOR*>( 251 v8::External::New(pIsolate, const_cast<FXJSE_CLASS_DESCRIPTOR*>(
248 lpClassDefinition))), 252 lpClassDefinition))),
249 static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete)); 253 static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete));
250 } else { 254 } else {
251 v8::Local<v8::Context> hLocalContext = 255 v8::Local<v8::Context> hLocalContext =
252 v8::Local<v8::Context>::New(pIsolate, lpContext->m_hContext); 256 v8::Local<v8::Context>::New(pIsolate, lpContext->m_hContext);
253 FXJSE_GetGlobalObjectFromContext(hLocalContext) 257 FXJSE_GetGlobalObjectFromContext(hLocalContext)
254 ->Set(v8::String::NewFromUtf8(pIsolate, lpClassDefinition->name), 258 ->Set(v8::String::NewFromUtf8(pIsolate, lpClassDefinition->name),
255 v8::Function::New( 259 v8::Function::New(
256 pIsolate, FXJSE_V8ClassGlobalConstructorCallback_Wrapper, 260 pIsolate, FXJSE_V8ClassGlobalConstructorCallback_Wrapper,
257 v8::External::New(pIsolate, 261 v8::External::New(pIsolate,
258 const_cast<FXJSE_CLASS_DESCRIPTOR*>( 262 const_cast<FXJSE_CLASS_DESCRIPTOR*>(
259 lpClassDefinition)))); 263 lpClassDefinition))));
260 } 264 }
261 } 265 }
262 if (bIsJSGlobal) { 266 if (bIsJSGlobal) {
263 hObjectTemplate->Set( 267 v8::Local<v8::FunctionTemplate> fun = v8::FunctionTemplate::New(
264 v8::String::NewFromUtf8(pIsolate, "toString"), 268 pIsolate, FXJSE_Context_GlobalObjToString,
265 v8::FunctionTemplate::New( 269 v8::External::New(
266 pIsolate, FXJSE_Context_GlobalObjToString, 270 pIsolate, const_cast<FXJSE_CLASS_DESCRIPTOR*>(lpClassDefinition)));
267 v8::External::New(pIsolate, const_cast<FXJSE_CLASS_DESCRIPTOR*>( 271 fun->RemovePrototype();
268 lpClassDefinition)))); 272 hObjectTemplate->Set(v8::String::NewFromUtf8(pIsolate, "toString"), fun);
269 } 273 }
270 pClass->m_hTemplate.Reset(lpContext->m_pIsolate, hFunctionTemplate); 274 pClass->m_hTemplate.Reset(lpContext->m_pIsolate, hFunctionTemplate);
271 lpContext->m_rgClasses.push_back(std::unique_ptr<CFXJSE_Class>(pClass)); 275 lpContext->m_rgClasses.push_back(std::unique_ptr<CFXJSE_Class>(pClass));
272 return pClass; 276 return pClass;
273 } 277 }
274 278
275 CFXJSE_Class::CFXJSE_Class(CFXJSE_Context* lpContext) 279 CFXJSE_Class::CFXJSE_Class(CFXJSE_Context* lpContext)
276 : m_lpClassDefinition(nullptr), m_pContext(lpContext) {} 280 : m_lpClassDefinition(nullptr), m_pContext(lpContext) {}
277 281
278 CFXJSE_Class::~CFXJSE_Class() {} 282 CFXJSE_Class::~CFXJSE_Class() {}
279 283
280 CFXJSE_Class* CFXJSE_Class::GetClassFromContext(CFXJSE_Context* pContext, 284 CFXJSE_Class* CFXJSE_Class::GetClassFromContext(CFXJSE_Context* pContext,
281 const CFX_ByteStringC& szName) { 285 const CFX_ByteStringC& szName) {
282 for (const auto& pClass : pContext->m_rgClasses) { 286 for (const auto& pClass : pContext->m_rgClasses) {
283 if (pClass->m_szClassName == szName) 287 if (pClass->m_szClassName == szName)
284 return pClass.get(); 288 return pClass.get();
285 } 289 }
286 return nullptr; 290 return nullptr;
287 } 291 }
OLDNEW
« no previous file with comments | « fpdfsdk/jsapi/fxjs_v8.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698