Commit 55091044 authored by kozyatinskiy's avatar kozyatinskiy Committed by Commit bot

[inspector] align console implementation with spec

console should be non enumerable.

BUG=chromium:656826
R=dgozman@chromium.org

Review-Url: https://chromiumcodereview.appspot.com/2428473003
Cr-Commit-Position: refs/heads/master@{#40414}
parent 377533fc
......@@ -48,9 +48,11 @@ InspectedContext::InspectedContext(V8InspectorImpl* inspector,
v8::Local<v8::Object> global = info.context->Global();
v8::Local<v8::Object> console =
V8Console::createConsole(this, info.hasMemoryOnConsole);
if (!global
->Set(info.context, toV8StringInternalized(isolate, "console"),
console)
v8::PropertyDescriptor descriptor(console, /* writable */ true);
descriptor.set_enumerable(false);
descriptor.set_configurable(true);
v8::Local<v8::String> consoleKey = toV8StringInternalized(isolate, "console");
if (!global->DefineProperty(info.context, consoleKey, descriptor)
.FromMaybe(false))
return;
m_console.Reset(isolate, console);
......
Running test: consoleExistsOnGlobal
true
Running test: consoleHasRightPropertyDescriptor
{
configurable : true
enumerable : false
value : <value>
writable : true
}
Running test: ConsoleNotExistsOnGlobal
false
Running test: prototypeChainMustBeCorrect
true
// Copyright 2016 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.
InspectorTest.addScript(`
var self = this;
function checkPrototype() {
const prototype1 = Object.getPrototypeOf(console);
const prototype2 = Object.getPrototypeOf(prototype1);
if (Object.getOwnPropertyNames(prototype1).length !== 0)
return "false: The [[Prototype]] must have no properties";
if (prototype2 !== Object.prototype)
return "false: The [[Prototype]]'s [[Prototype]] must be %ObjectPrototype%";
return "true";
}
`);
InspectorTest.runTestSuite([
function consoleExistsOnGlobal(next) {
Protocol.Runtime.evaluate({ expression: "self.hasOwnProperty(\"console\")", returnByValue: true})
.then(message => InspectorTest.log(message.result.result.value))
.then(next);
},
function consoleHasRightPropertyDescriptor(next) {
Protocol.Runtime.evaluate({ expression: "Object.getOwnPropertyDescriptor(self, \"console\")", returnByValue: true})
.then(dumpDescriptor)
.then(next);
function dumpDescriptor(message) {
var value = message.result.result.value;
value.value = "<value>";
InspectorTest.logObject(value);
}
},
function ConsoleNotExistsOnGlobal(next) {
Protocol.Runtime.evaluate({ expression: "\"Console\" in self", returnByValue: true})
.then(message => InspectorTest.log(message.result.result.value))
.then(next);
},
function prototypeChainMustBeCorrect(next) {
Protocol.Runtime.evaluate({ expression: "checkPrototype()", returnByValue: true })
.then(message => InspectorTest.log(message.result.result.value))
.then(next);
}
]);
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