| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/v8_inspector/V8InjectedScriptHost.h" | 5 #include "platform/v8_inspector/V8InjectedScriptHost.h" |
| 6 | 6 |
| 7 #include "platform/inspector_protocol/String16.h" | 7 #include "platform/inspector_protocol/String16.h" |
| 8 #include "platform/inspector_protocol/Values.h" | 8 #include "platform/inspector_protocol/Values.h" |
| 9 #include "platform/v8_inspector/InjectedScript.h" | 9 #include "platform/v8_inspector/InjectedScript.h" |
| 10 #include "platform/v8_inspector/InjectedScriptHost.h" | 10 #include "platform/v8_inspector/InjectedScriptHost.h" |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 void V8InjectedScriptHost::inspectCallback(const v8::FunctionCallbackInfo<v8::Va
lue>& info) | 213 void V8InjectedScriptHost::inspectCallback(const v8::FunctionCallbackInfo<v8::Va
lue>& info) |
| 214 { | 214 { |
| 215 if (info.Length() < 2) | 215 if (info.Length() < 2) |
| 216 return; | 216 return; |
| 217 | 217 |
| 218 v8::Local<v8::Context> context = info.GetIsolate()->GetCurrentContext(); | 218 v8::Local<v8::Context> context = info.GetIsolate()->GetCurrentContext(); |
| 219 InjectedScriptHost* host = V8InjectedScriptHost::unwrap(context, info.Holder
()); | 219 InjectedScriptHost* host = V8InjectedScriptHost::unwrap(context, info.Holder
()); |
| 220 host->inspectImpl(toProtocolValue(context, info[0]), toProtocolValue(context
, info[1])); | 220 host->inspectImpl(toProtocolValue(context, info[0]), toProtocolValue(context
, info[1])); |
| 221 } | 221 } |
| 222 | 222 |
| 223 void V8InjectedScriptHost::evalCallback(const v8::FunctionCallbackInfo<v8::Value
>& info) | |
| 224 { | |
| 225 v8::Isolate* isolate = info.GetIsolate(); | |
| 226 if (info.Length() < 1) { | |
| 227 isolate->ThrowException(v8::Exception::Error(v8::String::NewFromUtf8(iso
late, "One argument expected."))); | |
| 228 return; | |
| 229 } | |
| 230 | |
| 231 v8::Local<v8::String> expression = info[0]->ToString(isolate); | |
| 232 if (expression.IsEmpty()) { | |
| 233 isolate->ThrowException(v8::Exception::Error(v8::String::NewFromUtf8(iso
late, "The argument must be a string."))); | |
| 234 return; | |
| 235 } | |
| 236 | |
| 237 ASSERT(isolate->InContext()); | |
| 238 v8::TryCatch tryCatch(isolate); | |
| 239 v8::Local<v8::Value> result; | |
| 240 InjectedScriptHost* host = V8InjectedScriptHost::unwrap(isolate->GetCurrentC
ontext(), info.Holder()); | |
| 241 if (!host->debugger()) | |
| 242 return; | |
| 243 if (!host->debugger()->compileAndRunInternalScript(isolate->GetCurrentContex
t(), expression).ToLocal(&result)) { | |
| 244 v8SetReturnValue(info, tryCatch.ReThrow()); | |
| 245 return; | |
| 246 } | |
| 247 v8SetReturnValue(info, result); | |
| 248 } | |
| 249 | |
| 250 static bool getFunctionLocation(const v8::FunctionCallbackInfo<v8::Value>& info,
String16* scriptId, int* lineNumber, int* columnNumber) | 223 static bool getFunctionLocation(const v8::FunctionCallbackInfo<v8::Value>& info,
String16* scriptId, int* lineNumber, int* columnNumber) |
| 251 { | 224 { |
| 252 if (info.Length() < 1 || !info[0]->IsFunction()) | 225 if (info.Length() < 1 || !info[0]->IsFunction()) |
| 253 return false; | 226 return false; |
| 254 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(info[0]); | 227 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(info[0]); |
| 255 *lineNumber = function->GetScriptLineNumber(); | 228 *lineNumber = function->GetScriptLineNumber(); |
| 256 *columnNumber = function->GetScriptColumnNumber(); | 229 *columnNumber = function->GetScriptColumnNumber(); |
| 257 if (*lineNumber == v8::Function::kLineOffsetNotFound || *columnNumber == v8:
:Function::kLineOffsetNotFound) | 230 if (*lineNumber == v8::Function::kLineOffsetNotFound || *columnNumber == v8:
:Function::kLineOffsetNotFound) |
| 258 return false; | 231 return false; |
| 259 *scriptId = String16::number(function->ScriptId()); | 232 *scriptId = String16::number(function->ScriptId()); |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 377 InjectedScriptNative* injectedScriptNative = InjectedScriptNative::fromInjec
tedScriptHost(info.Holder()); | 350 InjectedScriptNative* injectedScriptNative = InjectedScriptNative::fromInjec
tedScriptHost(info.Holder()); |
| 378 if (!injectedScriptNative) | 351 if (!injectedScriptNative) |
| 379 return; | 352 return; |
| 380 | 353 |
| 381 v8::Local<v8::String> v8groupName = info[1]->ToString(info.GetIsolate()); | 354 v8::Local<v8::String> v8groupName = info[1]->ToString(info.GetIsolate()); |
| 382 String16 groupName = toProtocolStringWithTypeCheck(v8groupName); | 355 String16 groupName = toProtocolStringWithTypeCheck(v8groupName); |
| 383 int id = injectedScriptNative->bind(info[0], groupName); | 356 int id = injectedScriptNative->bind(info[0], groupName); |
| 384 info.GetReturnValue().Set(id); | 357 info.GetReturnValue().Set(id); |
| 385 } | 358 } |
| 386 | 359 |
| 387 void V8InjectedScriptHost::objectForIdCallback(const v8::FunctionCallbackInfo<v8
::Value>& info) | |
| 388 { | |
| 389 if (info.Length() < 1 || !info[0]->IsInt32()) | |
| 390 return; | |
| 391 InjectedScriptNative* injectedScriptNative = InjectedScriptNative::fromInjec
tedScriptHost(info.Holder()); | |
| 392 if (!injectedScriptNative) | |
| 393 return; | |
| 394 int id = info[0].As<v8::Int32>()->Value(); | |
| 395 v8::Local<v8::Value> value = injectedScriptNative->objectForId(id); | |
| 396 if (!value.IsEmpty()) | |
| 397 info.GetReturnValue().Set(value); | |
| 398 } | |
| 399 | |
| 400 void V8InjectedScriptHost::idToObjectGroupNameCallback(const v8::FunctionCallbac
kInfo<v8::Value>& info) | |
| 401 { | |
| 402 if (info.Length() < 1 || !info[0]->IsInt32()) | |
| 403 return; | |
| 404 InjectedScriptNative* injectedScriptNative = InjectedScriptNative::fromInjec
tedScriptHost(info.Holder()); | |
| 405 if (!injectedScriptNative) | |
| 406 return; | |
| 407 int id = info[0].As<v8::Int32>()->Value(); | |
| 408 String16 groupName = injectedScriptNative->groupName(id); | |
| 409 if (!groupName.isEmpty()) | |
| 410 info.GetReturnValue().Set(toV8String(info.GetIsolate(), groupName)); | |
| 411 } | |
| 412 | |
| 413 v8::Local<v8::Symbol> V8Debugger::scopeExtensionSymbol(v8::Isolate* isolate) | 360 v8::Local<v8::Symbol> V8Debugger::scopeExtensionSymbol(v8::Isolate* isolate) |
| 414 { | 361 { |
| 415 return v8::Symbol::ForApi(isolate, toV8StringInternalized(isolate, "scopeExt
ension")); | 362 return v8::Symbol::ForApi(isolate, toV8StringInternalized(isolate, "scopeExt
ension")); |
| 416 } | 363 } |
| 417 | 364 |
| 418 bool V8Debugger::isCommandLineAPIMethod(const String16& name) | 365 bool V8Debugger::isCommandLineAPIMethod(const String16& name) |
| 419 { | 366 { |
| 420 DEFINE_STATIC_LOCAL(protocol::HashSet<String16>, methods, ()); | 367 DEFINE_STATIC_LOCAL(protocol::HashSet<String16>, methods, ()); |
| 421 if (methods.size() == 0) { | 368 if (methods.size() == 0) { |
| 422 const char* members[] = { "$", "$$", "$x", "dir", "dirxml", "keys", "val
ues", "profile", "profileEnd", | 369 const char* members[] = { "$", "$$", "$x", "dir", "dirxml", "keys", "val
ues", "profile", "profileEnd", |
| (...skipping 26 matching lines...) Expand all Loading... |
| 449 {"clearConsoleMessages", V8InjectedScriptHost::clearConsoleMessagesCallback}
, | 396 {"clearConsoleMessages", V8InjectedScriptHost::clearConsoleMessagesCallback}
, |
| 450 {"inspect", V8InjectedScriptHost::inspectCallback}, | 397 {"inspect", V8InjectedScriptHost::inspectCallback}, |
| 451 {"inspectedObject", V8InjectedScriptHost::inspectedObjectCallback}, | 398 {"inspectedObject", V8InjectedScriptHost::inspectedObjectCallback}, |
| 452 {"internalConstructorName", V8InjectedScriptHost::internalConstructorNameCal
lback}, | 399 {"internalConstructorName", V8InjectedScriptHost::internalConstructorNameCal
lback}, |
| 453 {"formatAccessorsAsProperties", V8InjectedScriptHost::formatAccessorsAsPrope
rties}, | 400 {"formatAccessorsAsProperties", V8InjectedScriptHost::formatAccessorsAsPrope
rties}, |
| 454 {"isTypedArray", V8InjectedScriptHost::isTypedArrayCallback}, | 401 {"isTypedArray", V8InjectedScriptHost::isTypedArrayCallback}, |
| 455 {"subtype", V8InjectedScriptHost::subtypeCallback}, | 402 {"subtype", V8InjectedScriptHost::subtypeCallback}, |
| 456 {"collectionEntries", V8InjectedScriptHost::collectionEntriesCallback}, | 403 {"collectionEntries", V8InjectedScriptHost::collectionEntriesCallback}, |
| 457 {"getInternalProperties", V8InjectedScriptHost::getInternalPropertiesCallbac
k}, | 404 {"getInternalProperties", V8InjectedScriptHost::getInternalPropertiesCallbac
k}, |
| 458 {"getEventListeners", V8InjectedScriptHost::getEventListenersCallback}, | 405 {"getEventListeners", V8InjectedScriptHost::getEventListenersCallback}, |
| 459 {"eval", V8InjectedScriptHost::evalCallback}, | |
| 460 {"debugFunction", V8InjectedScriptHost::debugFunctionCallback}, | 406 {"debugFunction", V8InjectedScriptHost::debugFunctionCallback}, |
| 461 {"undebugFunction", V8InjectedScriptHost::undebugFunctionCallback}, | 407 {"undebugFunction", V8InjectedScriptHost::undebugFunctionCallback}, |
| 462 {"monitorFunction", V8InjectedScriptHost::monitorFunctionCallback}, | 408 {"monitorFunction", V8InjectedScriptHost::monitorFunctionCallback}, |
| 463 {"unmonitorFunction", V8InjectedScriptHost::unmonitorFunctionCallback}, | 409 {"unmonitorFunction", V8InjectedScriptHost::unmonitorFunctionCallback}, |
| 464 {"callFunction", V8InjectedScriptHost::callFunctionCallback}, | 410 {"callFunction", V8InjectedScriptHost::callFunctionCallback}, |
| 465 {"suppressWarningsAndCallFunction", V8InjectedScriptHost::suppressWarningsAn
dCallFunctionCallback}, | 411 {"suppressWarningsAndCallFunction", V8InjectedScriptHost::suppressWarningsAn
dCallFunctionCallback}, |
| 466 {"setNonEnumProperty", V8InjectedScriptHost::setNonEnumPropertyCallback}, | 412 {"setNonEnumProperty", V8InjectedScriptHost::setNonEnumPropertyCallback}, |
| 467 {"bind", V8InjectedScriptHost::bindCallback}, | 413 {"bind", V8InjectedScriptHost::bindCallback} |
| 468 {"objectForId", V8InjectedScriptHost::objectForIdCallback}, | |
| 469 {"idToObjectGroupName", V8InjectedScriptHost::idToObjectGroupNameCallback}, | |
| 470 }; | 414 }; |
| 471 | 415 |
| 472 } // namespace | 416 } // namespace |
| 473 | 417 |
| 474 v8::Local<v8::FunctionTemplate> V8InjectedScriptHost::createWrapperTemplate(v8::
Isolate* isolate) | 418 v8::Local<v8::FunctionTemplate> V8InjectedScriptHost::createWrapperTemplate(v8::
Isolate* isolate) |
| 475 { | 419 { |
| 476 protocol::Vector<InspectorWrapperBase::V8MethodConfiguration> methods(WTF_AR
RAY_LENGTH(V8InjectedScriptHostMethods)); | 420 protocol::Vector<InspectorWrapperBase::V8MethodConfiguration> methods(WTF_AR
RAY_LENGTH(V8InjectedScriptHostMethods)); |
| 477 std::copy(V8InjectedScriptHostMethods, V8InjectedScriptHostMethods + WTF_ARR
AY_LENGTH(V8InjectedScriptHostMethods), methods.begin()); | 421 std::copy(V8InjectedScriptHostMethods, V8InjectedScriptHostMethods + WTF_ARR
AY_LENGTH(V8InjectedScriptHostMethods), methods.begin()); |
| 478 protocol::Vector<InspectorWrapperBase::V8AttributeConfiguration> attributes; | 422 protocol::Vector<InspectorWrapperBase::V8AttributeConfiguration> attributes; |
| 479 return InjectedScriptHostWrapper::createWrapperTemplate(isolate, methods, at
tributes); | 423 return InjectedScriptHostWrapper::createWrapperTemplate(isolate, methods, at
tributes); |
| 480 } | 424 } |
| 481 | 425 |
| 482 v8::Local<v8::Object> V8InjectedScriptHost::wrap(v8::Local<v8::FunctionTemplate>
constructorTemplate, v8::Local<v8::Context> context, InjectedScriptHost* host) | 426 v8::Local<v8::Object> V8InjectedScriptHost::wrap(v8::Local<v8::FunctionTemplate>
constructorTemplate, v8::Local<v8::Context> context, InjectedScriptHost* host) |
| 483 { | 427 { |
| 484 return InjectedScriptHostWrapper::wrap(constructorTemplate, context, host); | 428 return InjectedScriptHostWrapper::wrap(constructorTemplate, context, host); |
| 485 } | 429 } |
| 486 | 430 |
| 487 InjectedScriptHost* V8InjectedScriptHost::unwrap(v8::Local<v8::Context> context,
v8::Local<v8::Object> object) | 431 InjectedScriptHost* V8InjectedScriptHost::unwrap(v8::Local<v8::Context> context,
v8::Local<v8::Object> object) |
| 488 { | 432 { |
| 489 return InjectedScriptHostWrapper::unwrap(context, object); | 433 return InjectedScriptHostWrapper::unwrap(context, object); |
| 490 } | 434 } |
| 491 | 435 |
| 492 } // namespace blink | 436 } // namespace blink |
| OLD | NEW |