Commit 915aeab1 authored by Aleksei Koziatinskii's avatar Aleksei Koziatinskii Committed by Commit Bot

inspector: fix queryObjects when page contains JSModuleNamespace

JSModuleNamespace does not have well defined CreationContext: current
implementation of JSReceiver::GetCreationContext crashes on CHECK.

R=lushnikov@chromium.org,yangguo@chromium.org

Bug: none
Change-Id: Ie2c0bfa39117d42d81f9709c21376c177b18e5ba
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1652559Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#62128}
parent a26adb2b
...@@ -42,6 +42,7 @@ class MatchPrototypePredicate : public v8::debug::QueryObjectPredicate { ...@@ -42,6 +42,7 @@ class MatchPrototypePredicate : public v8::debug::QueryObjectPredicate {
: m_inspector(inspector), m_context(context), m_prototype(prototype) {} : m_inspector(inspector), m_context(context), m_prototype(prototype) {}
bool Filter(v8::Local<v8::Object> object) override { bool Filter(v8::Local<v8::Object> object) override {
if (object->IsModuleNamespaceObject()) return false;
v8::Local<v8::Context> objectContext = v8::Local<v8::Context> objectContext =
v8::debug::GetCreationContext(object); v8::debug::GetCreationContext(object);
if (objectContext != m_context) return false; if (objectContext != m_context) return false;
......
...@@ -39,13 +39,13 @@ Checks basic ES6 modules support. ...@@ -39,13 +39,13 @@ Checks basic ES6 modules support.
method : Debugger.scriptParsed method : Debugger.scriptParsed
params : { params : {
endColumn : 0 endColumn : 0
endLine : 8 endLine : 11
executionContextId : <executionContextId> executionContextId : <executionContextId>
hasSourceURL : false hasSourceURL : false
hash : 2eda454b04ad45b62a894c7590954c5074ca4569 hash : 2e8186096446efdc472a6e0559ea22216a664cb5
isLiveEdit : false isLiveEdit : false
isModule : true isModule : true
length : 191 length : 286
scriptId : <scriptId> scriptId : <scriptId>
sourceMapURL : sourceMapURL :
startColumn : 0 startColumn : 0
...@@ -55,17 +55,17 @@ Checks basic ES6 modules support. ...@@ -55,17 +55,17 @@ Checks basic ES6 modules support.
} }
console.log(module1) console.log(module1)
foo (module1:2:10) foo (module1:2:10)
(anonymous) (module3:3:12) (anonymous) (module3:5:12)
console.log(42) console.log(42)
(anonymous) (module3:3:8) (anonymous) (module3:5:8)
console.log(module2) console.log(module2)
foo (module2:2:10) foo (module2:2:10)
(anonymous) (module3:4:12) (anonymous) (module3:6:12)
console.log(239) console.log(239)
(anonymous) (module3:4:8) (anonymous) (module3:6:8)
{ {
method : Debugger.paused method : Debugger.paused
...@@ -81,14 +81,14 @@ console.log(239) ...@@ -81,14 +81,14 @@ console.log(239)
functionName : functionName :
location : { location : {
columnNumber : 0 columnNumber : 0
lineNumber : 7 lineNumber : 9
scriptId : <scriptId> scriptId : <scriptId>
} }
scopeChain : [ scopeChain : [
[0] : { [0] : {
endLocation : { endLocation : {
columnNumber : 0 columnNumber : 0
lineNumber : 8 lineNumber : 11
scriptId : <scriptId> scriptId : <scriptId>
} }
object : { object : {
...@@ -156,6 +156,19 @@ console.log(239) ...@@ -156,6 +156,19 @@ console.log(239)
writable : true writable : true
} }
[2] : { [2] : {
configurable : true
enumerable : true
isOwn : true
name : foo3
value : {
className : Module
description : Module
objectId : <objectId>
type : object
}
writable : true
}
[3] : {
configurable : true configurable : true
enumerable : true enumerable : true
isOwn : true isOwn : true
...@@ -167,7 +180,7 @@ console.log(239) ...@@ -167,7 +180,7 @@ console.log(239)
} }
writable : true writable : true
} }
[3] : { [4] : {
configurable : true configurable : true
enumerable : true enumerable : true
isOwn : true isOwn : true
...@@ -239,3 +252,4 @@ console.log(239) ...@@ -239,3 +252,4 @@ console.log(239)
timestamp : <timestamp> timestamp : <timestamp>
} }
} }
queryObjects returns Array(N)
...@@ -21,41 +21,59 @@ export let a2 = 2`; ...@@ -21,41 +21,59 @@ export let a2 = 2`;
var module3 = ` var module3 = `
import { foo as foo1 } from 'module1'; import { foo as foo1 } from 'module1';
import { foo as foo2 } from 'module2'; import { foo as foo2 } from 'module2';
// check that queryObjects works with JSModuleNamespace
import * as foo3 from 'module2';
console.log(foo1()); console.log(foo1());
console.log(foo2()); console.log(foo2());
import { a1 } from 'module1'; import { a1 } from 'module1';
import { a2 } from 'module2'; import { a2 } from 'module2';
debugger; debugger;
foo3;
`; `;
var module4 = '}'; var module4 = '}';
session.setupScriptMap(); (async function test() {
// We get scriptParsed events for modules .. session.setupScriptMap();
Protocol.Debugger.onScriptParsed(InspectorTest.logMessage); // We get scriptParsed events for modules ..
// .. scriptFailed to parse for modules with syntax error .. Protocol.Debugger.onScriptParsed(InspectorTest.logMessage);
Protocol.Debugger.onScriptFailedToParse(InspectorTest.logMessage); // .. scriptFailed to parse for modules with syntax error ..
// .. API messages from modules contain correct stack trace .. Protocol.Debugger.onScriptFailedToParse(InspectorTest.logMessage);
Protocol.Runtime.onConsoleAPICalled(message => { // .. API messages from modules contain correct stack trace ..
InspectorTest.log(`console.log(${message.params.args[0].value})`); Protocol.Runtime.onConsoleAPICalled(message => {
session.logCallFrames(message.params.stackTrace.callFrames); InspectorTest.log(`console.log(${message.params.args[0].value})`);
InspectorTest.log(''); session.logCallFrames(message.params.stackTrace.callFrames);
}); InspectorTest.log('');
// .. we could break inside module and scope contains correct list of variables .. });
Protocol.Debugger.onPaused(message => { // .. we could break inside module and scope contains correct list of variables ..
InspectorTest.logMessage(message); Protocol.Debugger.onPaused(message => {
Protocol.Runtime.getProperties({ objectId: message.params.callFrames[0].scopeChain[0].object.objectId}) InspectorTest.logMessage(message);
.then(InspectorTest.logMessage) Protocol.Runtime.getProperties({ objectId: message.params.callFrames[0].scopeChain[0].object.objectId})
.then(() => Protocol.Debugger.resume()); .then(InspectorTest.logMessage)
}); .then(() => Protocol.Debugger.resume());
// .. we process uncaught errors from modules correctly. });
Protocol.Runtime.onExceptionThrown(InspectorTest.logMessage);
// .. we process uncaught errors from modules correctly.
Protocol.Runtime.enable(); Protocol.Runtime.onExceptionThrown(InspectorTest.logMessage);
Protocol.Debugger.enable()
.then(() => contextGroup.addModule(module1, "module1")) Protocol.Runtime.enable();
.then(() => contextGroup.addModule(module2, "module2")) await Protocol.Debugger.enable();
.then(() => contextGroup.addModule(module3, "module3")) await contextGroup.addModule(module1, 'module1');
.then(() => contextGroup.addModule(module4, "module4")) await contextGroup.addModule(module2, 'module2');
.then(() => InspectorTest.waitForPendingTasks()) await contextGroup.addModule(module3, 'module3');
.then(InspectorTest.completeTest); await contextGroup.addModule(module4, 'module4');
await InspectorTest.waitForPendingTasks();
Protocol.Debugger.onScriptParsed(null);
Protocol.Runtime.evaluate({
includeCommandLineAPI: true,
expression: 'queryObjects(Function)'
});
const {params:{object:{objectId}}} = await Protocol.Runtime.onceInspectRequested();
const {result:{objects}} = await Protocol.Runtime.queryObjects({
prototypeObjectId: objectId
});
InspectorTest.log('queryObjects returns ' + objects.description.replace(/\d+/, 'N'));
InspectorTest.completeTest();
})();
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