Bug 1360237 - Make gDevToolsBrowser.inspectNode more readable by using async/await. r=pbro
MozReview-Commit-ID: 37zPhpCTnDa
--- a/devtools/client/framework/devtools-browser.js
+++ b/devtools/client/framework/devtools-browser.js
@@ -291,62 +291,56 @@ var gDevToolsBrowser = exports.gDevTools
let win = Services.wm.getMostRecentWindow("devtools:webide");
if (win) {
win.focus();
} else {
Services.ww.openWindow(null, "chrome://webide/content/", "webide", "chrome,centerscreen,resizable", null);
}
},
- inspectNode: function (tab, node) {
+ async inspectNode(tab, node) {
let target = TargetFactory.forTab(tab);
// Generate a cross iframes query selector
let selectors = [];
- while(node) {
+ while (node) {
selectors.push(findCssSelector(node));
node = node.ownerDocument.defaultView.frameElement;
}
- return gDevTools.showToolbox(target, "inspector").then(toolbox => {
- let inspector = toolbox.getCurrentPanel();
+ let toolbox = await gDevTools.showToolbox(target, "inspector");
+ let inspector = toolbox.getCurrentPanel();
- // new-node-front tells us when the node has been selected, whether the
- // browser is remote or not.
- let onNewNode = inspector.selection.once("new-node-front");
+ // new-node-front tells us when the node has been selected, whether the
+ // browser is remote or not.
+ let onNewNode = inspector.selection.once("new-node-front");
- // Evaluate the cross iframes query selectors
- function querySelectors(nodeFront) {
- let selector = selectors.pop();
- if (!selector) {
- return Promise.resolve(nodeFront);
- }
- return inspector.walker.querySelector(nodeFront, selector)
- .then(node => {
- if (selectors.length > 0) {
- return inspector.walker.children(node).then(({ nodes }) => {
- return nodes[0]; // This is the NodeFront for the document node inside the iframe
- });
- }
- return node;
- }).then(querySelectors);
+ // Evaluate the cross iframes query selectors
+ async function querySelectors(nodeFront) {
+ let selector = selectors.pop();
+ if (!selector) {
+ return nodeFront;
+ }
+ nodeFront = await inspector.walker.querySelector(nodeFront, selector);
+ if (selectors.length > 0) {
+ let { nodes } = await inspector.walker.children(nodeFront);
+ // This is the NodeFront for the document node inside the iframe
+ nodeFront = nodes[0];
}
- inspector.walker.getRootNode()
- .then(querySelectors)
- .then(node => {
- // Select the final node
- inspector.selection.setNodeFront(node, "browser-context-menu");
- });
+ return querySelectors(nodeFront);
+ }
+ let nodeFront = await inspector.walker.getRootNode();
+ nodeFront = await querySelectors(nodeFront);
+ // Select the final node
+ inspector.selection.setNodeFront(nodeFront, "browser-context-menu");
- return onNewNode.then(() => {
- // Now that the node has been selected, wait until the inspector is
- // fully updated.
- return inspector.once("inspector-updated");
- });
- });
+ await onNewNode;
+ // Now that the node has been selected, wait until the inspector is
+ // fully updated.
+ await inspector.once("inspector-updated");
},
_getContentProcessTarget: function (processId) {
// Create a DebuggerServer in order to connect locally to it
if (!DebuggerServer.initialized) {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
}