Bug 1443470 - Convert generators to async functions in devtools/client/netmonitor r=Honza draft
authorAlexandre Poirot <poirot.alex@gmail.com>
Tue, 06 Mar 2018 02:04:26 -0800
changeset 763665 c71e3f33b5ad31b382af0d0f77eaf2a016f8d853
parent 763664 8186f2d6829cc347bd111f04bf868e29a84e67d7
child 763666 80c3db9bd2d3e0f08c120124347487203f93c6d6
push id101515
push userbmo:poirot.alex@gmail.com
push dateTue, 06 Mar 2018 12:14:04 +0000
reviewersHonza
bugs1443470
milestone60.0a1
Bug 1443470 - Convert generators to async functions in devtools/client/netmonitor r=Honza $ ./obj-firefox-artifact/dist/bin/run-mozilla.sh ./obj-firefox-artifact/dist/bin/xpcshell xpc devtools/client/netmonitor --replace-generators MozReview-Commit-ID: A5zIQYyzFvS
devtools/client/netmonitor/test/browser_net_content-type.js
devtools/client/netmonitor/test/browser_net_curl-utils.js
devtools/client/netmonitor/test/browser_net_filter-01.js
devtools/client/netmonitor/test/browser_net_filter-02.js
devtools/client/netmonitor/test/browser_net_filter-flags.js
devtools/client/netmonitor/test/browser_net_image-tooltip.js
devtools/client/netmonitor/test/browser_net_prefs-reload.js
devtools/client/netmonitor/test/browser_net_req-resp-bodies.js
devtools/client/netmonitor/test/browser_net_security-icon-click.js
devtools/client/netmonitor/test/browser_net_security-state.js
devtools/client/netmonitor/test/browser_net_simple-request-details.js
devtools/client/netmonitor/test/browser_net_sort-01.js
devtools/client/netmonitor/test/browser_net_sort-02.js
devtools/client/netmonitor/test/browser_net_status-codes.js
devtools/client/netmonitor/test/head.js
--- a/devtools/client/netmonitor/test/browser_net_content-type.js
+++ b/devtools/client/netmonitor/test/browser_net_content-type.js
@@ -278,18 +278,18 @@ add_task(async function() {
     await waitDOM;
     await onResponseContent;
 
     // Waiting for RECEIVED_RESPONSE_CONTENT isn't enough.
     // DOM may not be fully updated yet and checkVisibility(json) may still fail.
     await waitForTick();
   }
 
-  function* selectIndexAndWaitForImageView(index) {
+  async function selectIndexAndWaitForImageView(index) {
     let onResponseContent = monitor.panelWin.once(EVENTS.RECEIVED_RESPONSE_CONTENT);
     let tabpanel = document.querySelector("#response-panel");
     let waitDOM = waitForDOM(tabpanel, ".response-image");
     store.dispatch(Actions.selectRequestByIndex(index));
-    let [imageNode] = yield waitDOM;
-    yield once(imageNode, "load");
-    yield onResponseContent;
+    let [imageNode] = await waitDOM;
+    await once(imageNode, "load");
+    await onResponseContent;
   }
 });
--- a/devtools/client/netmonitor/test/browser_net_curl-utils.js
+++ b/devtools/client/netmonitor/test/browser_net_curl-utils.js
@@ -234,36 +234,36 @@ function testEscapeStringWin() {
     "Backslashes should be escaped.");
 
   let newLines = "line1\r\nline2\r\nline3";
   is(CurlUtils.escapeStringWin(newLines),
     '"line1"^\u000d\u000A"line2"^\u000d\u000A"line3"',
     "Newlines should be escaped.");
 }
 
