Bläddra i källkod

fixed network max timeout implementation

Gildas 7 år sedan
förälder
incheckning
40495e4b27
2 ändrade filer med 22 tillägg och 4 borttagningar
  1. 11 2
      cli/back-ends/webdriver-gecko.js
  2. 11 2
      maff2html/back-ends/webdriver-gecko.js

+ 11 - 2
cli/back-ends/webdriver-gecko.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-/* global require, exports, process, setTimeout */
+/* global require, exports, process, setTimeout, clearTimeout */
 
 const fs = require("fs");
 
@@ -111,7 +111,16 @@ exports.getPageData = async options => {
 			} else if (options.browserWaitUntil == "load") {
 				scriptPromise = driver.executeAsyncScript("if (document.readyState == \"loading\" || document.readyState == \"interactive\") { document.addEventListener(\"load\", () => arguments[0]()) } else { arguments[0](); }");
 			}
-			await Promise.race([scriptPromise, new Promise(resolve => setTimeout(resolve, NETWORK_IDLE_MAX_DELAY))]);
+			let cancelTimeout;
+			const timeoutPromise = new Promise(resolve => {
+				let timeoutId = setTimeout(resolve, NETWORK_IDLE_MAX_DELAY);
+				cancelTimeout = () => {
+					clearTimeout(timeoutId);
+					resolve();
+				};
+			});
+			await Promise.race([scriptPromise, timeoutPromise]);
+			cancelTimeout();
 		}
 		if (!options.removeFrames) {
 			await executeScriptInFrames(driver, scripts);

+ 11 - 2
maff2html/back-ends/webdriver-gecko.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-/* global require, exports, process, setTimeout */
+/* global require, exports, process, setTimeout, clearTimeout */
 
 const fs = require("fs");
 
@@ -111,7 +111,16 @@ exports.getPageData = async options => {
 			} else if (options.browserWaitUntil == "load") {
 				scriptPromise = driver.executeAsyncScript("if (document.readyState == \"loading\" || document.readyState == \"interactive\") { document.addEventListener(\"load\", () => arguments[0]()) } else { arguments[0](); }");
 			}
-			await Promise.race([scriptPromise, new Promise(resolve => setTimeout(resolve, NETWORK_IDLE_MAX_DELAY))]);
+			let cancelTimeout;
+			const timeoutPromise = new Promise(resolve => {
+				let timeoutId = setTimeout(resolve, NETWORK_IDLE_MAX_DELAY);
+				cancelTimeout = () => {
+					clearTimeout(timeoutId);
+					resolve();
+				};
+			});
+			await Promise.race([scriptPromise, timeoutPromise]);
+			cancelTimeout();
 		}
 		const result = await driver.executeAsyncScript(getPageDataScript(), options);
 		if (result.error) {