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

Side by Side Diff: Source/bindings/dart/DartDebugServer.cpp

Issue 24989007: Model each Dart library as its own ScriptState when devtools are enabled. (Closed) Base URL: svn://svn.chromium.org/multivm/trunk/webkit
Patch Set: Created 7 years, 2 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
« no previous file with comments | « Source/bindings/dart/DartDebugHooks.js ('k') | Source/bindings/dart/DartHandleProxy.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 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 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 { 176 {
177 Page* page = DartUtilities::domWindowForCurrentIsolate()->document()->page() ; 177 Page* page = DartUtilities::domWindowForCurrentIsolate()->document()->page() ;
178 if (!page || !instrumentationForPage(page)->inspectorDebuggerAgent()) 178 if (!page || !instrumentationForPage(page)->inspectorDebuggerAgent())
179 return; 179 return;
180 180
181 V8Scope v8Scope(v8::Debug::GetDebugContext()); 181 V8Scope v8Scope(v8::Debug::GetDebugContext());
182 182
183 ASSERT(Dart_CurrentIsolate()); 183 ASSERT(Dart_CurrentIsolate());
184 int isolateHandle = isolateMap().getByValue(Dart_CurrentIsolate()); 184 int isolateHandle = isolateMap().getByValue(Dart_CurrentIsolate());
185 185
186 ScriptState* scriptState = ScriptState::current();
187 Frame* frame = DartUtilities::domWindowForCurrentIsolate()->frame();
188 DartController* controller = DartController::retrieve(frame);
189 Vector<ScriptState*> scriptStates;
190 controller->collectScriptStatesForIsolate(Dart_CurrentIsolate(), DartUtiliti es::currentV8Context(), scriptStates);
191 for (size_t i = 0; i< scriptStates.size(); i++)
192 InspectorInstrumentation::didCreateIsolatedContext(frame, scriptStates[i ], 0);
193
186 ASSERT(!m_dartDebugObject.isEmpty()); 194 ASSERT(!m_dartDebugObject.isEmpty());
187 v8::Local<v8::Function> isolateLoaded = v8::Local<v8::Function>::Cast(dartDe bugObject()->Get(v8::String::New("isolateLoaded"))); 195 v8::Local<v8::Function> isolateLoaded = v8::Local<v8::Function>::Cast(dartDe bugObject()->Get(v8::String::New("isolateLoaded")));
188 v8::Handle<v8::Value> args[] = { v8::Number::New(isolateHandle) }; 196 v8::Handle<v8::Value> args[] = { v8::Number::New(isolateHandle) };
189 isolateLoaded->Call(dartDebugObject(), 1, args); 197 isolateLoaded->Call(dartDebugObject(), 1, args);
190 } 198 }
191 199
192 void DartDebugServer::disable() 200 void DartDebugServer::disable()
193 { 201 {
194 V8Scope v8Scope(v8::Debug::GetDebugContext()); 202 V8Scope v8Scope(v8::Debug::GetDebugContext());
195 // Only invoke the disable method when Dart code was executed on the page. 203 // Only invoke the disable method when Dart code was executed on the page.
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 { 455 {
448 Dart_SetStepOut(); 456 Dart_SetStepOut();
449 } 457 }
450 458
451 static void evaluateInScope(const v8::FunctionCallbackInfo<v8::Value>& args) 459 static void evaluateInScope(const v8::FunctionCallbackInfo<v8::Value>& args)
452 { 460 {
453 v8::Handle<v8::String> expression = args[0]->ToString(); 461 v8::Handle<v8::String> expression = args[0]->ToString();
454 v8::Handle<v8::Value> receiver = args[1]; 462 v8::Handle<v8::Value> receiver = args[1];
455 v8::Handle<v8::Object> functionProxy = args[2].As<v8::Object>(); 463 v8::Handle<v8::Object> functionProxy = args[2].As<v8::Object>();
456 v8::Handle<v8::Value> localVariablesProxy = args[3]; 464 v8::Handle<v8::Value> localVariablesProxy = args[3];
465 bool disableBreak = args[4]->BooleanValue();
457 466
458 DartScopes scopes(functionProxy); 467 DartScopes scopes(functionProxy, disableBreak);
459 Dart_Handle target = 0; 468 Dart_Handle target = 0;
460 if (receiver->IsNull() || receiver->IsUndefined()) { 469 if (receiver->IsNull() || receiver->IsUndefined()) {
461 Dart_Handle functionHandle = scopes.handle; 470 Dart_Handle functionHandle = scopes.handle;
462 ASSERT(Dart_IsFunction(functionHandle)); 471 ASSERT(Dart_IsFunction(functionHandle));
463 target = Dart_FunctionOwner(functionHandle); 472 target = Dart_FunctionOwner(functionHandle);
464 } else { 473 } else {
465 target = DartHandleProxy::unwrapValue(receiver); 474 target = DartHandleProxy::unwrapValue(receiver);
466 } 475 }
476
467 ASSERT(!Dart_IsError(target)); 477 ASSERT(!Dart_IsError(target));
468 Dart_Handle localVariables = DartHandleProxy::unwrapValue(localVariablesProx y); 478 Dart_Handle localVariables = DartHandleProxy::unwrapValue(localVariablesProx y);
469 ASSERT(Dart_IsList(localVariables));
470 intptr_t localVariablesLength = 0;
471 Dart_ListLength(localVariables, &localVariablesLength);
472 479
473 Dart_Handle wrapExpressionArgs[2] = { V8Converter::stringToDart(expression), localVariables }; 480 v8SetReturnValue(args, DartHandleProxy::evaluate(target, V8Converter::string ToDart(expression), localVariables));
474
475 Dart_Handle wrappedExpressionTuple =
476 DartUtilities::invokeUtilsMethod("wrapExpressionAsClosure", 2, wrapExpre ssionArgs);
477 ASSERT(Dart_IsList(wrappedExpressionTuple));
478 Dart_Handle wrappedExpression = Dart_ListGetAt(wrappedExpressionTuple, 0);
479 Dart_Handle wrappedExpressionArgs = Dart_ListGetAt(wrappedExpressionTuple, 1 );
480
481 ASSERT(Dart_IsString(wrappedExpression));
482 Dart_Handle closure = Dart_EvaluateExpr(target, wrappedExpression);
483 if (Dart_IsError(closure)) {
484 // There was a parse error. FIXME: consider cleaning up the line
485 // numbers in the error message.
486 V8ThrowException::throwError(v8::String::New(Dart_GetError(closure)));
487 } else {
488 // Invoke the closure passing in the expression arguments specified by
489 // wrappedExpressionTuple.
490 ASSERT(Dart_IsClosure(closure));
491 intptr_t length = 0;
492 Dart_ListLength(wrappedExpressionArgs, &length);
493 Vector<Dart_Handle> dartFunctionArgs;
494 for (uint32_t i = 0; i < length; i ++) {
495 dartFunctionArgs.append(Dart_ListGetAt(wrappedExpressionArgs, i));
496 }
497
498 Dart_Handle result = Dart_InvokeClosure(closure, dartFunctionArgs.size() , dartFunctionArgs.data());
499 if (Dart_IsError(result)) {
500 V8ThrowException::throwError(v8::String::New(Dart_GetError(result))) ;
501 } else {
502 v8SetReturnValue(args, DartHandleProxy::create(result));
503 }
504 }
505 } 481 }
506 482
507 void DartDebugServer::ensureHooksInstalled() 483 void DartDebugServer::ensureHooksInstalled()
508 { 484 {
509 DEFINE_STATIC_LOCAL(bool, hooksInstalled, (false)); 485 DEFINE_STATIC_LOCAL(bool, hooksInstalled, (false));
510 486
511 if (hooksInstalled) 487 if (hooksInstalled)
512 return; 488 return;
513 489
514 hooksInstalled = true; 490 hooksInstalled = true;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 } 525 }
550 dartDebugObject()->Set(v8::String::New("nativeCallbacks"), nativeCallbacks); 526 dartDebugObject()->Set(v8::String::New("nativeCallbacks"), nativeCallbacks);
551 } 527 }
552 528
553 v8::Local<v8::Object> DartDebugServer::dartDebugObject() 529 v8::Local<v8::Object> DartDebugServer::dartDebugObject()
554 { 530 {
555 return m_dartDebugObject.newLocal(v8::Isolate::GetCurrent()); 531 return m_dartDebugObject.newLocal(v8::Isolate::GetCurrent());
556 } 532 }
557 533
558 } 534 }
OLDNEW
« no previous file with comments | « Source/bindings/dart/DartDebugHooks.js ('k') | Source/bindings/dart/DartHandleProxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698