-function* createCurlData(selected, getLongString, requestData) {
+async function createCurlData(selected, getLongString, requestData) {
   let { id, url, method, httpVersion } = selected;
 
   // Create a sanitized object for the Curl command generator.
   let data = {
     url,
     method,
     headers: [],
     httpVersion,
     postDataText: null
   };
 
-  let requestHeaders = yield requestData(id, "requestHeaders");
+  let requestHeaders = await requestData(id, "requestHeaders");
   // Fetch header values.
   for (let { name, value } of requestHeaders.headers) {
-    let text = yield getLongString(value);
+    let text = await getLongString(value);
     data.headers.push({ name: name, value: text });
   }
 
-  let { requestPostData } = yield requestData(id, "requestPostData");
+  let { requestPostData } = await requestData(id, "requestPostData");
   // Fetch the request payload.
   if (requestPostData) {
     let postData = requestPostData.postData.text;
-    data.postDataText = yield getLongString(postData);
+    data.postDataText = await getLongString(postData);
   }
 
   return data;
 }
--- a/devtools/client/netmonitor/test/browser_net_filter-01.js
+++ b/devtools/client/netmonitor/test/browser_net_filter-01.js
@@ -298,31 +298,31 @@ add_task(async function() {
 
   function getSelectedIndex(state) {
     if (!state.requests.selectedId) {
       return -1;
     }
     return getSortedRequests(state).findIndex(r => r.id === state.requests.selectedId);
   }
 
-  function* testContents(visibility) {
+  async function testContents(visibility) {
     let requestItems = document.querySelectorAll(".request-list-item");
     for (let requestItem of requestItems) {
       requestItem.scrollIntoView();
       let requestsListStatus = requestItem.querySelector(".requests-list-status");
       EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
-      yield waitUntil(() => requestsListStatus.title);
+      await waitUntil(() => requestsListStatus.title);
     }
 
     let items = getSortedRequests(store.getState());
     let visibleItems;
 
     // Filter results will be updated asynchronously, so we should wait until
     // displayed requests reach final state.
-    yield waitUntil(() => {
+    await waitUntil(() => {
       visibleItems = getDisplayedRequests(store.getState());
       return visibleItems.size === visibility.filter(e => e).length;
     });
 
     is(items.size, visibility.length,
        "There should be a specific amount of items in the requests menu.");
     is(visibleItems.size, visibility.filter(e => e).length,
        "There should be a specific amount of visible items in the requests menu.");
--- a/devtools/client/netmonitor/test/browser_net_filter-02.js
+++ b/devtools/client/netmonitor/test/browser_net_filter-02.js
@@ -200,23 +200,23 @@ add_task(async function() {
 
   function getSelectedIndex(state) {
     if (!state.requests.selectedId) {
       return -1;
     }
     return getSortedRequests(state).findIndex(r => r.id === state.requests.selectedId);
   }
 
-  function* testContents(visibility) {
+  async function testContents(visibility) {
     let requestItems = document.querySelectorAll(".request-list-item");
     for (let requestItem of requestItems) {
       requestItem.scrollIntoView();
       let requestsListStatus = requestItem.querySelector(".requests-list-status");
       EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
-      yield waitUntil(() => requestsListStatus.title);
+      await waitUntil(() => requestsListStatus.title);
     }
 
     isnot(getSelectedRequest(store.getState()), null,
       "There should still be a selected item after filtering.");
     is(getSelectedIndex(store.getState()), 0,
       "The first item should be still selected after filtering.");
     is(!!document.querySelector(".network-details-panel"), true,
       "The network details panel should still be visible after filtering.");
--- a/devtools/client/netmonitor/test/browser_net_filter-flags.js
+++ b/devtools/client/netmonitor/test/browser_net_filter-flags.js
@@ -350,48 +350,48 @@ add_task(async function() {
   await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test mixing flags
   setFreetextFilter("-mime-type:HtmL status-code:200");
   await testContents([0, 0, 1, 1, 1, 1, 1, 1, 1, 0]);
 
   await teardown(monitor);
 
-  function* testContents(visibility) {
+  async function testContents(visibility) {
     let requestItems = document.querySelectorAll(".request-list-item");
     for (let requestItem of requestItems) {
       requestItem.scrollIntoView();
       let requestsListStatus = requestItem.querySelector(".requests-list-status");
       EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
-      yield waitUntil(() => requestsListStatus.title);
+      await waitUntil(() => requestsListStatus.title);
     }
 
     let items = getSortedRequests(store.getState());
     let visibleItems = getDisplayedRequests(store.getState());
 
     // Filter results will be updated asynchronously, so we should wait until
     // displayed requests reach final state.
-    yield waitUntil(() => {
+    await waitUntil(() => {
       visibleItems = getDisplayedRequests(store.getState());
       return visibleItems.size === visibility.filter(e => e).length;
     });
 
     is(items.size, visibility.length,
       "There should be a specific amount of items in the requests menu.");
     is(visibleItems.size, visibility.filter(e => e).length,
       "There should be a specific amount of visible items in the requests menu.");
 
     for (let i = 0; i < visibility.length; i++) {
       let itemId = items.get(i).id;
       let shouldBeVisible = !!visibility[i];
       let isThere = visibleItems.some(r => r.id == itemId);
 
       // Filter results will be updated asynchronously, so we should wait until
       // displayed requests reach final state.
-      yield waitUntil(() => {
+      await waitUntil(() => {
         visibleItems = getDisplayedRequests(store.getState());
         isThere = visibleItems.some(r => r.id == itemId);
         return isThere === shouldBeVisible;
       });
 
       is(isThere, shouldBeVisible,
         `The item at index ${i} has visibility=${shouldBeVisible}`);
 
--- a/devtools/client/netmonitor/test/browser_net_image-tooltip.js
+++ b/devtools/client/netmonitor/test/browser_net_image-tooltip.js
@@ -57,41 +57,41 @@ add_task(async function test() {
       content.wrappedJSObject.performRequests();
     });
   }
 
   /**
    * Show a tooltip on the {target} and verify that it was displayed
    * with the expected content.
    */
-  function* showTooltipAndVerify(target) {
+  async function showTooltipAndVerify(target) {
     let anchor = target.querySelector(".requests-list-file");
-    yield showTooltipOn(anchor);
+    await showTooltipOn(anchor);
 
     info("Tooltip was successfully opened for the image request.");
     is(toolboxDoc.querySelector(".tooltip-panel img").src, TEST_IMAGE_DATA_URI,
       "The tooltip's image content is displayed correctly.");
   }
 
   /**
    * Trigger a tooltip over an element by sending mousemove event.
    * @return a promise that resolves when the tooltip is shown
    */
-  function* showTooltipOn(element) {
+  async function showTooltipOn(element) {
     let win = element.ownerDocument.defaultView;
     EventUtils.synthesizeMouseAtCenter(element, { type: "mousemove" }, win);
-    yield waitUntil(() => toolboxDoc.querySelector(".tooltip-panel img"));
+    await waitUntil(() => toolboxDoc.querySelector(".tooltip-panel img"));
   }
 
   /**
    * Hide a tooltip on the {target} and verify that it was closed.
    */
-  function* hideTooltipAndVerify(target) {
+  async function hideTooltipAndVerify(target) {
     // Hovering over the "method" column hides the tooltip.
     let anchor = target.querySelector(".requests-list-method");
     let win = anchor.ownerDocument.defaultView;
     EventUtils.synthesizeMouseAtCenter(anchor, { type: "mousemove" }, win);
 
-    yield waitUntil(
+    await waitUntil(
       () => !toolboxDoc.querySelector(".tooltip-container.tooltip-visible"));
     info("Tooltip was successfully closed.");
   }
 });
--- a/devtools/client/netmonitor/test/browser_net_prefs-reload.js
+++ b/devtools/client/netmonitor/test/browser_net_prefs-reload.js
@@ -170,94 +170,94 @@ add_task(async function() {
         "Pref " + name + " should't yet be equal to first value: " + currentValue);
       is(newValue.toSource(), currentValue.toSource(),
         "Pref " + name + " should still be equal to second value: " + currentValue);
       is(validateValue().toSource(), firstValue.toSource(),
         "The UI element affecting " + name + " should validate: " + firstValue);
     }
   }
 
-  function* restartNetMonitorAndSetupEnv() {
-    let newMonitor = yield restartNetMonitor(monitor);
+  async function restartNetMonitorAndSetupEnv() {
+    let newMonitor = await restartNetMonitor(monitor);
     monitor = newMonitor.monitor;
 
     let networkEvent = waitForNetworkEvents(monitor, 1);
     newMonitor.tab.linkedBrowser.reload();
-    yield networkEvent;
+    await networkEvent;
 
     let wait = waitForDOM(getDoc(), ".network-details-panel");
     EventUtils.sendMouseEvent({ type: "click" },
       getDoc().querySelector(".network-details-panel-toggle"));
-    yield wait;
+    await wait;
   }
 
-  function* testBottom() {
-    yield restartNetMonitorAndSetupEnv();
+  async function testBottom() {
+    await restartNetMonitorAndSetupEnv();
 
     info("Testing prefs reload for a bottom host.");
     storeFirstPrefValues();
 
     // Validate and modify while toolbox is on the bottom.
     validateFirstPrefValues(true);
     modifyFrontend(true);
 
-    yield restartNetMonitorAndSetupEnv();
+    await restartNetMonitorAndSetupEnv();
 
     // Revalidate and reset frontend while toolbox is on the bottom.
     validateNewPrefValues(true);
     resetFrontend(true);
 
-    yield restartNetMonitorAndSetupEnv();
+    await restartNetMonitorAndSetupEnv();
 
     // Revalidate.
     validateFirstPrefValues(true);
   }
 
-  function* testSide() {
-    yield restartNetMonitorAndSetupEnv();
+  async function testSide() {
+    await restartNetMonitorAndSetupEnv();
 
     info("Moving toolbox to the side...");
 
-    yield monitor.toolbox.switchHost("side");
+    await monitor.toolbox.switchHost("side");
     info("Testing prefs reload for a side host.");
     storeFirstPrefValues();
 
     // Validate and modify frontend while toolbox is on the side.
     validateFirstPrefValues(false);
     modifyFrontend(false);
 
-    yield restartNetMonitorAndSetupEnv();
+    await restartNetMonitorAndSetupEnv();
 
     // Revalidate and reset frontend while toolbox is on the side.
     validateNewPrefValues(false);
     resetFrontend(false);
 
-    yield restartNetMonitorAndSetupEnv();
+    await restartNetMonitorAndSetupEnv();
 
     // Revalidate.
     validateFirstPrefValues(false);
   }
 
-  function* testWindow() {
-    yield restartNetMonitorAndSetupEnv();
+  async function testWindow() {
+    await restartNetMonitorAndSetupEnv();
 
     info("Moving toolbox into a window...");
 
-    yield monitor.toolbox.switchHost("window");
+    await monitor.toolbox.switchHost("window");
     info("Testing prefs reload for a window host.");
     storeFirstPrefValues();
 
     // Validate and modify frontend while toolbox is in a window.
     validateFirstPrefValues(true);
     modifyFrontend(true);
 
-    yield restartNetMonitorAndSetupEnv();
+    await restartNetMonitorAndSetupEnv();
 
     // Revalidate and reset frontend while toolbox is in a window.
     validateNewPrefValues(true);
     resetFrontend(true);
 
-    yield restartNetMonitorAndSetupEnv();
+    await restartNetMonitorAndSetupEnv();
 
     // Revalidate.
     validateFirstPrefValues(true);
   }
 });
--- a/devtools/client/netmonitor/test/browser_net_req-resp-bodies.js
+++ b/devtools/client/netmonitor/test/browser_net_req-resp-bodies.js
@@ -52,23 +52,23 @@ add_task(async function() {
     content.wrappedJSObject.performRequests();
   });
   await wait;
 
   await verifyRequest(1);
 
   return teardown(monitor);
 
-  function* verifyRequest(index) {
+  async function verifyRequest(index) {
     let requestItems = document.querySelectorAll(".request-list-item");
     for (let requestItem of requestItems) {
       requestItem.scrollIntoView();
       let requestsListStatus = requestItem.querySelector(".requests-list-status");
       EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
-      yield waitUntil(() => requestsListStatus.title);
+      await waitUntil(() => requestsListStatus.title);
     }
     verifyRequestItemTarget(
       document,
       getDisplayedRequests(store.getState()),
       getSortedRequests(store.getState()).get(index),
       "GET",
       CONTENT_TYPE_SJS + "?fmt=json-long",
       {
--- a/devtools/client/netmonitor/test/browser_net_security-icon-click.js
+++ b/devtools/client/netmonitor/test/browser_net_security-icon-click.js
@@ -39,18 +39,18 @@ add_task(async function() {
   async function performRequestAndWait(url) {
     let wait = waitForNetworkEvents(monitor, 1);
     await ContentTask.spawn(tab.linkedBrowser, { url }, async function(args) {
       content.wrappedJSObject.performRequests(1, args.url);
     });
     return wait;
   }
 
-  function* clickAndTestSecurityIcon() {
+  async function clickAndTestSecurityIcon() {
     let icon = document.querySelector(".requests-security-state-icon");
     info("Clicking security icon of the first request and waiting for panel update.");
     EventUtils.synthesizeMouseAtCenter(icon, {}, monitor.panelWin);
-    yield waitUntil(() => document.querySelector("#security-panel .security-info-value"));
+    await waitUntil(() => document.querySelector("#security-panel .security-info-value"));
 
     ok(document.querySelector("#security-tab[aria-selected=true]"),
        "Security tab is selected.");
   }
 });
--- a/devtools/client/netmonitor/test/browser_net_security-state.js
+++ b/devtools/client/netmonitor/test/browser_net_security-state.js
@@ -44,47 +44,47 @@ add_task(async function() {
   /**
    * A helper that performs requests to
    *  - https://nocert.example.com (broken)
    *  - https://example.com (secure)
    *  - http://test1.example.com (insecure)
    *  - http://localhost (local)
    * and waits until NetworkMonitor has handled all packets sent by the server.
    */
-  function* performRequests() {
+  async function performRequests() {
     function executeRequests(count, url) {
       return ContentTask.spawn(tab.linkedBrowser, {count, url}, async function(args) {
         content.wrappedJSObject.performRequests(args.count, args.url);
       });
     }
 
     let done = waitForNetworkEvents(monitor, 1);
     info("Requesting a resource that has a certificate problem.");
-    yield executeRequests(1, "https://nocert.example.com");
+    await executeRequests(1, "https://nocert.example.com");
 
     // Wait for the request to complete before firing another request. Otherwise
     // the request with security issues interfere with waitForNetworkEvents.
     info("Waiting for request to complete.");
-    yield done;
+    await done;
 
     // Next perform a request over HTTP. If done the other way around the latter
     // occasionally hangs waiting for event timings that don't seem to appear...
     done = waitForNetworkEvents(monitor, 1);
     info("Requesting a resource over HTTP.");
-    yield executeRequests(1, "http://test1.example.com" + CORS_SJS_PATH);
-    yield done;
+    await executeRequests(1, "http://test1.example.com" + CORS_SJS_PATH);
+    await done;
 
     done = waitForNetworkEvents(monitor, 1);
     info("Requesting a resource over HTTPS.");
-    yield executeRequests(1, "https://example.com" + CORS_SJS_PATH);
-    yield done;
+    await executeRequests(1, "https://example.com" + CORS_SJS_PATH);
+    await done;
 
     done = waitForNetworkEvents(monitor, 1);
     info("Requesting a resource over HTTP to localhost.");
-    yield executeRequests(1, "http://localhost" + CORS_SJS_PATH);
-    yield done;
+    await executeRequests(1, "http://localhost" + CORS_SJS_PATH);
+    await done;
 
     const expectedCount = Object.keys(EXPECTED_SECURITY_STATES).length;
     is(store.getState().requests.requests.size,
       expectedCount,
       expectedCount + " events logged.");
   }
 });
--- a/devtools/client/netmonitor/test/browser_net_simple-request-details.js
+++ b/devtools/client/netmonitor/test/browser_net_simple-request-details.js
@@ -156,21 +156,21 @@ add_task(async function() {
     is(requestScope.querySelectorAll(".variables-view-variable .name")[8]
       .getAttribute("value"),
       "Cache-Control", "The last request header name was incorrect.");
     is(requestScope.querySelectorAll(".variables-view-variable .value")[8]
       .getAttribute("value"),
       "\"no-cache\"", "The last request header value was incorrect.");
   }
 
-  function* testCookiesTab() {
+  async function testCookiesTab() {
     let onEvent = monitor.panelWin.once(EVENTS.TAB_UPDATED);
     EventUtils.sendMouseEvent({ type: "mousedown" },
       document.querySelectorAll("#details-pane tab")[1]);
-    yield onEvent;
+    await onEvent;
 
     let tabEl = document.querySelectorAll("#details-pane tab")[1];
     let tabpanel = document.querySelectorAll("#details-pane tabpanel")[1];
 
     is(tabEl.getAttribute("selected"), "true",
       "The cookies tab in the network details pane should be selected.");
 
     is(tabpanel.querySelectorAll(".variables-view-scope").length, 2,
@@ -199,21 +199,21 @@ add_task(async function() {
     is(tabpanel.querySelector("#request-params-box")
       .hasAttribute("hidden"), false,
       "The request params box should not be hidden.");
     is(tabpanel.querySelector("#request-post-data-textarea-box")
       .hasAttribute("hidden"), true,
       "The request post data textarea box should be hidden.");
   }
 
-  function* testResponseTab() {
+  async function testResponseTab() {
     let onEvent = monitor.panelWin.once(EVENTS.TAB_UPDATED);
     EventUtils.sendMouseEvent({ type: "mousedown" },
       document.querySelectorAll("#details-pane tab")[3]);
-    yield onEvent;
+    await onEvent;
 
     let tabEl = document.querySelectorAll("#details-pane tab")[3];
     let tabpanel = document.querySelectorAll("#details-pane tabpanel")[3];
 
     is(tabEl.getAttribute("selected"), "true",
       "The response tab in the network details pane should be selected.");
 
     is(tabpanel.querySelector("#response-content-info-header")
@@ -224,17 +224,17 @@ add_task(async function() {
       "The response content json box should be hidden.");
     is(tabpanel.querySelector("#response-content-textarea-box")
       .hasAttribute("hidden"), false,
       "The response content textarea box should not be hidden.");
     is(tabpanel.querySelector("#response-content-image-box")
       .hasAttribute("hidden"), true,
       "The response content image box should be hidden.");
 
-    let editor = yield NetMonitorView.editor("#response-content-textarea");
+    let editor = await NetMonitorView.editor("#response-content-textarea");
     is(editor.getText(), "Hello world!",
       "The text shown in the source editor is incorrect.");
     is(editor.getMode(), Editor.modes.text,
       "The mode active in the source editor is incorrect.");
   }
 
   function testTimingsTab() {
     EventUtils.sendMouseEvent({ type: "mousedown" },
--- a/devtools/client/netmonitor/test/browser_net_sort-01.js
+++ b/devtools/client/netmonitor/test/browser_net_sort-01.js
@@ -136,17 +136,17 @@ add_task(async function() {
 
   function getSelectedIndex(state) {
     if (!state.requests.selectedId) {
       return -1;
     }
     return getSortedRequests(state).findIndex(r => r.id === state.requests.selectedId);
   }
 
-  function* testContents(order, selection) {
+  async function testContents(order, selection) {
     isnot(getSelectedRequest(store.getState()), undefined,
       "There should still be a selected item after sorting.");
     is(getSelectedIndex(store.getState()), selection,
       "The first item should be still selected after sorting.");
     is(!!document.querySelector(".network-details-panel"), true,
       "The network details panel should still be visible after sorting.");
 
     is(getSortedRequests(store.getState()).length, order.length,
@@ -156,17 +156,17 @@ add_task(async function() {
     is(document.querySelectorAll(".request-list-item").length, order.length,
       "The visible items in the requests menu are, in fact, visible!");
 
     let requestItems = document.querySelectorAll(".request-list-item");
     for (let requestItem of requestItems) {
       requestItem.scrollIntoView();
       let requestsListStatus = requestItem.querySelector(".requests-list-status");
       EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
-      yield waitUntil(() => requestsListStatus.title);
+      await waitUntil(() => requestsListStatus.title);
     }
 
     for (let i = 0, len = order.length / 5; i < len; i++) {
       verifyRequestItemTarget(
         document,
         getDisplayedRequests(store.getState()),
         getSortedRequests(store.getState()).get(order[i]),
         "GET1", SORTING_SJS + "?index=1", {
--- a/devtools/client/netmonitor/test/browser_net_sort-02.js
+++ b/devtools/client/netmonitor/test/browser_net_sort-02.js
@@ -220,17 +220,17 @@ add_task(async function() {
           : L10N.getStr("networkMenu.sortedDesc");
         ok(header.getAttribute("title").includes(sorted),
           "The " + header.id +
           " header includes the used sorting in the 'title' attribute.");
       }
     }
   }
 
-  function* testContents([a, b, c, d, e]) {
+  async function testContents([a, b, c, d, e]) {
     isnot(getSelectedRequest(store.getState()), undefined,
       "There should still be a selected item after sorting.");
     is(getSelectedIndex(store.getState()), a,
       "The first item should be still selected after sorting.");
     is(!!document.querySelector(".network-details-panel"), true,
       "The network details panel should still be visible after sorting.");
 
     is(getSortedRequests(store.getState()).length, 5,
@@ -240,17 +240,17 @@ add_task(async function() {
     is(document.querySelectorAll(".request-list-item").length, 5,
       "The visible items in the requests menu are, in fact, visible!");
 
     let requestItems = document.querySelectorAll(".request-list-item");
     for (let requestItem of requestItems) {
       requestItem.scrollIntoView();
       let requestsListStatus = requestItem.querySelector(".requests-list-status");
       EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
-      yield waitUntil(() => requestsListStatus.title);
+      await waitUntil(() => requestsListStatus.title);
     }
 
     verifyRequestItemTarget(
       document,
       getDisplayedRequests(store.getState()),
       getSortedRequests(store.getState()).get(a),
       "GET1", SORTING_SJS + "?index=1", {
         fuzzyUrl: true,
--- a/devtools/client/netmonitor/test/browser_net_status-codes.js
+++ b/devtools/client/netmonitor/test/browser_net_status-codes.js
@@ -110,33 +110,33 @@ add_task(async function() {
   await testTab(2, testParams);
 
   return teardown(monitor);
 
   /**
    * A helper that verifies all requests show the correct information and caches
    * request list items to requestItems array.
    */
-  function* verifyRequests() {
+  async function verifyRequests() {
     let requestListItems = document.querySelectorAll(".request-list-item");
     for (let requestItem of requestListItems) {
       requestItem.scrollIntoView();
       let requestsListStatus = requestItem.querySelector(".requests-list-status");
       EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
-      yield waitUntil(() => requestsListStatus.title);
+      await waitUntil(() => requestsListStatus.title);
     }
 
     info("Verifying requests contain correct information.");
     let index = 0;
     for (let request of REQUEST_DATA) {
       let item = getSortedRequests(store.getState()).get(index);
       requestItems[index] = item;
 
       info("Verifying request #" + index);
-      yield verifyRequestItemTarget(
+      await verifyRequestItemTarget(
         document,
         getDisplayedRequests(store.getState()),
         item,
         request.method,
         request.uri,
         request.details
       );
 
@@ -150,34 +150,34 @@ add_task(async function() {
    *
    * @param Number tabIdx
    *               The index of tab to activate.
    * @param Function testFn(requestItem)
    *        A function that should perform all necessary tests. It's called once
    *        for every item of REQUEST_DATA with that item being selected in the
    *        NetworkMonitor.
    */
-  function* testTab(tabIdx, testFn) {
+  async function testTab(tabIdx, testFn) {
     let counter = 0;
     for (let item of REQUEST_DATA) {
       info("Testing tab #" + tabIdx + " to update with request #" + counter);
-      yield testFn(item, counter);
+      await testFn(item, counter);
 
       counter++;
     }
   }
 
   /**
    * A function that tests "Headers" panel contains correct information.
    */
-  function* testHeaders(data, index) {
+  async function testHeaders(data, index) {
     EventUtils.sendMouseEvent({ type: "mousedown" },
       document.querySelectorAll(".request-list-item")[index]);
 
-    yield waitUntil(() => document.querySelector(
+    await waitUntil(() => document.querySelector(
       "#headers-panel .tabpanel-summary-value.textbox-input"));
 
     let panel = document.querySelector("#headers-panel");
     let summaryValues = panel.querySelectorAll(".tabpanel-summary-value.textbox-input");
     let { method, correctUri, details: { status, statusText } } = data;
 
     is(summaryValues[0].value, correctUri,
       "The url summary value is incorrect.");
--- a/devtools/client/netmonitor/test/head.js
+++ b/devtools/client/netmonitor/test/head.js
@@ -249,28 +249,28 @@ function startNetworkEventUpdateObserver
   }));
 
   updatedTypes.forEach((type) => panelWin.on(type, (event, actor) => {
     let key = actor + "-" + event;
     finishedQueue[key] = finishedQueue[key] ? finishedQueue[key] - 1 : -1;
   }));
 }
 
-function* waitForAllNetworkUpdateEvents() {
+async function waitForAllNetworkUpdateEvents() {
   function checkNetworkEventUpdateState() {
     for (let key in finishedQueue) {
       if (finishedQueue[key] > 0) {
         return false;
       }
     }
 
     return true;
   }
   info("Wait for completion of all NetworkUpdateEvents packets...");
-  yield waitUntil(() => checkNetworkEventUpdateState());
+  await waitUntil(() => checkNetworkEventUpdateState());
   finishedQueue = {};
 }
 
 function initNetMonitor(url, enableCache) {
   info("Initializing a network monitor pane.");
 
   return (async function() {
     let tab = await addTab(url);