| 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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 ASSERT(value->IsFunction()); | 91 ASSERT(value->IsFunction()); |
| 92 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value); | 92 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value); |
| 93 v8::Local<v8::Object> windowGlobal = context->Global(); | 93 v8::Local<v8::Object> windowGlobal = context->Global(); |
| 94 v8::Local<v8::Value> info[] = { scriptHostWrapper, windowGlobal, v8::Number:
:New(isolate, inspectedContext->contextId()) }; | 94 v8::Local<v8::Value> info[] = { scriptHostWrapper, windowGlobal, v8::Number:
:New(isolate, inspectedContext->contextId()) }; |
| 95 v8::MicrotasksScope microtasksScope(isolate, v8::MicrotasksScope::kDoNotRunM
icrotasks); | 95 v8::MicrotasksScope microtasksScope(isolate, v8::MicrotasksScope::kDoNotRunM
icrotasks); |
| 96 v8::Local<v8::Value> injectedScriptValue; | 96 v8::Local<v8::Value> injectedScriptValue; |
| 97 if (!function->Call(context, windowGlobal, WTF_ARRAY_LENGTH(info), info).ToL
ocal(&injectedScriptValue)) | 97 if (!function->Call(context, windowGlobal, WTF_ARRAY_LENGTH(info), info).ToL
ocal(&injectedScriptValue)) |
| 98 return nullptr; | 98 return nullptr; |
| 99 if (!injectedScriptValue->IsObject()) | 99 if (!injectedScriptValue->IsObject()) |
| 100 return nullptr; | 100 return nullptr; |
| 101 return adoptPtr(new InjectedScript(inspectedContext, injectedScriptValue.As<
v8::Object>(), injectedScriptNative.release())); | 101 return adoptPtr(new InjectedScript(inspectedContext, injectedScriptValue.As<
v8::Object>(), std::move(injectedScriptNative))); |
| 102 } | 102 } |
| 103 | 103 |
| 104 InjectedScript::InjectedScript(InspectedContext* context, v8::Local<v8::Object>
object, PassOwnPtr<InjectedScriptNative> injectedScriptNative) | 104 InjectedScript::InjectedScript(InspectedContext* context, v8::Local<v8::Object>
object, PassOwnPtr<InjectedScriptNative> injectedScriptNative) |
| 105 : m_context(context) | 105 : m_context(context) |
| 106 , m_value(context->isolate(), object) | 106 , m_value(context->isolate(), object) |
| 107 , m_native(std::move(injectedScriptNative)) | 107 , m_native(std::move(injectedScriptNative)) |
| 108 { | 108 { |
| 109 } | 109 } |
| 110 | 110 |
| 111 InjectedScript::~InjectedScript() | 111 InjectedScript::~InjectedScript() |
| (...skipping 18 matching lines...) Expand all Loading... |
| 130 *properties = Array<PropertyDescriptor>::create(); | 130 *properties = Array<PropertyDescriptor>::create(); |
| 131 return; | 131 return; |
| 132 } | 132 } |
| 133 | 133 |
| 134 OwnPtr<protocol::Value> protocolValue = toProtocolValue(function.context(),
resultValue); | 134 OwnPtr<protocol::Value> protocolValue = toProtocolValue(function.context(),
resultValue); |
| 135 if (hasInternalError(errorString, !protocolValue)) | 135 if (hasInternalError(errorString, !protocolValue)) |
| 136 return; | 136 return; |
| 137 protocol::ErrorSupport errors(errorString); | 137 protocol::ErrorSupport errors(errorString); |
| 138 OwnPtr<Array<PropertyDescriptor>> result = Array<PropertyDescriptor>::parse(
protocolValue.get(), &errors); | 138 OwnPtr<Array<PropertyDescriptor>> result = Array<PropertyDescriptor>::parse(
protocolValue.get(), &errors); |
| 139 if (!hasInternalError(errorString, errors.hasErrors())) | 139 if (!hasInternalError(errorString, errors.hasErrors())) |
| 140 *properties = result.release(); | 140 *properties = std::move(result); |
| 141 } | 141 } |
| 142 | 142 |
| 143 void InjectedScript::releaseObject(const String16& objectId) | 143 void InjectedScript::releaseObject(const String16& objectId) |
| 144 { | 144 { |
| 145 OwnPtr<protocol::Value> parsedObjectId = protocol::parseJSON(objectId); | 145 OwnPtr<protocol::Value> parsedObjectId = protocol::parseJSON(objectId); |
| 146 if (!parsedObjectId) | 146 if (!parsedObjectId) |
| 147 return; | 147 return; |
| 148 protocol::DictionaryValue* object = protocol::DictionaryValue::cast(parsedOb
jectId.get()); | 148 protocol::DictionaryValue* object = protocol::DictionaryValue::cast(parsedOb
jectId.get()); |
| 149 if (!object) | 149 if (!object) |
| 150 return; | 150 return; |
| 151 int boundId = 0; | 151 int boundId = 0; |
| 152 if (!object->getNumber("id", &boundId)) | 152 if (!object->getNumber("id", &boundId)) |
| 153 return; | 153 return; |
| 154 m_native->unbind(boundId); | 154 m_native->unbind(boundId); |
| 155 } | 155 } |
| 156 | 156 |
| 157 PassOwnPtr<protocol::Runtime::RemoteObject> InjectedScript::wrapObject(ErrorStri
ng* errorString, v8::Local<v8::Value> value, const String16& groupName, bool for
ceValueType, bool generatePreview) const | 157 PassOwnPtr<protocol::Runtime::RemoteObject> InjectedScript::wrapObject(ErrorStri
ng* errorString, v8::Local<v8::Value> value, const String16& groupName, bool for
ceValueType, bool generatePreview) const |
| 158 { | 158 { |
| 159 v8::HandleScope handles(m_context->isolate()); | 159 v8::HandleScope handles(m_context->isolate()); |
| 160 v8::Local<v8::Value> wrappedObject; | 160 v8::Local<v8::Value> wrappedObject; |
| 161 if (!wrapValue(errorString, value, groupName, forceValueType, generatePrevie
w).ToLocal(&wrappedObject)) | 161 if (!wrapValue(errorString, value, groupName, forceValueType, generatePrevie
w).ToLocal(&wrappedObject)) |
| 162 return nullptr; | 162 return nullptr; |
| 163 protocol::ErrorSupport errors; | 163 protocol::ErrorSupport errors; |
| 164 OwnPtr<protocol::Runtime::RemoteObject> remoteObject = protocol::Runtime::Re
moteObject::parse(toProtocolValue(m_context->context(), wrappedObject).get(), &e
rrors); | 164 OwnPtr<protocol::Runtime::RemoteObject> remoteObject = protocol::Runtime::Re
moteObject::parse(toProtocolValue(m_context->context(), wrappedObject).get(), &e
rrors); |
| 165 if (!remoteObject) | 165 if (!remoteObject) |
| 166 *errorString = "Object has too long reference chain"; | 166 *errorString = "Object has too long reference chain"; |
| 167 return remoteObject.release(); | 167 return remoteObject; |
| 168 } | 168 } |
| 169 | 169 |
| 170 bool InjectedScript::wrapObjectProperty(ErrorString* errorString, v8::Local<v8::
Object> object, v8::Local<v8::Value> key, const String16& groupName, bool forceV
alueType, bool generatePreview) const | 170 bool InjectedScript::wrapObjectProperty(ErrorString* errorString, v8::Local<v8::
Object> object, v8::Local<v8::Value> key, const String16& groupName, bool forceV
alueType, bool generatePreview) const |
| 171 { | 171 { |
| 172 v8::Local<v8::Value> property; | 172 v8::Local<v8::Value> property; |
| 173 if (hasInternalError(errorString, !object->Get(m_context->context(), key).To
Local(&property))) | 173 if (hasInternalError(errorString, !object->Get(m_context->context(), key).To
Local(&property))) |
| 174 return false; | 174 return false; |
| 175 v8::Local<v8::Value> wrappedProperty; | 175 v8::Local<v8::Value> wrappedProperty; |
| 176 if (!wrapValue(errorString, property, groupName, forceValueType, generatePre
view).ToLocal(&wrappedProperty)) | 176 if (!wrapValue(errorString, property, groupName, forceValueType, generatePre
view).ToLocal(&wrappedProperty)) |
| 177 return false; | 177 return false; |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 v8::Maybe<int> lineNumber = message->GetLineNumber(m_context->context()); | 329 v8::Maybe<int> lineNumber = message->GetLineNumber(m_context->context()); |
| 330 if (lineNumber.IsJust()) | 330 if (lineNumber.IsJust()) |
| 331 exceptionDetailsObject->setLine(lineNumber.FromJust()); | 331 exceptionDetailsObject->setLine(lineNumber.FromJust()); |
| 332 v8::Maybe<int> columnNumber = message->GetStartColumn(m_context->context()); | 332 v8::Maybe<int> columnNumber = message->GetStartColumn(m_context->context()); |
| 333 if (columnNumber.IsJust()) | 333 if (columnNumber.IsJust()) |
| 334 exceptionDetailsObject->setColumn(columnNumber.FromJust()); | 334 exceptionDetailsObject->setColumn(columnNumber.FromJust()); |
| 335 | 335 |
| 336 v8::Local<v8::StackTrace> stackTrace = message->GetStackTrace(); | 336 v8::Local<v8::StackTrace> stackTrace = message->GetStackTrace(); |
| 337 if (!stackTrace.IsEmpty() && stackTrace->GetFrameCount() > 0) | 337 if (!stackTrace.IsEmpty() && stackTrace->GetFrameCount() > 0) |
| 338 exceptionDetailsObject->setStack(m_context->debugger()->createStackTrace
(stackTrace, stackTrace->GetFrameCount())->buildInspectorObject()); | 338 exceptionDetailsObject->setStack(m_context->debugger()->createStackTrace
(stackTrace, stackTrace->GetFrameCount())->buildInspectorObject()); |
| 339 return exceptionDetailsObject.release(); | 339 return exceptionDetailsObject; |
| 340 } | 340 } |
| 341 | 341 |
| 342 void InjectedScript::wrapEvaluateResult(ErrorString* errorString, v8::MaybeLocal
<v8::Value> maybeResultValue, const v8::TryCatch& tryCatch, const String16& obje
ctGroup, bool returnByValue, bool generatePreview, OwnPtr<protocol::Runtime::Rem
oteObject>* result, Maybe<bool>* wasThrown, Maybe<protocol::Runtime::ExceptionDe
tails>* exceptionDetails) | 342 void InjectedScript::wrapEvaluateResult(ErrorString* errorString, v8::MaybeLocal
<v8::Value> maybeResultValue, const v8::TryCatch& tryCatch, const String16& obje
ctGroup, bool returnByValue, bool generatePreview, OwnPtr<protocol::Runtime::Rem
oteObject>* result, Maybe<bool>* wasThrown, Maybe<protocol::Runtime::ExceptionDe
tails>* exceptionDetails) |
| 343 { | 343 { |
| 344 v8::Local<v8::Value> resultValue; | 344 v8::Local<v8::Value> resultValue; |
| 345 if (!tryCatch.HasCaught()) { | 345 if (!tryCatch.HasCaught()) { |
| 346 if (hasInternalError(errorString, !maybeResultValue.ToLocal(&resultValue
))) | 346 if (hasInternalError(errorString, !maybeResultValue.ToLocal(&resultValue
))) |
| 347 return; | 347 return; |
| 348 OwnPtr<RemoteObject> remoteObject = wrapObject(errorString, resultValue,
objectGroup, returnByValue, generatePreview); | 348 OwnPtr<RemoteObject> remoteObject = wrapObject(errorString, resultValue,
objectGroup, returnByValue, generatePreview); |
| 349 if (!remoteObject) | 349 if (!remoteObject) |
| 350 return; | 350 return; |
| 351 if (objectGroup == "console") | 351 if (objectGroup == "console") |
| 352 m_lastEvaluationResult.Reset(m_context->isolate(), resultValue); | 352 m_lastEvaluationResult.Reset(m_context->isolate(), resultValue); |
| 353 *result = remoteObject.release(); | 353 *result = std::move(remoteObject); |
| 354 if (wasThrown) | 354 if (wasThrown) |
| 355 *wasThrown = false; | 355 *wasThrown = false; |
| 356 } else { | 356 } else { |
| 357 v8::Local<v8::Value> exception = tryCatch.Exception(); | 357 v8::Local<v8::Value> exception = tryCatch.Exception(); |
| 358 OwnPtr<RemoteObject> remoteObject = wrapObject(errorString, exception, o
bjectGroup, false, generatePreview && !exception->IsNativeError()); | 358 OwnPtr<RemoteObject> remoteObject = wrapObject(errorString, exception, o
bjectGroup, false, generatePreview && !exception->IsNativeError()); |
| 359 if (!remoteObject) | 359 if (!remoteObject) |
| 360 return; | 360 return; |
| 361 *result = remoteObject.release(); | 361 *result = std::move(remoteObject); |
| 362 if (exceptionDetails) | 362 if (exceptionDetails) |
| 363 *exceptionDetails = createExceptionDetails(tryCatch.Message()); | 363 *exceptionDetails = createExceptionDetails(tryCatch.Message()); |
| 364 if (wasThrown) | 364 if (wasThrown) |
| 365 *wasThrown = true; | 365 *wasThrown = true; |
| 366 } | 366 } |
| 367 } | 367 } |
| 368 | 368 |
| 369 v8::MaybeLocal<v8::Object> InjectedScript::commandLineAPI(ErrorString* errorStri
ng) | 369 v8::MaybeLocal<v8::Object> InjectedScript::commandLineAPI(ErrorString* errorStri
ng) |
| 370 { | 370 { |
| 371 v8::Isolate* isolate = m_context->isolate(); | 371 v8::Isolate* isolate = m_context->isolate(); |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 void InjectedScript::CallFrameScope::findInjectedScript(V8InspectorSessionImpl*
session) | 550 void InjectedScript::CallFrameScope::findInjectedScript(V8InspectorSessionImpl*
session) |
| 551 { | 551 { |
| 552 OwnPtr<RemoteCallFrameId> remoteId = RemoteCallFrameId::parse(m_errorString,
m_remoteCallFrameId); | 552 OwnPtr<RemoteCallFrameId> remoteId = RemoteCallFrameId::parse(m_errorString,
m_remoteCallFrameId); |
| 553 if (!remoteId) | 553 if (!remoteId) |
| 554 return; | 554 return; |
| 555 m_frameOrdinal = static_cast<size_t>(remoteId->frameOrdinal()); | 555 m_frameOrdinal = static_cast<size_t>(remoteId->frameOrdinal()); |
| 556 m_injectedScript = session->findInjectedScript(m_errorString, remoteId.get()
); | 556 m_injectedScript = session->findInjectedScript(m_errorString, remoteId.get()
); |
| 557 } | 557 } |
| 558 | 558 |
| 559 } // namespace blink | 559 } // namespace blink |
| OLD | NEW |