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

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

Issue 176963017: Remove WrapperWorldType from V8 binding (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 #include "wtf/PassOwnPtr.h" 54 #include "wtf/PassOwnPtr.h"
55 #include <v8.h> 55 #include <v8.h>
56 56
57 namespace WebCore { 57 namespace WebCore {
58 58
59 namespace { 59 namespace {
60 60
61 v8::Local<v8::ObjectTemplate> cachedObjectTemplate(void* domTemplateKey, int int ernalFieldCount, v8::Isolate* isolate) 61 v8::Local<v8::ObjectTemplate> cachedObjectTemplate(void* domTemplateKey, int int ernalFieldCount, v8::Isolate* isolate)
62 { 62 {
63 V8PerIsolateData* data = V8PerIsolateData::from(isolate); 63 V8PerIsolateData* data = V8PerIsolateData::from(isolate);
64 WrapperWorldType currentWorldType = worldType(isolate); 64 v8::Handle<v8::FunctionTemplate> functionDescriptor = data->existingDOMTempl ate(domTemplateKey);
65 v8::Handle<v8::FunctionTemplate> functionDescriptor = data->existingDOMTempl ate(currentWorldType, domTemplateKey);
66 if (!functionDescriptor.IsEmpty()) 65 if (!functionDescriptor.IsEmpty())
67 return functionDescriptor->InstanceTemplate(); 66 return functionDescriptor->InstanceTemplate();
68 67
69 functionDescriptor = v8::FunctionTemplate::New(isolate); 68 functionDescriptor = v8::FunctionTemplate::New(isolate);
70 v8::Local<v8::ObjectTemplate> instanceTemplate = functionDescriptor->Instanc eTemplate(); 69 v8::Local<v8::ObjectTemplate> instanceTemplate = functionDescriptor->Instanc eTemplate();
71 instanceTemplate->SetInternalFieldCount(internalFieldCount); 70 instanceTemplate->SetInternalFieldCount(internalFieldCount);
72 data->setDOMTemplate(currentWorldType, domTemplateKey, functionDescriptor); 71 data->setDOMTemplate(domTemplateKey, functionDescriptor);
73 return instanceTemplate; 72 return instanceTemplate;
74 } 73 }
75 74
76 v8::Local<v8::ObjectTemplate> promiseAllEnvironmentObjectTemplate(v8::Isolate* i solate) 75 v8::Local<v8::ObjectTemplate> promiseAllEnvironmentObjectTemplate(v8::Isolate* i solate)
77 { 76 {
78 static int domTemplateKey; // This address is used for a key to look up the dom template. 77 static int domTemplateKey; // This address is used for a key to look up the dom template.
79 return cachedObjectTemplate(&domTemplateKey, V8PromiseCustom::PromiseAllEnvi ronmentFieldCount, isolate); 78 return cachedObjectTemplate(&domTemplateKey, V8PromiseCustom::PromiseAllEnvi ronmentFieldCount, isolate);
80 } 79 }
81 80
82 v8::Local<v8::ObjectTemplate> primitiveWrapperObjectTemplate(v8::Isolate* isolat e) 81 v8::Local<v8::ObjectTemplate> primitiveWrapperObjectTemplate(v8::Isolate* isolat e)
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 void V8PromiseCustom::setState(v8::Handle<v8::Object> internal, PromiseState sta te, v8::Handle<v8::Value> value, v8::Isolate* isolate) 673 void V8PromiseCustom::setState(v8::Handle<v8::Object> internal, PromiseState sta te, v8::Handle<v8::Value> value, v8::Isolate* isolate)
675 { 674 {
676 ASSERT(!value.IsEmpty()); 675 ASSERT(!value.IsEmpty());
677 ASSERT(state == Pending || state == Fulfilled || state == Rejected || state == Following); 676 ASSERT(state == Pending || state == Fulfilled || state == Rejected || state == Following);
678 internal->SetInternalField(InternalStateIndex, v8::Integer::New(isolate, sta te)); 677 internal->SetInternalField(InternalStateIndex, v8::Integer::New(isolate, sta te));
679 internal->SetInternalField(InternalResultIndex, value); 678 internal->SetInternalField(InternalResultIndex, value);
680 } 679 }
681 680
682 bool V8PromiseCustom::isPromise(v8::Handle<v8::Value> maybePromise, v8::Isolate* isolate) 681 bool V8PromiseCustom::isPromise(v8::Handle<v8::Value> maybePromise, v8::Isolate* isolate)
683 { 682 {
684 WrapperWorldType currentWorldType = worldType(isolate); 683 return V8Promise::domTemplate(isolate)->HasInstance(maybePromise);
685 return V8Promise::domTemplate(isolate, currentWorldType)->HasInstance(maybeP romise);
686 } 684 }
687 685
688 v8::Local<v8::Object> V8PromiseCustom::toPromise(v8::Handle<v8::Value> maybeProm ise, v8::Isolate* isolate) 686 v8::Local<v8::Object> V8PromiseCustom::toPromise(v8::Handle<v8::Value> maybeProm ise, v8::Isolate* isolate)
689 { 687 {
690 // FIXME: Currently we don't check [[PromiseConstructor]] since we limit 688 // FIXME: Currently we don't check [[PromiseConstructor]] since we limit
691 // the creation of the promise objects only from the Blink Promise 689 // the creation of the promise objects only from the Blink Promise
692 // constructor. 690 // constructor.
693 if (isPromise(maybePromise, isolate)) 691 if (isPromise(maybePromise, isolate))
694 return maybePromise.As<v8::Object>(); 692 return maybePromise.As<v8::Object>();
695 693
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 831
834 void V8PromiseCustom::callHandler(v8::Handle<v8::Object> promise, v8::Handle<v8: :Function> handler, v8::Handle<v8::Value> argument, PromiseState originatorState , v8::Isolate* isolate) 832 void V8PromiseCustom::callHandler(v8::Handle<v8::Object> promise, v8::Handle<v8: :Function> handler, v8::Handle<v8::Value> argument, PromiseState originatorState , v8::Isolate* isolate)
835 { 833 {
836 ASSERT(originatorState == Fulfilled || originatorState == Rejected); 834 ASSERT(originatorState == Fulfilled || originatorState == Rejected);
837 ExecutionContext* executionContext = currentExecutionContext(isolate); 835 ExecutionContext* executionContext = currentExecutionContext(isolate);
838 ASSERT(executionContext && executionContext->isContextThread()); 836 ASSERT(executionContext && executionContext->isContextThread());
839 executionContext->postTask(adoptPtr(new CallHandlerTask(promise, handler, ar gument, originatorState, isolate, executionContext))); 837 executionContext->postTask(adoptPtr(new CallHandlerTask(promise, handler, ar gument, originatorState, isolate, executionContext)));
840 } 838 }
841 839
842 } // namespace WebCore 840 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/bindings/v8/custom/V8InjectedScriptManager.cpp ('k') | Source/bindings/v8/custom/V8TypedArrayCustom.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698