From d1d09fb8039b4b8c7f2f5d6c844ea72d8a3cefe6 Mon Sep 17 00:00:00 2001 From: romainmenke Date: Sun, 25 Jul 2021 09:13:29 +0200 Subject: [PATCH] always set a signal on Request --- fetch.js | 7 ++++++- test/test.js | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/fetch.js b/fetch.js index 70ebb88..ce474a0 100644 --- a/fetch.js +++ b/fetch.js @@ -370,7 +370,12 @@ export function Request(input, options) { } this.method = normalizeMethod(options.method || this.method || 'GET') this.mode = options.mode || this.mode || null - this.signal = options.signal || this.signal + this.signal = options.signal || this.signal || (function () { + if ('AbortController' in global) { + var ctrl = new AbortController(); + return ctrl.signal; + } + }()); this.referrer = null if ((this.method === 'GET' || this.method === 'HEAD') && body) { diff --git a/test/test.js b/test/test.js index 92dd2bc..e775847 100644 --- a/test/test.js +++ b/test/test.js @@ -1147,7 +1147,20 @@ exercise.forEach(function(exerciseMode) { }) featureDependent(suite, exerciseMode !== 'native' || support.aborting, 'aborting', function() { - test('initially aborted signal', function() { + test('Request init creates an AbortSignal without option', function() { + var request = new Request('/request') + assert.ok(request.signal); + assert.equal(request.signal.aborted, false); + }) + + test('Request init passes AbortSignal from option', function () { + var controller = new AbortController() + var request = new Request('/request', {signal: controller.signal}) + assert.ok(request.signal); + assert.deepEqual(controller.signal, request.signal); + }) + + test('initially aborted signal', function () { var controller = new AbortController() controller.abort() -- GitLab