Skip to content

Commit 3bdc704

Browse files
authored
Merge pull request #46 from cloudflare/issue-44-test-requests-do-not-stop-when-tab-is-not-visible
Fix Issue 44 - Pause tests when the page is not visible to stop leaking timers
2 parents ba66f6b + 1b28243 commit 3bdc704

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

src/engines/BandwidthEngine/BandwidthEngine.js

+17
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ class BandwidthMeasurementEngine {
6363
this.#uploadApi = uploadApiUrl;
6464
this.#throttleMs = throttleMs;
6565
this.#estimatedServerTime = Math.max(0, estimatedServerTime);
66+
67+
document.addEventListener('visibilitychange', this.#handleVisibilityChange);
6668
}
6769

6870
// Public attributes
@@ -87,6 +89,14 @@ class BandwidthMeasurementEngine {
8789
this.#fetchOptions = v;
8890
}
8991

92+
#handleVisibilityChange = () => {
93+
if (document.visibilityState === 'hidden') {
94+
this.pause();
95+
} else if (document.visibilityState === 'visible') {
96+
this.play();
97+
}
98+
};
99+
90100
finishRequestDuration = 1000; // download/upload duration (ms) to reach for stopping further measurements
91101
getServerTime = cfGetServerTime; // method to extract server time from response
92102

@@ -371,6 +381,13 @@ class BandwidthMeasurementEngine {
371381
const curPromise = this.#currentFetchPromise;
372382
curPromise && (curPromise._cancel = true);
373383
}
384+
385+
deleteEventListener() {
386+
document.removeEventListener(
387+
'visibilitychange',
388+
this.#handleVisibilityChange
389+
);
390+
}
374391
}
375392

376393
export default BandwidthMeasurementEngine;

src/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,7 @@ class MeasurementEngine {
330330
msmResults.finished = true;
331331
this.onResultsChange({ type });
332332
this.#running && this.#next();
333+
engine.deleteEventListener();
333334
};
334335

335336
engine.onConnectionError = e => {
@@ -443,6 +444,7 @@ class MeasurementEngine {
443444
}
444445

445446
this.#running && this.#next();
447+
engine.deleteEventListener();
446448
};
447449

448450
engine.onConnectionError = e => {

0 commit comments

Comments
 (0)