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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp

Issue 2891063003: bindings: Use an alias for @@iterator in certain declarations. (Closed)
Patch Set: Rebase patch Created 3 years, 7 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 v8::Local<v8::Context> context = isolate->GetCurrentContext(); 326 v8::Local<v8::Context> context = isolate->GetCurrentContext();
327 v8::Local<v8::Name> name = V8AtomicString(isolate, constant.name); 327 v8::Local<v8::Name> name = V8AtomicString(isolate, constant.name);
328 v8::PropertyAttribute attributes = 328 v8::PropertyAttribute attributes =
329 static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete); 329 static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete);
330 v8::Local<v8::Primitive> value = ValueForConstant(isolate, constant); 330 v8::Local<v8::Primitive> value = ValueForConstant(isolate, constant);
331 interface->DefineOwnProperty(context, name, value, attributes).ToChecked(); 331 interface->DefineOwnProperty(context, name, value, attributes).ToChecked();
332 prototype->DefineOwnProperty(context, name, value, attributes).ToChecked(); 332 prototype->DefineOwnProperty(context, name, value, attributes).ToChecked();
333 } 333 }
334 334
335 template <class Configuration> 335 template <class Configuration>
336 void AddMethodToTemplate(v8::Isolate* isolate,
337 v8::Local<v8::Template> v8_template,
338 v8::Local<v8::FunctionTemplate> function_template,
339 const Configuration& method) {
340 v8_template->Set(method.MethodName(isolate), function_template,
341 static_cast<v8::PropertyAttribute>(method.attribute));
342 }
343
344 template <>
345 void AddMethodToTemplate(
346 v8::Isolate* isolate,
347 v8::Local<v8::Template> v8_template,
348 v8::Local<v8::FunctionTemplate> function_template,
349 const V8DOMConfiguration::SymbolKeyedMethodConfiguration& method) {
350 // The order matters here: if the Symbol is added first, the Function object
351 // will have no associated name. For example, WebIDL states, among other
352 // things, that a pair iterator's @@iterator Function object's name must be
353 // set to "entries".
354 if (method.symbol_alias) {
355 v8_template->Set(V8AtomicString(isolate, method.symbol_alias),
356 function_template);
357 }
358 v8_template->Set(method.MethodName(isolate), function_template,
359 static_cast<v8::PropertyAttribute>(method.attribute));
360 }
361
362 template <class Configuration>
336 void InstallMethodInternal(v8::Isolate* isolate, 363 void InstallMethodInternal(v8::Isolate* isolate,
337 v8::Local<v8::ObjectTemplate> instance_template, 364 v8::Local<v8::ObjectTemplate> instance_template,
338 v8::Local<v8::ObjectTemplate> prototype_template, 365 v8::Local<v8::ObjectTemplate> prototype_template,
339 v8::Local<v8::FunctionTemplate> interface_template, 366 v8::Local<v8::FunctionTemplate> interface_template,
340 v8::Local<v8::Signature> signature, 367 v8::Local<v8::Signature> signature,
341 const Configuration& method, 368 const Configuration& method,
342 const DOMWrapperWorld& world) { 369 const DOMWrapperWorld& world) {
343 if (!WorldConfigurationApplies(method, world)) 370 if (!WorldConfigurationApplies(method, world))
344 return; 371 return;
345 372
346 v8::Local<v8::Name> name = method.MethodName(isolate);
347 v8::FunctionCallback callback = method.callback; 373 v8::FunctionCallback callback = method.callback;
348 // Promise-returning functions need to return a reject promise when 374 // Promise-returning functions need to return a reject promise when
349 // an exception occurs. This includes a case that the receiver object is not 375 // an exception occurs. This includes a case that the receiver object is not
350 // of the type. So, we disable the type check of the receiver object on V8 376 // of the type. So, we disable the type check of the receiver object on V8
351 // side so that V8 won't throw. Instead, we do the check on Blink side and 377 // side so that V8 won't throw. Instead, we do the check on Blink side and
352 // convert an exception to a reject promise. 378 // convert an exception to a reject promise.
353 if (method.holder_check_configuration == 379 if (method.holder_check_configuration ==
354 V8DOMConfiguration::kDoNotCheckHolder) 380 V8DOMConfiguration::kDoNotCheckHolder)
355 signature = v8::Local<v8::Signature>(); 381 signature = v8::Local<v8::Signature>();
356 382
357 DCHECK(method.property_location_configuration); 383 DCHECK(method.property_location_configuration);
358 if (method.property_location_configuration & 384 if (method.property_location_configuration &
359 (V8DOMConfiguration::kOnInstance | V8DOMConfiguration::kOnPrototype)) { 385 (V8DOMConfiguration::kOnInstance | V8DOMConfiguration::kOnPrototype)) {
360 v8::Local<v8::FunctionTemplate> function_template = 386 v8::Local<v8::FunctionTemplate> function_template =
361 v8::FunctionTemplate::New(isolate, callback, v8::Local<v8::Value>(), 387 v8::FunctionTemplate::New(isolate, callback, v8::Local<v8::Value>(),
362 signature, method.length); 388 signature, method.length);
363 function_template->RemovePrototype(); 389 function_template->RemovePrototype();
364 if (method.access_check_configuration == V8DOMConfiguration::kCheckAccess) 390 if (method.access_check_configuration == V8DOMConfiguration::kCheckAccess)
365 function_template->SetAcceptAnyReceiver(false); 391 function_template->SetAcceptAnyReceiver(false);
366 if (method.property_location_configuration & 392 if (method.property_location_configuration &
367 V8DOMConfiguration::kOnInstance) 393 V8DOMConfiguration::kOnInstance) {
368 instance_template->Set( 394 AddMethodToTemplate(isolate, instance_template, function_template,
369 name, function_template, 395 method);
370 static_cast<v8::PropertyAttribute>(method.attribute)); 396 }
371 if (method.property_location_configuration & 397 if (method.property_location_configuration &
372 V8DOMConfiguration::kOnPrototype) 398 V8DOMConfiguration::kOnPrototype) {
373 prototype_template->Set( 399 AddMethodToTemplate(isolate, prototype_template, function_template,
374 name, function_template, 400 method);
375 static_cast<v8::PropertyAttribute>(method.attribute)); 401 }
376 } 402 }
377 if (method.property_location_configuration & 403 if (method.property_location_configuration &
378 V8DOMConfiguration::kOnInterface) { 404 V8DOMConfiguration::kOnInterface) {
379 // Operations installed on the interface object must be static methods, so 405 // Operations installed on the interface object must be static methods, so
380 // no need to specify a signature, i.e. no need to do type check against a 406 // no need to specify a signature, i.e. no need to do type check against a
381 // holder. 407 // holder.
382 v8::Local<v8::FunctionTemplate> function_template = 408 v8::Local<v8::FunctionTemplate> function_template =
383 v8::FunctionTemplate::New(isolate, callback, v8::Local<v8::Value>(), 409 v8::FunctionTemplate::New(isolate, callback, v8::Local<v8::Value>(),
384 v8::Local<v8::Signature>(), method.length); 410 v8::Local<v8::Signature>(), method.length);
385 function_template->RemovePrototype(); 411 function_template->RemovePrototype();
386 // Similarly, there is no need to do an access check for static methods, as 412 // Similarly, there is no need to do an access check for static methods, as
387 // there is no holder to check against. 413 // there is no holder to check against.
388 interface_template->Set( 414 AddMethodToTemplate(isolate, interface_template, function_template, method);
389 name, function_template,
390 static_cast<v8::PropertyAttribute>(method.attribute));
391 } 415 }
392 } 416 }
393 417
394 void InstallMethodInternal( 418 void InstallMethodInternal(
395 v8::Isolate* isolate, 419 v8::Isolate* isolate,
396 v8::Local<v8::Object> instance, 420 v8::Local<v8::Object> instance,
397 v8::Local<v8::Object> prototype, 421 v8::Local<v8::Object> prototype,
398 v8::Local<v8::Function> interface, 422 v8::Local<v8::Function> interface,
399 v8::Local<v8::Signature> signature, 423 v8::Local<v8::Signature> signature,
400 const V8DOMConfiguration::MethodConfiguration& method, 424 const V8DOMConfiguration::MethodConfiguration& method,
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 v8::Isolate* isolate, 718 v8::Isolate* isolate,
695 v8::Local<v8::ObjectTemplate> object_template, 719 v8::Local<v8::ObjectTemplate> object_template,
696 const char* class_string) { 720 const char* class_string) {
697 object_template->Set( 721 object_template->Set(
698 v8::Symbol::GetToStringTag(isolate), 722 v8::Symbol::GetToStringTag(isolate),
699 V8AtomicString(isolate, class_string), 723 V8AtomicString(isolate, class_string),
700 static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontEnum)); 724 static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontEnum));
701 } 725 }
702 726
703 } // namespace blink 727 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698