OLD | NEW |
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 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 if (!parsedObjectId->asObject(&object)) | 327 if (!parsedObjectId->asObject(&object)) |
328 return; | 328 return; |
329 int boundId = 0; | 329 int boundId = 0; |
330 if (!object->getNumber("id", &boundId)) | 330 if (!object->getNumber("id", &boundId)) |
331 return; | 331 return; |
332 m_native->unbind(boundId); | 332 m_native->unbind(boundId); |
333 } | 333 } |
334 | 334 |
335 PassRefPtr<Array<CallFrame>> InjectedScript::wrapCallFrames(v8::Local<v8::Object
> callFrames, int asyncOrdinal) | 335 PassRefPtr<Array<CallFrame>> InjectedScript::wrapCallFrames(v8::Local<v8::Object
> callFrames, int asyncOrdinal) |
336 { | 336 { |
337 ASSERT(!isEmpty()); | |
338 ScriptFunctionCall function(injectedScriptObject(), "wrapCallFrames"); | 337 ScriptFunctionCall function(injectedScriptObject(), "wrapCallFrames"); |
339 function.appendArgument(callFrames); | 338 function.appendArgument(callFrames); |
340 function.appendArgument(asyncOrdinal); | 339 function.appendArgument(asyncOrdinal); |
341 bool hadException = false; | 340 bool hadException = false; |
342 ScriptValue callFramesValue = callFunctionWithEvalEnabled(function, hadExcep
tion); | 341 ScriptValue callFramesValue = callFunctionWithEvalEnabled(function, hadExcep
tion); |
343 ASSERT(!hadException); | 342 ASSERT(!hadException); |
344 RefPtr<JSONValue> result = toJSONValue(callFramesValue); | 343 RefPtr<JSONValue> result = toJSONValue(callFramesValue); |
345 if (result && result->type() == JSONValue::TypeArray) | 344 if (result && result->type() == JSONValue::TypeArray) |
346 return Array<CallFrame>::runtimeCast(result); | 345 return Array<CallFrame>::runtimeCast(result); |
347 return Array<CallFrame>::create(); | 346 return Array<CallFrame>::create(); |
348 } | 347 } |
349 | 348 |
350 PassRefPtr<TypeBuilder::Runtime::RemoteObject> InjectedScript::wrapObject(const
ScriptValue& value, const String& groupName, bool generatePreview) const | 349 PassRefPtr<TypeBuilder::Runtime::RemoteObject> InjectedScript::wrapObject(const
ScriptValue& value, const String& groupName, bool generatePreview) const |
351 { | 350 { |
352 ASSERT(!isEmpty()); | |
353 ScriptFunctionCall wrapFunction(injectedScriptObject(), "wrapObject"); | 351 ScriptFunctionCall wrapFunction(injectedScriptObject(), "wrapObject"); |
354 wrapFunction.appendArgument(value); | 352 wrapFunction.appendArgument(value); |
355 wrapFunction.appendArgument(groupName); | 353 wrapFunction.appendArgument(groupName); |
356 wrapFunction.appendArgument(canAccessInspectedWindow()); | 354 wrapFunction.appendArgument(canAccessInspectedWindow()); |
357 wrapFunction.appendArgument(generatePreview); | 355 wrapFunction.appendArgument(generatePreview); |
358 bool hadException = false; | 356 bool hadException = false; |
359 ScriptValue r = callFunctionWithEvalEnabled(wrapFunction, hadException); | 357 ScriptValue r = callFunctionWithEvalEnabled(wrapFunction, hadException); |
360 if (hadException) | 358 if (hadException) |
361 return nullptr; | 359 return nullptr; |
362 RefPtr<JSONObject> rawResult = toJSONValue(r)->asObject(); | 360 RefPtr<JSONObject> rawResult = toJSONValue(r)->asObject(); |
363 return TypeBuilder::Runtime::RemoteObject::runtimeCast(rawResult); | 361 return TypeBuilder::Runtime::RemoteObject::runtimeCast(rawResult); |
364 } | 362 } |
365 | 363 |
366 PassRefPtr<TypeBuilder::Runtime::RemoteObject> InjectedScript::wrapTable(const S
criptValue& table, const ScriptValue& columns) const | 364 PassRefPtr<TypeBuilder::Runtime::RemoteObject> InjectedScript::wrapTable(const S
criptValue& table, const ScriptValue& columns) const |
367 { | 365 { |
368 ASSERT(!isEmpty()); | |
369 ScriptFunctionCall wrapFunction(injectedScriptObject(), "wrapTable"); | 366 ScriptFunctionCall wrapFunction(injectedScriptObject(), "wrapTable"); |
370 wrapFunction.appendArgument(canAccessInspectedWindow()); | 367 wrapFunction.appendArgument(canAccessInspectedWindow()); |
371 wrapFunction.appendArgument(table); | 368 wrapFunction.appendArgument(table); |
372 if (columns.isEmpty()) | 369 if (columns.isEmpty()) |
373 wrapFunction.appendArgument(false); | 370 wrapFunction.appendArgument(false); |
374 else | 371 else |
375 wrapFunction.appendArgument(columns); | 372 wrapFunction.appendArgument(columns); |
376 bool hadException = false; | 373 bool hadException = false; |
377 ScriptValue r = callFunctionWithEvalEnabled(wrapFunction, hadException); | 374 ScriptValue r = callFunctionWithEvalEnabled(wrapFunction, hadException); |
378 if (hadException) | 375 if (hadException) |
379 return nullptr; | 376 return nullptr; |
380 RefPtr<JSONObject> rawResult = toJSONValue(r)->asObject(); | 377 RefPtr<JSONObject> rawResult = toJSONValue(r)->asObject(); |
381 return TypeBuilder::Runtime::RemoteObject::runtimeCast(rawResult); | 378 return TypeBuilder::Runtime::RemoteObject::runtimeCast(rawResult); |
382 } | 379 } |
383 | 380 |
384 v8::Local<v8::Value> InjectedScript::findObject(const RemoteObjectId& objectId)
const | 381 v8::Local<v8::Value> InjectedScript::findObject(const RemoteObjectId& objectId)
const |
385 { | 382 { |
386 ASSERT(!isEmpty()); | |
387 return m_native->objectForId(objectId.id()); | 383 return m_native->objectForId(objectId.id()); |
388 } | 384 } |
389 | 385 |
390 String InjectedScript::objectIdToObjectGroupName(const String& objectId) const | 386 String InjectedScript::objectIdToObjectGroupName(const String& objectId) const |
391 { | 387 { |
392 RefPtr<JSONValue> parsedObjectId = parseJSON(objectId); | 388 RefPtr<JSONValue> parsedObjectId = parseJSON(objectId); |
393 if (!parsedObjectId) | 389 if (!parsedObjectId) |
394 return String(); | 390 return String(); |
395 RefPtr<JSONObject> object; | 391 RefPtr<JSONObject> object; |
396 if (!parsedObjectId->asObject(&object)) | 392 if (!parsedObjectId->asObject(&object)) |
397 return String(); | 393 return String(); |
398 int boundId = 0; | 394 int boundId = 0; |
399 if (!object->getNumber("id", &boundId)) | 395 if (!object->getNumber("id", &boundId)) |
400 return String(); | 396 return String(); |
401 return m_native->groupName(boundId); | 397 return m_native->groupName(boundId); |
402 } | 398 } |
403 | 399 |
404 void InjectedScript::releaseObjectGroup(const String& objectGroup) | 400 void InjectedScript::releaseObjectGroup(const String& objectGroup) |
405 { | 401 { |
406 ASSERT(!isEmpty()); | |
407 m_native->releaseObjectGroup(objectGroup); | 402 m_native->releaseObjectGroup(objectGroup); |
408 if (objectGroup == "console") { | 403 if (objectGroup == "console") { |
409 ScriptFunctionCall releaseFunction(injectedScriptObject(), "clearLastEva
luationResult"); | 404 ScriptFunctionCall releaseFunction(injectedScriptObject(), "clearLastEva
luationResult"); |
410 bool hadException = false; | 405 bool hadException = false; |
411 callFunctionWithEvalEnabled(releaseFunction, hadException); | 406 callFunctionWithEvalEnabled(releaseFunction, hadException); |
412 ASSERT(!hadException); | 407 ASSERT(!hadException); |
413 } | 408 } |
414 } | 409 } |
415 | 410 |
416 void InjectedScript::setCustomObjectFormatterEnabled(bool enabled) | 411 void InjectedScript::setCustomObjectFormatterEnabled(bool enabled) |
417 { | 412 { |
418 ASSERT(!isEmpty()); | |
419 ScriptFunctionCall function(injectedScriptObject(), "setCustomObjectFormatte
rEnabled"); | 413 ScriptFunctionCall function(injectedScriptObject(), "setCustomObjectFormatte
rEnabled"); |
420 function.appendArgument(enabled); | 414 function.appendArgument(enabled); |
421 RefPtr<JSONValue> result; | 415 RefPtr<JSONValue> result; |
422 makeCall(function, &result); | 416 makeCall(function, &result); |
423 } | 417 } |
424 | 418 |
425 void InjectedScript::initialize(ScriptValue injectedScriptObject, InspectedState
AccessCheck accessCheck) | 419 void InjectedScript::initialize(ScriptValue injectedScriptObject, InspectedState
AccessCheck accessCheck) |
426 { | 420 { |
427 m_injectedScriptObject = injectedScriptObject; | 421 m_injectedScriptObject = injectedScriptObject; |
428 m_inspectedStateAccessCheck = accessCheck; | 422 m_inspectedStateAccessCheck = accessCheck; |
429 } | 423 } |
430 | 424 |
431 bool InjectedScript::canAccessInspectedWindow() const | 425 bool InjectedScript::canAccessInspectedWindow() const |
432 { | 426 { |
433 ASSERT(!isEmpty()); | |
434 return m_inspectedStateAccessCheck(m_injectedScriptObject.scriptState()); | 427 return m_inspectedStateAccessCheck(m_injectedScriptObject.scriptState()); |
435 } | 428 } |
436 | 429 |
437 const ScriptValue& InjectedScript::injectedScriptObject() const | 430 const ScriptValue& InjectedScript::injectedScriptObject() const |
438 { | 431 { |
439 return m_injectedScriptObject; | 432 return m_injectedScriptObject; |
440 } | 433 } |
441 | 434 |
442 ScriptValue InjectedScript::callFunctionWithEvalEnabled(ScriptFunctionCall& func
tion, bool& hadException) const | 435 ScriptValue InjectedScript::callFunctionWithEvalEnabled(ScriptFunctionCall& func
tion, bool& hadException) const |
443 { | 436 { |
444 ASSERT(!isEmpty()); | |
445 | |
446 ScriptState* scriptState = m_injectedScriptObject.scriptState(); | 437 ScriptState* scriptState = m_injectedScriptObject.scriptState(); |
447 ScriptState::Scope scope(scriptState); | 438 ScriptState::Scope scope(scriptState); |
448 bool evalIsDisabled = !scriptState->evalEnabled(); | 439 bool evalIsDisabled = !scriptState->evalEnabled(); |
449 // Temporarily enable allow evals for inspector. | 440 // Temporarily enable allow evals for inspector. |
450 if (evalIsDisabled) | 441 if (evalIsDisabled) |
451 scriptState->setEvalEnabled(true); | 442 scriptState->setEvalEnabled(true); |
452 | 443 |
453 ScriptValue resultValue = function.call(hadException); | 444 ScriptValue resultValue = function.call(hadException); |
454 | 445 |
455 if (evalIsDisabled) | 446 if (evalIsDisabled) |
456 scriptState->setEvalEnabled(false); | 447 scriptState->setEvalEnabled(false); |
457 | 448 |
458 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "Update
Counters", TRACE_EVENT_SCOPE_THREAD, "data", InspectorUpdateCountersEvent::data(
)); | 449 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "Update
Counters", TRACE_EVENT_SCOPE_THREAD, "data", InspectorUpdateCountersEvent::data(
)); |
459 return resultValue; | 450 return resultValue; |
460 } | 451 } |
461 | 452 |
462 void InjectedScript::makeCall(ScriptFunctionCall& function, RefPtr<JSONValue>* r
esult) | 453 void InjectedScript::makeCall(ScriptFunctionCall& function, RefPtr<JSONValue>* r
esult) |
463 { | 454 { |
464 if (isEmpty() || !canAccessInspectedWindow()) { | 455 if (!canAccessInspectedWindow()) { |
465 *result = JSONValue::null(); | 456 *result = JSONValue::null(); |
466 return; | 457 return; |
467 } | 458 } |
468 | 459 |
469 bool hadException = false; | 460 bool hadException = false; |
470 ScriptValue resultValue = callFunctionWithEvalEnabled(function, hadException
); | 461 ScriptValue resultValue = callFunctionWithEvalEnabled(function, hadException
); |
471 | 462 |
472 ASSERT(!hadException); | 463 ASSERT(!hadException); |
473 if (!hadException) { | 464 if (!hadException) { |
474 *result = toJSONValue(resultValue); | 465 *result = toJSONValue(resultValue); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 String text = !message.IsEmpty() ? toCoreStringWithUndefinedOrNullCheck(
message->Get()) : "Internal error"; | 513 String text = !message.IsEmpty() ? toCoreStringWithUndefinedOrNullCheck(
message->Get()) : "Internal error"; |
523 *exceptionDetails = TypeBuilder::Debugger::ExceptionDetails::create().se
tText(text); | 514 *exceptionDetails = TypeBuilder::Debugger::ExceptionDetails::create().se
tText(text); |
524 } else { | 515 } else { |
525 *result = toJSONValue(resultValue); | 516 *result = toJSONValue(resultValue); |
526 if (!*result) | 517 if (!*result) |
527 *result = JSONString::create(String::format("Object has too long ref
erence chain(must not be longer than %d)", JSONValue::maxDepth)); | 518 *result = JSONString::create(String::format("Object has too long ref
erence chain(must not be longer than %d)", JSONValue::maxDepth)); |
528 } | 519 } |
529 } | 520 } |
530 | 521 |
531 } // namespace blink | 522 } // namespace blink |
OLD | NEW |