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

Side by Side Diff: Source/bindings/v8/custom/V8PromiseCustom.cpp

Issue 23961005: Pass isolate to v8 integers factory functions (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 3 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * 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 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 v8::Local<v8::Array> results = environment->GetInternalField(V8PromiseCustom ::PromiseEveryEnvironmentResultsIndex).As<v8::Array>(); 240 v8::Local<v8::Array> results = environment->GetInternalField(V8PromiseCustom ::PromiseEveryEnvironmentResultsIndex).As<v8::Array>();
241 241
242 results->Set(index->Value(), result); 242 results->Set(index->Value(), result);
243 243
244 v8::Local<v8::Integer> countdown = countdownWrapper->GetInternalField(V8Prom iseCustom::PrimitiveWrapperPrimitiveIndex).As<v8::Integer>(); 244 v8::Local<v8::Integer> countdown = countdownWrapper->GetInternalField(V8Prom iseCustom::PrimitiveWrapperPrimitiveIndex).As<v8::Integer>();
245 ASSERT(countdown->Value() >= 1); 245 ASSERT(countdown->Value() >= 1);
246 if (countdown->Value() == 1) { 246 if (countdown->Value() == 1) {
247 V8PromiseCustom::resolveResolver(resolver, results, V8PromiseCustom::Syn chronous, isolate); 247 V8PromiseCustom::resolveResolver(resolver, results, V8PromiseCustom::Syn chronous, isolate);
248 return; 248 return;
249 } 249 }
250 countdownWrapper->SetInternalField(V8PromiseCustom::PrimitiveWrapperPrimitiv eIndex, v8::Integer::New(countdown->Value() - 1)); 250 countdownWrapper->SetInternalField(V8PromiseCustom::PrimitiveWrapperPrimitiv eIndex, v8::Integer::New(countdown->Value() - 1, isolate));
251 } 251 }
252 252
253 void promiseSomeRejectCallback(const v8::FunctionCallbackInfo<v8::Value>& args) 253 void promiseSomeRejectCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
254 { 254 {
255 v8::Isolate* isolate = args.GetIsolate(); 255 v8::Isolate* isolate = args.GetIsolate();
256 ASSERT(!args.Data().IsEmpty()); 256 ASSERT(!args.Data().IsEmpty());
257 v8::Local<v8::Object> environment = args.Data().As<v8::Object>(); 257 v8::Local<v8::Object> environment = args.Data().As<v8::Object>();
258 v8::Local<v8::Value> result = v8::Undefined(isolate); 258 v8::Local<v8::Value> result = v8::Undefined(isolate);
259 if (args.Length() > 0) 259 if (args.Length() > 0)
260 result = args[0]; 260 result = args[0];
261 261
262 v8::Local<v8::Object> resolver = environment->GetInternalField(V8PromiseCust om::PromiseEveryEnvironmentPromiseResolverIndex).As<v8::Object>(); 262 v8::Local<v8::Object> resolver = environment->GetInternalField(V8PromiseCust om::PromiseEveryEnvironmentPromiseResolverIndex).As<v8::Object>();
263 v8::Local<v8::Object> countdownWrapper = environment->GetInternalField(V8Pro miseCustom::PromiseEveryEnvironmentCountdownIndex).As<v8::Object>(); 263 v8::Local<v8::Object> countdownWrapper = environment->GetInternalField(V8Pro miseCustom::PromiseEveryEnvironmentCountdownIndex).As<v8::Object>();
264 v8::Local<v8::Integer> index = environment->GetInternalField(V8PromiseCustom ::PromiseEveryEnvironmentIndexIndex).As<v8::Integer>(); 264 v8::Local<v8::Integer> index = environment->GetInternalField(V8PromiseCustom ::PromiseEveryEnvironmentIndexIndex).As<v8::Integer>();
265 v8::Local<v8::Array> results = environment->GetInternalField(V8PromiseCustom ::PromiseEveryEnvironmentResultsIndex).As<v8::Array>(); 265 v8::Local<v8::Array> results = environment->GetInternalField(V8PromiseCustom ::PromiseEveryEnvironmentResultsIndex).As<v8::Array>();
266 266
267 results->Set(index->Value(), result); 267 results->Set(index->Value(), result);
268 268
269 v8::Local<v8::Integer> countdown = countdownWrapper->GetInternalField(V8Prom iseCustom::PrimitiveWrapperPrimitiveIndex).As<v8::Integer>(); 269 v8::Local<v8::Integer> countdown = countdownWrapper->GetInternalField(V8Prom iseCustom::PrimitiveWrapperPrimitiveIndex).As<v8::Integer>();
270 ASSERT(countdown->Value() >= 1); 270 ASSERT(countdown->Value() >= 1);
271 if (countdown->Value() == 1) { 271 if (countdown->Value() == 1) {
272 V8PromiseCustom::rejectResolver(resolver, results, V8PromiseCustom::Sync hronous, isolate); 272 V8PromiseCustom::rejectResolver(resolver, results, V8PromiseCustom::Sync hronous, isolate);
273 return; 273 return;
274 } 274 }
275 countdownWrapper->SetInternalField(V8PromiseCustom::PrimitiveWrapperPrimitiv eIndex, v8::Integer::New(countdown->Value() - 1)); 275 countdownWrapper->SetInternalField(V8PromiseCustom::PrimitiveWrapperPrimitiv eIndex, v8::Integer::New(countdown->Value() - 1, isolate));
276 } 276 }
277 277
278 v8::Local<v8::Object> promiseEveryEnvironment(v8::Handle<v8::Object> resolver, v 8::Handle<v8::Object> countdownWrapper, int index, v8::Handle<v8::Array> results , v8::Isolate* isolate) 278 v8::Local<v8::Object> promiseEveryEnvironment(v8::Handle<v8::Object> resolver, v 8::Handle<v8::Object> countdownWrapper, int index, v8::Handle<v8::Array> results , v8::Isolate* isolate)
279 { 279 {
280 v8::Local<v8::ObjectTemplate> objectTemplate = promiseEveryEnvironmentObject Template(isolate); 280 v8::Local<v8::ObjectTemplate> objectTemplate = promiseEveryEnvironmentObject Template(isolate);
281 v8::Local<v8::Object> environment = objectTemplate->NewInstance(); 281 v8::Local<v8::Object> environment = objectTemplate->NewInstance();
282 282
283 environment->SetInternalField(V8PromiseCustom::PromiseEveryEnvironmentPromis eResolverIndex, resolver); 283 environment->SetInternalField(V8PromiseCustom::PromiseEveryEnvironmentPromis eResolverIndex, resolver);
284 environment->SetInternalField(V8PromiseCustom::PromiseEveryEnvironmentCountd ownIndex, countdownWrapper); 284 environment->SetInternalField(V8PromiseCustom::PromiseEveryEnvironmentCountd ownIndex, countdownWrapper);
285 environment->SetInternalField(V8PromiseCustom::PromiseEveryEnvironmentIndexI ndex, v8::Integer::New(index)); 285 environment->SetInternalField(V8PromiseCustom::PromiseEveryEnvironmentIndexI ndex, v8::Integer::New(index, isolate));
286 environment->SetInternalField(V8PromiseCustom::PromiseEveryEnvironmentResult sIndex, results); 286 environment->SetInternalField(V8PromiseCustom::PromiseEveryEnvironmentResult sIndex, results);
287 return environment; 287 return environment;
288 } 288 }
289 289
290 } // namespace 290 } // namespace
291 291
292 void V8Promise::constructorCustom(const v8::FunctionCallbackInfo<v8::Value>& arg s) 292 void V8Promise::constructorCustom(const v8::FunctionCallbackInfo<v8::Value>& arg s)
293 { 293 {
294 v8SetReturnValue(args, v8::Local<v8::Value>()); 294 v8SetReturnValue(args, v8::Local<v8::Value>());
295 v8::Isolate* isolate = args.GetIsolate(); 295 v8::Isolate* isolate = args.GetIsolate();
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 V8PromiseCustom::createPromise(args.Holder(), &promise, &resolver, isolate); 432 V8PromiseCustom::createPromise(args.Holder(), &promise, &resolver, isolate);
433 433
434 if (!args.Length()) { 434 if (!args.Length()) {
435 V8PromiseCustom::resolveResolver(resolver, v8::Undefined(isolate), V8Pro miseCustom::Asynchronous, isolate); 435 V8PromiseCustom::resolveResolver(resolver, v8::Undefined(isolate), V8Pro miseCustom::Asynchronous, isolate);
436 v8SetReturnValue(args, promise); 436 v8SetReturnValue(args, promise);
437 return; 437 return;
438 } 438 }
439 439
440 v8::Local<v8::ObjectTemplate> objectTemplate = primitiveWrapperObjectTemplat e(isolate); 440 v8::Local<v8::ObjectTemplate> objectTemplate = primitiveWrapperObjectTemplat e(isolate);
441 v8::Local<v8::Object> countdownWrapper = objectTemplate->NewInstance(); 441 v8::Local<v8::Object> countdownWrapper = objectTemplate->NewInstance();
442 countdownWrapper->SetInternalField(V8PromiseCustom::PrimitiveWrapperPrimitiv eIndex, v8::Integer::New(args.Length())); 442 countdownWrapper->SetInternalField(V8PromiseCustom::PrimitiveWrapperPrimitiv eIndex, v8::Integer::New(args.Length(), isolate));
443 v8::Local<v8::Array> results = v8::Array::New(); 443 v8::Local<v8::Array> results = v8::Array::New();
444 444
445 v8::Local<v8::Function> rejectCallback = createClosure(promiseRejectCallback , resolver); 445 v8::Local<v8::Function> rejectCallback = createClosure(promiseRejectCallback , resolver);
446 for (int i = 0; i < args.Length(); ++i) { 446 for (int i = 0; i < args.Length(); ++i) {
447 v8::Local<v8::Object> environment = promiseEveryEnvironment(resolver, co untdownWrapper, i, results, isolate); 447 v8::Local<v8::Object> environment = promiseEveryEnvironment(resolver, co untdownWrapper, i, results, isolate);
448 v8::Local<v8::Function> fulfillCallback = v8::FunctionTemplate::New(prom iseEveryFulfillCallback, environment)->GetFunction(); 448 v8::Local<v8::Function> fulfillCallback = v8::FunctionTemplate::New(prom iseEveryFulfillCallback, environment)->GetFunction();
449 v8::Local<v8::Object> eachPromise, eachResolver; 449 v8::Local<v8::Object> eachPromise, eachResolver;
450 V8PromiseCustom::createPromise(args.Holder(), &eachPromise, &eachResolve r, isolate); 450 V8PromiseCustom::createPromise(args.Holder(), &eachPromise, &eachResolve r, isolate);
451 V8PromiseCustom::resolveResolver(eachResolver, args[i], V8PromiseCustom: :Asynchronous, isolate); 451 V8PromiseCustom::resolveResolver(eachResolver, args[i], V8PromiseCustom: :Asynchronous, isolate);
452 V8PromiseCustom::append(eachPromise, fulfillCallback, rejectCallback, is olate); 452 V8PromiseCustom::append(eachPromise, fulfillCallback, rejectCallback, is olate);
453 } 453 }
454 v8SetReturnValue(args, promise); 454 v8SetReturnValue(args, promise);
455 } 455 }
456 456
457 void V8Promise::someMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& args ) 457 void V8Promise::someMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& args )
458 { 458 {
459 v8::Isolate* isolate = args.GetIsolate(); 459 v8::Isolate* isolate = args.GetIsolate();
460 v8::Local<v8::Object> promise, resolver; 460 v8::Local<v8::Object> promise, resolver;
461 V8PromiseCustom::createPromise(args.Holder(), &promise, &resolver, isolate); 461 V8PromiseCustom::createPromise(args.Holder(), &promise, &resolver, isolate);
462 462
463 if (!args.Length()) { 463 if (!args.Length()) {
464 V8PromiseCustom::resolveResolver(resolver, v8::Undefined(isolate), V8Pro miseCustom::Asynchronous, isolate); 464 V8PromiseCustom::resolveResolver(resolver, v8::Undefined(isolate), V8Pro miseCustom::Asynchronous, isolate);
465 v8SetReturnValue(args, promise); 465 v8SetReturnValue(args, promise);
466 return; 466 return;
467 } 467 }
468 468
469 // Promise.some also uses PromiseEveryEnvironment. 469 // Promise.some also uses PromiseEveryEnvironment.
470 v8::Local<v8::ObjectTemplate> objectTemplate = primitiveWrapperObjectTemplat e(isolate); 470 v8::Local<v8::ObjectTemplate> objectTemplate = primitiveWrapperObjectTemplat e(isolate);
471 v8::Local<v8::Object> countdownWrapper = objectTemplate->NewInstance(); 471 v8::Local<v8::Object> countdownWrapper = objectTemplate->NewInstance();
472 countdownWrapper->SetInternalField(V8PromiseCustom::PrimitiveWrapperPrimitiv eIndex, v8::Integer::New(args.Length())); 472 countdownWrapper->SetInternalField(V8PromiseCustom::PrimitiveWrapperPrimitiv eIndex, v8::Integer::New(args.Length(), isolate));
473 v8::Local<v8::Array> results = v8::Array::New(); 473 v8::Local<v8::Array> results = v8::Array::New();
474 474
475 v8::Local<v8::Function> fulfillCallback = createClosure(promiseResolveCallba ck, resolver); 475 v8::Local<v8::Function> fulfillCallback = createClosure(promiseResolveCallba ck, resolver);
476 for (int i = 0; i < args.Length(); ++i) { 476 for (int i = 0; i < args.Length(); ++i) {
477 v8::Local<v8::Object> environment = promiseEveryEnvironment(resolver, co untdownWrapper, i, results, isolate); 477 v8::Local<v8::Object> environment = promiseEveryEnvironment(resolver, co untdownWrapper, i, results, isolate);
478 v8::Local<v8::Object> eachPromise, eachResolver; 478 v8::Local<v8::Object> eachPromise, eachResolver;
479 v8::Local<v8::Function> rejectCallback = v8::FunctionTemplate::New(promi seSomeRejectCallback, environment)->GetFunction(); 479 v8::Local<v8::Function> rejectCallback = v8::FunctionTemplate::New(promi seSomeRejectCallback, environment)->GetFunction();
480 V8PromiseCustom::createPromise(args.Holder(), &eachPromise, &eachResolve r, isolate); 480 V8PromiseCustom::createPromise(args.Holder(), &eachPromise, &eachResolve r, isolate);
481 V8PromiseCustom::resolveResolver(eachResolver, args[i], V8PromiseCustom: :Asynchronous, isolate); 481 V8PromiseCustom::resolveResolver(eachResolver, args[i], V8PromiseCustom: :Asynchronous, isolate);
482 V8PromiseCustom::append(eachPromise, fulfillCallback, rejectCallback, is olate); 482 V8PromiseCustom::append(eachPromise, fulfillCallback, rejectCallback, is olate);
483 } 483 }
484 v8SetReturnValue(args, promise); 484 v8SetReturnValue(args, promise);
485 } 485 }
486 486
487 // 487 //
488 // -- V8PromiseCustom -- 488 // -- V8PromiseCustom --
489 void V8PromiseCustom::createPromise(v8::Handle<v8::Object> creationContext, v8:: Local<v8::Object>* promise, v8::Local<v8::Object>* resolver, v8::Isolate* isolat e) 489 void V8PromiseCustom::createPromise(v8::Handle<v8::Object> creationContext, v8:: Local<v8::Object>* promise, v8::Local<v8::Object>* resolver, v8::Isolate* isolat e)
490 { 490 {
491 v8::Local<v8::ObjectTemplate> internalTemplate = internalObjectTemplate(isol ate); 491 v8::Local<v8::ObjectTemplate> internalTemplate = internalObjectTemplate(isol ate);
492 v8::Local<v8::Object> internal = internalTemplate->NewInstance(); 492 v8::Local<v8::Object> internal = internalTemplate->NewInstance();
493 *promise = V8DOMWrapper::createWrapper(creationContext, &V8Promise::info, 0, isolate); 493 *promise = V8DOMWrapper::createWrapper(creationContext, &V8Promise::info, 0, isolate);
494 *resolver = V8DOMWrapper::createWrapper(creationContext, &V8PromiseResolver: :info, 0, isolate); 494 *resolver = V8DOMWrapper::createWrapper(creationContext, &V8PromiseResolver: :info, 0, isolate);
495 495
496 clearInternal(internal, V8PromiseCustom::Pending, v8::Undefined(isolate)); 496 clearInternal(internal, V8PromiseCustom::Pending, v8::Undefined(isolate), is olate);
497 497
498 (*promise)->SetInternalField(v8DOMWrapperObjectIndex, internal); 498 (*promise)->SetInternalField(v8DOMWrapperObjectIndex, internal);
499 (*resolver)->SetInternalField(v8DOMWrapperObjectIndex, internal); 499 (*resolver)->SetInternalField(v8DOMWrapperObjectIndex, internal);
500 } 500 }
501 501
502 void V8PromiseCustom::fulfillResolver(v8::Handle<v8::Object> resolver, v8::Handl e<v8::Value> result, SynchronousMode mode, v8::Isolate* isolate) 502 void V8PromiseCustom::fulfillResolver(v8::Handle<v8::Object> resolver, v8::Handl e<v8::Value> result, SynchronousMode mode, v8::Isolate* isolate)
503 { 503 {
504 if (isInternalDetached(resolver)) 504 if (isInternalDetached(resolver))
505 return; 505 return;
506 v8::Local<v8::Object> internal = getInternal(resolver); 506 v8::Local<v8::Object> internal = getInternal(resolver);
507 ASSERT(getState(internal) == Pending || getState(internal) == PendingWithRes olvedFlagSet); 507 ASSERT(getState(internal) == Pending || getState(internal) == PendingWithRes olvedFlagSet);
508 v8::Local<v8::Array> callbacks = internal->GetInternalField(V8PromiseCustom: :InternalFulfillCallbackIndex).As<v8::Array>(); 508 v8::Local<v8::Array> callbacks = internal->GetInternalField(V8PromiseCustom: :InternalFulfillCallbackIndex).As<v8::Array>();
509 clearInternal(internal, Fulfilled, result); 509 clearInternal(internal, Fulfilled, result, isolate);
510 detachInternal(resolver, isolate); 510 detachInternal(resolver, isolate);
511 511
512 callCallbacks(callbacks, result, mode, isolate); 512 callCallbacks(callbacks, result, mode, isolate);
513 } 513 }
514 514
515 void V8PromiseCustom::resolveResolver(v8::Handle<v8::Object> resolver, v8::Handl e<v8::Value> result, SynchronousMode mode, v8::Isolate* isolate) 515 void V8PromiseCustom::resolveResolver(v8::Handle<v8::Object> resolver, v8::Handl e<v8::Value> result, SynchronousMode mode, v8::Isolate* isolate)
516 { 516 {
517 ASSERT(!result.IsEmpty()); 517 ASSERT(!result.IsEmpty());
518 v8::Local<v8::Value> then; 518 v8::Local<v8::Value> then;
519 if (result->IsObject()) { 519 if (result->IsObject()) {
(...skipping 21 matching lines...) Expand all
541 fulfillResolver(resolver, result, mode, isolate); 541 fulfillResolver(resolver, result, mode, isolate);
542 } 542 }
543 543
544 void V8PromiseCustom::rejectResolver(v8::Handle<v8::Object> resolver, v8::Handle <v8::Value> result, SynchronousMode mode, v8::Isolate* isolate) 544 void V8PromiseCustom::rejectResolver(v8::Handle<v8::Object> resolver, v8::Handle <v8::Value> result, SynchronousMode mode, v8::Isolate* isolate)
545 { 545 {
546 if (isInternalDetached(resolver)) 546 if (isInternalDetached(resolver))
547 return; 547 return;
548 v8::Local<v8::Object> internal = getInternal(resolver); 548 v8::Local<v8::Object> internal = getInternal(resolver);
549 ASSERT(getState(internal) == Pending || getState(internal) == PendingWithRes olvedFlagSet); 549 ASSERT(getState(internal) == Pending || getState(internal) == PendingWithRes olvedFlagSet);
550 v8::Local<v8::Array> callbacks = internal->GetInternalField(V8PromiseCustom: :InternalRejectCallbackIndex).As<v8::Array>(); 550 v8::Local<v8::Array> callbacks = internal->GetInternalField(V8PromiseCustom: :InternalRejectCallbackIndex).As<v8::Array>();
551 clearInternal(internal, Rejected, result); 551 clearInternal(internal, Rejected, result, isolate);
552 detachInternal(resolver, isolate); 552 detachInternal(resolver, isolate);
553 553
554 callCallbacks(callbacks, result, mode, isolate); 554 callCallbacks(callbacks, result, mode, isolate);
555 } 555 }
556 556
557 void V8PromiseCustom::append(v8::Handle<v8::Object> promise, v8::Handle<v8::Func tion> fulfillCallback, v8::Handle<v8::Function> rejectCallback, v8::Isolate* iso late) 557 void V8PromiseCustom::append(v8::Handle<v8::Object> promise, v8::Handle<v8::Func tion> fulfillCallback, v8::Handle<v8::Function> rejectCallback, v8::Isolate* iso late)
558 { 558 {
559 // fulfillCallback and rejectCallback can be empty. 559 // fulfillCallback and rejectCallback can be empty.
560 v8::Local<v8::Object> internal = getInternal(promise); 560 v8::Local<v8::Object> internal = getInternal(promise);
561 561
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 v8::Local<v8::Value> value = resolver->GetInternalField(v8DOMWrapperObjectIn dex); 600 v8::Local<v8::Value> value = resolver->GetInternalField(v8DOMWrapperObjectIn dex);
601 ASSERT(!value.IsEmpty()); 601 ASSERT(!value.IsEmpty());
602 return value->IsUndefined(); 602 return value->IsUndefined();
603 } 603 }
604 604
605 void V8PromiseCustom::detachInternal(v8::Handle<v8::Object> resolver, v8::Isolat e* isolate) 605 void V8PromiseCustom::detachInternal(v8::Handle<v8::Object> resolver, v8::Isolat e* isolate)
606 { 606 {
607 resolver->SetInternalField(v8DOMWrapperObjectIndex, v8::Undefined(isolate)); 607 resolver->SetInternalField(v8DOMWrapperObjectIndex, v8::Undefined(isolate));
608 } 608 }
609 609
610 void V8PromiseCustom::clearInternal(v8::Handle<v8::Object> internal, PromiseStat e state, v8::Handle<v8::Value> value) 610 void V8PromiseCustom::clearInternal(v8::Handle<v8::Object> internal, PromiseStat e state, v8::Handle<v8::Value> value, v8::Isolate* isolate)
611 { 611 {
612 setState(internal, state); 612 setState(internal, state, isolate);
613 internal->SetInternalField(V8PromiseCustom::InternalResultIndex, value); 613 internal->SetInternalField(V8PromiseCustom::InternalResultIndex, value);
614 internal->SetInternalField(V8PromiseCustom::InternalFulfillCallbackIndex, v8 ::Array::New()); 614 internal->SetInternalField(V8PromiseCustom::InternalFulfillCallbackIndex, v8 ::Array::New());
615 internal->SetInternalField(V8PromiseCustom::InternalRejectCallbackIndex, v8: :Array::New()); 615 internal->SetInternalField(V8PromiseCustom::InternalRejectCallbackIndex, v8: :Array::New());
616 } 616 }
617 617
618 V8PromiseCustom::PromiseState V8PromiseCustom::getState(v8::Handle<v8::Object> i nternal) 618 V8PromiseCustom::PromiseState V8PromiseCustom::getState(v8::Handle<v8::Object> i nternal)
619 { 619 {
620 v8::Handle<v8::Value> value = internal->GetInternalField(V8PromiseCustom::In ternalStateIndex); 620 v8::Handle<v8::Value> value = internal->GetInternalField(V8PromiseCustom::In ternalStateIndex);
621 bool ok = false; 621 bool ok = false;
622 uint32_t number = toInt32(value, ok); 622 uint32_t number = toInt32(value, ok);
623 ASSERT(ok && (number == Pending || number == Fulfilled || number == Rejected || number == PendingWithResolvedFlagSet)); 623 ASSERT(ok && (number == Pending || number == Fulfilled || number == Rejected || number == PendingWithResolvedFlagSet));
624 return static_cast<PromiseState>(number); 624 return static_cast<PromiseState>(number);
625 } 625 }
626 626
627 void V8PromiseCustom::setState(v8::Handle<v8::Object> internal, PromiseState sta te) 627 void V8PromiseCustom::setState(v8::Handle<v8::Object> internal, PromiseState sta te, v8::Isolate* isolate)
628 { 628 {
629 ASSERT(state == Pending || state == Fulfilled || state == Rejected || state == PendingWithResolvedFlagSet); 629 ASSERT(state == Pending || state == Fulfilled || state == Rejected || state == PendingWithResolvedFlagSet);
630 internal->SetInternalField(V8PromiseCustom::InternalStateIndex, v8::Integer: :New(state)); 630 internal->SetInternalField(V8PromiseCustom::InternalStateIndex, v8::Integer: :New(state, isolate));
631 } 631 }
632 632
633 void V8PromiseCustom::call(v8::Handle<v8::Function> function, v8::Handle<v8::Obj ect> receiver, v8::Handle<v8::Value> result, SynchronousMode mode, v8::Isolate* isolate) 633 void V8PromiseCustom::call(v8::Handle<v8::Function> function, v8::Handle<v8::Obj ect> receiver, v8::Handle<v8::Value> result, SynchronousMode mode, v8::Isolate* isolate)
634 { 634 {
635 if (mode == Synchronous) { 635 if (mode == Synchronous) {
636 v8::Context::Scope scope(isolate->GetCurrentContext()); 636 v8::Context::Scope scope(isolate->GetCurrentContext());
637 // If an exception is thrown, catch it and do nothing. 637 // If an exception is thrown, catch it and do nothing.
638 v8::TryCatch trycatch; 638 v8::TryCatch trycatch;
639 v8::Handle<v8::Value> args[] = { result }; 639 v8::Handle<v8::Value> args[] = { result };
640 V8ScriptRunner::callFunction(function, getScriptExecutionContext(), rece iver, WTF_ARRAY_LENGTH(args), args, isolate); 640 V8ScriptRunner::callFunction(function, getScriptExecutionContext(), rece iver, WTF_ARRAY_LENGTH(args), args, isolate);
641 } else { 641 } else {
642 ASSERT(mode == Asynchronous); 642 ASSERT(mode == Asynchronous);
643 postTask(function, receiver, result, isolate); 643 postTask(function, receiver, result, isolate);
644 } 644 }
645 } 645 }
646 646
647 } // namespace WebCore 647 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/bindings/v8/custom/V8PromiseCustom.h ('k') | Source/bindings/v8/custom/V8PromiseResolverCustom.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698