Bug 1443470 - Convert Task.jsm to async/await in devtools/client/netmonitor. r=Honza draft
authorAlexandre Poirot <poirot.alex@gmail.com>
Tue, 06 Mar 2018 02:03:34 -0800
changeset 764297 c9b95bfc7c9a926d29762ecc019b63995fae1655
parent 764296 28001f38bbf684684521188b96f148bc6de89c18
child 764298 063d128179a73ac9a0ed43b4c51399410206209e
push id101723
push userbmo:poirot.alex@gmail.com
push dateWed, 07 Mar 2018 15:55:42 +0000
reviewersHonza
bugs1443470
milestone60.0a1
Bug 1443470 - Convert Task.jsm to async/await in devtools/client/netmonitor. r=Honza $ ./obj-firefox-artifact/dist/bin/run-mozilla.sh ./obj-firefox-artifact/dist/bin/xpcshell xpc devtools/client/netmonitor MozReview-Commit-ID: 7fUjyobgiPD
devtools/client/netmonitor/src/har/test/browser_net_har_copy_all_as_har.js
devtools/client/netmonitor/src/har/test/browser_net_har_post_data.js
devtools/client/netmonitor/src/har/test/browser_net_har_post_data_on_get.js
devtools/client/netmonitor/src/har/test/browser_net_har_throttle_upload.js
devtools/client/netmonitor/test/browser_net_accessibility-01.js
devtools/client/netmonitor/test/browser_net_accessibility-02.js
devtools/client/netmonitor/test/browser_net_api-calls.js
devtools/client/netmonitor/test/browser_net_autoscroll.js
devtools/client/netmonitor/test/browser_net_brotli.js
devtools/client/netmonitor/test/browser_net_cached-status.js
devtools/client/netmonitor/test/browser_net_cause.js
devtools/client/netmonitor/test/browser_net_cause_redirect.js
devtools/client/netmonitor/test/browser_net_cause_source_map.js
devtools/client/netmonitor/test/browser_net_charts-01.js
devtools/client/netmonitor/test/browser_net_charts-02.js
devtools/client/netmonitor/test/browser_net_charts-03.js
devtools/client/netmonitor/test/browser_net_charts-04.js
devtools/client/netmonitor/test/browser_net_charts-05.js
devtools/client/netmonitor/test/browser_net_charts-06.js
devtools/client/netmonitor/test/browser_net_charts-07.js
devtools/client/netmonitor/test/browser_net_clear.js
devtools/client/netmonitor/test/browser_net_column_headers_tooltips.js
devtools/client/netmonitor/test/browser_net_complex-params.js
devtools/client/netmonitor/test/browser_net_content-type.js
devtools/client/netmonitor/test/browser_net_cookies_sorted.js
devtools/client/netmonitor/test/browser_net_copy_as_curl.js
devtools/client/netmonitor/test/browser_net_copy_headers.js
devtools/client/netmonitor/test/browser_net_copy_image_as_data_uri.js
devtools/client/netmonitor/test/browser_net_copy_params.js
devtools/client/netmonitor/test/browser_net_copy_response.js
devtools/client/netmonitor/test/browser_net_copy_svg_image_as_data_uri.js
devtools/client/netmonitor/test/browser_net_copy_url.js
devtools/client/netmonitor/test/browser_net_cors_requests.js
devtools/client/netmonitor/test/browser_net_curl-utils.js
devtools/client/netmonitor/test/browser_net_cyrillic-01.js
devtools/client/netmonitor/test/browser_net_cyrillic-02.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-03.js
devtools/client/netmonitor/test/browser_net_filter-04.js
devtools/client/netmonitor/test/browser_net_filter-flags.js
devtools/client/netmonitor/test/browser_net_footer-summary.js
devtools/client/netmonitor/test/browser_net_frame.js
devtools/client/netmonitor/test/browser_net_header-docs.js
devtools/client/netmonitor/test/browser_net_headers-alignment.js
devtools/client/netmonitor/test/browser_net_headers_sorted.js
devtools/client/netmonitor/test/browser_net_image-tooltip.js
devtools/client/netmonitor/test/browser_net_json-b64.js
devtools/client/netmonitor/test/browser_net_json-long.js
devtools/client/netmonitor/test/browser_net_json-malformed.js
devtools/client/netmonitor/test/browser_net_json-null.js
devtools/client/netmonitor/test/browser_net_json_custom_mime.js
devtools/client/netmonitor/test/browser_net_json_text_mime.js
devtools/client/netmonitor/test/browser_net_jsonp.js
devtools/client/netmonitor/test/browser_net_large-response.js
devtools/client/netmonitor/test/browser_net_leak_on_tab_close.js
devtools/client/netmonitor/test/browser_net_open_in_debugger.js
devtools/client/netmonitor/test/browser_net_open_in_style_editor.js
devtools/client/netmonitor/test/browser_net_open_request_in_tab.js
devtools/client/netmonitor/test/browser_net_pane-collapse.js
devtools/client/netmonitor/test/browser_net_pane-toggle.js
devtools/client/netmonitor/test/browser_net_params_sorted.js
devtools/client/netmonitor/test/browser_net_pause.js
devtools/client/netmonitor/test/browser_net_persistent_logs.js
devtools/client/netmonitor/test/browser_net_post-data-01.js
devtools/client/netmonitor/test/browser_net_post-data-02.js
devtools/client/netmonitor/test/browser_net_post-data-03.js
devtools/client/netmonitor/test/browser_net_post-data-04.js
devtools/client/netmonitor/test/browser_net_prefs-and-l10n.js
devtools/client/netmonitor/test/browser_net_prefs-reload.js
devtools/client/netmonitor/test/browser_net_raw_headers.js
devtools/client/netmonitor/test/browser_net_reload-button.js
devtools/client/netmonitor/test/browser_net_reload-markers.js
devtools/client/netmonitor/test/browser_net_req-resp-bodies.js
devtools/client/netmonitor/test/browser_net_resend_cors.js
devtools/client/netmonitor/test/browser_net_resend_headers.js
devtools/client/netmonitor/test/browser_net_security-details.js
devtools/client/netmonitor/test/browser_net_security-error.js
devtools/client/netmonitor/test/browser_net_security-icon-click.js
devtools/client/netmonitor/test/browser_net_security-redirect.js
devtools/client/netmonitor/test/browser_net_security-state.js
devtools/client/netmonitor/test/browser_net_security-tab-deselect.js
devtools/client/netmonitor/test/browser_net_security-tab-visibility.js
devtools/client/netmonitor/test/browser_net_security-warnings.js
devtools/client/netmonitor/test/browser_net_send-beacon-other-tab.js
devtools/client/netmonitor/test/browser_net_send-beacon.js
devtools/client/netmonitor/test/browser_net_service-worker-status.js
devtools/client/netmonitor/test/browser_net_simple-request-details.js
devtools/client/netmonitor/test/browser_net_simple-request.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_statistics-01.js
devtools/client/netmonitor/test/browser_net_statistics-02.js
devtools/client/netmonitor/test/browser_net_status-codes.js
devtools/client/netmonitor/test/browser_net_streaming-response.js
devtools/client/netmonitor/test/browser_net_throttle.js
devtools/client/netmonitor/test/browser_net_timeline_ticks.js
devtools/client/netmonitor/test/browser_net_timing-division.js
devtools/client/netmonitor/test/browser_net_truncate.js
devtools/client/netmonitor/test/browser_net_waterfall-click.js
devtools/client/netmonitor/test/head.js
--- a/devtools/client/netmonitor/src/har/test/browser_net_har_copy_all_as_har.js
+++ b/devtools/client/netmonitor/src/har/test/browser_net_har_copy_all_as_har.js
@@ -1,41 +1,41 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Basic tests for exporting Network panel content into HAR format.
  */
