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

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

Issue 2441593002: binding: Returns a reject promise when |this| is not of the type. (Closed)
Patch Set: Updated test expectations. Created 4 years, 1 month 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 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 v8::Local<v8::Signature> signature, 351 v8::Local<v8::Signature> signature,
352 const Configuration& method, 352 const Configuration& method,
353 const DOMWrapperWorld& world) { 353 const DOMWrapperWorld& world) {
354 if (method.exposeConfiguration == 354 if (method.exposeConfiguration ==
355 V8DOMConfiguration::OnlyExposedToPrivateScript && 355 V8DOMConfiguration::OnlyExposedToPrivateScript &&
356 !world.isPrivateScriptIsolatedWorld()) 356 !world.isPrivateScriptIsolatedWorld())
357 return; 357 return;
358 358
359 v8::Local<v8::Name> name = method.methodName(isolate); 359 v8::Local<v8::Name> name = method.methodName(isolate);
360 v8::FunctionCallback callback = method.callbackForWorld(world); 360 v8::FunctionCallback callback = method.callbackForWorld(world);
361 // Promise-returning functions need to return a reject promise when
362 // an exception occurs. This includes a case that the receiver object is not
363 // of the type. So, we disable the type check of the receiver object on V8
364 // side so that V8 won't throw. Instead, we do the check on Blink side and
365 // convert an exception to a reject promise.
366 if (method.holderCheckConfiguration == V8DOMConfiguration::DoNotCheckHolder)
367 signature = v8::Local<v8::Signature>();
361 368
362 DCHECK(method.propertyLocationConfiguration); 369 DCHECK(method.propertyLocationConfiguration);
363 if (method.propertyLocationConfiguration & 370 if (method.propertyLocationConfiguration &
364 (V8DOMConfiguration::OnInstance | V8DOMConfiguration::OnPrototype)) { 371 (V8DOMConfiguration::OnInstance | V8DOMConfiguration::OnPrototype)) {
365 v8::Local<v8::FunctionTemplate> functionTemplate = 372 v8::Local<v8::FunctionTemplate> functionTemplate =
366 v8::FunctionTemplate::New(isolate, callback, v8::Local<v8::Value>(), 373 v8::FunctionTemplate::New(isolate, callback, v8::Local<v8::Value>(),
367 signature, method.length); 374 signature, method.length);
368 functionTemplate->RemovePrototype(); 375 functionTemplate->RemovePrototype();
369 if (method.propertyLocationConfiguration & V8DOMConfiguration::OnInstance) 376 if (method.propertyLocationConfiguration & V8DOMConfiguration::OnInstance)
370 instanceTemplate->Set( 377 instanceTemplate->Set(
(...skipping 11 matching lines...) Expand all
382 v8::Local<v8::FunctionTemplate> functionTemplate = 389 v8::Local<v8::FunctionTemplate> functionTemplate =
383 v8::FunctionTemplate::New(isolate, callback, v8::Local<v8::Value>(), 390 v8::FunctionTemplate::New(isolate, callback, v8::Local<v8::Value>(),
384 v8::Local<v8::Signature>(), method.length); 391 v8::Local<v8::Signature>(), method.length);
385 functionTemplate->RemovePrototype(); 392 functionTemplate->RemovePrototype();
386 interfaceTemplate->Set( 393 interfaceTemplate->Set(
387 name, functionTemplate, 394 name, functionTemplate,
388 static_cast<v8::PropertyAttribute>(method.attribute)); 395 static_cast<v8::PropertyAttribute>(method.attribute));
389 } 396 }
390 } 397 }
391 398
392 void installMethodInternal( 399 void installMethodInternal(
haraken 2016/11/16 17:37:31 Not related to this CL, why do we (need to) have t
Yuki 2016/11/17 07:14:28 One for the interface template / prototype tempalt
393 v8::Isolate* isolate, 400 v8::Isolate* isolate,
394 v8::Local<v8::Object> instance, 401 v8::Local<v8::Object> instance,
395 v8::Local<v8::Object> prototype, 402 v8::Local<v8::Object> prototype,
396 v8::Local<v8::Function> interface, 403 v8::Local<v8::Function> interface,
397 v8::Local<v8::Signature> signature, 404 v8::Local<v8::Signature> signature,
398 const V8DOMConfiguration::MethodConfiguration& method, 405 const V8DOMConfiguration::MethodConfiguration& method,
399 const DOMWrapperWorld& world) { 406 const DOMWrapperWorld& world) {
400 if (method.exposeConfiguration == 407 if (method.exposeConfiguration ==
401 V8DOMConfiguration::OnlyExposedToPrivateScript && 408 V8DOMConfiguration::OnlyExposedToPrivateScript &&
402 !world.isPrivateScriptIsolatedWorld()) 409 !world.isPrivateScriptIsolatedWorld())
403 return; 410 return;
404 411
405 v8::Local<v8::Name> name = method.methodName(isolate); 412 v8::Local<v8::Name> name = method.methodName(isolate);
406 v8::FunctionCallback callback = method.callbackForWorld(world); 413 v8::FunctionCallback callback = method.callbackForWorld(world);
414 // Promise-returning functions need to return a reject promise when
415 // an exception occurs. This includes a case that the receiver object is not
416 // of the type. So, we disable the type check of the receiver object on V8
417 // side so that V8 won't throw. Instead, we do the check on Blink side and
418 // convert an exception to a reject promise.
419 if (method.holderCheckConfiguration == V8DOMConfiguration::DoNotCheckHolder)
420 signature = v8::Local<v8::Signature>();
407 421
408 DCHECK(method.propertyLocationConfiguration); 422 DCHECK(method.propertyLocationConfiguration);
409 if (method.propertyLocationConfiguration & 423 if (method.propertyLocationConfiguration &
410 (V8DOMConfiguration::OnInstance | V8DOMConfiguration::OnPrototype)) { 424 (V8DOMConfiguration::OnInstance | V8DOMConfiguration::OnPrototype)) {
411 v8::Local<v8::FunctionTemplate> functionTemplate = 425 v8::Local<v8::FunctionTemplate> functionTemplate =
412 v8::FunctionTemplate::New(isolate, callback, v8::Local<v8::Value>(), 426 v8::FunctionTemplate::New(isolate, callback, v8::Local<v8::Value>(),
413 signature, method.length); 427 signature, method.length);
414 functionTemplate->RemovePrototype(); 428 functionTemplate->RemovePrototype();
415 v8::Local<v8::Function> function = 429 v8::Local<v8::Function> function =
416 functionTemplate->GetFunction(isolate->GetCurrentContext()) 430 functionTemplate->GetFunction(isolate->GetCurrentContext())
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 void V8DOMConfiguration::setClassString( 682 void V8DOMConfiguration::setClassString(
669 v8::Isolate* isolate, 683 v8::Isolate* isolate,
670 v8::Local<v8::ObjectTemplate> objectTemplate, 684 v8::Local<v8::ObjectTemplate> objectTemplate,
671 const char* classString) { 685 const char* classString) {
672 objectTemplate->Set( 686 objectTemplate->Set(
673 v8::Symbol::GetToStringTag(isolate), v8AtomicString(isolate, classString), 687 v8::Symbol::GetToStringTag(isolate), v8AtomicString(isolate, classString),
674 static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontEnum)); 688 static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontEnum));
675 } 689 }
676 690
677 } // namespace blink 691 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698