Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion test-app/runtime/src/main/cpp/DOMDomainCallbackHandlers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,10 @@ void DOMDomainCallbackHandlers::ChildNodeInsertedCallback(const v8::FunctionCall
auto lastId = args[1]->ToNumber(isolate);
auto node = args[2]->ToString(isolate);

auto nodeJson = protocol::StringUtil::parseJSON(v8_inspector::toProtocolString(node));
auto resultString = V8DOMAgentImpl::AddBackendNodeIdProperty(isolate, node);
auto resultUtf16Data = resultString.data();

auto nodeJson = protocol::StringUtil::parseJSON(String16((const uint16_t*) resultUtf16Data));

protocol::ErrorSupport errorSupport;
auto domNode = protocol::DOM::Node::fromValue(nodeJson.get(), &errorSupport);
Expand All @@ -48,6 +51,7 @@ void DOMDomainCallbackHandlers::ChildNodeInsertedCallback(const v8::FunctionCall
if (!errorSupportString.empty()) {
auto errorMessage = "Error while parsing debug `DOM Node` object. ";
DEBUG_WRITE_FORCE("%s Error: %s", errorMessage, errorSupportString.c_str());
return;
}

domAgentInstance->m_frontend.childNodeInserted(parentId->Int32Value(), lastId->Int32Value(), std::move(domNode));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,42 +95,7 @@ DispatchResponse V8DOMAgentImpl::getDocument(Maybe<int> in_depth, Maybe<bool> in

if (!outResult->ToObject()->Has(context, ArgConverter::ConvertToV8String(isolate, "backendNodeId")).FromMaybe(false)) {
// Using an older version of the modules which doesn't set the backendNodeId required property
auto scriptSource =
"(function () {"
" function addBackendNodeId(node) {"
" if (!node.backendNodeId) {"
" node.backendNodeId = 0;"
" }"
" if (node.children) {"
" for (var i = 0; i < node.children.length; i++) {"
" addBackendNodeId(node.children[i]);"
" }"
" }"
" }"
" return function(stringifiedNode) {"
" try {"
" const node = JSON.parse(stringifiedNode);"
" addBackendNodeId(node);"
" return JSON.stringify(node);"
" } catch (e) {"
" return stringifiedNode;"
" }"
" }"
"})()";

auto source = ArgConverter::ConvertToV8String(isolate, scriptSource);
v8::Local<v8::Script> script;
v8::Script::Compile(context, source).ToLocal(&script);

v8::Local<v8::Value> result;
script->Run(context).ToLocal(&result);
auto addBackendNodeIdFunction = result.As<v8::Function>();

v8::Local<v8::Value> args[] = { outResult };
v8::Local<v8::Value> scriptResult;
addBackendNodeIdFunction->Call(context, context->Global(), 1, args).ToLocal(&scriptResult);

resultString = ArgConverter::ConvertToUtf16String(scriptResult->ToString());
resultString = AddBackendNodeIdProperty(isolate, outResult);
}

auto resultUtf16Data = resultString.data();
Expand Down Expand Up @@ -363,5 +328,46 @@ DispatchResponse V8DOMAgentImpl::getFrameOwner(const String& in_frameId, int* ou
return utils::Common::protocolCommandNotSupportedDispatchResponse();
}

std::u16string V8DOMAgentImpl::AddBackendNodeIdProperty(v8::Isolate* isolate, v8::Local<v8::Value> jsonInput) {
auto scriptSource =
"(function () {"
" function addBackendNodeId(node) {"
" if (!node.backendNodeId) {"
" node.backendNodeId = 0;"
" }"
" if (node.children) {"
" for (var i = 0; i < node.children.length; i++) {"
" addBackendNodeId(node.children[i]);"
" }"
" }"
" }"
" return function(stringifiedNode) {"
" try {"
" const node = JSON.parse(stringifiedNode);"
" addBackendNodeId(node);"
" return JSON.stringify(node);"
" } catch (e) {"
" return stringifiedNode;"
" }"
" }"
"})()";

auto source = ArgConverter::ConvertToV8String(isolate, scriptSource);
v8::Local<v8::Script> script;
auto context = isolate->GetCurrentContext();
v8::Script::Compile(context, source).ToLocal(&script);

v8::Local<v8::Value> result;
script->Run(context).ToLocal(&result);
auto addBackendNodeIdFunction = result.As<v8::Function>();

v8::Local<v8::Value> funcArguments[] = { jsonInput };
v8::Local<v8::Value> scriptResult;
addBackendNodeIdFunction->Call(context, context->Global(), 1, funcArguments).ToLocal(&scriptResult);

auto resultString = ArgConverter::ConvertToUtf16String(scriptResult->ToString());
return resultString;
}

V8DOMAgentImpl* V8DOMAgentImpl::Instance = 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class V8DOMAgentImpl : public protocol::DOM::Backend {
static V8DOMAgentImpl* Instance;
protocol::DOM::Frontend m_frontend;

static std::u16string AddBackendNodeIdProperty(v8::Isolate* isolate, v8::Local<v8::Value> jsonInput);
private:
V8InspectorSessionImpl* m_session;
protocol::DictionaryValue* m_state;
Expand Down