Commit 292e9670 authored by Alexey Kozyatinskiy's avatar Alexey Kozyatinskiy Committed by Commit Bot

[inspector] catch exception during object.toString() call for console

Console methods should never throw an exception.

R=jgruber@chromium.org

Bug: chromium:736302
Change-Id: I05791b366d46a43b2a78825cbb8a82bb049110e6
Reviewed-on: https://chromium-review.googlesource.com/567434Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#46573}
parent 3d269890
......@@ -112,6 +112,7 @@ class ConsoleHelper {
String16 firstArgToString(const String16& defaultValue) {
if (m_info.Length() < 1) return defaultValue;
v8::Local<v8::String> titleValue;
v8::TryCatch tryCatch(m_context->GetIsolate());
if (m_info[0]->IsObject()) {
if (!m_info[0].As<v8::Object>()->ObjectProtoToString(m_context).ToLocal(
&titleValue))
......
crbug.com/736302
Running test: testThrowException
{
method : Runtime.consoleAPICalled
params : {
args : [
[0] : {
type : string
value : 1
}
]
executionContextId : <executionContextId>
stackTrace : {
callFrames : [
[0] : {
columnNumber : 12
functionName :
lineNumber : 1
scriptId : <scriptId>
url :
}
]
}
timestamp : <timestamp>
type : count
}
}
Running test: testCustomName
{
method : Runtime.consoleAPICalled
params : {
args : [
[0] : {
type : string
value : [object MyObject]: 1
}
]
executionContextId : <executionContextId>
stackTrace : {
callFrames : [
[0] : {
columnNumber : 12
functionName :
lineNumber : 1
scriptId : <scriptId>
url :
}
]
}
timestamp : <timestamp>
type : count
}
}
Running test: testObject
{
method : Runtime.consoleAPICalled
params : {
args : [
[0] : {
type : string
value : [object Object]: 1
}
]
executionContextId : <executionContextId>
stackTrace : {
callFrames : [
[0] : {
columnNumber : 12
functionName :
lineNumber : 1
scriptId : <scriptId>
url :
}
]
}
timestamp : <timestamp>
type : count
}
}
// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
let {session, contextGroup, Protocol} = InspectorTest.start('crbug.com/736302');
InspectorTest.runAsyncTestSuite([
async function testThrowException() {
await Protocol.Runtime.enable();
Protocol.Runtime.evaluate({expression: `
console.count({
get [Symbol.toStringTag]() {
throw new Error();
}
});`});
InspectorTest.logMessage(await Protocol.Runtime.onceConsoleAPICalled());
await Protocol.Runtime.disable();
},
async function testCustomName() {
await Protocol.Runtime.enable();
Protocol.Runtime.evaluate({expression: `
console.count({
get [Symbol.toStringTag]() {
return 'MyObject';
}
});`});
InspectorTest.logMessage(await Protocol.Runtime.onceConsoleAPICalled());
await Protocol.Runtime.disable();
},
async function testObject() {
await Protocol.Runtime.enable();
Protocol.Runtime.evaluate({expression: `
console.count({});`});
InspectorTest.logMessage(await Protocol.Runtime.onceConsoleAPICalled());
await Protocol.Runtime.disable();
}
]);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment