Просмотр исходного кода

fix: ensure messages are ordered (#1474)

tophf 3 лет назад
Родитель
Сommit
4fc1c17db9
2 измененных файлов с 3 добавлено и 6 удалено
  1. 2 2
      src/injected/content/bridge.js
  2. 1 4
      src/injected/content/requests.js

+ 2 - 2
src/injected/content/bridge.js

@@ -107,9 +107,9 @@ const bridge = {
 
 export default bridge;
 
-browser.runtime.onMessage.addListener(({ cmd, data }, src) => {
+browser.runtime.onMessage.addListener(async ({ cmd, data }, src) => {
   const fn = bgHandlers[cmd];
-  if (fn) fn(data, src);
+  if (fn) await fn(data, src); // awaiting to let the sender know when we're done
 });
 
 /**

+ 1 - 4
src/injected/content/requests.js

@@ -49,7 +49,6 @@ bridge.addBackgroundHandlers({
       req.gotChunks = true;
     }
     const { blobbed, data, chunked, type } = msg;
-    const isLoadEnd = type === 'loadend';
     // only CONTENT realm can read blobs from an extension:// URL
     const response = data
       && req.eventsToNotify::includes(type)
@@ -67,9 +66,7 @@ bridge.addBackgroundHandlers({
     }
     // If the user in incognito supplied only `onloadend` then it arrives first, followed by chunks
     // If the user supplied any event before `loadend`, all chunks finish before `loadend` arrives
-    if (isLoadEnd) {
-      // loadend's bridge.post() should run last
-      await 0;
+    if (type === 'loadend') {
       req.gotLoadEnd = true;
     }
     if (importing) {