-add_task(function* () {
+add_task(async function () {
   // Disable tcp fast open, because it is setting a response header indicator
   // (bug 1352274). TCP Fast Open is not present on all platforms therefore the
   // number of response headers will vary depending on the platform.
   Services.prefs.setBoolPref("network.tcp.tcp_fastopen_enable", false);
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
+  let { tab, monitor } = await initNetMonitor(SIMPLE_URL);
 
   info("Starting test... ");
 
   let { connector, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let RequestListContextMenu = windowRequire(
     "devtools/client/netmonitor/src/widgets/RequestListContextMenu");
   let { getSortedRequests } = windowRequire(
     "devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.reload();
-  yield wait;
+  await wait;
 
   let contextMenu = new RequestListContextMenu({ connector });
 
-  yield contextMenu.copyAllAsHar(getSortedRequests(store.getState()));
+  await contextMenu.copyAllAsHar(getSortedRequests(store.getState()));
 
   let jsonString = SpecialPowers.getClipboardData("text/unicode");
   let har = JSON.parse(jsonString);
 
   // Check out HAR log
   isnot(har.log, null, "The HAR log must exist");
   is(har.log.creator.name, "Firefox", "The creator field must be set");
   is(har.log.browser.name, "Firefox", "The browser field must be set");
--- a/devtools/client/netmonitor/src/har/test/browser_net_har_post_data.js
+++ b/devtools/client/netmonitor/src/har/test/browser_net_har_post_data.js
@@ -1,41 +1,41 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests for exporting POST data into HAR format.
  */
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(
     HAR_EXAMPLE_URL + "html_har_post-data-test-page.html");
 
   info("Starting test... ");
 
   let { connector, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let RequestListContextMenu = windowRequire(
     "devtools/client/netmonitor/src/widgets/RequestListContextMenu");
   let { getSortedRequests } = windowRequire(
     "devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   // Execute one POST request on the page and wait till its done.
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.executeTest();
   });
-  yield wait;
+  await wait;
 
   // Copy HAR into the clipboard (asynchronous).
   let contextMenu = new RequestListContextMenu({ connector });
-  let jsonString = yield contextMenu.copyAllAsHar(getSortedRequests(store.getState()));
+  let jsonString = await contextMenu.copyAllAsHar(getSortedRequests(store.getState()));
   let har = JSON.parse(jsonString);
 
   // Check out the HAR log.
   isnot(har.log, null, "The HAR log must exist");
   is(har.log.pages.length, 1, "There must be one page");
   is(har.log.entries.length, 1, "There must be one request");
 
   let entry = har.log.entries[0];
--- a/devtools/client/netmonitor/src/har/test/browser_net_har_post_data_on_get.js
+++ b/devtools/client/netmonitor/src/har/test/browser_net_har_post_data_on_get.js
@@ -1,41 +1,41 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests for exporting POST data into HAR format.
  */
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(
     HAR_EXAMPLE_URL + "html_har_post-data-test-page.html");
 
   info("Starting test... ");
 
   let { connector, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let RequestListContextMenu = windowRequire(
     "devtools/client/netmonitor/src/widgets/RequestListContextMenu");
   let { getSortedRequests } = windowRequire(
     "devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   // Execute one GET request on the page and wait till its done.
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.executeTest3();
   });
-  yield wait;
+  await wait;
 
   // Copy HAR into the clipboard (asynchronous).
   let contextMenu = new RequestListContextMenu({ connector });
-  let jsonString = yield contextMenu.copyAllAsHar(getSortedRequests(store.getState()));
+  let jsonString = await contextMenu.copyAllAsHar(getSortedRequests(store.getState()));
   let har = JSON.parse(jsonString);
 
   // Check out the HAR log.
   isnot(har.log, null, "The HAR log must exist");
   is(har.log.pages.length, 1, "There must be one page");
   is(har.log.entries.length, 1, "There must be one request");
 
   let entry = har.log.entries[0];
--- a/devtools/client/netmonitor/src/har/test/browser_net_har_throttle_upload.js
+++ b/devtools/client/netmonitor/src/har/test/browser_net_har_throttle_upload.js
@@ -1,22 +1,22 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Test timing of upload when throttling.
 
 "use strict";
 
-add_task(function* () {
-  yield throttleUploadTest(true);
-  yield throttleUploadTest(false);
+add_task(async function () {
+  await throttleUploadTest(true);
+  await throttleUploadTest(false);
 });
 
-function* throttleUploadTest(actuallyThrottle) {
-  let { tab, monitor } = yield initNetMonitor(
+async function throttleUploadTest(actuallyThrottle) {
+  let { tab, monitor } = await initNetMonitor(
     HAR_EXAMPLE_URL + "html_har_post-data-test-page.html");
 
   info("Starting test... (actuallyThrottle = " + actuallyThrottle + ")");
 
   let { connector, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let RequestListContextMenu = windowRequire(
     "devtools/client/netmonitor/src/widgets/RequestListContextMenu");
@@ -35,34 +35,34 @@ function* throttleUploadTest(actuallyThr
       downloadBPSMean: 200000,
       downloadBPSMax: 200000,
       uploadBPSMean: uploadSize,
       uploadBPSMax: uploadSize,
     },
   };
 
   info("sending throttle request");
-  yield new Promise((resolve) => {
+  await new Promise((resolve) => {
     connector.setPreferences(request, (response) => {
       resolve(response);
     });
   });
 
   // Execute one POST request on the page and wait till its done.
   let onEventTimings = monitor.panelWin.once(EVENTS.RECEIVED_EVENT_TIMINGS);
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, { size }, function* (args) {
+  await ContentTask.spawn(tab.linkedBrowser, { size }, async function (args) {
     content.wrappedJSObject.executeTest2(args.size);
   });
-  yield wait;
-  yield onEventTimings;
+  await wait;
+  await onEventTimings;
 
   // Copy HAR into the clipboard (asynchronous).
   let contextMenu = new RequestListContextMenu({ connector });
-  let jsonString = yield contextMenu.copyAllAsHar(getSortedRequests(store.getState()));
+  let jsonString = await contextMenu.copyAllAsHar(getSortedRequests(store.getState()));
   let har = JSON.parse(jsonString);
 
   // Check out the HAR log.
   isnot(har.log, null, "The HAR log must exist");
   is(har.log.pages.length, 1, "There must be one page");
   is(har.log.entries.length, 1, "There must be one request");
 
   let entry = har.log.entries[0];
@@ -72,10 +72,10 @@ function* throttleUploadTest(actuallyThr
   const wasTwoSeconds = entry.timings.send >= 2000;
   if (actuallyThrottle) {
     ok(wasTwoSeconds, "upload should have taken more than 2 seconds");
   } else {
     ok(!wasTwoSeconds, "upload should not have taken more than 2 seconds");
   }
 
   // Clean up
-  yield teardown(monitor);
+  await teardown(monitor);
 }
--- a/devtools/client/netmonitor/test/browser_net_accessibility-01.js
+++ b/devtools/client/netmonitor/test/browser_net_accessibility-01.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if focus modifiers work for the SideMenuWidget.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   info("Starting test... ");
 
   // It seems that this test may be slow on Ubuntu builds running on ec2.
   requestLongerTimeout(2);
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
@@ -26,20 +26,20 @@ add_task(function* () {
     let requestItems = Array.from(document.querySelectorAll(".request-list-item"));
     is(requestItems.findIndex((item) => item.matches(".selected")), selectedIndex,
       "The selected item in the requests menu was incorrect.");
     is(!!document.querySelector(".network-details-panel"), panelVisibility,
       "The network details panel should render correctly.");
   }
 
   let wait = waitForNetworkEvents(monitor, 2);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests(2);
   });
-  yield wait;
+  await wait;
 
   check(-1, false);
 
   store.dispatch(Actions.selectDelta(+Infinity));
   check(1, true);
   store.dispatch(Actions.selectDelta(-Infinity));
   check(0, true);
 
@@ -49,20 +49,20 @@ add_task(function* () {
   check(0, true);
 
   store.dispatch(Actions.selectDelta(+10));
   check(1, true);
   store.dispatch(Actions.selectDelta(-10));
   check(0, true);
 
   wait = waitForNetworkEvents(monitor, 18);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests(18);
   });
-  yield wait;
+  await wait;
 
   store.dispatch(Actions.selectDelta(+Infinity));
   check(19, true);
   store.dispatch(Actions.selectDelta(-Infinity));
   check(0, true);
 
   store.dispatch(Actions.selectDelta(+1));
   check(1, true);
--- a/devtools/client/netmonitor/test/browser_net_accessibility-02.js
+++ b/devtools/client/netmonitor/test/browser_net_accessibility-02.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if keyboard and mouse navigation works in the network requests menu.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   info("Starting test... ");
 
   // It seems that this test may be slow on Ubuntu builds running on ec2.
   requestLongerTimeout(2);
 
   let { window, document, windowRequire, store } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
@@ -26,20 +26,20 @@ add_task(function* () {
     let requestItems = Array.from(document.querySelectorAll(".request-list-item"));
     is(requestItems.findIndex((item) => item.matches(".selected")), selectedIndex,
       "The selected item in the requests menu was incorrect.");
     is(!!document.querySelector(".network-details-panel"), panelVisibility,
       "The network details panel should render correctly.");
   }
 
   let wait = waitForNetworkEvents(monitor, 2);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests(2);
   });
-  yield wait;
+  await wait;
 
   document.querySelector(".requests-list-contents").focus();
 
   check(-1, false);
 
   EventUtils.sendKey("DOWN", window);
   check(0, true);
   EventUtils.sendKey("UP", window);
@@ -51,20 +51,20 @@ add_task(function* () {
   check(0, true);
 
   EventUtils.sendKey("END", window);
   check(1, true);
   EventUtils.sendKey("HOME", window);
   check(0, true);
 
   wait = waitForNetworkEvents(monitor, 18);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests(18);
   });
-  yield wait;
+  await wait;
 
   EventUtils.sendKey("DOWN", window);
   check(1, true);
   EventUtils.sendKey("DOWN", window);
   check(2, true);
   EventUtils.sendKey("UP", window);
   check(1, true);
   EventUtils.sendKey("UP", window);
@@ -122,10 +122,10 @@ add_task(function* () {
   check(19, true);
   EventUtils.sendKey("DOWN", window);
   check(19, true);
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelector(".request-list-item"));
   check(0, true);
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_api-calls.js
+++ b/devtools/client/netmonitor/test/browser_net_api-calls.js
@@ -3,18 +3,18 @@
 
 "use strict";
 
 /**
  * Tests whether API call URLs (without a filename) are correctly displayed
  * (including Unicode)
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(API_CALLS_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(API_CALLS_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
@@ -25,25 +25,25 @@ add_task(function* () {
     "http://example.com/api/fileName.xml",
     "http://example.com/api/file%E2%98%A2.xml",
     "http://example.com/api/ascii/get/",
     "http://example.com/api/unicode/%E2%98%A2/",
     "http://example.com/api/search/?q=search%E2%98%A2"
   ];
 
   let wait = waitForNetworkEvents(monitor, 5);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   REQUEST_URIS.forEach(function (uri, index) {
     verifyRequestItemTarget(
       document,
       getDisplayedRequests(store.getState()),
       getSortedRequests(store.getState()).get(index),
       "GET",
       uri
      );
   });
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_autoscroll.js
+++ b/devtools/client/netmonitor/test/browser_net_autoscroll.js
@@ -2,84 +2,84 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Bug 863102 - Automatically scroll down upon new network requests.
  * edited to account for changes made to fix Bug 1360457
  */
-add_task(function* () {
+add_task(async function () {
   requestLongerTimeout(4);
 
-  let { tab, monitor } = yield initNetMonitor(INFINITE_GET_URL, true);
+  let { tab, monitor } = await initNetMonitor(INFINITE_GET_URL, true);
   let { document, windowRequire, store } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   // Wait until the first request makes the empty notice disappear
-  yield waitForRequestListToAppear();
+  await waitForRequestListToAppear();
 
   let requestsContainer = document.querySelector(".requests-list-contents");
   ok(requestsContainer, "Container element exists as expected.");
 
   // (1) Check that the scroll position is maintained at the bottom
   // when the requests overflow the vertical size of the container.
-  yield waitForRequestsToOverflowContainer();
-  yield waitForScroll();
+  await waitForRequestsToOverflowContainer();
+  await waitForScroll();
   ok(true, "Scrolled to bottom on overflow.");
 
   // (2) Now scroll to the top and check that additional requests
   // do not change the scroll position.
   requestsContainer.scrollTop = 0;
-  yield waitSomeTime();
+  await waitSomeTime();
   ok(!scrolledToBottom(requestsContainer), "Not scrolled to bottom.");
   // save for comparison later
   let scrollTop = requestsContainer.scrollTop;
-  yield waitForNetworkEvents(monitor, 8);
-  yield waitSomeTime();
+  await waitForNetworkEvents(monitor, 8);
+  await waitSomeTime();
   is(requestsContainer.scrollTop, scrollTop, "Did not scroll.");
 
   // (3) Now set the scroll position back at the bottom and check that
   // additional requests *do* cause the container to scroll down.
   requestsContainer.scrollTop = requestsContainer.scrollHeight;
   ok(scrolledToBottom(requestsContainer), "Set scroll position to bottom.");
-  yield waitForNetworkEvents(monitor, 8);
-  yield waitForScroll();
+  await waitForNetworkEvents(monitor, 8);
+  await waitForScroll();
   ok(true, "Still scrolled to bottom.");
 
   // (4) Now select the first item in the list
   // and check that additional requests do not change the scroll position
   // from just below the headers.
   store.dispatch(Actions.selectRequestByIndex(0));
-  yield waitForNetworkEvents(monitor, 8);
-  yield waitSomeTime();
+  await waitForNetworkEvents(monitor, 8);
+  await waitSomeTime();
   let requestsContainerHeaders = requestsContainer.firstChild;
   let headersHeight = requestsContainerHeaders.offsetHeight;
   is(requestsContainer.scrollTop, headersHeight, "Did not scroll.");
 
   // Stop doing requests.
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, function () {
     content.wrappedJSObject.stopRequests();
   });
 
   // Done: clean up.
   return teardown(monitor);
 
   function waitForRequestListToAppear() {
     info("Waiting until the empty notice disappears and is replaced with the list");
     return waitUntil(() => !!document.querySelector(".requests-list-contents"));
   }
 
-  function* waitForRequestsToOverflowContainer() {
+  async function waitForRequestsToOverflowContainer() {
     info("Waiting for enough requests to overflow the container");
     while (true) {
       info("Waiting for one network request");
-      yield waitForNetworkEvents(monitor, 1);
+      await waitForNetworkEvents(monitor, 1);
       if (requestsContainer.scrollHeight > requestsContainer.clientHeight) {
         info("The list is long enough, returning");
         return;
       }
     }
   }
 
   function scrolledToBottom(element) {
--- a/devtools/client/netmonitor/test/browser_net_brotli.js
+++ b/devtools/client/netmonitor/test/browser_net_brotli.js
@@ -5,41 +5,41 @@
 
 const BROTLI_URL = HTTPS_EXAMPLE_URL + "html_brotli-test-page.html";
 const BROTLI_REQUESTS = 1;
 
 /**
  * Test brotli encoded response is handled correctly on HTTPS.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { tab, monitor } = yield initNetMonitor(BROTLI_URL);
+  let { tab, monitor } = await initNetMonitor(BROTLI_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, BROTLI_REQUESTS);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   let requestItem = document.querySelector(".request-list-item");
   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(0),
     "GET", HTTPS_CONTENT_TYPE_SJS + "?fmt=br", {
       status: 200,
       statusText: "Connected",
@@ -51,22 +51,22 @@ add_task(function* () {
     });
 
   wait = waitForDOM(document, ".CodeMirror-code");
   let onResponseContent = monitor.panelWin.once(EVENTS.RECEIVED_RESPONSE_CONTENT);
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#response-tab"));
-  yield wait;
-  yield onResponseContent;
-  yield testResponse("br");
-  yield teardown(monitor);
+  await wait;
+  await onResponseContent;
+  await testResponse("br");
+  await teardown(monitor);
 
-  function* testResponse(type) {
+  function testResponse(type) {
     switch (type) {
       case "br": {
         is(document.querySelector(".CodeMirror-line").textContent, "X".repeat(64),
           "The text shown in the source editor is incorrect for the brotli request.");
         break;
       }
     }
   }
--- a/devtools/client/netmonitor/test/browser_net_cached-status.js
+++ b/devtools/client/netmonitor/test/browser_net_cached-status.js
@@ -2,21 +2,21 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if cached requests have the correct status code
  */
 
-add_task(function* () {
+add_task(async function () {
   // Disable rcwn to make cache behavior deterministic.
-  yield pushPref("network.http.rcwn.enabled", false);
+  await pushPref("network.http.rcwn.enabled", false);
 
-  let { tab, monitor } = yield initNetMonitor(STATUS_CODES_URL, true);
+  let { tab, monitor } = await initNetMonitor(STATUS_CODES_URL, true);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
@@ -84,44 +84,44 @@ add_task(function* () {
         statusText: "Not Found",
         type: "html",
         fullMimeType: "text/html; charset=utf-8"
       }
     }
   ];
 
   info("Performing requests #1...");
-  yield performRequestsAndWait();
+  await performRequestsAndWait();
 
   info("Performing requests #2...");
-  yield performRequestsAndWait();
+  await performRequestsAndWait();
 
   let index = 0;
   for (let request of REQUEST_DATA) {
     let requestItem = document.querySelectorAll(".request-list-item")[index];
     requestItem.scrollIntoView();
     let requestsListStatus = requestItem.querySelector(".requests-list-status");
     EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
-    yield waitUntil(() => requestsListStatus.title);
+    await waitUntil(() => requestsListStatus.title);
 
     info("Verifying request #" + index);
-    yield verifyRequestItemTarget(
+    await verifyRequestItemTarget(
       document,
       getDisplayedRequests(store.getState()),
       getSortedRequests(store.getState()).get(index),
       request.method,
       request.uri,
       request.details
     );
 
     index++;
   }
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
-  function* performRequestsAndWait() {
+  async function performRequestsAndWait() {
     let wait = waitForNetworkEvents(monitor, 3);
-    yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+    await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
       content.wrappedJSObject.performCachedRequests();
     });
-    yield wait;
+    await wait;
   }
 });
--- a/devtools/client/netmonitor/test/browser_net_cause.js
+++ b/devtools/client/netmonitor/test/browser_net_cause.js
@@ -72,43 +72,43 @@ const EXPECTED_REQUESTS = [
     method: "POST",
     url: EXAMPLE_URL + "beacon_request",
     causeType: "beacon",
     causeUri: CAUSE_URL,
     stack: [{ fn: "performBeaconRequest", file: CAUSE_FILE_NAME, line: 32 }]
   },
 ];
 
-add_task(function* () {
+add_task(async function () {
   // Async stacks aren't on by default in all builds
-  yield SpecialPowers.pushPrefEnv({ set: [["javascript.options.asyncstack", true]] });
+  await SpecialPowers.pushPrefEnv({ set: [["javascript.options.asyncstack", true]] });
 
   // the initNetMonitor function clears the network request list after the
   // page is loaded. That's why we first load a bogus page from SIMPLE_URL,
   // and only then load the real thing from CAUSE_URL - we want to catch
   // all the requests the page is making, not only the XHRs.
   // We can't use about:blank here, because initNetMonitor checks that the
   // page has actually made at least one request.
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
+  let { tab, monitor } = await initNetMonitor(SIMPLE_URL);
 
   let { document, store, windowRequire, connector } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, EXPECTED_REQUESTS.length);
   tab.linkedBrowser.loadURI(CAUSE_URL);
-  yield wait;
+  await wait;
 
   let requests = getSortedRequests(store.getState());
-  yield Promise.all(requests.map(requestItem =>
+  await Promise.all(requests.map(requestItem =>
     connector.requestData(requestItem.id, "stackTrace")));
 
   is(store.getState().requests.requests.size, EXPECTED_REQUESTS.length,
     "All the page events should be recorded.");
 
   EXPECTED_REQUESTS.forEach(async (spec, i) => {
     let { method, url, causeType, causeUri, stack } = spec;
 
@@ -154,10 +154,10 @@ add_task(function* () {
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-cause-button"));
   let expectedOrder = EXPECTED_REQUESTS.map(r => r.causeType).sort();
   expectedOrder.forEach((expectedCause, i) => {
     const cause = getSortedRequests(store.getState()).get(i).cause.type;
     is(cause, expectedCause, `The request #${i} has the expected cause after sorting`);
   });
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_cause_redirect.js
+++ b/devtools/client/netmonitor/test/browser_net_cause_redirect.js
@@ -3,46 +3,46 @@
 
 "use strict";
 
 /**
  * Tests if request JS stack is property reported if the request is internally
  * redirected without hitting the network (HSTS is one of such cases)
  */
 
-add_task(function* () {
+add_task(async function () {
   const EXPECTED_REQUESTS = [
     // Request to HTTP URL, redirects to HTTPS, has callstack
     { status: 302, hasStack: true },
     // Serves HTTPS, sets the Strict-Transport-Security header, no stack
     { status: 200, hasStack: false },
     // Second request to HTTP redirects to HTTPS internally
     { status: 200, hasStack: true },
   ];
 
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   let { store, windowRequire, connector } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, EXPECTED_REQUESTS.length);
-  yield performRequests(2, HSTS_SJS);
-  yield wait;
+  await performRequests(2, HSTS_SJS);
+  await wait;
 
   // Fetch stack-trace data from the backend and wait till
   // all packets are received.
   let requests = getSortedRequests(store.getState())
     .filter((req) => !req.stacktrace)
     .map((req) => connector.requestData(req.id, "stackTrace"));
 
-  yield Promise.all(requests);
+  await Promise.all(requests);
 
   EXPECTED_REQUESTS.forEach(({status, hasStack}, i) => {
     let item = getSortedRequests(store.getState()).get(i);
 
     is(item.status, status, `Request #${i} has the expected status`);
 
     let { stacktrace } = item;
     let stackLen = stacktrace ? stacktrace.length : 0;
@@ -52,19 +52,19 @@ add_task(function* () {
       ok(stackLen > 0, `Request #${i} has a stacktrace with ${stackLen} items`);
     } else {
       is(stackLen, 0, `Request #${i} has an empty stacktrace`);
     }
   });
 
   // Send a request to reset the HSTS policy to state before the test
   wait = waitForNetworkEvents(monitor, 1);
-  yield performRequests(1, HSTS_SJS + "?reset");
-  yield wait;
+  await performRequests(1, HSTS_SJS + "?reset");
+  await wait;
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   function performRequests(count, url) {
-    return ContentTask.spawn(tab.linkedBrowser, { count, url }, function* (args) {
+    return ContentTask.spawn(tab.linkedBrowser, { count, url }, async function (args) {
       content.wrappedJSObject.performRequests(args.count, args.url);
     });
   }
 });
--- a/devtools/client/netmonitor/test/browser_net_cause_source_map.js
+++ b/devtools/client/netmonitor/test/browser_net_cause_source_map.js
@@ -7,52 +7,52 @@
  * Tests if request cause is reported correctly when using source maps.
  */
 
 const CAUSE_FILE_NAME = "html_maps-test-page.html";
 const CAUSE_URL = EXAMPLE_URL + CAUSE_FILE_NAME;
 
 const N_EXPECTED_REQUESTS = 4;
 
-add_task(function* () {
+add_task(async function () {
   // the initNetMonitor function clears the network request list after the
   // page is loaded. That's why we first load a bogus page from SIMPLE_URL,
   // and only then load the real thing from CAUSE_URL - we want to catch
   // all the requests the page is making, not only the XHRs.
   // We can't use about:blank here, because initNetMonitor checks that the
   // page has actually made at least one request.
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
+  let { tab, monitor } = await initNetMonitor(SIMPLE_URL);
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
   let waitPromise = waitForNetworkEvents(monitor, N_EXPECTED_REQUESTS);
   tab.linkedBrowser.loadURI(CAUSE_URL);
-  yield waitPromise;
+  await waitPromise;
 
   info("Clicking item and waiting for details panel to open");
   waitPromise = waitForDOM(document, ".network-details-panel");
   let xhrRequestItem = document.querySelectorAll(".request-list-item")[3];
   EventUtils.sendMouseEvent({ type: "mousedown" }, xhrRequestItem);
-  yield waitPromise;
+  await waitPromise;
 
   info("Clicking stack tab and waiting for stack panel to open");
   waitPromise = waitForDOM(document, "#stack-trace-panel");
   let stackTab = document.querySelector("#stack-trace-tab");
   EventUtils.sendMouseEvent({ type: "click" }, stackTab);
-  yield waitPromise;
+  await waitPromise;
 
   info("Waiting for source maps to be applied");
-  yield waitUntil(() => {
+  await waitUntil(() => {
     let frames = document.querySelectorAll(".frame-link");
     return frames && frames.length >= 2 &&
       frames[0].textContent.includes("xhr_original") &&
       frames[1].textContent.includes("xhr_original");
   });
 
   let frames = document.querySelectorAll(".frame-link");
   is(frames.length, 3, "should have 3 stack frames");
   is(frames[0].textContent, `reallydoxhr xhr_original.js:6`);
   is(frames[1].textContent, `doxhr xhr_original.js:10`);
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_charts-01.js
+++ b/devtools/client/netmonitor/test/browser_net_charts-01.js
@@ -2,27 +2,27 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Makes sure Pie Charts have the right internal structure.
  */
 
-add_task(function* () {
-  let { monitor, tab } = yield initNetMonitor(SIMPLE_URL);
+add_task(async function () {
+  let { monitor, tab } = await initNetMonitor(SIMPLE_URL);
 
   info("Starting test... ");
 
   let { document, windowRequire } = monitor.panelWin;
   let { Chart } = windowRequire("devtools/client/shared/widgets/Chart");
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.loadURI(SIMPLE_URL);
-  yield wait;
+  await wait;
 
   let pie = Chart.Pie(document, {
     width: 100,
     height: 100,
     data: [{
       size: 1,
       label: "foo"
     }, {
@@ -70,10 +70,10 @@ add_task(function* () {
     "There should be 3 pie chart labels created.");
   is(labels[0].textContent, "baz",
     "The first label's text is correct.");
   is(labels[1].textContent, "bar",
     "The first label's text is correct.");
   is(labels[2].textContent, "foo",
     "The first label's text is correct.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_charts-02.js
+++ b/devtools/client/netmonitor/test/browser_net_charts-02.js
@@ -3,28 +3,28 @@
 
 "use strict";
 
 /**
  * Makes sure Pie Charts have the right internal structure when
  * initialized with empty data.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { monitor, tab } = yield initNetMonitor(SIMPLE_URL);
+  let { monitor, tab } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document, windowRequire } = monitor.panelWin;
   let { Chart } = windowRequire("devtools/client/shared/widgets/Chart");
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.loadURI(SIMPLE_URL);
-  yield wait;
+  await wait;
 
   let pie = Chart.Pie(document, {
     data: null,
     width: 100,
     height: 100
   });
 
   let node = pie.node;
@@ -45,10 +45,10 @@ add_task(function* () {
   ok(slices[0].hasAttribute("smallest"),
     "The first slice should also be the smallest one.");
   ok(slices[0].getAttribute("name"), L10N.getStr("pieChart.loading"),
     "The first slice's name is correct.");
 
   is(labels.length, 1, "There should be 1 pie chart label created.");
   is(labels[0].textContent, "Loading", "The first label's text is correct.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_charts-03.js
+++ b/devtools/client/netmonitor/test/browser_net_charts-03.js
@@ -2,28 +2,28 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Makes sure Table Charts have the right internal structure.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { monitor, tab } = yield initNetMonitor(SIMPLE_URL);
+  let { monitor, tab } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document, windowRequire } = monitor.panelWin;
   let { Chart } = windowRequire("devtools/client/shared/widgets/Chart");
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.loadURI(SIMPLE_URL);
-  yield wait;
+  await wait;
 
   let table = Chart.Table(document, {
     title: "Table title",
     data: [{
       label1: 1,
       label2: 11.1
     }, {
       label1: 2,
@@ -115,10 +115,10 @@ add_task(function* () {
 
   is(totals.querySelectorAll(".table-chart-summary-label")[1].getAttribute("name"),
     "label2",
     "The second sum's type is correct.");
   is(totals.querySelectorAll(".table-chart-summary-label")[1].textContent,
     "World 36.60",
     "The second sum's value is correct.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_charts-04.js
+++ b/devtools/client/netmonitor/test/browser_net_charts-04.js
@@ -3,28 +3,28 @@
 
 "use strict";
 
 /**
  * Makes sure Pie Charts have the right internal structure when
  * initialized with empty data.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { monitor, tab } = yield initNetMonitor(SIMPLE_URL);
+  let { monitor, tab } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document, windowRequire } = monitor.panelWin;
   let { Chart } = windowRequire("devtools/client/shared/widgets/Chart");
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.loadURI(SIMPLE_URL);
-  yield wait;
+  await wait;
 
   let table = Chart.Table(document, {
     title: "Table title",
     data: null,
     totals: {
       label1: value => "Hello " + L10N.numberWithDecimals(value, 2),
       label2: value => "World " + L10N.numberWithDecimals(value, 2)
     },
@@ -75,10 +75,10 @@ add_task(function* () {
 
   is(totals.querySelectorAll(".table-chart-summary-label")[1].getAttribute("name"),
     "label2",
     "The second sum's type is correct.");
   is(totals.querySelectorAll(".table-chart-summary-label")[1].textContent,
     "World 0",
     "The second sum's value is correct.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_charts-05.js
+++ b/devtools/client/netmonitor/test/browser_net_charts-05.js
@@ -2,28 +2,28 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Makes sure Pie+Table Charts have the right internal structure.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { monitor, tab } = yield initNetMonitor(SIMPLE_URL);
+  let { monitor, tab } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document, windowRequire } = monitor.panelWin;
   let { Chart } = windowRequire("devtools/client/shared/widgets/Chart");
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.loadURI(SIMPLE_URL);
-  yield wait;
+  await wait;
 
   let chart = Chart.PieTable(document, {
     title: "Table title",
     data: [{
       size: 1,
       label: 11.1
     }, {
       size: 2,
@@ -61,10 +61,10 @@ add_task(function* () {
     "A pie chart was created successfully.");
   ok(node.querySelector(".table-chart-container"),
     "A table chart was created successfully.");
 
   is(rows.length, 4, "There should be 3 pie chart slices and 1 header created.");
   is(rows.length, 4, "There should be 3 table chart rows and 1 header created.");
   is(sums.length, 2, "There should be 2 total summaries and 1 header created.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_charts-06.js
+++ b/devtools/client/netmonitor/test/browser_net_charts-06.js
@@ -2,28 +2,28 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Makes sure Pie Charts correctly handle empty source data.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { monitor, tab } = yield initNetMonitor(SIMPLE_URL);
+  let { monitor, tab } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document, windowRequire } = monitor.panelWin;
   let { Chart } = windowRequire("devtools/client/shared/widgets/Chart");
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.loadURI(SIMPLE_URL);
-  yield wait;
+  await wait;
 
   let pie = Chart.Pie(document, {
     data: [],
     width: 100,
     height: 100
   });
 
   let node = pie.node;
@@ -43,10 +43,10 @@ add_task(function* () {
   ok(slices[0].getAttribute("name"), L10N.getStr("pieChart.unavailable"),
     "The slice's name is correct.");
 
   is(labels.length, 1,
     "There should be 1 pie chart label created.");
   is(labels[0].textContent, "Empty",
     "The label's text is correct.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_charts-07.js
+++ b/devtools/client/netmonitor/test/browser_net_charts-07.js
@@ -2,28 +2,28 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Makes sure Table Charts correctly handle empty source data.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { monitor, tab } = yield initNetMonitor(SIMPLE_URL);
+  let { monitor, tab } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document, windowRequire } = monitor.panelWin;
   let { Chart } = windowRequire("devtools/client/shared/widgets/Chart");
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.loadURI(SIMPLE_URL);
-  yield wait;
+  await wait;
 
   let table = Chart.Table(document, {
     data: [],
     totals: {
       label1: value => "Hello " + L10N.numberWithDecimals(value, 2),
       label2: value => "World " + L10N.numberWithDecimals(value, 2)
     },
     header: {
@@ -63,10 +63,10 @@ add_task(function* () {
 
   is(totals.querySelectorAll(".table-chart-summary-label")[1].getAttribute("name"),
     "label2",
     "The second sum's type is correct.");
   is(totals.querySelectorAll(".table-chart-summary-label")[1].textContent,
     "World 0",
     "The second sum's value is correct.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_clear.js
+++ b/devtools/client/netmonitor/test/browser_net_clear.js
@@ -2,45 +2,45 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if the clear button empties the request menu.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let detailsPanelToggleButton = document.querySelector(".network-details-panel-toggle");
   let clearButton = document.querySelector(".requests-list-clear-button");
 
   store.dispatch(Actions.batchEnable(false));
 
   // Make sure we start in a sane state
   assertNoRequestState();
 
   // Load one request and assert it shows up in the list
   let onMonitorUpdated = waitForAllRequestsFinished(monitor);
   tab.linkedBrowser.reload();
-  yield onMonitorUpdated;
+  await onMonitorUpdated;
 
   assertSingleRequestState();
 
   // Click clear and make sure the requests are gone
   EventUtils.sendMouseEvent({ type: "click" }, clearButton);
   assertNoRequestState();
 
   // Load a second request and make sure they still show up
   onMonitorUpdated = waitForAllRequestsFinished(monitor);
   tab.linkedBrowser.reload();
-  yield onMonitorUpdated;
+  await onMonitorUpdated;
 
   assertSingleRequestState();
 
   // Make sure we can now open the network details panel
   EventUtils.sendMouseEvent({ type: "click" }, detailsPanelToggleButton);
 
   ok(document.querySelector(".network-details-panel") &&
     !detailsPanelToggleButton.classList.contains("pane-collapsed"),
--- a/devtools/client/netmonitor/test/browser_net_column_headers_tooltips.js
+++ b/devtools/client/netmonitor/test/browser_net_column_headers_tooltips.js
@@ -2,24 +2,24 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Bug 1377094 - Test that all column headers have tooltips.
  */
 
-add_task(function* () {
-  let { monitor } = yield initNetMonitor(SIMPLE_URL);
+add_task(async function () {
+  let { monitor } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document } = monitor.panelWin;
 
   let headers = document.querySelectorAll(".requests-list-header-button");
   for (let header of headers) {
     const buttonText = header.querySelector(".button-text").textContent;
     const tooltip = header.getAttribute("title");
     is(buttonText, tooltip,
        "The " + header.id + " header has the button text in its 'title' attribute.");
   }
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_complex-params.js
+++ b/devtools/client/netmonitor/test/browser_net_complex-params.js
@@ -3,77 +3,77 @@
 
 "use strict";
 
 /**
  * Tests whether complex request params and payload sent via POST are
  * displayed correctly.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(PARAMS_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(PARAMS_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let { L10N } = windowRequire("devtools/client/netmonitor/src/utils/l10n");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 7);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   wait = waitForDOM(document, "#params-panel .tree-section", 2);
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#params-tab"));
-  yield wait;
+  await wait;
   testParamsTab1("a", "", '{ "foo": "bar" }', "");
 
   wait = waitForDOM(document, "#params-panel .tree-section", 2);
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[1]);
-  yield wait;
+  await wait;
   testParamsTab1("a", "b", '{ "foo": "bar" }', "");
 
   wait = waitForDOM(document, "#params-panel .tree-section", 2);
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[2]);
-  yield wait;
+  await wait;
   testParamsTab1("a", "b", "?foo", "bar");
 
   wait = waitForDOM(document, "#params-panel tr:not(.tree-section).treeRow", 2);
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[3]);
-  yield wait;
+  await wait;
   testParamsTab2("a", "", '{ "foo": "bar" }', "js");
 
   wait = waitForDOM(document, "#params-panel tr:not(.tree-section).treeRow", 2);
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[4]);
-  yield wait;
+  await wait;
   testParamsTab2("a", "b", '{ "foo": "bar" }', "js");
 
   // Wait for all tree sections and editor updated by react
   let waitSections = waitForDOM(document, "#params-panel .tree-section", 2);
   let waitSourceEditor = waitForDOM(document, "#params-panel .CodeMirror-code");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[5]);
-  yield Promise.all([waitSections, waitSourceEditor]);
+  await Promise.all([waitSections, waitSourceEditor]);
   testParamsTab2("a", "b", "?foo=bar", "text");
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[6]);
   testParamsTab3();
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   function testParamsTab1(queryStringParamName, queryStringParamValue,
                           formDataParamName, formDataParamValue) {
     let tabpanel = document.querySelector("#params-panel");
 
     is(tabpanel.querySelectorAll(".tree-section").length, 2,
       "The number of param tree sections displayed in this tabpanel is incorrect.");
     is(tabpanel.querySelectorAll("tr:not(.tree-section).treeRow").length, 2,
--- a/devtools/client/netmonitor/test/browser_net_content-type.js
+++ b/devtools/client/netmonitor/test/browser_net_content-type.js
@@ -2,41 +2,41 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if different response content types are handled correctly.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let { L10N } = windowRequire("devtools/client/netmonitor/src/utils/l10n");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, CONTENT_TYPE_WITHOUT_CACHE_REQUESTS);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   for (let requestItem of document.querySelectorAll(".request-list-item")) {
     let requestsListStatus = requestItem.querySelector(".requests-list-status");
     requestItem.scrollIntoView();
     EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
-    yield waitUntil(() => requestsListStatus.title);
+    await waitUntil(() => requestsListStatus.title);
   }
 
   verifyRequestItemTarget(
     document,
     getDisplayedRequests(store.getState()),
     getSortedRequests(store.getState()).get(0),
     "GET",
     CONTENT_TYPE_SJS + "?fmt=xml",
@@ -137,40 +137,40 @@ add_task(function* () {
       type: "plain",
       fullMimeType: "text/plain",
       transferred: L10N.getFormatStrWithNumbers("networkMenu.sizeB", 324),
       size: L10N.getFormatStrWithNumbers("networkMenu.sizeKB", 10.73),
       time: true
     }
   );
 
-  yield selectIndexAndWaitForSourceEditor(monitor, 0);
-  yield testResponseTab("xml");
+  await selectIndexAndWaitForSourceEditor(monitor, 0);
+  await testResponseTab("xml");
 
-  yield selectIndexAndWaitForSourceEditor(monitor, 1);
-  yield testResponseTab("css");
+  await selectIndexAndWaitForSourceEditor(monitor, 1);
+  await testResponseTab("css");
 
-  yield selectIndexAndWaitForSourceEditor(monitor, 2);
-  yield testResponseTab("js");
+  await selectIndexAndWaitForSourceEditor(monitor, 2);
+  await testResponseTab("js");
 
-  yield selectIndexAndWaitForJSONView(3);
-  yield testResponseTab("json");
+  await selectIndexAndWaitForJSONView(3);
+  await testResponseTab("json");
 
-  yield selectIndexAndWaitForSourceEditor(monitor, 4);
-  yield testResponseTab("html");
+  await selectIndexAndWaitForSourceEditor(monitor, 4);
+  await testResponseTab("html");
 
-  yield selectIndexAndWaitForImageView(5);
-  yield testResponseTab("png");
+  await selectIndexAndWaitForImageView(5);
+  await testResponseTab("png");
 
-  yield selectIndexAndWaitForSourceEditor(monitor, 6);
-  yield testResponseTab("gzip");
+  await selectIndexAndWaitForSourceEditor(monitor, 6);
+  await testResponseTab("gzip");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
-  function* testResponseTab(type) {
+  function testResponseTab(type) {
     let tabpanel = document.querySelector("#response-panel");
 
     function checkVisibility(box) {
       is(tabpanel.querySelector(".response-error-header") === null,
         true,
         "The response error header doesn't display");
       let jsonView = tabpanel.querySelector(".tree-section .treeLabel") || {};
       is(jsonView.textContent !== L10N.getStr("jsonScopeName"),
@@ -265,31 +265,31 @@ add_task(function* () {
 
         is(text, new Array(1000).join("Hello gzip!"),
           "The text shown in the source editor is incorrect for the gzip request.");
         break;
       }
     }
   }
 
-  function* selectIndexAndWaitForJSONView(index) {
+  async function selectIndexAndWaitForJSONView(index) {
     let onResponseContent = monitor.panelWin.once(EVENTS.RECEIVED_RESPONSE_CONTENT);
     let tabpanel = document.querySelector("#response-panel");
     let waitDOM = waitForDOM(tabpanel, ".treeTable");
     store.dispatch(Actions.selectRequestByIndex(index));
-    yield waitDOM;
-    yield onResponseContent;
+    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.
-    yield waitForTick();
+    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_cookies_sorted.js
+++ b/devtools/client/netmonitor/test/browser_net_cookies_sorted.js
@@ -1,44 +1,44 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if Request-Cookies and Response-Cookies are sorted in Cookies tab.
  */
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_UNSORTED_COOKIES_SJS);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(SIMPLE_UNSORTED_COOKIES_SJS);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   tab.linkedBrowser.reload();
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield wait;
+  await wait;
 
   wait = waitForDOM(document, ".headers-overview");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
-  yield wait;
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#cookies-tab"));
 
   info("Check if Request-Cookies and Response-Cookies are sorted");
   let expectedLabelValues = ["Response cookies", "bob", "httpOnly", "value",
                              "foo", "httpOnly", "value", "tom", "httpOnly", "value",
                              "Request cookies", "bob", "foo", "tom"];
   let labelCells = document.querySelectorAll(".treeLabelCell");
   labelCells.forEach(function (val, index) {
     is(val.innerText, expectedLabelValues[index],
     "Actual label value " + val.innerText + " not equal to expected label value "
     + expectedLabelValues[index]);
   });
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_copy_as_curl.js
+++ b/devtools/client/netmonitor/test/browser_net_copy_as_curl.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if Copy as cURL works.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CURL_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CURL_URL);
   info("Starting test... ");
 
   // Different quote chars are used for Windows and POSIX
   const QUOTE = Services.appinfo.OS == "WINNT" ? "\"" : "'";
 
   // Quote a string, escape the quotes inside the string
   function quote(str) {
     return QUOTE + str.replace(new RegExp(QUOTE, "g"), `\\${QUOTE}`) + QUOTE;
@@ -39,27 +39,27 @@ add_task(function* () {
     header("Connection: keep-alive"),
     header("Pragma: no-cache"),
     header("Cache-Control: no-cache")
   ];
 
   let { document } = monitor.panelWin;
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, SIMPLE_SJS, function* (url) {
+  await ContentTask.spawn(tab.linkedBrowser, SIMPLE_SJS, async function (url) {
     content.wrappedJSObject.performRequest(url);
   });
-  yield wait;
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
   EventUtils.sendMouseEvent({ type: "contextmenu" },
     document.querySelectorAll(".request-list-item")[0]);
 
-  yield waitForClipboardPromise(function setup() {
+  await waitForClipboardPromise(function setup() {
     monitor.panelWin.parent.document
       .querySelector("#request-list-context-copy-as-curl").click();
   }, function validate(result) {
     if (typeof result !== "string") {
       return false;
     }
 
     // Different setups may produce the same command, but with the
@@ -80,10 +80,10 @@ add_task(function* () {
 
     // Must match each of the params in the middle (headers and --compressed)
     return EXPECTED_RESULT.length === actual.length &&
       EXPECTED_RESULT.every(param => actual.includes(param));
   });
 
   info("Clipboard contains a cURL command for the currently selected item's url.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_copy_headers.js
+++ b/devtools/client/netmonitor/test/browser_net_copy_headers.js
@@ -2,29 +2,29 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if copying a request's request/response headers works.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let {
     getSortedRequests,
     getSelectedRequest,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.reload();
-  yield wait;
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
 
   let requestItem = getSortedRequests(store.getState()).get(0);
   let { method, httpVersion, status, statusText } = requestItem;
 
   EventUtils.sendMouseEvent({ type: "contextmenu" },
@@ -41,17 +41,17 @@ add_task(function* () {
     "Accept-Language: " + navigator.languages.join(",") + ";q=0.5",
     "Accept-Encoding: gzip, deflate",
     "Connection: keep-alive",
     "Upgrade-Insecure-Requests: 1",
     "Pragma: no-cache",
     "Cache-Control: no-cache"
   ].join("\n");
 
-  yield waitForClipboardPromise(function setup() {
+  await waitForClipboardPromise(function setup() {
     monitor.panelWin.parent.document
       .querySelector("#request-list-context-copy-request-headers").click();
   }, function validate(result) {
     // Sometimes, a "Cookie" header is left over from other tests. Remove it:
     result = String(result).replace(/Cookie: [^\n]+\n/, "");
     return result === EXPECTED_REQUEST_HEADERS;
   });
   info("Clipboard contains the currently selected item's request headers.");
@@ -64,22 +64,22 @@ add_task(function* () {
     "connection: close",
     "server: httpd.js",
     "date: Sun, 3 May 2015 11:11:11 GMT"
   ].join("\n");
 
   EventUtils.sendMouseEvent({ type: "contextmenu" },
     document.querySelectorAll(".request-list-item")[0]);
 
-  yield waitForClipboardPromise(function setup() {
+  await waitForClipboardPromise(function setup() {
     monitor.panelWin.parent.document
       .querySelector("#response-list-context-copy-response-headers").click();
   }, function validate(result) {
     // Fake the "Last-Modified" and "Date" headers because they will vary:
     result = String(result)
       .replace(/last-modified: [^\n]+ GMT/, "last-modified: Sun, 3 May 2015 11:11:11 GMT")
       .replace(/date: [^\n]+ GMT/, "date: Sun, 3 May 2015 11:11:11 GMT");
     return result === EXPECTED_RESPONSE_HEADERS;
   });
   info("Clipboard contains the currently selected item's response headers.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_copy_image_as_data_uri.js
+++ b/devtools/client/netmonitor/test/browser_net_copy_image_as_data_uri.js
@@ -2,34 +2,34 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if copying an image as data uri works.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL);
   info("Starting test... ");
 
   let { document } = monitor.panelWin;
 
   let wait = waitForNetworkEvents(monitor, CONTENT_TYPE_WITHOUT_CACHE_REQUESTS);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[5]);
   EventUtils.sendMouseEvent({ type: "contextmenu" },
     document.querySelectorAll(".request-list-item")[5]);
 
-  yield waitForClipboardPromise(function setup() {
+  await waitForClipboardPromise(function setup() {
     monitor.panelWin.parent.document
       .querySelector("#request-list-context-copy-image-as-data-uri").click();
   }, TEST_IMAGE_DATA_URI);
 
   ok(true, "Clipboard contains the currently selected image as data uri.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_copy_params.js
+++ b/devtools/client/netmonitor/test/browser_net_copy_params.js
@@ -2,84 +2,84 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests whether copying a request item's parameters works.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(PARAMS_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(PARAMS_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 7);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
-  yield testCopyUrlParamsHidden(0, false);
-  yield testCopyUrlParams(0, "a");
-  yield testCopyPostDataHidden(0, false);
-  yield testCopyPostData(0, "{ \"foo\": \"bar\" }");
+  await testCopyUrlParamsHidden(0, false);
+  await testCopyUrlParams(0, "a");
+  await testCopyPostDataHidden(0, false);
+  await testCopyPostData(0, "{ \"foo\": \"bar\" }");
 
-  yield testCopyUrlParamsHidden(1, false);
-  yield testCopyUrlParams(1, "a=b");
-  yield testCopyPostDataHidden(1, false);
-  yield testCopyPostData(1, "{ \"foo\": \"bar\" }");
+  await testCopyUrlParamsHidden(1, false);
+  await testCopyUrlParams(1, "a=b");
+  await testCopyPostDataHidden(1, false);
+  await testCopyPostData(1, "{ \"foo\": \"bar\" }");
 
-  yield testCopyUrlParamsHidden(2, false);
-  yield testCopyUrlParams(2, "a=b");
-  yield testCopyPostDataHidden(2, false);
-  yield testCopyPostData(2, "foo=bar");
+  await testCopyUrlParamsHidden(2, false);
+  await testCopyUrlParams(2, "a=b");
+  await testCopyPostDataHidden(2, false);
+  await testCopyPostData(2, "foo=bar");
 
-  yield testCopyUrlParamsHidden(3, false);
-  yield testCopyUrlParams(3, "a");
-  yield testCopyPostDataHidden(3, false);
-  yield testCopyPostData(3, "{ \"foo\": \"bar\" }");
+  await testCopyUrlParamsHidden(3, false);
+  await testCopyUrlParams(3, "a");
+  await testCopyPostDataHidden(3, false);
+  await testCopyPostData(3, "{ \"foo\": \"bar\" }");
 
-  yield testCopyUrlParamsHidden(4, false);
-  yield testCopyUrlParams(4, "a=b");
-  yield testCopyPostDataHidden(4, false);
-  yield testCopyPostData(4, "{ \"foo\": \"bar\" }");
+  await testCopyUrlParamsHidden(4, false);
+  await testCopyUrlParams(4, "a=b");
+  await testCopyPostDataHidden(4, false);
+  await testCopyPostData(4, "{ \"foo\": \"bar\" }");
 
-  yield testCopyUrlParamsHidden(5, false);
-  yield testCopyUrlParams(5, "a=b");
-  yield testCopyPostDataHidden(5, false);
-  yield testCopyPostData(5, "?foo=bar");
+  await testCopyUrlParamsHidden(5, false);
+  await testCopyUrlParams(5, "a=b");
+  await testCopyPostDataHidden(5, false);
+  await testCopyPostData(5, "?foo=bar");
 
-  yield testCopyUrlParamsHidden(6, true);
-  yield testCopyPostDataHidden(6, true);
+  await testCopyUrlParamsHidden(6, true);
+  await testCopyPostDataHidden(6, true);
 
   return teardown(monitor);
 
   function testCopyUrlParamsHidden(index, hidden) {
     EventUtils.sendMouseEvent({ type: "mousedown" },
       document.querySelectorAll(".request-list-item")[index]);
     EventUtils.sendMouseEvent({ type: "contextmenu" },
       document.querySelectorAll(".request-list-item")[index]);
     let copyUrlParamsNode = monitor.panelWin.parent.document
       .querySelector("#request-list-context-copy-url-params");
     is(!!copyUrlParamsNode, !hidden,
       "The \"Copy URL Parameters\" context menu item should" + (hidden ? " " : " not ") +
         "be hidden.");
   }
 
-  function* testCopyUrlParams(index, queryString) {
+  async function testCopyUrlParams(index, queryString) {
     EventUtils.sendMouseEvent({ type: "mousedown" },
       document.querySelectorAll(".request-list-item")[index]);
     EventUtils.sendMouseEvent({ type: "contextmenu" },
       document.querySelectorAll(".request-list-item")[index]);
-    yield waitForClipboardPromise(function setup() {
+    await waitForClipboardPromise(function setup() {
       monitor.panelWin.parent.document
         .querySelector("#request-list-context-copy-url-params").click();
     }, queryString);
     ok(true, "The url query string copied from the selected item is correct.");
   }
 
   function testCopyPostDataHidden(index, hidden) {
     EventUtils.sendMouseEvent({ type: "mousedown" },
@@ -88,28 +88,28 @@ add_task(function* () {
       document.querySelectorAll(".request-list-item")[index]);
     let copyPostDataNode = monitor.panelWin.parent.document
       .querySelector("#request-list-context-copy-post-data");
     is(!!copyPostDataNode, !hidden,
       "The \"Copy POST Data\" context menu item should" + (hidden ? " " : " not ") +
         "be hidden.");
   }
 
-  function* testCopyPostData(index, postData) {
+  async function testCopyPostData(index, postData) {
     // Wait for formDataSections and requestPostData state are ready in redux store
     // since copyPostData API needs to read these state.
-    yield waitUntil(() => {
+    await waitUntil(() => {
       let { requests } = store.getState().requests;
       let actIDs = [...requests.keys()];
       let { formDataSections, requestPostData } = requests.get(actIDs[index]);
       return formDataSections && requestPostData;
     });
     EventUtils.sendMouseEvent({ type: "mousedown" },
       document.querySelectorAll(".request-list-item")[index]);
     EventUtils.sendMouseEvent({ type: "contextmenu" },
       document.querySelectorAll(".request-list-item")[index]);
-    yield waitForClipboardPromise(function setup() {
+    await waitForClipboardPromise(function setup() {
       monitor.panelWin.parent.document
         .querySelector("#request-list-context-copy-post-data").click();
     }, postData);
     ok(true, "The post data string copied from the selected item is correct.");
   }
 });
--- a/devtools/client/netmonitor/test/browser_net_copy_response.js
+++ b/devtools/client/netmonitor/test/browser_net_copy_response.js
@@ -2,34 +2,34 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if copying a request's response works.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL);
   info("Starting test... ");
 
   const EXPECTED_RESULT = '{ "greeting": "Hello JSON!" }';
 
   let { document } = monitor.panelWin;
 
   let wait = waitForNetworkEvents(monitor, CONTENT_TYPE_WITHOUT_CACHE_REQUESTS);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[3]);
   EventUtils.sendMouseEvent({ type: "contextmenu" },
     document.querySelectorAll(".request-list-item")[3]);
 
-  yield waitForClipboardPromise(function setup() {
+  await waitForClipboardPromise(function setup() {
     monitor.panelWin.parent.document
       .querySelector("#request-list-context-copy-response").click();
   }, EXPECTED_RESULT);
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_copy_svg_image_as_data_uri.js
+++ b/devtools/client/netmonitor/test/browser_net_copy_svg_image_as_data_uri.js
@@ -4,34 +4,34 @@
 "use strict";
 
 /**
  * Tests if copying an image as data uri works.
  */
 
 const SVG_URL = EXAMPLE_URL + "dropmarker.svg";
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CURL_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CURL_URL);
   info("Starting test... ");
 
   let { document } = monitor.panelWin;
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, SVG_URL, function* (url) {
+  await ContentTask.spawn(tab.linkedBrowser, SVG_URL, async function (url) {
     content.wrappedJSObject.performRequest(url);
   });
-  yield wait;
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
   EventUtils.sendMouseEvent({ type: "contextmenu" },
     document.querySelectorAll(".request-list-item")[0]);
 
-  yield waitForClipboardPromise(function setup() {
+  await waitForClipboardPromise(function setup() {
     monitor.panelWin.parent.document
       .querySelector("#request-list-context-copy-image-as-data-uri").click();
   }, function check(text) {
     return text.startsWith("data:") && !/undefined/.test(text);
   });
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_copy_url.js
+++ b/devtools/client/netmonitor/test/browser_net_copy_url.js
@@ -2,37 +2,37 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if copying a request's url works.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let {
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests(1);
   });
-  yield wait;
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
   EventUtils.sendMouseEvent({ type: "contextmenu" },
     document.querySelectorAll(".request-list-item")[0]);
 
   let requestItem = getSortedRequests(store.getState()).get(0);
 
-  yield waitForClipboardPromise(function setup() {
+  await waitForClipboardPromise(function setup() {
     monitor.panelWin.parent.document
       .querySelector("#request-list-context-copy-url").click();
   }, requestItem.url);
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_cors_requests.js
+++ b/devtools/client/netmonitor/test/browser_net_cors_requests.js
@@ -2,44 +2,44 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test that CORS preflight requests are displayed by network monitor
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CORS_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CORS_URL);
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 2);
 
   info("Performing a CORS request");
   let requestUrl = "http://test1.example.com" + CORS_SJS_PATH;
-  yield ContentTask.spawn(tab.linkedBrowser, requestUrl, function* (url) {
+  await ContentTask.spawn(tab.linkedBrowser, requestUrl, async function (url) {
     content.wrappedJSObject.performRequests(url, "triggering/preflight", "post-data");
   });
 
   info("Waiting until the requests appear in netmonitor");
-  yield wait;
+  await wait;
 
   info("Checking the preflight and flight methods");
   ["OPTIONS", "POST"].forEach((method, index) => {
     verifyRequestItemTarget(
       document,
       getDisplayedRequests(store.getState()),
       getSortedRequests(store.getState()).get(index),
       method,
       requestUrl
     );
   });
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_curl-utils.js
+++ b/devtools/client/netmonitor/test/browser_net_curl-utils.js
@@ -4,79 +4,79 @@
 "use strict";
 
 /**
  * Tests Curl Utils functionality.
  */
 
 const { Curl, CurlUtils } = require("devtools/client/shared/curl");
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CURL_UTILS_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CURL_UTILS_URL);
   info("Starting test... ");
 
   let { store, windowRequire, connector } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
   let {
     getLongString,
     requestData,
   } = connector;
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 5);
-  yield ContentTask.spawn(tab.linkedBrowser, SIMPLE_SJS, function* (url) {
+  await ContentTask.spawn(tab.linkedBrowser, SIMPLE_SJS, async function (url) {
     content.wrappedJSObject.performRequests(url);
   });
-  yield wait;
+  await wait;
 
   let requests = {
     get: getSortedRequests(store.getState()).get(0),
     post: getSortedRequests(store.getState()).get(1),
     patch: getSortedRequests(store.getState()).get(2),
     multipart: getSortedRequests(store.getState()).get(3),
     multipartForm: getSortedRequests(store.getState()).get(4),
   };
 
-  let data = yield createCurlData(requests.get, getLongString, requestData);
+  let data = await createCurlData(requests.get, getLongString, requestData);
   testFindHeader(data);
 
-  data = yield createCurlData(requests.post, getLongString, requestData);
+  data = await createCurlData(requests.post, getLongString, requestData);
   testIsUrlEncodedRequest(data);
   testWritePostDataTextParams(data);
   testWriteEmptyPostDataTextParams(data);
   testDataArgumentOnGeneratedCommand(data);
 
-  data = yield createCurlData(requests.patch, getLongString, requestData);
+  data = await createCurlData(requests.patch, getLongString, requestData);
   testWritePostDataTextParams(data);
   testDataArgumentOnGeneratedCommand(data);
 
-  data = yield createCurlData(requests.multipart, getLongString, requestData);
+  data = await createCurlData(requests.multipart, getLongString, requestData);
   testIsMultipartRequest(data);
   testGetMultipartBoundary(data);
   testMultiPartHeaders(data);
   testRemoveBinaryDataFromMultipartText(data);
 
-  data = yield createCurlData(requests.multipartForm, getLongString, requestData);
+  data = await createCurlData(requests.multipartForm, getLongString, requestData);
   testMultiPartHeaders(data);
 
   testGetHeadersFromMultipartText({
     postDataText: "Content-Type: text/plain\r\n\r\n",
   });
 
   if (Services.appinfo.OS != "WINNT") {
     testEscapeStringPosix();
   } else {
     testEscapeStringWin();
   }
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
 
 function testIsUrlEncodedRequest(data) {
   let isUrlEncoded = CurlUtils.isUrlEncodedRequest(data);
   ok(isUrlEncoded, "Should return true for url encoded requests.");
 }
 
 function testIsMultipartRequest(data) {
@@ -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_cyrillic-01.js
+++ b/devtools/client/netmonitor/test/browser_net_cyrillic-01.js
@@ -2,60 +2,60 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if cyrillic text is rendered correctly in the source editor.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CYRILLIC_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CYRILLIC_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   let requestItem = document.querySelectorAll(".request-list-item")[0];
   let requestsListStatus = requestItem.querySelector(".requests-list-status");
   requestItem.scrollIntoView();
   EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
-  yield waitUntil(() => requestsListStatus.title);
+  await waitUntil(() => requestsListStatus.title);
 
   verifyRequestItemTarget(
     document,
     getDisplayedRequests(store.getState()),
     getSortedRequests(store.getState()).get(0),
     "GET",
     CONTENT_TYPE_SJS + "?fmt=txt",
     {
       status: 200,
       statusText: "DA DA DA"
     }
   );
 
   wait = waitForDOM(document, "#headers-panel");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
-  yield wait;
+  await wait;
   wait = waitForDOM(document, "#response-panel .CodeMirror-code");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#response-tab"));
-  yield wait;
+  await wait;
   let text = document.querySelector(".CodeMirror-line").textContent;
 
   ok(text.includes("\u0411\u0440\u0430\u0442\u0430\u043d"),
     "The text shown in the source editor is correct.");
 
   return teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_cyrillic-02.js
+++ b/devtools/client/netmonitor/test/browser_net_cyrillic-02.js
@@ -3,55 +3,55 @@
 
 "use strict";
 
 /**
  * Tests if cyrillic text is rendered correctly in the source editor
  * when loaded directly from an HTML page.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CYRILLIC_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CYRILLIC_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.reload();
-  yield wait;
+  await wait;
 
   let requestItem = document.querySelectorAll(".request-list-item")[0];
   let requestsListStatus = requestItem.querySelector(".requests-list-status");
   requestItem.scrollIntoView();
   EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
-  yield waitUntil(() => requestsListStatus.title);
+  await waitUntil(() => requestsListStatus.title);
 
   verifyRequestItemTarget(
     document,
     getDisplayedRequests(store.getState()),
     getSortedRequests(store.getState()).get(0),
     "GET",
     CYRILLIC_URL,
     {
       status: 200,
       statusText: "OK"
     });
 
   wait = waitForDOM(document, "#headers-panel");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
-  yield wait;
+  await wait;
   wait = waitForDOM(document, "#response-panel .CodeMirror-code");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#response-tab"));
-  yield wait;
+  await wait;
 
   // CodeMirror will only load lines currently in view to the DOM. getValue()
   // retrieves all lines pending render after a user begins scrolling.
   let text = document.querySelector(".CodeMirror").CodeMirror.getValue();
 
   ok(text.includes("\u0411\u0440\u0430\u0442\u0430\u043d"),
     "The text shown in the source editor is correct.");
 
--- a/devtools/client/netmonitor/test/browser_net_filter-01.js
+++ b/devtools/client/netmonitor/test/browser_net_filter-01.js
@@ -123,18 +123,18 @@ const EXPECTED_REQUESTS = [
     data: {
       fuzzyUrl: true,
       status: 101,
       statusText: "Switching Protocols",
     }
   }
 ];
 
-add_task(function* () {
-  let { monitor } = yield initNetMonitor(FILTERING_URL);
+add_task(async function () {
+  let { monitor } = await initNetMonitor(FILTERING_URL);
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSelectedRequest,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
@@ -143,186 +143,186 @@ add_task(function* () {
   function setFreetextFilter(value) {
     store.dispatch(Actions.setRequestFilterText(value));
   }
 
   info("Starting test... ");
 
   let wait = waitForNetworkEvents(monitor, 9);
   loadCommonFrameScript();
-  yield performRequestsInContent(REQUESTS_WITH_MEDIA_AND_FLASH_AND_WS);
-  yield wait;
+  await performRequestsInContent(REQUESTS_WITH_MEDIA_AND_FLASH_AND_WS);
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
 
   isnot(getSelectedRequest(store.getState()), null,
     "There should be a selected item in the requests menu.");
   is(getSelectedIndex(store.getState()), 0,
     "The first item should be selected in the requests menu.");
   is(!!document.querySelector(".network-details-panel"), true,
     "The network details panel should render correctly.");
 
   // First test with single filters...
   testFilterButtons(monitor, "all");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-html-button"));
   testFilterButtons(monitor, "html");
-  yield testContents([1, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([1, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Reset filters
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-css-button"));
   testFilterButtons(monitor, "css");
-  yield testContents([0, 1, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 1, 0, 0, 0, 0, 0, 0, 0]);
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-js-button"));
   testFilterButtons(monitor, "js");
-  yield testContents([0, 0, 1, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 1, 0, 0, 0, 0, 0, 0]);
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-xhr-button"));
   testFilterButtons(monitor, "xhr");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 0]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 0]);
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   EventUtils.sendMouseEvent({ type: "click" },
      document.querySelector(".requests-list-filter-fonts-button"));
   testFilterButtons(monitor, "fonts");
-  yield testContents([0, 0, 0, 1, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 1, 0, 0, 0, 0, 0]);
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-images-button"));
   testFilterButtons(monitor, "images");
-  yield testContents([0, 0, 0, 0, 1, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 1, 0, 0, 0, 0]);
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-media-button"));
   testFilterButtons(monitor, "media");
-  yield testContents([0, 0, 0, 0, 0, 1, 1, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 1, 1, 0, 0]);
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-ws-button"));
   testFilterButtons(monitor, "ws");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 1]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 1]);
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
 
   testFilterButtons(monitor, "all");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   // Text in filter box that matches nothing should hide all.
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   setFreetextFilter("foobar");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Text in filter box that matches should filter out everything else.
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   setFreetextFilter("sample");
-  yield testContents([1, 1, 1, 0, 0, 0, 0, 0, 0]);
+  await testContents([1, 1, 1, 0, 0, 0, 0, 0, 0]);
 
   // Text in filter box that matches should filter out everything else.
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   setFreetextFilter("SAMPLE");
-  yield testContents([1, 1, 1, 0, 0, 0, 0, 0, 0]);
+  await testContents([1, 1, 1, 0, 0, 0, 0, 0, 0]);
 
   // Test negative filtering (only show unmatched items)
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   setFreetextFilter("-sample");
-  yield testContents([0, 0, 0, 1, 1, 1, 1, 1, 1]);
+  await testContents([0, 0, 0, 1, 1, 1, 1, 1, 1]);
 
   // ...then combine multiple filters together.
 
   // Enable filtering for html and css; should show request of both type.
   setFreetextFilter("");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-html-button"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-css-button"));
   testFilterButtonsCustom(monitor, [0, 1, 1, 0, 0, 0, 0, 0, 0, 0]);
-  yield testContents([1, 1, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([1, 1, 0, 0, 0, 0, 0, 0, 0]);
 
   // Html and css filter enabled and text filter should show just the html and css match.
   // Should not show both the items matching the button plus the items matching the text.
   setFreetextFilter("sample");
-  yield testContents([1, 1, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([1, 1, 0, 0, 0, 0, 0, 0, 0]);
   setFreetextFilter("");
   testFilterButtonsCustom(monitor, [0, 1, 1, 0, 0, 0, 0, 0, 0, 0]);
-  yield testContents([1, 1, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([1, 1, 0, 0, 0, 0, 0, 0, 0]);
 
   // Disable some filters. Only one left active.
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-css-button"));
   testFilterButtons(monitor, "html");
-  yield testContents([1, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([1, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Disable last active filter. Should toggle to all.
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-html-button"));
   testFilterButtons(monitor, "all");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   // Enable few filters and click on all. Only "all" should be checked.
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-html-button"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-css-button"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-ws-button"));
   testFilterButtonsCustom(monitor, [0, 1, 1, 0, 0, 0, 0, 0, 1, 0]);
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   testFilterButtons(monitor, "all");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   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
@@ -124,18 +124,18 @@ const EXPECTED_REQUESTS = [
     data: {
       fuzzyUrl: true,
       status: 101,
       statusText: "Switching Protocols",
     }
   }
 ];
 
-add_task(function* () {
-  let { monitor } = yield initNetMonitor(FILTERING_URL);
+add_task(async function () {
+  let { monitor } = await initNetMonitor(FILTERING_URL);
   info("Starting test... ");
 
   // It seems that this test may be slow on Ubuntu builds running on ec2.
   requestLongerTimeout(2);
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
@@ -143,80 +143,80 @@ add_task(function* () {
     getSelectedRequest,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 9);
   loadCommonFrameScript();
-  yield performRequestsInContent(REQUESTS_WITH_MEDIA_AND_FLASH_AND_WS);
-  yield wait;
+  await performRequestsInContent(REQUESTS_WITH_MEDIA_AND_FLASH_AND_WS);
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
 
   isnot(getSelectedRequest(store.getState()), null,
     "There should be a selected item in the requests menu.");
   is(getSelectedIndex(store.getState()), 0,
     "The first item should be selected in the requests menu.");
   is(!!document.querySelector(".network-details-panel"), true,
     "The network details panel should be visible after toggle button was pressed.");
 
   testFilterButtons(monitor, "all");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   info("Testing html filtering.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-html-button"));
   testFilterButtons(monitor, "html");
-  yield testContents([1, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([1, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   info("Performing more requests.");
   wait = waitForNetworkEvents(monitor, 9);
-  yield performRequestsInContent(REQUESTS_WITH_MEDIA_AND_FLASH_AND_WS);
-  yield wait;
+  await performRequestsInContent(REQUESTS_WITH_MEDIA_AND_FLASH_AND_WS);
+  await wait;
 
   info("Testing html filtering again.");
   testFilterButtons(monitor, "html");
-  yield testContents([1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   info("Performing more requests.");
   wait = waitForNetworkEvents(monitor, 9);
-  yield performRequestsInContent(REQUESTS_WITH_MEDIA_AND_FLASH_AND_WS);
-  yield wait;
+  await performRequestsInContent(REQUESTS_WITH_MEDIA_AND_FLASH_AND_WS);
+  await wait;
 
   info("Testing html filtering again.");
   testFilterButtons(monitor, "html");
-  yield testContents([1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+  await testContents([1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
                       0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   info("Resetting filters.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-all-button"));
   testFilterButtons(monitor, "all");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   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-03.js
+++ b/devtools/client/netmonitor/test/browser_net_filter-03.js
@@ -15,18 +15,18 @@ const BASIC_REQUESTS = [
 
 const REQUESTS_WITH_MEDIA = BASIC_REQUESTS.concat([
   { url: "sjs_content-type-test-server.sjs?fmt=font" },
   { url: "sjs_content-type-test-server.sjs?fmt=image" },
   { url: "sjs_content-type-test-server.sjs?fmt=audio" },
   { url: "sjs_content-type-test-server.sjs?fmt=video" },
 ]);
 
-add_task(function* () {
-  let { monitor } = yield initNetMonitor(FILTERING_URL);
+add_task(async function () {
+  let { monitor } = await initNetMonitor(FILTERING_URL);
   info("Starting test... ");
 
   // It seems that this test may be slow on Ubuntu builds running on ec2.
   requestLongerTimeout(2);
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
@@ -41,18 +41,18 @@ add_task(function* () {
   // body than the other HTML requests performed later during the test.
   let requests = Cu.cloneInto(REQUESTS_WITH_MEDIA, {});
   let newres = "res=<p>" + new Array(10).join(Math.random(10)) + "</p>";
   requests[0].url = requests[0].url.replace("res=undefined", newres);
 
   loadCommonFrameScript();
 
   let wait = waitForNetworkEvents(monitor, 7);
-  yield performRequestsInContent(requests);
-  yield wait;
+  await performRequestsInContent(requests);
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
 
   isnot(getSelectedRequest(store.getState()), null,
     "There should be a selected item in the requests menu.");
   is(getSelectedIndex(store.getState()), 0,
     "The first item should be selected in the requests menu.");
@@ -72,34 +72,34 @@ add_task(function* () {
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-html-button"));
   testFilterButtons(monitor, "html");
   testContents([6, 4, 5, 0, 1, 2, 3], 1, 6);
 
   info("Performing more requests.");
   wait = waitForNetworkEvents(monitor, 7);
   performRequestsInContent(REQUESTS_WITH_MEDIA);
-  yield wait;
+  await wait;
 
   info("Testing html filtering again.");
   resetSorting();
   testFilterButtons(monitor, "html");
   testContents([8, 13, 9, 11, 10, 12, 0, 4, 1, 5, 2, 6, 3, 7], 2, 13);
 
   info("Performing more requests.");
   performRequestsInContent(REQUESTS_WITH_MEDIA);
-  yield waitForNetworkEvents(monitor, 7);
+  await waitForNetworkEvents(monitor, 7);
 
   info("Testing html filtering again.");
   resetSorting();
   testFilterButtons(monitor, "html");
   testContents([12, 13, 20, 14, 16, 18, 15, 17, 19, 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11],
     3, 20);
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   function resetSorting() {
     EventUtils.sendMouseEvent({ type: "click" },
       document.querySelector("#requests-list-waterfall-button"));
     EventUtils.sendMouseEvent({ type: "click" },
       document.querySelector("#requests-list-contentSize-button"));
   }
 
--- a/devtools/client/netmonitor/test/browser_net_filter-04.js
+++ b/devtools/client/netmonitor/test/browser_net_filter-04.js
@@ -24,44 +24,44 @@ const REQUESTS_WITH_MEDIA_AND_FLASH = RE
   { url: "sjs_content-type-test-server.sjs?fmt=flash" },
 ]);
 
 const REQUESTS_WITH_MEDIA_AND_FLASH_AND_WS = REQUESTS_WITH_MEDIA_AND_FLASH.concat([
   /* "Upgrade" is a reserved header and can not be set on XMLHttpRequest */
   { url: "sjs_content-type-test-server.sjs?fmt=ws" },
 ]);
 
-add_task(function* () {
+add_task(async function () {
   Services.prefs.setCharPref("devtools.netmonitor.filters",
                              '["bogus", "js", "alsobogus"]');
 
-  let { monitor } = yield initNetMonitor(FILTERING_URL);
+  let { monitor } = await initNetMonitor(FILTERING_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let { Prefs } = windowRequire("devtools/client/netmonitor/src/utils/prefs");
 
   store.dispatch(Actions.batchEnable(false));
 
   is(Prefs.filters.length, 3,
     "All the filter types should be loaded.");
   is(Prefs.filters[0], "bogus",
     "The first filter type is invalid, but loaded anyway.");
 
   let wait = waitForNetworkEvents(monitor, 9);
   loadCommonFrameScript();
-  yield performRequestsInContent(REQUESTS_WITH_MEDIA_AND_FLASH_AND_WS);
-  yield wait;
+  await performRequestsInContent(REQUESTS_WITH_MEDIA_AND_FLASH_AND_WS);
+  await wait;
 
   testFilterButtons(monitor, "js");
   ok(true, "Only the correct filter type was taken into consideration.");
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-html-button"));
 
   let filters = Services.prefs.getCharPref("devtools.netmonitor.filters");
   is(filters, '["html","js"]',
     "The filters preferences were saved directly after the click and only" +
     " with the valid.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_filter-flags.js
+++ b/devtools/client/netmonitor/test/browser_net_filter-flags.js
@@ -131,18 +131,18 @@ const EXPECTED_REQUESTS = [
       statusText: "Not Modified",
       displayedStatus: "304",
       type: "plain",
       fullMimeType: "text/plain; charset=utf-8"
     }
   },
 ];
 
-add_task(function* () {
-  let { monitor } = yield initNetMonitor(FILTERING_URL);
+add_task(async function () {
+  let { monitor } = await initNetMonitor(FILTERING_URL);
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
@@ -162,236 +162,236 @@ add_task(function* () {
     filterBox.value = "";
     type(value);
   }
 
   info("Starting test... ");
 
   let waitNetwork = waitForNetworkEvents(monitor, REQUESTS.length);
   loadCommonFrameScript();
-  yield performRequestsInContent(REQUESTS);
-  yield waitNetwork;
+  await performRequestsInContent(REQUESTS);
+  await waitNetwork;
 
   // Test running flag once requests finish running
   setFreetextFilter("is:running");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test cached flag
   setFreetextFilter("is:from-cache");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
 
   setFreetextFilter("is:cached");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
 
   // Test negative cached flag
   setFreetextFilter("-is:from-cache");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 0]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 0]);
 
   setFreetextFilter("-is:cached");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 0]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 0]);
 
   // Test status-code flag
   setFreetextFilter("status-code:200");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 0]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 0]);
 
   // Test status-code negative flag
   setFreetextFilter("-status-code:200");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
 
   // Test mime-type flag
   setFreetextFilter("mime-type:HtmL");
-  yield testContents([1, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([1, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test mime-type negative flag
   setFreetextFilter("-mime-type:HtmL");
-  yield testContents([0, 0, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([0, 0, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   // Test method flag
   setFreetextFilter("method:get");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   // Test unmatched method flag
   setFreetextFilter("method:post");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test scheme flag (all requests are http)
   setFreetextFilter("scheme:http");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   setFreetextFilter("scheme:https");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test regex filter
   setFreetextFilter("regexp:content.*?Sam");
-  yield testContents([1, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([1, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test set-cookie-name flag
   setFreetextFilter("set-cookie-name:name2");
-  yield testContents([0, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   setFreetextFilter("set-cookie-name:not-existing");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test set-cookie-value flag
   setFreetextFilter("set-cookie-value:value2");
-  yield testContents([0, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   setFreetextFilter("set-cookie-value:not-existing");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test set-cookie-domain flag
   setFreetextFilter("set-cookie-domain:.example.com");
-  yield testContents([0, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   setFreetextFilter("set-cookie-domain:.foo.example.com");
-  yield testContents([0, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   setFreetextFilter("set-cookie-domain:.not-existing.example.com");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test size
   setFreetextFilter("size:-1");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   setFreetextFilter("size:0");
-  yield testContents([0, 0, 0, 0, 1, 1, 1, 1, 0, 1]);
+  await testContents([0, 0, 0, 0, 1, 1, 1, 1, 0, 1]);
 
   setFreetextFilter("size:34");
-  yield testContents([0, 0, 1, 1, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 1, 1, 0, 0, 0, 0, 0, 0]);
 
   // Testing the lower bound
   setFreetextFilter("size:9.659k");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 1, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 1, 0]);
 
   // Testing the actual value
   setFreetextFilter("size:10989");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 1, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 1, 0]);
 
   // Testing the upper bound
   setFreetextFilter("size:11.804k");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 1, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 1, 0]);
 
   // Test transferred
   setFreetextFilter("transferred:200");
-  yield testContents([0, 0, 0, 0, 1, 1, 1, 1, 0, 0]);
+  await testContents([0, 0, 0, 0, 1, 1, 1, 1, 0, 0]);
 
   setFreetextFilter("transferred:234");
-  yield testContents([1, 0, 1, 0, 0, 0, 0, 0, 0, 1]);
+  await testContents([1, 0, 1, 0, 0, 0, 0, 0, 0, 1]);
 
   setFreetextFilter("transferred:248");
-  yield testContents([0, 0, 1, 1, 0, 0, 0, 0, 0, 1]);
+  await testContents([0, 0, 1, 1, 0, 0, 0, 0, 0, 1]);
 
   // Test larger-than
   setFreetextFilter("larger-than:-1");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   setFreetextFilter("larger-than:0");
-  yield testContents([1, 1, 1, 1, 0, 0, 0, 0, 1, 0]);
+  await testContents([1, 1, 1, 1, 0, 0, 0, 0, 1, 0]);
 
   setFreetextFilter("larger-than:33");
-  yield testContents([0, 0, 1, 1, 0, 0, 0, 0, 1, 0]);
+  await testContents([0, 0, 1, 1, 0, 0, 0, 0, 1, 0]);
 
   setFreetextFilter("larger-than:34");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 1, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 1, 0]);
 
   setFreetextFilter("larger-than:10.73k");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 1, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 1, 0]);
 
   setFreetextFilter("larger-than:10.732k");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test transferred-larger-than
   setFreetextFilter("transferred-larger-than:-1");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   setFreetextFilter("transferred-larger-than:214");
-  yield testContents([1, 1, 1, 1, 0, 0, 0, 0, 1, 1]);
+  await testContents([1, 1, 1, 1, 0, 0, 0, 0, 1, 1]);
 
   setFreetextFilter("transferred-larger-than:247");
-  yield testContents([0, 1, 1, 1, 0, 0, 0, 0, 1, 0]);
+  await testContents([0, 1, 1, 1, 0, 0, 0, 0, 1, 0]);
 
   setFreetextFilter("transferred-larger-than:248");
-  yield testContents([0, 1, 0, 1, 0, 0, 0, 0, 1, 0]);
+  await testContents([0, 1, 0, 1, 0, 0, 0, 0, 1, 0]);
 
   setFreetextFilter("transferred-larger-than:10.73k");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test cause
   setFreetextFilter("cause:xhr");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   setFreetextFilter("cause:script");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test has-response-header
   setFreetextFilter("has-response-header:Content-Type");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   setFreetextFilter("has-response-header:Last-Modified");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test remote-ip
   setFreetextFilter("remote-ip:127.0.0.1");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   setFreetextFilter("remote-ip:192.168.1.2");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test domain
   setFreetextFilter("domain:example.com");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   setFreetextFilter("domain:wrongexample.com");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test protocol
   setFreetextFilter("protocol:http/1");
-  yield testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
+  await testContents([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
 
   setFreetextFilter("protocol:http/2");
-  yield testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+  await testContents([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 
   // Test mixing flags
   setFreetextFilter("-mime-type:HtmL status-code:200");
-  yield testContents([0, 0, 1, 1, 1, 1, 1, 1, 1, 0]);
+  await testContents([0, 0, 1, 1, 1, 1, 1, 1, 1, 0]);
 
-  yield teardown(monitor);
+  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_footer-summary.js
+++ b/devtools/client/netmonitor/test/browser_net_footer-summary.js
@@ -2,56 +2,56 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test if the summary text displayed in the network requests menu footer is correct.
  */
 
-add_task(function* () {
+add_task(async function () {
   const {
     getFormattedSize,
     getFormattedTime
   } = require("devtools/client/netmonitor/src/utils/format-utils");
 
   requestLongerTimeout(2);
 
-  let { tab, monitor } = yield initNetMonitor(FILTERING_URL);
+  let { tab, monitor } = await initNetMonitor(FILTERING_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let { getDisplayedRequestsSummary } =
     windowRequire("devtools/client/netmonitor/src/selectors/index");
   let { L10N } = windowRequire("devtools/client/netmonitor/src/utils/l10n");
   let { PluralForm } = windowRequire("devtools/shared/plural-form");
 
   store.dispatch(Actions.batchEnable(false));
   testStatus();
 
   for (let i = 0; i < 2; i++) {
     info(`Performing requests in batch #${i}`);
     let wait = waitForNetworkEvents(monitor, 8);
-    yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+    await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
       content.wrappedJSObject.performRequests('{ "getMedia": true, "getFlash": true }');
     });
-    yield wait;
+    await wait;
 
     testStatus();
 
     let buttons = ["html", "css", "js", "xhr", "fonts", "images", "media"];
     for (let button of buttons) {
       let buttonEl = document.querySelector(`.requests-list-filter-${button}-button`);
       EventUtils.sendMouseEvent({ type: "click" }, buttonEl);
       testStatus();
     }
   }
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   function testStatus() {
     let state = store.getState();
     let totalRequestsCount = state.requests.requests.size;
     let requestsSummary = getDisplayedRequestsSummary(state);
     info(`Current requests: ${requestsSummary.count} of ${totalRequestsCount}.`);
 
     let valueCount = document.querySelector(".requests-list-network-summary-count")
--- a/devtools/client/netmonitor/test/browser_net_frame.js
+++ b/devtools/client/netmonitor/test/browser_net_frame.js
@@ -141,48 +141,48 @@ const EXPECTED_REQUESTS_SUB = [
     causeType: "beacon",
     causeUri: SUB_URL,
     stack: [{ fn: "performBeaconRequest", file: SUB_FILE_NAME, line: 32 }]
   },
 ];
 
 const REQUEST_COUNT = EXPECTED_REQUESTS_TOP.length + EXPECTED_REQUESTS_SUB.length;
 
-add_task(function* () {
+add_task(async function () {
   // Async stacks aren't on by default in all builds
-  yield SpecialPowers.pushPrefEnv({ set: [["javascript.options.asyncstack", true]] });
+  await SpecialPowers.pushPrefEnv({ set: [["javascript.options.asyncstack", true]] });
 
   // the initNetMonitor function clears the network request list after the
   // page is loaded. That's why we first load a bogus page from SIMPLE_URL,
   // and only then load the real thing from TOP_URL - we want to catch
   // all the requests the page is making, not only the XHRs.
   // We can't use about:blank here, because initNetMonitor checks that the
   // page has actually made at least one request.
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
+  let { tab, monitor } = await initNetMonitor(SIMPLE_URL);
 
   let { document, store, windowRequire, connector } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   tab.linkedBrowser.loadURI(TOP_URL, null, null);
 
-  yield waitForNetworkEvents(monitor, REQUEST_COUNT);
+  await waitForNetworkEvents(monitor, REQUEST_COUNT);
 
   is(store.getState().requests.requests.size, REQUEST_COUNT,
     "All the page events should be recorded.");
 
   // Fetch stack-trace data from the backend and wait till
   // all packets are received.
   let requests = getSortedRequests(store.getState());
-  yield Promise.all(requests.map(requestItem =>
+  await Promise.all(requests.map(requestItem =>
     connector.requestData(requestItem.id, "stackTrace")));
 
   // While there is a defined order for requests in each document separately, the requests
   // from different documents may interleave in various ways that change per test run, so
   // there is not a single order when considering all the requests together.
   let currentTop = 0;
   let currentSub = 0;
   for (let i = 0; i < REQUEST_COUNT; i++) {
@@ -228,10 +228,10 @@ add_task(function* () {
             `Request #${i} has the correct async cause on JS stack frame #${j}`);
         });
       }
     } else {
       is(stackLen, 0, `Request #${i} (${causeType}) has an empty stacktrace`);
     }
   }
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_header-docs.js
+++ b/devtools/client/netmonitor/test/browser_net_header-docs.js
@@ -2,34 +2,34 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if "Learn More" links are correctly displayed
  * next to headers.
  */
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(POST_DATA_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(POST_DATA_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
   let { getHeadersURL } = require("devtools/client/netmonitor/src/utils/mdn-utils");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 2);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelectorAll(".request-list-item")[0]);
 
   testShowLearnMore(getSortedRequests(store.getState()).get(0));
 
   return teardown(monitor);
 
--- a/devtools/client/netmonitor/test/browser_net_headers-alignment.js
+++ b/devtools/client/netmonitor/test/browser_net_headers-alignment.js
@@ -24,17 +24,17 @@ add_task(async function () {
   let headers = document.querySelector(".requests-list-headers");
   ok(headers, "Headers element exists as expected.");
 
   await waitForRequestsToOverflowContainer(monitor, requestsContainer);
 
   testColumnsAlignment(headers, requestsContainer);
 
   // Stop doing requests.
-  await ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.stopRequests();
   });
 
   // Done: clean up.
   return teardown(monitor);
 
   function waitForRequestListToAppear() {
     info("Waiting until the empty notice disappears and is replaced with the list");
--- a/devtools/client/netmonitor/test/browser_net_headers_sorted.js
+++ b/devtools/client/netmonitor/test/browser_net_headers_sorted.js
@@ -3,38 +3,38 @@
 
 "use strict";
 
 /**
  * Tests if Request-Headers and Response-Headers are sorted in Headers tab.
  * The test also verifies that headers with the same name and headers
  * with an empty value are also displayed.
  */
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_SJS);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(SIMPLE_SJS);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.reload();
-  yield wait;
+  await wait;
 
   wait = waitForDOM(document, ".headers-overview");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
-  yield wait;
+  await wait;
 
-  yield waitUntil(() => {
+  await waitUntil(() => {
     let request = getSortedRequests(store.getState()).get(0);
     return request.requestHeaders && request.responseHeaders;
   });
 
   info("Check if Request-Headers and Response-Headers are sorted");
   let expectedResponseHeaders = ["cache-control", "connection", "content-length",
                                  "content-type", "date", "expires", "foo-bar",
                                  "foo-bar", "foo-bar", "pragma", "server", "set-cookie",
@@ -57,10 +57,10 @@ add_task(function* () {
   }
 
   is(actualResponseHeaders.toString(), expectedResponseHeaders.toString(),
     "Response Headers are sorted");
 
   is(actualRequestHeaders.toString(), expectedRequestHeaders.toString(),
     "Request Headers are sorted");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_image-tooltip.js
+++ b/devtools/client/netmonitor/test/browser_net_image-tooltip.js
@@ -4,94 +4,94 @@
 "use strict";
 
 const IMAGE_TOOLTIP_URL = EXAMPLE_URL + "html_image-tooltip-test-page.html";
 const IMAGE_TOOLTIP_REQUESTS = 1;
 
 /**
  * Tests if image responses show a popup in the requests menu when hovered.
  */
-add_task(function* test() {
-  let { tab, monitor } = yield initNetMonitor(IMAGE_TOOLTIP_URL);
+add_task(async function test() {
+  let { tab, monitor } = await initNetMonitor(IMAGE_TOOLTIP_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire, connector } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let { triggerActivity } = connector;
   let { ACTIVITY_TYPE } = windowRequire("devtools/client/netmonitor/src/constants");
   let toolboxDoc = monitor.panelWin.parent.document;
 
   store.dispatch(Actions.batchEnable(false));
 
   let onEvents = waitForNetworkEvents(monitor, IMAGE_TOOLTIP_REQUESTS);
-  yield performRequests();
-  yield onEvents;
+  await performRequests();
+  await onEvents;
 
   info("Checking the image thumbnail after a few requests were made...");
-  yield showTooltipAndVerify(document.querySelectorAll(".request-list-item")[0]);
+  await showTooltipAndVerify(document.querySelectorAll(".request-list-item")[0]);
 
   // Hide tooltip before next test, to avoid the situation that tooltip covers
   // the icon for the request of the next test.
   info("Checking the image thumbnail gets hidden...");
-  yield hideTooltipAndVerify(document.querySelectorAll(".request-list-item")[0]);
+  await hideTooltipAndVerify(document.querySelectorAll(".request-list-item")[0]);
 
   // +1 extra document reload
   onEvents = waitForNetworkEvents(monitor, IMAGE_TOOLTIP_REQUESTS + 1);
 
   info("Reloading the debuggee and performing all requests again...");
-  yield triggerActivity(ACTIVITY_TYPE.RELOAD.WITH_CACHE_ENABLED);
-  yield performRequests();
-  yield onEvents;
+  await triggerActivity(ACTIVITY_TYPE.RELOAD.WITH_CACHE_ENABLED);
+  await performRequests();
+  await onEvents;
 
   info("Checking the image thumbnail after a reload.");
-  yield showTooltipAndVerify(document.querySelectorAll(".request-list-item")[1]);
+  await showTooltipAndVerify(document.querySelectorAll(".request-list-item")[1]);
 
   info("Checking if the image thumbnail is hidden when mouse leaves the menu widget");
   let requestsListContents = document.querySelector(".requests-list-contents");
   EventUtils.synthesizeMouse(requestsListContents, 0, 0, { type: "mousemove" },
                              monitor.panelWin);
-  yield waitUntil(() => !toolboxDoc.querySelector(".tooltip-container.tooltip-visible"));
+  await waitUntil(() => !toolboxDoc.querySelector(".tooltip-container.tooltip-visible"));
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   function performRequests() {
-    return ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+    return ContentTask.spawn(tab.linkedBrowser, {}, async function () {
       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_json-b64.js
+++ b/devtools/client/netmonitor/test/browser_net_json-b64.js
@@ -2,38 +2,38 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if JSON responses encoded in base64 are handled correctly.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
-  let { tab, monitor } = yield initNetMonitor(JSON_B64_URL);
+  let { tab, monitor } = await initNetMonitor(JSON_B64_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   wait = waitForDOM(document, "#response-panel .CodeMirror-code");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#response-tab"));
-  yield wait;
+  await wait;
 
   let tabpanel = document.querySelector("#response-panel");
 
   is(tabpanel.querySelector(".response-error-header") === null, true,
     "The response error header doesn't have the intended visibility.");
   let jsonView = tabpanel.querySelector(".tree-section .treeLabel") || {};
   is(jsonView.textContent === L10N.getStr("jsonScopeName"), true,
     "The response json view has the intended visibility.");
@@ -54,10 +54,10 @@ add_task(function* () {
   let values = tabpanel
     .querySelectorAll("tr:not(.tree-section) .treeValueCell .objectBox");
 
   is(labels[0].textContent, "greeting",
     "The first json property name was incorrect.");
   is(values[0].textContent, "This is a base 64 string.",
     "The first json property value was incorrect.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_json-long.js
+++ b/devtools/client/netmonitor/test/browser_net_json-long.js
@@ -2,45 +2,45 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if very long JSON responses are handled correctly.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { tab, monitor } = yield initNetMonitor(JSON_LONG_URL);
+  let { tab, monitor } = await initNetMonitor(JSON_LONG_URL);
   info("Starting test... ");
 
   // This is receiving over 80 KB of json and will populate over 6000 items
   // in a variables view instance. Debug builds are slow.
   requestLongerTimeout(4);
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   let requestItem = document.querySelector(".request-list-item");
   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(0),
     "GET",
     CONTENT_TYPE_SJS + "?fmt=json-long",
     {
@@ -53,21 +53,21 @@ add_task(function* () {
       time: true
     });
 
   wait = waitForDOM(document, "#response-panel .CodeMirror-code");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#response-tab"));
-  yield wait;
+  await wait;
 
   testResponseTab();
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   function testResponseTab() {
     let tabpanel = document.querySelector("#response-panel");
 
     is(tabpanel.querySelector(".response-error-header") === null, true,
       "The response error header doesn't have the intended visibility.");
     let jsonView = tabpanel.querySelector(".tree-section .treeLabel") || {};
     is(jsonView.textContent === L10N.getStr("jsonScopeName"), true,
--- a/devtools/client/netmonitor/test/browser_net_json-malformed.js
+++ b/devtools/client/netmonitor/test/browser_net_json-malformed.js
@@ -2,40 +2,40 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if malformed JSON responses are handled correctly.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
-  let { tab, monitor } = yield initNetMonitor(JSON_MALFORMED_URL);
+  let { tab, monitor } = await initNetMonitor(JSON_MALFORMED_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   let requestItem = document.querySelector(".request-list-item");
   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(0),
     "GET",
     CONTENT_TYPE_SJS + "?fmt=json-malformed",
     {
@@ -45,17 +45,17 @@ add_task(function* () {
       fullMimeType: "text/json; charset=utf-8"
     });
 
   wait = waitForDOM(document, "#response-panel .CodeMirror-code");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#response-tab"));
-  yield wait;
+  await wait;
 
   let tabpanel = document.querySelector("#response-panel");
   is(tabpanel.querySelector(".response-error-header") === null, false,
     "The response error header doesn't have the intended visibility.");
   is(tabpanel.querySelector(".response-error-header").textContent,
     "SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data" +
       " at line 1 column 40 of the JSON data",
     "The response error header doesn't have the intended text content.");
@@ -70,10 +70,10 @@ add_task(function* () {
     "The response editor has the intended visibility.");
   is(tabpanel.querySelector(".response-image-box") === null, true,
     "The response image box doesn't have the intended visibility.");
 
   is(document.querySelector(".CodeMirror-line").textContent,
     "{ \"greeting\": \"Hello malformed JSON!\" },",
     "The text shown in the source editor is incorrect.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_json-null.js
+++ b/devtools/client/netmonitor/test/browser_net_json-null.js
@@ -2,33 +2,33 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if JSON responses containing null values are properly displayed.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(JSON_BASIC_URL + "?name=null");
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(JSON_BASIC_URL + "?name=null");
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let { L10N } = windowRequire("devtools/client/netmonitor/src/utils/l10n");
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
-  yield openResponsePanel();
+  await openResponsePanel();
   checkResponsePanelDisplaysJSON();
 
   let tabpanel = document.querySelector("#response-panel");
   is(tabpanel.querySelectorAll(".tree-section").length, 2,
     "There should be 2 tree sections displayed in this tabpanel.");
   is(tabpanel.querySelectorAll(".treeRow:not(.tree-section)").length, 1,
     "There should be 1 json properties displayed in this tabpanel.");
   is(tabpanel.querySelectorAll(".empty-notice").length, 0,
@@ -37,17 +37,17 @@ add_task(function* () {
   let labels = tabpanel
     .querySelectorAll("tr:not(.tree-section) .treeLabelCell .treeLabel");
   let values = tabpanel
     .querySelectorAll("tr:not(.tree-section) .treeValueCell .objectBox");
 
   is(labels[0].textContent, "greeting", "The first json property name was incorrect.");
   is(values[0].textContent, "null", "The first json property value was incorrect.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   /**
    * Helper to assert that the response panel found in the provided document is currently
    * showing a preview of a JSON object.
    */
   function checkResponsePanelDisplaysJSON() {
     let panel = document.querySelector("#response-panel");
     is(panel.querySelector(".response-error-header") === null, true,
--- a/devtools/client/netmonitor/test/browser_net_json_custom_mime.js
+++ b/devtools/client/netmonitor/test/browser_net_json_custom_mime.js
@@ -2,40 +2,40 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if JSON responses with unusal/custom MIME types are handled correctly.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(JSON_CUSTOM_MIME_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(JSON_CUSTOM_MIME_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let { L10N } = windowRequire("devtools/client/netmonitor/src/utils/l10n");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   let requestItem = document.querySelector(".request-list-item");
   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(0),
     "GET",
     CONTENT_TYPE_SJS + "?fmt=json-custom-mime",
     {
@@ -47,21 +47,21 @@ add_task(function* () {
       time: true
     });
 
   wait = waitForDOM(document, "#response-panel .CodeMirror-code");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#response-tab"));
-  yield wait;
+  await wait;
 
   testResponseTab();
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   function testResponseTab() {
     let tabpanel = document.querySelector("#response-panel");
 
     is(tabpanel.querySelector(".response-error-header") === null, true,
       "The response error header doesn't have the intended visibility.");
     let jsonView = tabpanel.querySelector(".tree-section .treeLabel") || {};
     is(jsonView.textContent === L10N.getStr("jsonScopeName"), true,
--- a/devtools/client/netmonitor/test/browser_net_json_text_mime.js
+++ b/devtools/client/netmonitor/test/browser_net_json_text_mime.js
@@ -2,41 +2,41 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if JSON responses with unusal/custom MIME types are handled correctly.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { tab, monitor } = yield initNetMonitor(JSON_TEXT_MIME_URL);
+  let { tab, monitor } = await initNetMonitor(JSON_TEXT_MIME_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   let requestItem = document.querySelector(".request-list-item");
   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(0),
     "GET",
     CONTENT_TYPE_SJS + "?fmt=json-text-mime",
     {
@@ -48,21 +48,21 @@ add_task(function* () {
       time: true
     });
 
   wait = waitForDOM(document, "#response-panel .CodeMirror-code");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#response-tab"));
-  yield wait;
+  await wait;
 
   testResponseTab();
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   function testResponseTab() {
     let tabpanel = document.querySelector("#response-panel");
 
     is(tabpanel.querySelector(".response-error-header") === null, true,
       "The response error header doesn't have the intended visibility.");
     let jsonView = tabpanel.querySelector(".tree-section .treeLabel") || {};
     is(jsonView.textContent === L10N.getStr("jsonScopeName"), true,
--- a/devtools/client/netmonitor/test/browser_net_jsonp.js
+++ b/devtools/client/netmonitor/test/browser_net_jsonp.js
@@ -2,43 +2,43 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if JSONP responses are handled correctly.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { tab, monitor } = yield initNetMonitor(JSONP_URL);
+  let { tab, monitor } = await initNetMonitor(JSONP_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 2);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   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(0),
     "GET",
     CONTENT_TYPE_SJS + "?fmt=jsonp&jsonp=$_0123Fun",
@@ -66,30 +66,30 @@ add_task(function* () {
     });
 
   info("Testing first request");
   wait = waitForDOM(document, "#response-panel .CodeMirror-code");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#response-tab"));
-  yield wait;
+  await wait;
 
   testResponseTab("$_0123Fun", "Hello JSONP!");
 
   info("Testing second request");
   wait = waitForDOM(document, "#response-panel .CodeMirror-code");
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[1]);
-  yield wait;
+  await wait;
 
   testResponseTab("$_4567Sad", "Hello weird JSONP!");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   function testResponseTab(func, greeting) {
     let tabpanel = document.querySelector("#response-panel");
 
     is(tabpanel.querySelector(".response-error-header") === null, true,
       "The response error header doesn't have the intended visibility.");
     is(tabpanel.querySelector(".tree-section .treeLabel").textContent,
       L10N.getFormatStr("jsonpScopeName", func),
--- a/devtools/client/netmonitor/test/browser_net_large-response.js
+++ b/devtools/client/netmonitor/test/browser_net_large-response.js
@@ -4,44 +4,44 @@
 "use strict";
 
 /**
  * Tests if very large response contents are just displayed as plain text.
  */
 
 const HTML_LONG_URL = CONTENT_TYPE_SJS + "?fmt=html-long";
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   info("Starting test... ");
 
   // This test could potentially be slow because over 100 KB of stuff
   // is going to be requested and displayed in the source editor.
   requestLongerTimeout(2);
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, HTML_LONG_URL, function* (url) {
+  await ContentTask.spawn(tab.linkedBrowser, HTML_LONG_URL, async function (url) {
     content.wrappedJSObject.performRequests(1, url);
   });
-  yield wait;
+  await wait;
 
   let requestItem = document.querySelector(".request-list-item");
   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(0),
     "GET",
     CONTENT_TYPE_SJS + "?fmt=html-long",
     {
@@ -49,20 +49,20 @@ add_task(function* () {
       statusText: "OK"
     });
 
   wait = waitForDOM(document, "#response-panel .CodeMirror-code");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#response-tab"));
-  yield wait;
+  await wait;
 
   let text = document.querySelector(".CodeMirror-line").textContent;
 
   ok(text.match(/^<p>/), "The text shown in the source editor is incorrect.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   // This test uses a lot of memory, so force a GC to help fragmentation.
   info("Forcing GC after netmonitor test.");
   Cu.forceGC();
 });
--- a/devtools/client/netmonitor/test/browser_net_leak_on_tab_close.js
+++ b/devtools/client/netmonitor/test/browser_net_leak_on_tab_close.js
@@ -2,16 +2,16 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests that netmonitor doesn't leak windows on parent-side pages (bug 1285638)
  */
 
-add_task(function* () {
+add_task(async function () {
   // Tell initNetMonitor to enable cache. Otherwise it will assert that there were more
   // than zero network requests during the page load. But when loading about:config,
   // there are none.
-  let { monitor } = yield initNetMonitor("about:config", true);
+  let { monitor } = await initNetMonitor("about:config", true);
   ok(monitor, "The network monitor was opened");
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_open_in_debugger.js
+++ b/devtools/client/netmonitor/test/browser_net_open_in_debugger.js
@@ -2,39 +2,39 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test the 'Open in debugger' feature
  */
 
-add_task(function* () {
-  let { tab, monitor, toolbox} = yield initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL);
+add_task(async function () {
+  let { tab, monitor, toolbox} = await initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let contextMenuDoc = monitor.panelWin.parent.document;
   // Avoid async processing
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, CONTENT_TYPE_WITHOUT_CACHE_REQUESTS);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   wait = waitForDOM(contextMenuDoc, "#request-list-context-open-in-debugger");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[2]);
   EventUtils.sendMouseEvent({ type: "contextmenu" },
     document.querySelectorAll(".request-list-item")[2]);
-  yield wait;
+  await wait;
 
   let onDebuggerReady = toolbox.once("jsdebugger-ready");
   contextMenuDoc.querySelector("#request-list-context-open-in-debugger").click();
-  yield onDebuggerReady;
+  await onDebuggerReady;
 
   ok(true, "Debugger has been open");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_open_in_style_editor.js
+++ b/devtools/client/netmonitor/test/browser_net_open_in_style_editor.js
@@ -2,40 +2,40 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test the 'Open in debugger' feature
  */
 
-add_task(function* () {
-  let { tab, monitor, toolbox} = yield initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL);
+add_task(async function () {
+  let { tab, monitor, toolbox} = await initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let contextMenuDoc = monitor.panelWin.parent.document;
   // Avoid async processing
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, CONTENT_TYPE_WITHOUT_CACHE_REQUESTS);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   wait = waitForDOM(contextMenuDoc, "#request-list-context-open-in-style-editor");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[1]);
   EventUtils.sendMouseEvent({ type: "contextmenu" },
     document.querySelectorAll(".request-list-item")[1]);
-  yield wait;
+  await wait;
 
   let onStyleEditorReady = toolbox.once("styleeditor-ready");
   monitor.panelWin.parent.document
     .querySelector("#request-list-context-open-in-style-editor").click();
-  yield onStyleEditorReady;
+  await onStyleEditorReady;
 
   ok(true, "Style Editor has been open");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_open_request_in_tab.js
+++ b/devtools/client/netmonitor/test/browser_net_open_request_in_tab.js
@@ -2,42 +2,42 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if Open in new tab works.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   info("Starting test...");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let contextMenuDoc = monitor.panelWin.parent.document;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests(1);
   });
-  yield wait;
+  await wait;
 
   wait = waitForDOM(contextMenuDoc, "#request-list-context-newtab");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
   EventUtils.sendMouseEvent({ type: "contextmenu" },
     document.querySelectorAll(".request-list-item")[0]);
-  yield wait;
+  await wait;
 
   let onTabOpen = once(gBrowser.tabContainer, "TabOpen", false);
   monitor.panelWin.parent.document
     .querySelector("#request-list-context-newtab").click();
-  yield onTabOpen;
+  await onTabOpen;
 
   ok(true, "A new tab has been opened");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   gBrowser.removeCurrentTab();
 });
--- a/devtools/client/netmonitor/test/browser_net_pane-collapse.js
+++ b/devtools/client/netmonitor/test/browser_net_pane-collapse.js
@@ -2,27 +2,27 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if the network monitor panes collapse properly.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document, windowRequire } = monitor.panelWin;
   let { Prefs } = windowRequire("devtools/client/netmonitor/src/utils/prefs");
   let detailsPaneToggleButton = document.querySelector(".network-details-panel-toggle");
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.reload();
-  yield wait;
+  await wait;
 
   ok(!document.querySelector(".network-details-panel") &&
      detailsPaneToggleButton.classList.contains("pane-collapsed"),
     "The details panel should initially be hidden.");
 
   EventUtils.sendMouseEvent({ type: "click" }, detailsPaneToggleButton);
 
   is(~~(document.querySelector(".network-details-panel").clientWidth),
@@ -42,10 +42,10 @@ add_task(function* () {
 
   is(~~(document.querySelector(".network-details-panel").clientWidth),
     Prefs.networkDetailsWidth,
     "The details panel has an incorrect width after uncollapsing.");
   ok(document.querySelector(".network-details-panel") &&
      !detailsPaneToggleButton.classList.contains("pane-collapsed"),
     "The details panel should be visible again after uncollapsing.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_pane-toggle.js
+++ b/devtools/client/netmonitor/test/browser_net_pane-toggle.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if toggling the details pane works as expected.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let { EVENTS } = windowRequire("devtools/client/netmonitor/src/constants");
   let {
     getSelectedRequest,
     getSortedRequests,
@@ -30,17 +30,17 @@ add_task(function* () {
     "collapsed when the frontend is opened.");
   is(!!document.querySelector(".network-details-panel"), false,
     "The details pane should be hidden when the frontend is opened.");
   is(getSelectedRequest(store.getState()), null,
     "There should be no selected item in the requests menu.");
 
   let networkEvent = monitor.panelWin.once(EVENTS.NETWORK_EVENT);
   tab.linkedBrowser.reload();
-  yield networkEvent;
+  await networkEvent;
 
   is(toggleButton.hasAttribute("disabled"), false,
     "The pane toggle button should be enabled after the first request.");
   is(toggleButton.classList.contains("pane-collapsed"), true,
     "The pane toggle button should still indicate that the details pane is " +
     "collapsed after the first request.");
   is(!!document.querySelector(".network-details-panel"), false,
     "The details pane should still be hidden after the first request.");
@@ -68,17 +68,17 @@ add_task(function* () {
   is(toggleButton.classList.contains("pane-collapsed"), true,
     "The pane toggle button should now indicate that the details pane is " +
     "collapsed after being pressed again.");
   is(!!document.querySelector(".network-details-panel"), false,
     "The details pane should now be hidden after the toggle button was pressed again.");
   is(getSelectedRequest(store.getState()), null,
     "There should now be no selected item in the requests menu.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 
   function getSelectedIndex(state) {
     if (!state.requests.selectedId) {
       return -1;
     }
     return getSortedRequests(state).findIndex(r => r.id === state.requests.selectedId);
   }
 });
--- a/devtools/client/netmonitor/test/browser_net_params_sorted.js
+++ b/devtools/client/netmonitor/test/browser_net_params_sorted.js
@@ -2,35 +2,35 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests whether keys in Params panel are sorted.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(POST_DATA_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(POST_DATA_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 2);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   wait = waitForDOM(document, ".headers-overview");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
-  yield wait;
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#params-tab"));
 
   let actualKeys = document.querySelectorAll(".treeLabel");
   let expectedKeys = ["Query string", "baz", "foo", "type",
                       "Form data", "baz", "foo"];
 
--- a/devtools/client/netmonitor/test/browser_net_pause.js
+++ b/devtools/client/netmonitor/test/browser_net_pause.js
@@ -1,92 +1,92 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if the pause/resume button works.
  */
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(PAUSE_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(PAUSE_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire, connector } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let pauseButton = document.querySelector(".requests-list-pause-button");
 
   store.dispatch(Actions.batchEnable(false));
 
   // Make sure we start in a sane state.
   assertRequestCount(store, 0);
 
   // Load one request and assert it shows up in the list.
-  yield performRequestAndWait(tab, monitor);
+  await performRequestAndWait(tab, monitor);
   assertRequestCount(store, 1);
 
   let noRequest = true;
   monitor.panelWin.once(EVENTS.NETWORK_EVENT, () => {
     noRequest = false;
   });
 
   monitor.panelWin.once(EVENTS.NETWORK_EVENT_UPDATED, () => {
     noRequest = false;
   });
 
   // Click pause, load second request and make sure they don't show up.
   EventUtils.sendMouseEvent({ type: "click" }, pauseButton);
-  yield performPausedRequest(connector, tab, monitor);
+  await performPausedRequest(connector, tab, monitor);
   ok(noRequest, "There should be no activity when paused.");
   assertRequestCount(store, 1);
 
   // Click pause again to resume monitoring. Load a third request
   // and make sure they will show up.
   EventUtils.sendMouseEvent({ type: "click" }, pauseButton);
-  yield performRequestAndWait(tab, monitor);
+  await performRequestAndWait(tab, monitor);
   assertRequestCount(store, 2);
 
   // Click pause, reload the page and check that there are
   // some requests. Page reload should auto-resume.
   EventUtils.sendMouseEvent({ type: "click" }, pauseButton);
   tab.linkedBrowser.reload();
-  yield waitForNetworkEvents(monitor, 1);
+  await waitForNetworkEvents(monitor, 1);
   assertRequestCount(store, 1);
 
   return teardown(monitor);
 });
 
 /**
  * Asserts the number of requests in the network monitor.
  */
 function assertRequestCount(store, count) {
   is(store.getState().requests.requests.size, count,
     "There should be correct number of requests");
 }
 
 /**
  * Execute simple GET request and wait till it's done.
  */
-function* performRequestAndWait(tab, monitor) {
+async function performRequestAndWait(tab, monitor) {
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, SIMPLE_SJS, function* (url) {
-    yield content.wrappedJSObject.performRequests(url);
+  await ContentTask.spawn(tab.linkedBrowser, SIMPLE_SJS, async function (url) {
+    await content.wrappedJSObject.performRequests(url);
   });
-  yield wait;
+  await wait;
 }
 
 /**
  * Execute simple GET request
  */
-function* performPausedRequest(connector, tab, monitor) {
+async function performPausedRequest(connector, tab, monitor) {
   let wait = waitForWebConsoleNetworkEvent(connector);
-  yield ContentTask.spawn(tab.linkedBrowser, SIMPLE_SJS, function* (url) {
-    yield content.wrappedJSObject.performRequests(url);
+  await ContentTask.spawn(tab.linkedBrowser, SIMPLE_SJS, async function (url) {
+    await content.wrappedJSObject.performRequests(url);
   });
-  yield wait;
+  await wait;
 }
 
 /**
  * Listen for events fired by the console client since the Firefox
  * connector (data provider) is paused.
  */
 function waitForWebConsoleNetworkEvent(connector) {
   return new Promise(resolve => {
--- a/devtools/client/netmonitor/test/browser_net_persistent_logs.js
+++ b/devtools/client/netmonitor/test/browser_net_persistent_logs.js
@@ -3,50 +3,50 @@
 
 "use strict";
 
 /**
  * Tests if the network monitor leaks on initialization and sudden destruction.
  * You can also use this initialization format as a template for other tests.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(SINGLE_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(SINGLE_GET_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   Services.prefs.setBoolPref("devtools.netmonitor.persistlog", false);
 
-  yield reloadAndWait();
+  await reloadAndWait();
 
   // Using waitUntil in the test is necessary to ensure all requests are added correctly.
   // Because reloadAndWait call may catch early uncaught requests from initNetMonitor, so
   // the actual number of requests after reloadAndWait could be wrong since all requests
   // haven't finished.
-  yield waitUntil(() => document.querySelectorAll(".request-list-item").length === 2);
+  await waitUntil(() => document.querySelectorAll(".request-list-item").length === 2);
   is(document.querySelectorAll(".request-list-item").length, 2,
     "The request list should have two items at this point.");
 
-  yield reloadAndWait();
+  await reloadAndWait();
 
-  yield waitUntil(() => document.querySelectorAll(".request-list-item").length === 2);
+  await waitUntil(() => document.querySelectorAll(".request-list-item").length === 2);
   // Since the reload clears the log, we still expect two requests in the log
   is(document.querySelectorAll(".request-list-item").length, 2,
     "The request list should still have two items at this point.");
 
   // Now we toggle the persistence logs on
   Services.prefs.setBoolPref("devtools.netmonitor.persistlog", true);
 
-  yield reloadAndWait();
+  await reloadAndWait();
 
-  yield waitUntil(() => document.querySelectorAll(".request-list-item").length === 4);
+  await waitUntil(() => document.querySelectorAll(".request-list-item").length === 4);
   // Since we togged the persistence logs, we expect four items after the reload
   is(document.querySelectorAll(".request-list-item").length, 4,
     "The request list should now have four items at this point.");
 
   Services.prefs.setBoolPref("devtools.netmonitor.persistlog", false);
   return teardown(monitor);
 
   /**
--- a/devtools/client/netmonitor/test/browser_net_post-data-01.js
+++ b/devtools/client/netmonitor/test/browser_net_post-data-01.js
@@ -2,46 +2,46 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if the POST requests display the correct information in the UI.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
   // Set a higher panel height in order to get full CodeMirror content
   Services.prefs.setIntPref("devtools.toolbox.footer.height", 600);
 
-  let { tab, monitor } = yield initNetMonitor(POST_DATA_URL);
+  let { tab, monitor } = await initNetMonitor(POST_DATA_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 2);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   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(0),
     "POST",
     SIMPLE_SJS + "?foo=bar&baz=42&type=urlencoded",
@@ -71,30 +71,30 @@ add_task(function* () {
   );
 
   // Wait for all tree sections updated by react
   wait = waitForDOM(document, "#params-panel .tree-section", 2);
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#params-tab"));
-  yield wait;
-  yield testParamsTab("urlencoded");
+  await wait;
+  await testParamsTab("urlencoded");
 
   // Wait for all tree sections and editor updated by react
   let waitForSections = waitForDOM(document, "#params-panel .tree-section", 2);
   let waitForSourceEditor = waitForDOM(document, "#params-panel .CodeMirror-code");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[1]);
-  yield Promise.all([waitForSections, waitForSourceEditor]);
-  yield testParamsTab("multipart");
+  await Promise.all([waitForSections, waitForSourceEditor]);
+  await testParamsTab("multipart");
 
   return teardown(monitor);
 
-  function* testParamsTab(type) {
+  function testParamsTab(type) {
     let tabpanel = document.querySelector("#params-panel");
 
     function checkVisibility(box) {
       is(!tabpanel.querySelector(".treeTable"), !box.includes("params"),
         "The request params doesn't have the indended visibility.");
       is(tabpanel.querySelector(".CodeMirror-code") === null,
         !box.includes("editor"),
         "The request post data doesn't have the indended visibility.");
--- a/devtools/client/netmonitor/test/browser_net_post-data-02.js
+++ b/devtools/client/netmonitor/test/browser_net_post-data-02.js
@@ -3,40 +3,40 @@
 
 "use strict";
 
 /**
  * Tests if the POST requests display the correct information in the UI,
  * for raw payloads with attached content-type headers.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { tab, monitor } = yield initNetMonitor(POST_RAW_URL);
+  let { tab, monitor } = await initNetMonitor(POST_RAW_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   // Wait for all tree view updated by react
   wait = waitForDOM(document, "#params-panel .tree-section");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#params-tab"));
-  yield wait;
+  await wait;
 
   let tabpanel = document.querySelector("#params-panel");
 
   ok(tabpanel.querySelector(".treeTable"),
     "The request params doesn't have the indended visibility.");
   ok(tabpanel.querySelector(".editor-mount") === null,
     "The request post data doesn't have the indended visibility.");
 
--- a/devtools/client/netmonitor/test/browser_net_post-data-03.js
+++ b/devtools/client/netmonitor/test/browser_net_post-data-03.js
@@ -3,40 +3,40 @@
 
 "use strict";
 
 /**
  * Tests if the POST requests display the correct information in the UI,
  * for raw payloads with content-type headers attached to the upload stream.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { tab, monitor } = yield initNetMonitor(POST_RAW_WITH_HEADERS_URL);
+  let { tab, monitor } = await initNetMonitor(POST_RAW_WITH_HEADERS_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   // Wait for all tree view updated by react
   wait = waitForDOM(document, "#headers-panel .tree-section .treeLabel", 3);
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#headers-tab"));
-  yield wait;
+  await wait;
 
   let tabpanel = document.querySelector("#headers-panel");
   is(tabpanel.querySelectorAll(".tree-section .treeLabel").length, 3,
     "There should be 3 header sections displayed in this tabpanel.");
 
   is(tabpanel.querySelectorAll(".tree-section .treeLabel")[2].textContent,
     L10N.getStr("requestHeadersFromUpload") + " (" +
     L10N.getFormatStr("networkMenu.sizeB", 74) + ")",
@@ -55,17 +55,17 @@ add_task(function* () {
     "The second request header name was incorrect.");
   is(values[values.length - 1].textContent, "hello world!",
     "The second request header value was incorrect.");
 
   // Wait for all tree sections updated by react
   wait = waitForDOM(document, "#params-panel .tree-section");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#params-tab"));
-  yield wait;
+  await wait;
 
   tabpanel = document.querySelector("#params-panel");
 
   ok(tabpanel.querySelector(".treeTable"),
     "The params tree view should be displayed.");
   ok(tabpanel.querySelector(".editor-mount") === null,
     "The post data shouldn't be displayed.");
 
--- a/devtools/client/netmonitor/test/browser_net_post-data-04.js
+++ b/devtools/client/netmonitor/test/browser_net_post-data-04.js
@@ -3,40 +3,40 @@
 
 "use strict";
 
 /**
  * Tests if the POST requests display the correct information in the UI,
  * for JSON payloads.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { tab, monitor } = yield initNetMonitor(POST_JSON_URL);
+  let { tab, monitor } = await initNetMonitor(POST_JSON_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   // Wait for all tree view updated by react
   wait = waitForDOM(document, "#params-panel .tree-section");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#params-tab"));
-  yield wait;
+  await wait;
 
   let tabpanel = document.querySelector("#params-panel");
 
   ok(tabpanel.querySelector(".treeTable"),
     "The request params doesn't have the indended visibility.");
   ok(tabpanel.querySelector(".editor-mount") === null,
     "The request post data doesn't have the indended visibility.");
 
--- a/devtools/client/netmonitor/test/browser_net_prefs-and-l10n.js
+++ b/devtools/client/netmonitor/test/browser_net_prefs-and-l10n.js
@@ -2,20 +2,20 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if the preferences and localization objects work correctly.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { monitor } = yield initNetMonitor(SIMPLE_URL);
+  let { monitor } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { windowRequire } = monitor.panelWin;
   let { Prefs } = windowRequire("devtools/client/netmonitor/src/utils/prefs");
 
   testL10N();
   testPrefs();
 
--- a/devtools/client/netmonitor/test/browser_net_prefs-reload.js
+++ b/devtools/client/netmonitor/test/browser_net_prefs-reload.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if the prefs that should survive across tool reloads work.
  */
 
-add_task(function* () {
-  let { monitor } = yield initNetMonitor(SIMPLE_URL);
+add_task(async function () {
+  let { monitor } = await initNetMonitor(SIMPLE_URL);
   let Actions = monitor.panelWin
     .windowRequire("devtools/client/netmonitor/src/actions/index");
   info("Starting test... ");
 
   // This test reopens the network monitor a bunch of times, for different
   // hosts (bottom, side, window). This seems to be slow on debug builds.
   requestLongerTimeout(3);
 
@@ -56,22 +56,22 @@ add_task(function* () {
       modifyFrontend: function (value) {
         getDoc().querySelector(".monitor-panel .split-box .controlled")
                 .style.height = `${value}px`;
       }
     }
     /* add more prefs here... */
   };
 
-  yield testBottom();
-  yield testSide();
-  yield testWindow();
+  await testBottom();
+  await testSide();
+  await testWindow();
 
   info("Moving toolbox back to the bottom...");
-  yield monitor.toolbox.switchHost("bottom");
+  await monitor.toolbox.switchHost("bottom");
   return teardown(monitor);
 
   function storeFirstPrefValues() {
     info("Caching initial pref values.");
 
     for (let name in prefsToCheck) {
       let currentValue = getPrefs()[name];
       prefsToCheck[name].firstValue = currentValue;
@@ -170,94 +170,94 @@ add_task(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_raw_headers.js
+++ b/devtools/client/netmonitor/test/browser_net_raw_headers.js
@@ -2,42 +2,42 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if showing raw headers works.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(POST_DATA_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(POST_DATA_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 2);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   wait = waitForDOM(document, "#headers-panel .tree-section", 2);
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
-  yield wait;
+  await wait;
 
   wait = waitForDOM(document, ".raw-headers-container textarea", 2);
   EventUtils.sendMouseEvent({ type: "click" }, getRawHeadersButton());
-  yield wait;
+  await wait;
 
   testRawHeaderButtonStyle(true);
 
   testShowRawHeaders(getSortedRequests(store.getState()).get(0));
 
   EventUtils.sendMouseEvent({ type: "click" }, getRawHeadersButton());
 
   testRawHeaderButtonStyle(false);
--- a/devtools/client/netmonitor/test/browser_net_reload-button.js
+++ b/devtools/client/netmonitor/test/browser_net_reload-button.js
@@ -2,24 +2,24 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if the empty-requests reload button works.
  */
 
-add_task(function* () {
-  let { monitor } = yield initNetMonitor(SIMPLE_URL);
+add_task(async function () {
+  let { monitor } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document } = monitor.panelWin;
 
   let wait = waitForNetworkEvents(monitor, 1);
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-reload-notice-button"));
-  yield wait;
+  await wait;
 
   is(document.querySelectorAll(".request-list-item").length, 1,
     "The request list should have one item after reloading");
 
   return teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_reload-markers.js
+++ b/devtools/client/netmonitor/test/browser_net_reload-markers.js
@@ -2,29 +2,29 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if the empty-requests reload button works.
  */
 
-add_task(function* () {
-  let { monitor } = yield initNetMonitor(SIMPLE_URL);
+add_task(async function () {
+  let { monitor } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document } = monitor.panelWin;
 
   let markersDone = waitForTimelineMarkers(monitor);
 
   let button = document.querySelector(".requests-list-reload-notice-button");
   button.click();
 
-  yield waitForNetworkEvents(monitor, 1);
-  let markers = yield markersDone;
+  await waitForNetworkEvents(monitor, 1);
+  let markers = await markersDone;
 
   ok(true, "Reloading finished");
 
   is(markers[0].name, "dom-interactive",
     "The first received marker is correct.");
   is(markers[1].name, "dom-complete",
     "The second received marker is correct.");
 
--- a/devtools/client/netmonitor/test/browser_net_req-resp-bodies.js
+++ b/devtools/client/netmonitor/test/browser_net_req-resp-bodies.js
@@ -2,73 +2,73 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test if request and response body logging stays on after opening the console.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { tab, monitor } = yield initNetMonitor(JSON_LONG_URL);
+  let { tab, monitor } = await initNetMonitor(JSON_LONG_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   // Perform first batch of requests.
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
-  yield verifyRequest(0);
+  await verifyRequest(0);
 
   // Switch to the webconsole.
   let onWebConsole = monitor.toolbox.once("webconsole-selected");
   monitor.toolbox.selectTool("webconsole");
-  yield onWebConsole;
+  await onWebConsole;
 
   // Switch back to the netmonitor.
   let onNetMonitor = monitor.toolbox.once("netmonitor-selected");
   monitor.toolbox.selectTool("netmonitor");
-  yield onNetMonitor;
+  await onNetMonitor;
 
   // Reload debugee.
   wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.reload();
-  yield wait;
+  await wait;
 
   // Perform another batch of requests.
   wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
-  yield verifyRequest(1);
+  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_resend_cors.js
+++ b/devtools/client/netmonitor/test/browser_net_resend_cors.js
@@ -3,37 +3,37 @@
 
 "use strict";
 
 /**
  * Tests if resending a CORS request avoids the security checks and doesn't send
  * a preflight OPTIONS request (bug 1270096 and friends)
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CORS_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CORS_URL);
   info("Starting test... ");
 
   let { store, windowRequire, connector } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getRequestById,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let requestUrl = "http://test1.example.com" + CORS_SJS_PATH;
 
   info("Waiting for OPTIONS, then POST");
   let wait = waitForNetworkEvents(monitor, 2);
-  yield ContentTask.spawn(tab.linkedBrowser, requestUrl, function* (url) {
+  await ContentTask.spawn(tab.linkedBrowser, requestUrl, async function (url) {
     content.wrappedJSObject.performRequests(url, "triggering/preflight", "post-data");
   });
-  yield wait;
+  await wait;
 
   const METHODS = ["OPTIONS", "POST"];
   const ITEMS = METHODS.map((val, i) => getSortedRequests(store.getState()).get(i));
 
   // Check the requests that were sent
   ITEMS.forEach((item, i) => {
     is(item.method, METHODS[i], `The ${item.method} request has the right method`);
     is(item.url, requestUrl, `The ${item.method} request has the right URL`);
@@ -43,55 +43,55 @@ add_task(function* () {
   // POST is supposed to have no preflight OPTIONS request this time (CORS is disabled)
   let onRequests = waitForNetworkEvents(monitor, 1);
   for (let item of ITEMS) {
     info(`Selecting the ${item.method} request`);
     store.dispatch(Actions.selectRequest(item.id));
 
     // Wait for requestHeaders and responseHeaders are required when fetching data
     // from back-end.
-    yield waitUntil(() => {
+    await waitUntil(() => {
       item = getRequestById(store.getState(), item.id);
       return item.requestHeaders && item.responseHeaders;
     });
 
     let { size } = getSortedRequests(store.getState());
 
     info("Cloning the selected request into a custom clone");
     store.dispatch(Actions.cloneSelectedRequest());
 
     info("Sending the cloned request (without change)");
     store.dispatch(Actions.sendCustomRequest(connector));
 
-    yield waitUntil(() => getSortedRequests(store.getState()).size === size + 1);
+    await waitUntil(() => getSortedRequests(store.getState()).size === size + 1);
   }
 
   info("Waiting for both resent requests");
-  yield onRequests;
+  await onRequests;
 
   // Check the resent requests
   for (let i = 0; i < ITEMS.length; i++) {
     let item = ITEMS[i];
     is(item.method, METHODS[i], `The ${item.method} request has the right method`);
     is(item.url, requestUrl, `The ${item.method} request has the right URL`);
     is(item.status, 200, `The ${item.method} response has the right status`);
 
     if (item.method === "POST") {
       is(item.method, "POST", `The ${item.method} request has the right method`);
 
       // Trigger responseContent update requires to wait until
       // responseContentAvailable set true
-      yield waitUntil(() => {
+      await waitUntil(() => {
         item = getRequestById(store.getState(), item.id);
         return item.responseContentAvailable;
       });
-      yield connector.requestData(item.id, "responseContent");
+      await connector.requestData(item.id, "responseContent");
 
       // Wait for both requestPostData & responseContent payloads arrived.
-      yield waitUntil(() => {
+      await waitUntil(() => {
         item = getRequestById(store.getState(), item.id);
         return item.responseContent && item.requestPostData;
       });
 
       is(item.requestPostData.postData.text, "post-data",
         "The POST request has the right POST data");
       // eslint-disable-next-line mozilla/no-cpows-in-tests
       is(item.responseContent.content.text, "Access-Control-Allow-Origin: *",
--- a/devtools/client/netmonitor/test/browser_net_resend_headers.js
+++ b/devtools/client/netmonitor/test/browser_net_resend_headers.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test if custom request headers are not ignored (bug 1270096 and friends)
  */
 
-add_task(function* () {
-  let { monitor } = yield initNetMonitor(SIMPLE_SJS);
+add_task(async function () {
+  let { monitor } = await initNetMonitor(SIMPLE_SJS);
   info("Starting test... ");
 
   let { store, windowRequire, connector } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let { requestData, sendHTTPRequest } = connector;
   let {
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
@@ -32,28 +32,28 @@ add_task(function* () {
 
   let wait = waitForNetworkEvents(monitor, 1);
   sendHTTPRequest({
     url: requestUrl,
     method: "POST",
     headers: requestHeaders,
     body: "Hello"
   });
-  yield wait;
+  await wait;
 
   let item = getSortedRequests(store.getState()).get(0);
 
   ok(item.requestHeadersAvailable, "headers are available for lazily fetching");
 
   if (item.requestHeadersAvailable && !item.requestHeaders) {
     requestData(item.id, "requestHeaders");
   }
 
   // Wait until requestHeaders packet gets updated.
-  yield waitUntil(() => {
+  await waitUntil(() => {
     item = getSortedRequests(store.getState()).get(0);
     return item.requestHeaders;
   });
 
   is(item.method, "POST", "The request has the right method");
   is(item.url, requestUrl, "The request has the right URL");
 
   for (let { name, value } of item.requestHeaders.headers) {
--- a/devtools/client/netmonitor/test/browser_net_security-details.js
+++ b/devtools/client/netmonitor/test/browser_net_security-details.js
@@ -2,36 +2,36 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test that Security details tab contains the expected data.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   info("Performing a secure request.");
   const REQUESTS_URL = "https://example.com" + CORS_SJS_PATH;
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, REQUESTS_URL, function* (url) {
+  await ContentTask.spawn(tab.linkedBrowser, REQUESTS_URL, async function (url) {
     content.wrappedJSObject.performRequests(1, url);
   });
-  yield wait;
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#security-tab"));
-  yield waitUntil(() => document.querySelector(
+  await waitUntil(() => document.querySelector(
     "#security-panel .security-info-value"));
 
   let tabpanel = document.querySelector("#security-panel");
   let textboxes = tabpanel.querySelectorAll(".textbox-input");
 
   // Connection
   // The protocol will be TLS but the exact version depends on which protocol
   // the test server example.com supports.
@@ -72,10 +72,10 @@ add_task(function* () {
   // cert validity expires
   isnot(textboxes[13].value, "", "Label was not empty.");
 
   // cert sha1 fingerprint
   isnot(textboxes[14].value, "", "Label was not empty.");
   // cert sha256 fingerprint
   isnot(textboxes[15].value, "", "Label was not empty.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_security-error.js
+++ b/devtools/client/netmonitor/test/browser_net_security-error.js
@@ -2,37 +2,37 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test that Security details tab shows an error message with broken connections.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   info("Requesting a resource that has a certificate problem.");
 
   let requestsDone = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests(1, "https://nocert.example.com");
   });
-  yield requestsDone;
+  await requestsDone;
 
   let securityInfoLoaded = waitForDOM(document, ".security-info-value");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
 
-  yield waitUntil(() => document.querySelector("#security-tab"));
+  await waitUntil(() => document.querySelector("#security-tab"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#security-tab"));
-  yield securityInfoLoaded;
+  await securityInfoLoaded;
 
   let errormsg = document.querySelector(".security-info-value");
   isnot(errormsg.textContent, "", "Error message is not empty.");
 
   return teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_security-icon-click.js
+++ b/devtools/client/netmonitor/test/browser_net_security-icon-click.js
@@ -2,55 +2,55 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test that clicking on the security indicator opens the security details tab.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   info("Requesting a resource over HTTPS.");
-  yield performRequestAndWait("https://example.com" + CORS_SJS_PATH + "?request_2");
-  yield performRequestAndWait("https://example.com" + CORS_SJS_PATH + "?request_1");
+  await performRequestAndWait("https://example.com" + CORS_SJS_PATH + "?request_2");
+  await performRequestAndWait("https://example.com" + CORS_SJS_PATH + "?request_1");
 
   is(store.getState().requests.requests.size, 2, "Two events event logged.");
 
-  yield clickAndTestSecurityIcon();
+  await clickAndTestSecurityIcon();
 
   info("Selecting headers panel again.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#headers-tab"));
 
   info("Sorting the items by filename.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-file-button"));
 
   info("Testing that security icon can be clicked after the items were sorted.");
 
-  yield clickAndTestSecurityIcon();
+  await clickAndTestSecurityIcon();
 
   return teardown(monitor);
 
-  function* performRequestAndWait(url) {
+  async function performRequestAndWait(url) {
     let wait = waitForNetworkEvents(monitor, 1);
-    yield ContentTask.spawn(tab.linkedBrowser, { url }, function* (args) {
+    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-redirect.js
+++ b/devtools/client/netmonitor/test/browser_net_security-redirect.js
@@ -3,37 +3,37 @@
 
 "use strict";
 
 /**
  * Test a http -> https redirect shows secure icon only for redirected https
  * request.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 2);
-  yield ContentTask.spawn(tab.linkedBrowser, HTTPS_REDIRECT_SJS, function* (url) {
+  await ContentTask.spawn(tab.linkedBrowser, HTTPS_REDIRECT_SJS, async function (url) {
     content.wrappedJSObject.performRequests(1, url);
   });
-  yield wait;
+  await wait;
 
   is(store.getState().requests.requests.size, 2,
      "There were two requests due to redirect.");
 
   let [
     initialSecurityIcon,
     redirectSecurityIcon,
   ] = document.querySelectorAll(".requests-security-state-icon");
 
   ok(initialSecurityIcon.classList.contains("security-state-insecure"),
      "Initial request was marked insecure.");
 
   ok(redirectSecurityIcon.classList.contains("security-state-secure"),
      "Redirected request was marked secure.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_security-state.js
+++ b/devtools/client/netmonitor/test/browser_net_security-state.js
@@ -3,31 +3,31 @@
 
 "use strict";
 
 /**
  * Test that correct security state indicator appears depending on the security
  * state.
  */
 
-add_task(function* () {
+add_task(async function () {
   const EXPECTED_SECURITY_STATES = {
     "test1.example.com": "security-state-insecure",
     "example.com": "security-state-secure",
     "nocert.example.com": "security-state-broken",
     "localhost": "security-state-local",
   };
 
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
-  yield performRequests();
+  await performRequests();
 
   for (let subitemNode of Array.from(document.querySelectorAll(
     "requests-list-column.requests-list-security-and-domain"))) {
     let domain = subitemNode.querySelector(".requests-list-domain").textContent;
 
     info("Found a request to " + domain);
     ok(domain in EXPECTED_SECURITY_STATES, "Domain " + domain + " was expected.");
 
@@ -44,47 +44,47 @@ add_task(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}, function* (args) {
+      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_security-tab-deselect.js
+++ b/devtools/client/netmonitor/test/browser_net_security-tab-deselect.js
@@ -3,41 +3,41 @@
 
 "use strict";
 
 /**
  * Test that security details tab is no longer selected if an insecure request
  * is selected.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   info("Performing requests.");
   let wait = waitForNetworkEvents(monitor, 2);
   const REQUEST_URLS = [
     "https://example.com" + CORS_SJS_PATH,
     "http://example.com" + CORS_SJS_PATH,
   ];
-  yield ContentTask.spawn(tab.linkedBrowser, REQUEST_URLS, function* (urls) {
+  await ContentTask.spawn(tab.linkedBrowser, REQUEST_URLS, async function (urls) {
     for (let url of urls) {
       content.wrappedJSObject.performRequests(1, url);
     }
   });
-  yield wait;
+  await wait;
 
   info("Selecting secure request.");
   wait = waitForDOM(document, ".tabs");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[0]);
-  yield wait;
+  await wait;
 
   info("Selecting security tab.");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelector("#security-tab"));
 
   info("Selecting insecure request.");
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".request-list-item")[1]);
--- a/devtools/client/netmonitor/test/browser_net_security-tab-visibility.js
+++ b/devtools/client/netmonitor/test/browser_net_security-tab-visibility.js
@@ -2,17 +2,17 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test that security details tab is visible only when it should.
  */
 
-add_task(function* () {
+add_task(async function () {
   const TEST_DATA = [
     {
       desc: "http request",
       uri: "http://example.com" + CORS_SJS_PATH,
       visibleOnNewEvent: false,
       visibleOnSecurityInfo: false,
       visibleOnceComplete: false,
     }, {
@@ -26,69 +26,69 @@ add_task(function* () {
       uri: "https://nocert.example.com",
       isBroken: true,
       visibleOnNewEvent: false,
       visibleOnSecurityInfo: true,
       visibleOnceComplete: true,
     }
   ];
 
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let { getSelectedRequest } =
     windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   for (let testcase of TEST_DATA) {
     info("Testing Security tab visibility for " + testcase.desc);
     let onNewItem = monitor.panelWin.once(EVENTS.NETWORK_EVENT);
     let onComplete = testcase.isBroken ?
                        waitForSecurityBrokenNetworkEvent() :
                        waitForNetworkEvents(monitor, 1);
 
     info("Performing a request to " + testcase.uri);
-    yield ContentTask.spawn(tab.linkedBrowser, testcase.uri, function* (url) {
+    await ContentTask.spawn(tab.linkedBrowser, testcase.uri, async function (url) {
       content.wrappedJSObject.performRequests(1, url);
     });
 
     info("Waiting for new network event.");
-    yield onNewItem;
+    await onNewItem;
 
     info("Selecting the request.");
     EventUtils.sendMouseEvent({ type: "mousedown" },
       document.querySelectorAll(".request-list-item")[0]);
 
     is(getSelectedRequest(store.getState()).securityState, undefined,
        "Security state has not yet arrived.");
     is(!!document.querySelector("#security-tab"), testcase.visibleOnNewEvent,
       "Security tab is " + (testcase.visibleOnNewEvent ? "visible" : "hidden") +
       " after new request was added to the menu.");
 
     if (testcase.visibleOnSecurityInfo) {
       // click security panel to lazy load the securityState
-      yield waitUntil(() => document.querySelector("#security-tab"));
+      await waitUntil(() => document.querySelector("#security-tab"));
       EventUtils.sendMouseEvent({ type: "click" },
         document.querySelector("#security-tab"));
-      yield waitUntil(() => document.querySelector(
+      await waitUntil(() => document.querySelector(
         "#security-panel .security-info-value"));
       info("Waiting for security information to arrive.");
 
-      yield waitUntil(() => !!getSelectedRequest(store.getState()).securityState);
+      await waitUntil(() => !!getSelectedRequest(store.getState()).securityState);
       ok(getSelectedRequest(store.getState()).securityState,
          "Security state arrived.");
     }
 
     is(!!document.querySelector("#security-tab"), testcase.visibleOnSecurityInfo,
        "Security tab is " + (testcase.visibleOnSecurityInfo ? "visible" : "hidden") +
        " after security information arrived.");
 
     info("Waiting for request to complete.");
-    yield onComplete;
+    await onComplete;
 
     is(!!document.querySelector("#security-tab"), testcase.visibleOnceComplete,
        "Security tab is " + (testcase.visibleOnceComplete ? "visible" : "hidden") +
        " after request has been completed.");
 
     info("Clearing requests.");
     store.dispatch(Actions.clearRequests());
   }
--- a/devtools/client/netmonitor/test/browser_net_security-warnings.js
+++ b/devtools/client/netmonitor/test/browser_net_security-warnings.js
@@ -10,45 +10,45 @@
 const TEST_CASES = [
   {
     desc: "no warnings",
     uri: "https://example.com" + CORS_SJS_PATH,
     warnCipher: null,
   },
 ];
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   for (let test of TEST_CASES) {
     info("Testing site with " + test.desc);
 
     info("Performing request to " + test.uri);
     let wait = waitForNetworkEvents(monitor, 1);
-    yield ContentTask.spawn(tab.linkedBrowser, test.uri, function* (url) {
+    await ContentTask.spawn(tab.linkedBrowser, test.uri, async function (url) {
       content.wrappedJSObject.performRequests(1, url);
     });
-    yield wait;
+    await wait;
 
     info("Selecting the request.");
     wait = waitForDOM(document, ".tabs");
     EventUtils.sendMouseEvent({ type: "mousedown" },
       document.querySelectorAll(".request-list-item")[0]);
-    yield wait;
+    await wait;
 
     if (!document.querySelector("#security-tab[aria-selected=true]")) {
       info("Selecting security tab.");
       wait = waitForDOM(document, "#security-panel .properties-view");
       EventUtils.sendMouseEvent({ type: "click" },
         document.querySelector("#security-tab"));
-      yield wait;
+      await wait;
     }
 
     is(document.querySelector("#security-warning-cipher"),
       test.warnCipher,
       "Cipher suite warning is hidden.");
 
     store.dispatch(Actions.clearRequests());
   }
--- a/devtools/client/netmonitor/test/browser_net_send-beacon-other-tab.js
+++ b/devtools/client/netmonitor/test/browser_net_send-beacon-other-tab.js
@@ -2,38 +2,38 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if beacons from other tabs are properly ignored.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(SIMPLE_URL);
   let { store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
-  let beaconTab = yield addTab(SEND_BEACON_URL);
+  let beaconTab = await addTab(SEND_BEACON_URL);
   info("Beacon tab added successfully.");
 
   is(store.getState().requests.requests.size, 0, "The requests menu should be empty.");
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(beaconTab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(beaconTab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequest();
   });
   tab.linkedBrowser.reload();
-  yield wait;
+  await wait;
 
   is(store.getState().requests.requests.size, 1, "Only the reload should be recorded.");
   let request = getSortedRequests(store.getState()).get(0);
   is(request.method, "GET", "The method is correct.");
   is(request.status, "200", "The status is correct.");
 
-  yield removeTab(beaconTab);
+  await removeTab(beaconTab);
   return teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_send-beacon.js
+++ b/devtools/client/netmonitor/test/browser_net_send-beacon.js
@@ -2,32 +2,32 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if beacons are handled correctly.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(SEND_BEACON_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(SEND_BEACON_URL);
   let { store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let { getSortedRequests } =
     windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   is(store.getState().requests.requests.size, 0, "The requests menu should be empty.");
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequest();
   });
-  yield wait;
+  await wait;
 
   is(store.getState().requests.requests.size, 1, "The beacon should be recorded.");
   let request = getSortedRequests(store.getState()).get(0);
   is(request.method, "POST", "The method is correct.");
   ok(request.url.endsWith("beacon_request"), "The URL is correct.");
   is(request.status, "404", "The status is correct.");
 
   return teardown(monitor);
--- a/devtools/client/netmonitor/test/browser_net_service-worker-status.js
+++ b/devtools/client/netmonitor/test/browser_net_service-worker-status.js
@@ -7,18 +7,18 @@
  * Tests if requests intercepted by service workers have the correct status code
  */
 
 // Service workers only work on https
 const URL = EXAMPLE_URL.replace("http:", "https:");
 
 const TEST_URL = URL + "service-workers/status-codes.html";
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(TEST_URL, true);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(TEST_URL, true);
   info("Starting test... ");
 
   let { document, store, windowRequire, connector } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
@@ -36,47 +36,47 @@ add_task(function* () {
         type: "plain",
         fullMimeType: "text/plain; charset=UTF-8"
       },
       stackFunctions: ["doXHR", "performRequests"]
     },
   ];
 
   info("Registering the service worker...");
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
-    yield content.wrappedJSObject.registerServiceWorker();
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
+    await content.wrappedJSObject.registerServiceWorker();
   });
 
   info("Performing requests...");
   let wait = waitForNetworkEvents(monitor, REQUEST_DATA.length);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   // Fetch stack-trace data from the backend and wait till
   // all packets are received.
   let requests = getSortedRequests(store.getState());
-  yield Promise.all(requests.map(requestItem =>
+  await Promise.all(requests.map(requestItem =>
     connector.requestData(requestItem.id, "stackTrace")));
 
   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 index = 0;
   for (let request of REQUEST_DATA) {
     let item = getSortedRequests(store.getState()).get(index);
 
     info(`Verifying request #${index}`);
-    yield verifyRequestItemTarget(
+    await verifyRequestItemTarget(
       document,
       getDisplayedRequests(store.getState()),
       item,
       request.method,
       request.uri,
       request.details
     );
 
@@ -91,14 +91,14 @@ add_task(function* () {
       is(stacktrace[j].functionName, functionName,
       `Request #${index} has the correct function at position #${j} on the stack`);
     });
 
     index++;
   }
 
   info("Unregistering the service worker...");
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
-    yield content.wrappedJSObject.unregisterServiceWorker();
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
+    await content.wrappedJSObject.unregisterServiceWorker();
   });
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_simple-request-details.js
+++ b/devtools/client/netmonitor/test/browser_net_simple-request-details.js
@@ -2,36 +2,36 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if requests render correct information in the details UI.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_SJS);
+  let { tab, monitor } = await initNetMonitor(SIMPLE_SJS);
   info("Starting test... ");
 
   let { document, store, windowRequire, NetMonitorView } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let { EVENTS } = windowRequire("devtools/client/netmonitor/src/constants");
   let {
     getSelectedRequest,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
   let Editor = require("devtools/client/sourceeditor/editor");
 
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.reload();
-  yield wait;
+  await wait;
 
   is(getSelectedRequest(store.getState()), undefined,
     "There shouldn't be any selected item in the requests menu.");
   is(store.getState().requests.requests.size, 1,
     "The requests menu should not be empty after the first request.");
   is(!!document.querySelector(".network-details-panel"), false,
     "The network details panel should still be hidden after first request.");
 
@@ -41,19 +41,19 @@ add_task(function* () {
   isnot(getSelectedRequest(store.getState()), undefined,
     "There should be a selected item in the requests menu.");
   is(getSelectedIndex(store.getState()), 0,
     "The first item should be selected in the requests menu.");
   is(!!document.querySelector(".network-details-panel"), true,
     "The network details panel should not be hidden after toggle button was pressed.");
 
   testHeadersTab();
-  yield testCookiesTab();
+  await testCookiesTab();
   testParamsTab();
-  yield testResponseTab();
+  await testResponseTab();
   testTimingsTab();
   return teardown(monitor);
 
   function getSelectedIndex(state) {
     if (!state.requests.selectedId) {
       return -1;
     }
     return getSortedRequests(state).findIndex(r => r.id === state.requests.selectedId);
@@ -156,21 +156,21 @@ add_task(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(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(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_simple-request.js
+++ b/devtools/client/netmonitor/test/browser_net_simple-request.js
@@ -7,18 +7,18 @@
  * Test whether the UI state properly reflects existence of requests
  * displayed in the Net panel. The following parts of the UI are
  * tested:
  * 1) Side panel visibility
  * 2) Side panel toggle button
  * 3) Empty user message visibility
  * 4) Number of requests displayed
  */
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   store.dispatch(Actions.batchEnable(false));
 
   is(document.querySelector(".network-details-panel-toggle").hasAttribute("disabled"),
@@ -26,29 +26,29 @@ add_task(function* () {
     "The pane toggle button should be disabled when the frontend is opened.");
   ok(document.querySelector(".request-list-empty-notice"),
     "An empty notice should be displayed when the frontend is opened.");
   is(store.getState().requests.requests.size, 0,
     "The requests menu should be empty when the frontend is opened.");
   is(!!document.querySelector(".network-details-panel"), false,
     "The network details panel should be hidden when the frontend is opened.");
 
-  yield reloadAndWait();
+  await reloadAndWait();
 
   is(document.querySelector(".network-details-panel-toggle").hasAttribute("disabled"),
     false,
     "The pane toggle button should be enabled after the first request.");
   ok(!document.querySelector(".request-list-empty-notice"),
     "The empty notice should be hidden after the first request.");
   is(store.getState().requests.requests.size, 1,
     "The requests menu should not be empty after the first request.");
   is(!!document.querySelector(".network-details-panel"), false,
     "The network details panel should still be hidden after the first request.");
 
-  yield reloadAndWait();
+  await reloadAndWait();
 
   is(document.querySelector(".network-details-panel-toggle").hasAttribute("disabled"),
     false,
     "The pane toggle button should be still be enabled after a reload.");
   ok(!document.querySelector(".request-list-empty-notice"),
     "The empty notice should be still hidden after a reload.");
   is(store.getState().requests.requests.size, 1,
     "The requests menu should not be empty after a reload.");
@@ -64,14 +64,14 @@ add_task(function* () {
     "An empty notice should be displayed again after clear.");
   is(store.getState().requests.requests.size, 0,
     "The requests menu should be empty after clear.");
   is(!!document.querySelector(".network-details-panel"), false,
     "The network details panel should still be hidden after clear.");
 
   return teardown(monitor);
 
-  function* reloadAndWait() {
+  function reloadAndWait() {
     let wait = waitForNetworkEvents(monitor, 1);
     tab.linkedBrowser.reload();
     return wait;
   }
 });
--- a/devtools/client/netmonitor/test/browser_net_sort-01.js
+++ b/devtools/client/netmonitor/test/browser_net_sort-01.js
@@ -2,20 +2,20 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test if sorting columns in the network table works correctly with new requests.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { monitor } = yield initNetMonitor(SORTING_URL);
+  let { monitor } = await initNetMonitor(SORTING_URL);
   info("Starting test... ");
 
   // It seems that this test may be slow on debug builds. This could be because
   // of the heavy dom manipulation associated with sorting.
   requestLongerTimeout(2);
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
@@ -43,73 +43,73 @@ add_task(function* () {
     url: "sjs_sorting-test-server.sjs?index=4&" + Math.random(),
     method: "GET4"
   }, {
     url: "sjs_sorting-test-server.sjs?index=3&" + Math.random(),
     method: "GET3"
   }];
 
   let wait = waitForNetworkEvents(monitor, 5);
-  yield performRequestsInContent(requests);
-  yield wait;
+  await performRequestsInContent(requests);
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
 
   isnot(getSelectedRequest(store.getState()), undefined,
     "There should be a selected item in the requests menu.");
   is(getSelectedIndex(store.getState()), 0,
     "The first item should be selected in the requests menu.");
   is(!!document.querySelector(".network-details-panel"), true,
     "The network details panel should be visible after toggle button was pressed.");
 
   testHeaders();
-  yield testContents([0, 2, 4, 3, 1], 0);
+  await testContents([0, 2, 4, 3, 1], 0);
 
   info("Testing status sort, ascending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-status-button"));
   testHeaders("status", "ascending");
-  yield testContents([0, 1, 2, 3, 4], 0);
+  await testContents([0, 1, 2, 3, 4], 0);
 
   info("Performing more requests.");
   wait = waitForNetworkEvents(monitor, 5);
-  yield performRequestsInContent(requests);
-  yield wait;
+  await performRequestsInContent(requests);
+  await wait;
 
   info("Testing status sort again, ascending.");
   testHeaders("status", "ascending");
-  yield testContents([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 0);
+  await testContents([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 0);
 
   info("Testing status sort, descending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-status-button"));
   testHeaders("status", "descending");
-  yield testContents([9, 8, 7, 6, 5, 4, 3, 2, 1, 0], 9);
+  await testContents([9, 8, 7, 6, 5, 4, 3, 2, 1, 0], 9);
 
   info("Performing more requests.");
   wait = waitForNetworkEvents(monitor, 5);
-  yield performRequestsInContent(requests);
-  yield wait;
+  await performRequestsInContent(requests);
+  await wait;
 
   info("Testing status sort again, descending.");
   testHeaders("status", "descending");
-  yield testContents([14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0], 14);
+  await testContents([14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0], 14);
 
   info("Testing status sort yet again, ascending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-status-button"));
   testHeaders("status", "ascending");
-  yield testContents([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], 0);
+  await testContents([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], 0);
 
   info("Testing status sort yet again, descending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-status-button"));
   testHeaders("status", "descending");
-  yield testContents([14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0], 14);
+  await testContents([14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0], 14);
 
   return teardown(monitor);
 
   function testHeaders(sortType, direction) {
     let doc = monitor.panelWin.document;
     let target = doc.querySelector("#requests-list-" + sortType + "-button");
     let headers = doc.querySelectorAll(".requests-list-header-button");
 
@@ -136,17 +136,17 @@ add_task(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(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
@@ -2,20 +2,20 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test if sorting columns in the network table works correctly.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { monitor } = yield initNetMonitor(SORTING_URL);
+  let { monitor } = await initNetMonitor(SORTING_URL);
   info("Starting test... ");
 
   // It seems that this test may be slow on debug builds. This could be because
   // of the heavy dom manipulation associated with sorting.
   requestLongerTimeout(2);
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
@@ -43,157 +43,157 @@ add_task(function* () {
     url: "sjs_sorting-test-server.sjs?index=4&" + Math.random(),
     method: "GET4"
   }, {
     url: "sjs_sorting-test-server.sjs?index=3&" + Math.random(),
     method: "GET3"
   }];
 
   let wait = waitForNetworkEvents(monitor, 5);
-  yield performRequestsInContent(requests);
-  yield wait;
+  await performRequestsInContent(requests);
+  await wait;
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
 
   isnot(getSelectedRequest(store.getState()), undefined,
     "There should be a selected item in the requests menu.");
   is(getSelectedIndex(store.getState()), 0,
     "The first item should be selected in the requests menu.");
   is(!!document.querySelector(".network-details-panel"), true,
     "The network details panel should be visible after toggle button was pressed.");
 
   testHeaders();
-  yield testContents([0, 2, 4, 3, 1]);
+  await testContents([0, 2, 4, 3, 1]);
 
   info("Testing status sort, ascending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-status-button"));
   testHeaders("status", "ascending");
-  yield testContents([0, 1, 2, 3, 4]);
+  await testContents([0, 1, 2, 3, 4]);
 
   info("Testing status sort, descending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-status-button"));
   testHeaders("status", "descending");
-  yield testContents([4, 3, 2, 1, 0]);
+  await testContents([4, 3, 2, 1, 0]);
 
   info("Testing status sort, ascending. Checking sort loops correctly.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-status-button"));
   testHeaders("status", "ascending");
-  yield testContents([0, 1, 2, 3, 4]);
+  await testContents([0, 1, 2, 3, 4]);
 
   info("Testing method sort, ascending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-method-button"));
   testHeaders("method", "ascending");
-  yield testContents([0, 1, 2, 3, 4]);
+  await testContents([0, 1, 2, 3, 4]);
 
   info("Testing method sort, descending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-method-button"));
   testHeaders("method", "descending");
-  yield testContents([4, 3, 2, 1, 0]);
+  await testContents([4, 3, 2, 1, 0]);
 
   info("Testing method sort, ascending. Checking sort loops correctly.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-method-button"));
   testHeaders("method", "ascending");
-  yield testContents([0, 1, 2, 3, 4]);
+  await testContents([0, 1, 2, 3, 4]);
 
   info("Testing file sort, ascending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-file-button"));
   testHeaders("file", "ascending");
-  yield testContents([0, 1, 2, 3, 4]);
+  await testContents([0, 1, 2, 3, 4]);
 
   info("Testing file sort, descending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-file-button"));
   testHeaders("file", "descending");
-  yield testContents([4, 3, 2, 1, 0]);
+  await testContents([4, 3, 2, 1, 0]);
 
   info("Testing file sort, ascending. Checking sort loops correctly.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-file-button"));
   testHeaders("file", "ascending");
-  yield testContents([0, 1, 2, 3, 4]);
+  await testContents([0, 1, 2, 3, 4]);
 
   info("Testing type sort, ascending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-type-button"));
   testHeaders("type", "ascending");
-  yield testContents([0, 1, 2, 3, 4]);
+  await testContents([0, 1, 2, 3, 4]);
 
   info("Testing type sort, descending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-type-button"));
   testHeaders("type", "descending");
-  yield testContents([4, 3, 2, 1, 0]);
+  await testContents([4, 3, 2, 1, 0]);
 
   info("Testing type sort, ascending. Checking sort loops correctly.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-type-button"));
   testHeaders("type", "ascending");
-  yield testContents([0, 1, 2, 3, 4]);
+  await testContents([0, 1, 2, 3, 4]);
 
   info("Testing transferred sort, ascending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-transferred-button"));
   testHeaders("transferred", "ascending");
-  yield testContents([0, 1, 2, 3, 4]);
+  await testContents([0, 1, 2, 3, 4]);
 
   info("Testing transferred sort, descending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-transferred-button"));
   testHeaders("transferred", "descending");
-  yield testContents([4, 3, 2, 1, 0]);
+  await testContents([4, 3, 2, 1, 0]);
 
   info("Testing transferred sort, ascending. Checking sort loops correctly.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-transferred-button"));
   testHeaders("transferred", "ascending");
-  yield testContents([0, 1, 2, 3, 4]);
+  await testContents([0, 1, 2, 3, 4]);
 
   info("Testing size sort, ascending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-contentSize-button"));
   testHeaders("contentSize", "ascending");
-  yield testContents([0, 1, 2, 3, 4]);
+  await testContents([0, 1, 2, 3, 4]);
 
   info("Testing size sort, descending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-contentSize-button"));
   testHeaders("contentSize", "descending");
-  yield testContents([4, 3, 2, 1, 0]);
+  await testContents([4, 3, 2, 1, 0]);
 
   info("Testing size sort, ascending. Checking sort loops correctly.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-contentSize-button"));
   testHeaders("contentSize", "ascending");
-  yield testContents([0, 1, 2, 3, 4]);
+  await testContents([0, 1, 2, 3, 4]);
 
   info("Testing waterfall sort, ascending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-waterfall-button"));
   testHeaders("waterfall", "ascending");
-  yield testContents([0, 2, 4, 3, 1]);
+  await testContents([0, 2, 4, 3, 1]);
 
   info("Testing waterfall sort, descending.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-waterfall-button"));
   testHeaders("waterfall", "descending");
-  yield testContents([4, 2, 0, 1, 3]);
+  await testContents([4, 2, 0, 1, 3]);
 
   info("Testing waterfall sort, ascending. Checking sort loops correctly.");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#requests-list-waterfall-button"));
   testHeaders("waterfall", "ascending");
-  yield testContents([0, 2, 4, 3, 1]);
+  await testContents([0, 2, 4, 3, 1]);
 
   return teardown(monitor);
 
   function getSelectedIndex(state) {
     if (!state.requests.selectedId) {
       return -1;
     }
     return getSortedRequests(state).findIndex(r => r.id === state.requests.selectedId);
@@ -220,17 +220,17 @@ add_task(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(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_statistics-01.js
+++ b/devtools/client/netmonitor/test/browser_net_statistics-01.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if the statistics panel displays correctly.
  */
 
-add_task(function* () {
-  let { monitor } = yield initNetMonitor(STATISTICS_URL);
+add_task(async function () {
+  let { monitor } = await initNetMonitor(STATISTICS_URL);
   info("Starting test... ");
 
   let panel = monitor.panelWin;
   let { document, store, windowRequire, connector } = panel;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   ok(document.querySelector(".monitor-panel"),
     "The current main panel is correct.");
@@ -21,32 +21,32 @@ add_task(function* () {
   info("Displaying statistics panel");
   store.dispatch(Actions.openStatistics(connector, true));
 
   ok(document.querySelector(".statistics-panel"),
     "The current main panel is correct.");
 
   info("Waiting for placeholder to display");
 
-  yield waitUntil(
+  await waitUntil(
     () => document.querySelectorAll(".pie-chart-container[placeholder=true]")
                   .length == 2);
   ok(true, "Two placeholder pie charts appear to be rendered correctly.");
 
-  yield waitUntil(
+  await waitUntil(
     () => document.querySelectorAll(".table-chart-container[placeholder=true]")
                   .length == 2);
   ok(true, "Two placeholde table charts appear to be rendered correctly.");
 
   info("Waiting for chart to display");
 
-  yield waitUntil(
+  await waitUntil(
     () => document.querySelectorAll(".pie-chart-container:not([placeholder=true])")
                   .length == 2);
   ok(true, "Two real pie charts appear to be rendered correctly.");
 
-  yield waitUntil(
+  await waitUntil(
     () => document.querySelectorAll(".table-chart-container:not([placeholder=true])")
                   .length == 2);
   ok(true, "Two real table charts appear to be rendered correctly.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_statistics-02.js
+++ b/devtools/client/netmonitor/test/browser_net_statistics-02.js
@@ -3,18 +3,18 @@
 
 "use strict";
 
 /**
  * Test if the correct filtering predicates are used when filtering from
  * the performance analysis view.
  */
 
-add_task(function* () {
-  let { monitor } = yield initNetMonitor(FILTERING_URL);
+add_task(async function () {
+  let { monitor } = await initNetMonitor(FILTERING_URL);
   info("Starting test... ");
 
   let panel = monitor.panelWin;
   let { document, store, windowRequire, connector } = panel;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".requests-list-filter-html-button"));
@@ -29,24 +29,24 @@ add_task(function* () {
   testFilterButtonsCustom(monitor, [0, 1, 1, 1, 0, 0, 0, 0, 1, 1]);
   info("The correct filtering predicates are used before entering perf. analysis mode.");
 
   store.dispatch(Actions.openStatistics(connector, true));
 
   ok(document.querySelector(".statistics-panel"),
     "The main panel is switched to the statistics panel.");
 
-  yield waitUntil(
+  await waitUntil(
     () => document.querySelectorAll(".pie-chart-container:not([placeholder=true])")
                   .length == 2);
   ok(true, "Two real pie charts appear to be rendered correctly.");
 
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".pie-chart-slice"));
 
   ok(document.querySelector(".monitor-panel"),
     "The main panel is switched back to the monitor panel.");
 
   testFilterButtons(monitor, "html");
   info("The correct filtering predicate is used when exiting perf. analysis mode.");
 
-  yield teardown(monitor);
+  await teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/browser_net_status-codes.js
+++ b/devtools/client/netmonitor/test/browser_net_status-codes.js
@@ -2,20 +2,20 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if requests display the correct status code and text in the UI.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { tab, monitor } = yield initNetMonitor(STATUS_CODES_URL);
+  let { tab, monitor } = await initNetMonitor(STATUS_CODES_URL);
 
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
@@ -94,49 +94,49 @@ add_task(function* () {
         fullMimeType: "text/plain; charset=utf-8",
         size: L10N.getFormatStrWithNumbers("networkMenu.sizeB", 22),
         time: true
       }
     }
   ];
 
   let wait = waitForNetworkEvents(monitor, 5);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield wait;
+  await wait;
 
   info("Performing tests");
-  yield verifyRequests();
-  yield testTab(0, testHeaders);
-  yield testTab(2, testParams);
+  await verifyRequests();
+  await testTab(0, testHeaders);
+  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(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.");
@@ -186,17 +186,17 @@ add_task(function* () {
       "The status summary code is incorrect.");
     is(summaryValues[3].value, status + " " + statusText,
       "The status summary value is incorrect.");
   }
 
   /**
    * A function that tests "Params" panel contains correct information.
    */
-  function* testParams(data, index) {
+  function testParams(data, index) {
     EventUtils.sendMouseEvent({ type: "mousedown" },
       document.querySelectorAll(".request-list-item")[index]);
     EventUtils.sendMouseEvent({ type: "click" },
       document.querySelector("#params-tab"));
 
     let panel = document.querySelector("#params-panel");
     // Bug 1414981 - Request URL should not show #hash
     let statusParamValue = data.uri.split("=").pop().split("#")[0];
--- a/devtools/client/netmonitor/test/browser_net_streaming-response.js
+++ b/devtools/client/netmonitor/test/browser_net_streaming-response.js
@@ -3,18 +3,18 @@
 
 "use strict";
 
 /**
  * Tests if reponses from streaming content types (MPEG-DASH, HLS) are
  * displayed as XML or plain text
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
 
   info("Starting test... ");
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   let {
     getDisplayedRequests,
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
@@ -24,28 +24,28 @@ add_task(function* () {
   const REQUESTS = [
     [ "hls-m3u8", /^#EXTM3U/ ],
     [ "mpeg-dash", /^<\?xml/ ]
   ];
 
   let wait = waitForNetworkEvents(monitor, REQUESTS.length);
   for (let [fmt] of REQUESTS) {
     let url = CONTENT_TYPE_SJS + "?fmt=" + fmt;
-    yield ContentTask.spawn(tab.linkedBrowser, { url }, function* (args) {
+    await ContentTask.spawn(tab.linkedBrowser, { url }, async function (args) {
       content.wrappedJSObject.performRequests(1, args.url);
     });
   }
-  yield wait;
+  await wait;
 
   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);
   }
 
   REQUESTS.forEach(([ fmt ], i) => {
     verifyRequestItemTarget(
       document,
       getDisplayedRequests(store.getState()),
       getSortedRequests(store.getState()).get(i),
       "GET",
@@ -56,25 +56,25 @@ add_task(function* () {
       });
   });
 
   wait = waitForDOM(document, "#response-panel");
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector(".network-details-panel-toggle"));
   EventUtils.sendMouseEvent({ type: "click" },
     document.querySelector("#response-tab"));
-  yield wait;
+  await wait;
 
   store.dispatch(Actions.selectRequest(null));
 
-  yield selectIndexAndWaitForSourceEditor(monitor, 0);
+  await selectIndexAndWaitForSourceEditor(monitor, 0);
   // the hls-m3u8 part
   testEditorContent(REQUESTS[0]);
 
-  yield selectIndexAndWaitForSourceEditor(monitor, 1);
+  await selectIndexAndWaitForSourceEditor(monitor, 1);
   // the mpeg-dash part
   testEditorContent(REQUESTS[1]);
 
   return teardown(monitor);
 
   function testEditorContent([ fmt, textRe ]) {
     ok(document.querySelector(".CodeMirror-line").textContent.match(textRe),
       "The text shown in the source editor for " + fmt + " is correct.");
--- a/devtools/client/netmonitor/test/browser_net_throttle.js
+++ b/devtools/client/netmonitor/test/browser_net_throttle.js
@@ -1,24 +1,24 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Network throttling integration test.
 
 "use strict";
 
-add_task(function* () {
-  yield throttleTest(true);
-  yield throttleTest(false);
+add_task(async function () {
+  await throttleTest(true);
+  await throttleTest(false);
 });
 
-function* throttleTest(actuallyThrottle) {
+async function throttleTest(actuallyThrottle) {
   requestLongerTimeout(2);
 
-  let { monitor } = yield initNetMonitor(SIMPLE_URL);
+  let { monitor } = await initNetMonitor(SIMPLE_URL);
   let { store, windowRequire, connector } = monitor.panelWin;
   let { ACTIVITY_TYPE } = windowRequire("devtools/client/netmonitor/src/constants");
   let { setPreferences, triggerActivity } = connector;
   let {
     getSortedRequests,
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
 
   info("Starting test... (actuallyThrottle = " + actuallyThrottle + ")");
@@ -34,33 +34,33 @@ function* throttleTest(actuallyThrottle)
       downloadBPSMean: size,
       downloadBPSMax: size,
       uploadBPSMean: 10000,
       uploadBPSMax: 10000,
     },
   };
 
   info("sending throttle request");
-  yield new Promise((resolve) => {
+  await new Promise((resolve) => {
     setPreferences(request, response => {
       resolve(response);
     });
   });
 
   let wait = waitForNetworkEvents(monitor, 1);
-  yield triggerActivity(ACTIVITY_TYPE.RELOAD.WITH_CACHE_DISABLED);
-  yield wait;
+  await triggerActivity(ACTIVITY_TYPE.RELOAD.WITH_CACHE_DISABLED);
+  await wait;
 
-  yield waitUntil(() => {
+  await waitUntil(() => {
     let requestItem = getSortedRequests(store.getState()).get(0);
     return requestItem && requestItem.eventTimings;
   });
 
   let requestItem = getSortedRequests(store.getState()).get(0);
   const reportedOneSecond = requestItem.eventTimings.timings.receive > 1000;
   if (actuallyThrottle) {
     ok(reportedOneSecond, "download reported as taking more than one second");
   } else {
     ok(!reportedOneSecond, "download reported as taking less than one second");
   }
 
-  yield teardown(monitor);
+  await teardown(monitor);
 }
--- a/devtools/client/netmonitor/test/browser_net_timeline_ticks.js
+++ b/devtools/client/netmonitor/test/browser_net_timeline_ticks.js
@@ -2,20 +2,20 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if timeline correctly displays interval divisions.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
-  let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
+  let { tab, monitor } = await initNetMonitor(SIMPLE_URL);
   info("Starting test... ");
 
   let { $, $all, NetMonitorView, NetMonitorController } = monitor.panelWin;
   let { RequestsMenu } = NetMonitorView;
 
   // Disable transferred size column support for this test.
   // Without this, the waterfall only has enough room for one division, which
   // would remove most of the value of this test.
@@ -29,17 +29,17 @@ add_task(function* () {
   ok($all(".requests-list-timings-division").length == 0,
     "No tick labels should be displayed when the frontend is opened.");
 
   ok(!RequestsMenu._canvas, "No canvas should be created when the frontend is opened.");
   ok(!RequestsMenu._ctx, "No 2d context should be created when the frontend is opened.");
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.reload();
-  yield wait;
+  await wait;
 
   // Make sure the DOMContentLoaded and load markers don't interfere with
   // this test by removing them and redrawing the waterfall (bug 1224088).
   NetMonitorController.NetworkEventsHandler.clearMarkers();
   RequestsMenu._flushWaterfallViews(true);
 
   ok(!$("#requests-list-waterfall-label"),
     "The timeline label should be hidden after the first request.");
--- a/devtools/client/netmonitor/test/browser_net_timing-division.js
+++ b/devtools/client/netmonitor/test/browser_net_timing-division.js
@@ -2,30 +2,30 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Tests if timing intervals are divided againts seconds when appropriate.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
   info("Starting test... ");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
   store.dispatch(Actions.batchEnable(false));
 
   let wait = waitForNetworkEvents(monitor, 2);
   // Timeout needed for having enough divisions on the time scale.
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests(2, null, 3000);
   });
-  yield wait;
+  await wait;
 
   let milDivs = document.querySelectorAll(
     ".requests-list-timings-division[data-division-scale=millisecond]");
   let secDivs = document.querySelectorAll(
     ".requests-list-timings-division[data-division-scale=second]");
   let minDivs = document.querySelectorAll(
     ".requests-list-timings-division[data-division-scale=minute]");
 
--- a/devtools/client/netmonitor/test/browser_net_truncate.js
+++ b/devtools/client/netmonitor/test/browser_net_truncate.js
@@ -2,36 +2,36 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Verifies that truncated response bodies still have the correct reported size.
  */
 
-add_task(function* () {
+add_task(async function () {
   let { RESPONSE_BODY_LIMIT } = require("devtools/shared/webconsole/network-monitor");
   let URL = EXAMPLE_URL + "sjs_truncate-test-server.sjs?limit=" + RESPONSE_BODY_LIMIT;
-  let { monitor, tab } = yield initNetMonitor(URL);
+  let { monitor, tab } = await initNetMonitor(URL);
 
   info("Starting test... ");
 
   let { L10N } = require("devtools/client/netmonitor/src/utils/l10n");
 
   let { document } = monitor.panelWin;
 
   let wait = waitForNetworkEvents(monitor, 1);
   tab.linkedBrowser.reload();
-  yield wait;
+  await wait;
 
   // Response content will be updated asynchronously, we should make sure data is updated
   // on DOM before asserting.
-  yield waitUntil(() => document.querySelector(".request-list-item"));
+  await waitUntil(() => document.querySelector(".request-list-item"));
   let item = document.querySelectorAll(".request-list-item")[0];
-  yield waitUntil(() => item.querySelector(".requests-list-type").title);
+  await waitUntil(() => item.querySelector(".requests-list-type").title);
 
   let type = item.querySelector(".requests-list-type").textContent;
   let fullMimeType = item.querySelector(".requests-list-type").title;
   let transferred = item.querySelector(".requests-list-transferred").textContent;
   let size = item.querySelector(".requests-list-size").textContent;
 
   is(type, "plain", "Type should be rendered correctly.");
   is(fullMimeType, "text/plain; charset=utf-8",
--- a/devtools/client/netmonitor/test/browser_net_waterfall-click.js
+++ b/devtools/client/netmonitor/test/browser_net_waterfall-click.js
@@ -2,31 +2,31 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 /**
  * Test that clicking on the waterfall opens the timing sidebar panel.
  */
 
-add_task(function* () {
-  let { tab, monitor } = yield initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL);
+add_task(async function () {
+  let { tab, monitor } = await initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL);
   let { document } = monitor.panelWin;
 
   let onAllEvents = waitForNetworkEvents(monitor, CONTENT_TYPE_WITHOUT_CACHE_REQUESTS);
-  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+  await ContentTask.spawn(tab.linkedBrowser, {}, async function () {
     content.wrappedJSObject.performRequests();
   });
-  yield onAllEvents;
+  await onAllEvents;
 
   info("Clicking waterfall and waiting for panel update.");
   let wait = waitForDOM(document, "#timings-panel");
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     document.querySelectorAll(".requests-list-timings")[0]);
 
-  yield wait;
+  await wait;
 
   ok(document.querySelector("#timings-tab[aria-selected=true]"),
      "Timings tab is selected.");
 
   return teardown(monitor);
 });
--- a/devtools/client/netmonitor/test/head.js
+++ b/devtools/client/netmonitor/test/head.js
@@ -249,107 +249,107 @@ 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 Task.spawn(function* () {
-    let tab = yield addTab(url);
+  return (async function () {
+    let tab = await addTab(url);
     info("Net tab added successfully: " + url);
 
     let target = TargetFactory.forTab(tab);
 
-    yield target.makeRemote();
+    await target.makeRemote();
     info("Target remoted.");
 
-    let toolbox = yield gDevTools.showToolbox(target, "netmonitor");
+    let toolbox = await gDevTools.showToolbox(target, "netmonitor");
     info("Network monitor pane shown successfully.");
 
     let monitor = toolbox.getCurrentPanel();
 
     startNetworkEventUpdateObserver(monitor.panelWin);
 
     if (!enableCache) {
       let panel = monitor.panelWin;
       let { store, windowRequire } = panel;
       let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
 
       info("Disabling cache and reloading page.");
       let requestsDone = waitForAllRequestsFinished(monitor);
       let markersDone = waitForTimelineMarkers(monitor);
-      yield toggleCache(target, true);
-      yield Promise.all([requestsDone, markersDone]);
+      await toggleCache(target, true);
+      await Promise.all([requestsDone, markersDone]);
       info("Cache disabled when the current and all future toolboxes are open.");
       // Remove any requests generated by the reload while toggling the cache to
       // avoid interfering with the test.
       isnot([...target.activeConsole.getNetworkEvents()].length, 0,
          "Request to reconfigure the tab was recorded.");
       info("Clearing requests in the console client.");
       target.activeConsole.clearNetworkRequests();
       info("Clearing requests in the UI.");
 
       store.dispatch(Actions.clearRequests());
     }
 
     return {tab, monitor, toolbox};
-  });
+  })();
 }
 
 function restartNetMonitor(monitor, newUrl) {
   info("Restarting the specified network monitor.");
 
-  return Task.spawn(function* () {
+  return (async function () {
     let tab = monitor.toolbox.target.tab;
     let url = newUrl || tab.linkedBrowser.currentURI.spec;
 
-    yield waitForAllNetworkUpdateEvents();
+    await waitForAllNetworkUpdateEvents();
     info("All pending requests finished.");
 
     let onDestroyed = monitor.once("destroyed");
-    yield removeTab(tab);
-    yield onDestroyed;
+    await removeTab(tab);
+    await onDestroyed;
 
     return initNetMonitor(url);
-  });
+  })();
 }
 
 function teardown(monitor) {
   info("Destroying the specified network monitor.");
 
-  return Task.spawn(function* () {
+  return (async function () {
     let tab = monitor.toolbox.target.tab;
 
-    yield waitForAllNetworkUpdateEvents();
+    await waitForAllNetworkUpdateEvents();
     info("All pending requests finished.");
 
     let onDestroyed = monitor.once("destroyed");
-    yield removeTab(tab);
-    yield onDestroyed;
-  });
+    await removeTab(tab);
+    await onDestroyed;
+  })();
 }
 
 function waitForNetworkEvents(monitor, getRequests) {
   return new Promise((resolve) => {
     let panel = monitor.panelWin;
     let { getNetworkRequest } = panel.connector;
     let networkEvent = 0;
     let payloadReady = 0;
@@ -390,17 +390,17 @@ function waitForNetworkEvents(monitor, g
       }
     }
 
     panel.on(EVENTS.NETWORK_EVENT, onNetworkEvent);
     panel.on(EVENTS.PAYLOAD_READY, onPayloadReady);
   });
 }
 
-function* verifyRequestItemTarget(document, requestList, requestItem, method,
+function verifyRequestItemTarget(document, requestList, requestItem, method,
                                  url, data = {}) {
   info("> Verifying: " + method + " " + url + " " + data.toSource());
 
   let visibleIndex = requestList.indexOf(requestItem);
 
   info("Visible index of item: " + visibleIndex);
 
   let { fuzzyUrl, status, statusText, cause, type, fullMimeType,