Browse Source

feat: throw error if the tab is not loaded

Ahmad Kholid 3 years ago
parent
commit
d0dff83b6c

+ 0 - 1
src/background/workflowEngine/blocksHandler/handlerNewTab.js

@@ -97,7 +97,6 @@ async function newTab({ outputs, data }) {
       await Promise.allSettled(preloadScripts);
     }
 
-    console.log(data, data.waitTabLoaded);
     if (data.waitTabLoaded) {
       await waitTabLoaded(
         this.activeTab.id,

+ 12 - 1
src/background/workflowEngine/helper.js

@@ -21,14 +21,24 @@ export function waitTabLoaded(tabId, ms = 10000) {
   return new Promise((resolve, reject) => {
     const timeout = null;
     let isResolved = false;
+    const onErrorOccurred = (details) => {
+      if (details.tabId !== tabId) return;
+
+      isResolved = true;
+      browser.webNavigation.onErrorOccurred.removeListener(onErrorOccurred);
+      reject(new Error(details.error));
+    };
 
     if (ms > 0) {
       setTimeout(() => {
         isResolved = true;
+        browser.webNavigation.onErrorOccurred.removeListener(onErrorOccurred);
         reject(new Error('Timeout'));
       }, ms);
     }
 
+    browser.webNavigation.onErrorOccurred.addListener(onErrorOccurred);
+
     const activeTabStatus = () => {
       if (isResolved) return;
 
@@ -41,12 +51,13 @@ export function waitTabLoaded(tabId, ms = 10000) {
         if (tab.status === 'loading') {
           setTimeout(() => {
             activeTabStatus();
-          }, 500);
+          }, 1000);
           return;
         }
 
         clearTimeout(timeout);
 
+        browser.webNavigation.onErrorOccurred.removeListener(onErrorOccurred);
         resolve();
       });
     };