[tor-commits] [meek/webextension] Make roundtrip async.

dcf at torproject.org dcf at torproject.org
Fri Feb 15 21:58:43 UTC 2019


commit 52ff3d08b09d96fca4c6ef247fa9c173b3b867a9
Author: David Fifield <david at bamsoftware.com>
Date:   Fri Feb 15 12:08:01 2019 -0700

    Make roundtrip async.
    
    roundtrip doesn't need to know the ID; tack that on in the onMessage
    listener.
---
 webextension/background.js | 28 +++++++++++++---------------
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/webextension/background.js b/webextension/background.js
index fd39273..8092352 100644
--- a/webextension/background.js
+++ b/webextension/background.js
@@ -79,7 +79,7 @@ function base64_encode(dec_buf) {
     return btoa(dec_str);
 }
 
-function roundtrip(id, request) {
+async function roundtrip(request) {
     // Process the incoming request spec and convert it into parameters to the
     // fetch API. Also enforce some restrictions on what kinds of requests we
     // are willing to make.
@@ -119,28 +119,26 @@ function roundtrip(id, request) {
         // TODO: strip Origin header?
         // TODO: proxy
     } catch (error) {
-        port.postMessage({id, response: {error: `request spec failed valiation: ${error.message}`}});
-        return;
+        return {error: `request spec failed valiation: ${error.message}`};
     }
 
-    // Now actually do the request and send the result back to the native
-    // process.
-    fetch(url, init)
-        .then(resp => resp.arrayBuffer().then(body => ({
-            status: resp.status,
-            body: base64_encode(body),
-        })))
+    // Now actually do the request and build a response object.
+    try {
+        let resp = await fetch(url, init);
+        let body = await resp.arrayBuffer();
+        return {status: resp.status, body: base64_encode(body)};
+    } catch (error) {
         // Convert any errors into an error response.
-        .catch(error => ({error: error.message}))
-        // Send the response (success or failure) back to the requester, tagged
-        // with its ID.
-        .then(response => port.postMessage({id, response}));
+        return {error: error.message};
+    }
 }
 
 port.onMessage.addListener((message) => {
     switch (message.command) {
         case "roundtrip":
-            roundtrip(message.id, message.request);
+            // Do a roundtrip and send the result back to the native process.
+            roundtrip(message.request)
+                .then(response => port.postMessage({id: message.id, response}));
             break;
         case "report-address":
             // Tell meek-client where our subprocess (the one that actually





More information about the tor-commits mailing list