|
19 | 19 | types: ["main_frame", "sub_frame", "object"] |
20 | 20 | }; |
21 | 21 |
|
22 | | - |
23 | | - browser.webRequest.onCompleted.addListener(r => { |
24 | | - cleanup(r); |
25 | | - let {tabId, url} = r; |
26 | | - let key = tabKey(tabId, url); |
27 | | - if (reloadingTabs.has(key)) { |
28 | | - debug("Reloading tab", key); |
29 | | - browser.tabs.update(tabId, {url}); |
30 | | - } |
31 | | - }, filter); |
32 | | - browser.webRequest.onErrorOccurred.addListener(cleanup, filter); |
| 22 | + for (let event of ["onCompleted", "onErrorOccurred"]) |
| 23 | + browser.webRequest[event].addListener(cleanup, filter); |
33 | 24 |
|
34 | 25 | let executeAll = async (scripts, where) => { |
35 | 26 | let {url, tabId, frameId} = where; |
|
99 | 90 | let filter = browser.webRequest.filterResponseData(requestId); |
100 | 91 | let buffer = []; |
101 | 92 | let first = true; |
| 93 | + let done = false; |
| 94 | + let mustReload = false; |
102 | 95 | let runAndFlush = async () => { |
103 | 96 | let scriptsRan = await executeAll(scripts, request); |
104 | 97 | if (mustCheckFeed && !scriptsRan) { |
| 98 | + mustReload = true; |
105 | 99 | debug(`Marking as "must reload"`, tabId, url); |
106 | 100 | reloadingTabs.add(tabKey(tabId, url)); |
107 | 101 | } |
|
113 | 107 | filter.disconnect(); |
114 | 108 | buffer = null; |
115 | 109 | } |
| 110 | + if (done) { |
| 111 | + filter.onstop(null); |
| 112 | + } |
116 | 113 | }; |
117 | 114 |
|
118 | 115 | if (brokenOnLoad) { |
|
137 | 134 | filter.disconnect(); |
138 | 135 | }; |
139 | 136 |
|
140 | | - |
| 137 | + filter.onstop = event => { |
| 138 | + done = true; |
| 139 | + if (mustReload && !buffer) { |
| 140 | + mustReload = false; |
| 141 | + browser.tabs.update(tabId, {url}); |
| 142 | + } |
| 143 | + } |
141 | 144 | } |
142 | 145 | } |
143 | 146 | } |
0 commit comments