diff --git a/docs/api.md b/docs/api.md index ea67d0b954106..9dde855aa24e1 100644 --- a/docs/api.md +++ b/docs/api.md @@ -2318,9 +2318,9 @@ puppeteer.launch().then(async browser => { #### consoleMessage.location() - returns: <[Object]> - - `url` <[string]> URL of the resource if known - - `lineNumber` <[number]> line number in the resource - - `columnNumber` <[number]> line number in the resource + - `url` <[string]> URL of the resource if known or `undefined` otherwise. + - `lineNumber` <[number]> line number in the resource if known or `undefined` otherwise. + - `columnNumber` <[number]> column number in the resource if known or `undefined` otherwise. #### consoleMessage.text() - returns: <[string]> diff --git a/lib/Page.js b/lib/Page.js index 1e7555a9140e4..01ceff67d2bc6 100644 --- a/lib/Page.js +++ b/lib/Page.js @@ -191,7 +191,7 @@ class Page extends EventEmitter { if (args) args.map(arg => helper.releaseObject(this._client, arg)); if (source !== 'worker') - this.emit(Page.Events.Console, new ConsoleMessage(level, text, undefined, { url, lineNumber })); + this.emit(Page.Events.Console, new ConsoleMessage(level, text, [], {url, lineNumber})); } /** @@ -510,14 +510,7 @@ class Page extends EventEmitter { async _onConsoleAPI(event) { const context = this._frameManager.executionContextById(event.executionContextId); const values = event.args.map(arg => createJSHandle(context, arg)); - const location = {}; - if (event.stackTrace && event.stackTrace.callFrames) { - const {url, lineNumber, columnNumber} = event.stackTrace.callFrames[0]; - if (url) location.url = url; - if (lineNumber) location.lineNumber = lineNumber; - if (columnNumber) location.columnNumber = columnNumber; - } - this._addConsoleMessage(event.type, values, location); + this._addConsoleMessage(event.type, values, event.stackTrace); } /** @@ -574,9 +567,9 @@ class Page extends EventEmitter { /** * @param {string} type * @param {!Array} args - * @param {ConsoleMessage.Location} location + * @param {Protocol.Runtime.StackTrace=} stackTrace */ - _addConsoleMessage(type, args, location) { + _addConsoleMessage(type, args, stackTrace) { if (!this.listenerCount(Page.Events.Console)) { args.forEach(arg => arg.dispose()); return; @@ -589,6 +582,11 @@ class Page extends EventEmitter { else textTokens.push(helper.valueFromRemoteObject(remoteObject)); } + const location = stackTrace && stackTrace.callFrames.length ? { + url: stackTrace.callFrames[0].url, + lineNumber: stackTrace.callFrames[0].lineNumber, + columnNumber: stackTrace.callFrames[0].columnNumber, + } : {}; const message = new ConsoleMessage(type, textTokens.join(' '), args, location); this.emit(Page.Events.Console, message); } @@ -1248,7 +1246,7 @@ class ConsoleMessage { * @param {!Array} args * @param {ConsoleMessage.Location} location */ - constructor(type, text, args = [], location = {}) { + constructor(type, text, args, location = {}) { this._type = type; this._text = text; this._args = args; diff --git a/lib/Worker.js b/lib/Worker.js index df41f186fae78..f3d8928d5d617 100644 --- a/lib/Worker.js +++ b/lib/Worker.js @@ -21,7 +21,7 @@ class Worker extends EventEmitter { /** * @param {Puppeteer.CDPSession} client * @param {string} url - * @param {function(!string, !Array)} consoleAPICalled + * @param {function(!string, !Array, Protocol.Runtime.StackTrace=)} consoleAPICalled * @param {function(!Protocol.Runtime.ExceptionDetails)} exceptionThrown */ constructor(client, url, consoleAPICalled, exceptionThrown) { @@ -39,7 +39,7 @@ class Worker extends EventEmitter { // This might fail if the target is closed before we recieve all execution contexts. this._client.send('Runtime.enable', {}).catch(debugError); - this._client.on('Runtime.consoleAPICalled', event => consoleAPICalled(event.type, event.args.map(jsHandleFactory))); + this._client.on('Runtime.consoleAPICalled', event => consoleAPICalled(event.type, event.args.map(jsHandleFactory), event.stackTrace)); this._client.on('Runtime.exceptionThrown', exception => exceptionThrown(exception.exceptionDetails)); } diff --git a/test/assets/console-message-1.html b/test/assets/console-message-1.html deleted file mode 100644 index 3336525736e94..0000000000000 --- a/test/assets/console-message-1.html +++ /dev/null @@ -1,11 +0,0 @@ - - -
-