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

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

Issue 23470004: Have handleMaxRecursionDepthExceeded() take an isolate in argument (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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 ASSERT(context->isWorkerGlobalScope()); 129 ASSERT(context->isWorkerGlobalScope());
130 state = scriptStateFromWorkerGlobalScope(toWorkerGlobalScope(context)); 130 state = scriptStateFromWorkerGlobalScope(toWorkerGlobalScope(context));
131 } 131 }
132 ASSERT(state); 132 ASSERT(state);
133 133
134 v8::Isolate* isolate = state->isolate(); 134 v8::Isolate* isolate = state->isolate();
135 v8::HandleScope handleScope(isolate); 135 v8::HandleScope handleScope(isolate);
136 v8::Handle<v8::Context> v8Context = state->context(); 136 v8::Handle<v8::Context> v8Context = state->context();
137 v8::Context::Scope scope(v8Context); 137 v8::Context::Scope scope(v8Context);
138 v8::Handle<v8::Value> args[] = { m_result.newLocal(isolate) }; 138 v8::Handle<v8::Value> args[] = { m_result.newLocal(isolate) };
139 V8ScriptRunner::callFunction(m_callback.newLocal(isolate), context, m_receiv er.newLocal(isolate), WTF_ARRAY_LENGTH(args), args); 139 V8ScriptRunner::callFunction(m_callback.newLocal(isolate), context, m_receiv er.newLocal(isolate), WTF_ARRAY_LENGTH(args), args, isolate);
140 }; 140 };
141 141
142 v8::Handle<v8::Value> postTask(v8::Handle<v8::Function> callback, v8::Handle<v8: :Object> receiver, v8::Handle<v8::Value> value, v8::Isolate* isolate) 142 v8::Handle<v8::Value> postTask(v8::Handle<v8::Function> callback, v8::Handle<v8: :Object> receiver, v8::Handle<v8::Value> value, v8::Isolate* isolate)
143 { 143 {
144 ScriptExecutionContext* scriptExecutionContext = getScriptExecutionContext() ; 144 ScriptExecutionContext* scriptExecutionContext = getScriptExecutionContext() ;
145 ASSERT(scriptExecutionContext && scriptExecutionContext->isContextThread()); 145 ASSERT(scriptExecutionContext && scriptExecutionContext->isContextThread());
146 scriptExecutionContext->postTask(adoptPtr(new PromiseTask(callback, receiver , value))); 146 scriptExecutionContext->postTask(adoptPtr(new PromiseTask(callback, receiver , value)));
147 return v8::Undefined(isolate); 147 return v8::Undefined(isolate);
148 } 148 }
149 149
150 void wrapperCallback(const v8::FunctionCallbackInfo<v8::Value>& args) 150 void wrapperCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
151 { 151 {
152 v8::Isolate* isolate = args.GetIsolate(); 152 v8::Isolate* isolate = args.GetIsolate();
153 ASSERT(!args.Data().IsEmpty()); 153 ASSERT(!args.Data().IsEmpty());
154 v8::Local<v8::Object> environment = args.Data().As<v8::Object>(); 154 v8::Local<v8::Object> environment = args.Data().As<v8::Object>();
155 v8::Local<v8::Value> result = v8::Undefined(isolate); 155 v8::Local<v8::Value> result = v8::Undefined(isolate);
156 if (args.Length() > 0) 156 if (args.Length() > 0)
157 result = args[0]; 157 result = args[0];
158 158
159 v8::Local<v8::Object> promise = environment->GetInternalField(V8PromiseCusto m::WrapperCallbackEnvironmentPromiseIndex).As<v8::Object>(); 159 v8::Local<v8::Object> promise = environment->GetInternalField(V8PromiseCusto m::WrapperCallbackEnvironmentPromiseIndex).As<v8::Object>();
160 v8::Local<v8::Object> resolver = environment->GetInternalField(V8PromiseCust om::WrapperCallbackEnvironmentPromiseResolverIndex).As<v8::Object>(); 160 v8::Local<v8::Object> resolver = environment->GetInternalField(V8PromiseCust om::WrapperCallbackEnvironmentPromiseResolverIndex).As<v8::Object>();
161 v8::Local<v8::Function> callback = environment->GetInternalField(V8PromiseCu stom::WrapperCallbackEnvironmentCallbackIndex).As<v8::Function>(); 161 v8::Local<v8::Function> callback = environment->GetInternalField(V8PromiseCu stom::WrapperCallbackEnvironmentCallbackIndex).As<v8::Function>();
162 162
163 v8::Local<v8::Value> argv[] = { 163 v8::Local<v8::Value> argv[] = {
164 result, 164 result,
165 }; 165 };
166 v8::TryCatch trycatch; 166 v8::TryCatch trycatch;
167 result = V8ScriptRunner::callFunction(callback, getScriptExecutionContext(), promise, WTF_ARRAY_LENGTH(argv), argv); 167 result = V8ScriptRunner::callFunction(callback, getScriptExecutionContext(), promise, WTF_ARRAY_LENGTH(argv), argv, isolate);
168 if (result.IsEmpty()) { 168 if (result.IsEmpty()) {
169 V8PromiseCustom::rejectResolver(resolver, trycatch.Exception(), V8Promis eCustom::Synchronous, isolate); 169 V8PromiseCustom::rejectResolver(resolver, trycatch.Exception(), V8Promis eCustom::Synchronous, isolate);
170 return; 170 return;
171 } 171 }
172 V8PromiseCustom::resolveResolver(resolver, result, V8PromiseCustom::Synchron ous, isolate); 172 V8PromiseCustom::resolveResolver(resolver, result, V8PromiseCustom::Synchron ous, isolate);
173 } 173 }
174 174
175 v8::Local<v8::Object> wrapperCallbackEnvironment(v8::Handle<v8::Object> promise, v8::Handle<v8::Object> resolver, v8::Handle<v8::Function> callback, v8::Isolate * isolate) 175 v8::Local<v8::Object> wrapperCallbackEnvironment(v8::Handle<v8::Object> promise, v8::Handle<v8::Object> resolver, v8::Handle<v8::Function> callback, v8::Isolate * isolate)
176 { 176 {
177 v8::Local<v8::ObjectTemplate> objectTemplate = wrapperCallbackEnvironmentObj ectTemplate(isolate); 177 v8::Local<v8::ObjectTemplate> objectTemplate = wrapperCallbackEnvironmentObj ectTemplate(isolate);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 throwTypeError("Promise constructor takes a function argument", isolate) ; 297 throwTypeError("Promise constructor takes a function argument", isolate) ;
298 return; 298 return;
299 } 299 }
300 v8::Local<v8::Function> init = args[0].As<v8::Function>(); 300 v8::Local<v8::Function> init = args[0].As<v8::Function>();
301 v8::Local<v8::Object> promise, resolver; 301 v8::Local<v8::Object> promise, resolver;
302 V8PromiseCustom::createPromise(args.Holder(), &promise, &resolver, isolate); 302 V8PromiseCustom::createPromise(args.Holder(), &promise, &resolver, isolate);
303 v8::Handle<v8::Value> argv[] = { 303 v8::Handle<v8::Value> argv[] = {
304 resolver, 304 resolver,
305 }; 305 };
306 v8::TryCatch trycatch; 306 v8::TryCatch trycatch;
307 if (V8ScriptRunner::callFunction(init, getScriptExecutionContext(), promise, WTF_ARRAY_LENGTH(argv), argv).IsEmpty()) { 307 if (V8ScriptRunner::callFunction(init, getScriptExecutionContext(), promise, WTF_ARRAY_LENGTH(argv), argv, isolate).IsEmpty()) {
308 // An exception is thrown. Reject the promise if its resolved flag is un set. 308 // An exception is thrown. Reject the promise if its resolved flag is un set.
309 if (!V8PromiseCustom::isInternalDetached(resolver) && V8PromiseCustom::g etState(V8PromiseCustom::getInternal(resolver)) == V8PromiseCustom::Pending) 309 if (!V8PromiseCustom::isInternalDetached(resolver) && V8PromiseCustom::g etState(V8PromiseCustom::getInternal(resolver)) == V8PromiseCustom::Pending)
310 V8PromiseCustom::rejectResolver(resolver, trycatch.Exception(), V8Pr omiseCustom::Asynchronous, isolate); 310 V8PromiseCustom::rejectResolver(resolver, trycatch.Exception(), V8Pr omiseCustom::Asynchronous, isolate);
311 } 311 }
312 v8SetReturnValue(args, promise); 312 v8SetReturnValue(args, promise);
313 return; 313 return;
314 } 314 }
315 315
316 void V8Promise::thenMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& args ) 316 void V8Promise::thenMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& args )
317 { 317 {
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 } 526 }
527 } 527 }
528 528
529 if (!then.IsEmpty() && then->IsFunction()) { 529 if (!then.IsEmpty() && then->IsFunction()) {
530 ASSERT(result->IsObject()); 530 ASSERT(result->IsObject());
531 v8::TryCatch trycatch; 531 v8::TryCatch trycatch;
532 v8::Handle<v8::Value> argv[] = { 532 v8::Handle<v8::Value> argv[] = {
533 createClosure(promiseResolveCallback, resolver), 533 createClosure(promiseResolveCallback, resolver),
534 createClosure(promiseRejectCallback, resolver), 534 createClosure(promiseRejectCallback, resolver),
535 }; 535 };
536 if (V8ScriptRunner::callFunction(then.As<v8::Function>(), getScriptExecu tionContext(), result.As<v8::Object>(), WTF_ARRAY_LENGTH(argv), argv).IsEmpty()) 536 if (V8ScriptRunner::callFunction(then.As<v8::Function>(), getScriptExecu tionContext(), result.As<v8::Object>(), WTF_ARRAY_LENGTH(argv), argv, isolate).I sEmpty())
537 rejectResolver(resolver, trycatch.Exception(), mode, isolate); 537 rejectResolver(resolver, trycatch.Exception(), mode, isolate);
538 return; 538 return;
539 } 539 }
540 540
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))
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 internal->SetInternalField(V8PromiseCustom::InternalStateIndex, v8::Integer: :New(state)); 630 internal->SetInternalField(V8PromiseCustom::InternalStateIndex, v8::Integer: :New(state));
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); 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

Powered by Google App Engine
This is Rietveld 408576698