Bug 1306124 - Consistently emit the last rendered message in dom for jsterm.execute and with new-messages event;r=linclark
MozReview-Commit-ID: 5100HMmdTr2
--- a/devtools/client/webconsole/jsterm.js
+++ b/devtools/client/webconsole/jsterm.js
@@ -372,18 +372,17 @@ JSTerm.prototype = {
result.type == "undefined" &&
helperResult && !helperHasRawOutput) {
callback && callback();
return;
}
if (this.hud.NEW_CONSOLE_OUTPUT_ENABLED) {
this.hud.newConsoleOutput.dispatchMessageAdd(response);
- // @TODO figure out what to do about the callback.
- callback && callback();
+ callback && callback(this.hud.newConsoleOutput.getLastMessage());
return;
}
let msg = new Messages.JavaScriptEvalOutput(response,
errorMessage, errorDocLink);
this.hud.output.addMessage(msg);
if (callback) {
let oldFlushCallback = this.hud._flushCallback;
@@ -421,17 +420,17 @@ JSTerm.prototype = {
* This is deprecated - please use the promise return value instead.
* @returns Promise
* Resolves with the message once the result is displayed.
*/
execute: function (executeString, callback) {
let deferred = promise.defer();
let resultCallback;
if (this.hud.NEW_CONSOLE_OUTPUT_ENABLED) {
- resultCallback = () => deferred.resolve();
+ resultCallback = (msg) => deferred.resolve(msg);
} else {
resultCallback = (msg) => {
deferred.resolve(msg);
if (callback) {
callback(msg);
}
};
}
@@ -448,17 +447,17 @@ JSTerm.prototype = {
selectedNodeActor = inspectorSelection.nodeFront.actorID;
}
if (this.hud.NEW_CONSOLE_OUTPUT_ENABLED) {
const { ConsoleCommand } = require("devtools/client/webconsole/new-console-output/types");
let message = new ConsoleCommand({
messageText: executeString,
});
- this.hud.newConsoleOutput.dispatchMessageAdd(message);
+ this.hud.proxy.dispatchMessageAdd(message);
} else {
let message = new Messages.Simple(executeString, {
category: "input",
severity: "log",
});
this.hud.output.addMessage(message);
}
let onResult = this._executeResultCallback.bind(this, resultCallback);
--- a/devtools/client/webconsole/new-console-output/new-console-output-wrapper.js
+++ b/devtools/client/webconsole/new-console-output/new-console-output-wrapper.js
@@ -13,16 +13,17 @@ const { configureStore } = require("devt
const ConsoleOutput = React.createFactory(require("devtools/client/webconsole/new-console-output/components/console-output"));
const FilterBar = React.createFactory(require("devtools/client/webconsole/new-console-output/components/filter-bar"));
const store = configureStore();
function NewConsoleOutputWrapper(parentNode, jsterm, toolbox, owner) {
this.parentNode = parentNode;
+ this.parentNode = parentNode;
this.jsterm = jsterm;
this.toolbox = toolbox;
this.owner = owner;
this.init = this.init.bind(this);
}
NewConsoleOutputWrapper.prototype = {
@@ -63,12 +64,18 @@ NewConsoleOutputWrapper.prototype = {
},
dispatchMessagesAdd: (messages) => {
const batchedActions = messages.map(message => actions.messageAdd(message));
store.dispatch(actions.batchActions(batchedActions));
},
dispatchMessagesClear: () => {
store.dispatch(actions.messagesClear());
},
+ getLastMessage: function() {
+ // Return the last message in the DOM as the message that was just dispatched. This may not
+ // always be correct in the case of filtered messages, but it's close enough for our tests.
+ let messageNodes = this.parentNode.querySelectorAll(".message");
+ return messageNodes[messageNodes.length - 1]
+ },
};
// Exports from this module
module.exports = NewConsoleOutputWrapper;
--- a/devtools/client/webconsole/webconsole.js
+++ b/devtools/client/webconsole/webconsole.js
@@ -3261,23 +3261,19 @@ WebConsoleConnectionProxy.prototype = {
this.webConsoleFrame._onUpdateListeners();
},
/**
* Dispatch a message add on the new frontend and emit an event for tests.
*/
dispatchMessageAdd: function(packet) {
this.webConsoleFrame.newConsoleOutput.dispatchMessageAdd(packet);
-
- // Return the last message in the DOM as the message that was just dispatched. This may not
- // always be true in the case of filtered messages, but it's close enough for our tests.
- let messageNodes = this.webConsoleFrame.experimentalOutputNode.querySelectorAll(".message");
this.webConsoleFrame.emit("new-messages", new Set([{
response: packet,
- node: messageNodes[messageNodes.length - 1],
+ node: this.webConsoleFrame.newConsoleOutput.getLastMessage(),
}]));
},
/**
* Batched dispatch of messages.
*/
dispatchMessagesAdd: function(packets) {
this.webConsoleFrame.newConsoleOutput.dispatchMessagesAdd(packets);