Skip to content

Commit d1d09fb

Browse files
romainmenkeJakeChampion
authored andcommitted
always set a signal on Request
1 parent 7727e50 commit d1d09fb

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

fetch.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,12 @@ export function Request(input, options) {
370370
}
371371
this.method = normalizeMethod(options.method || this.method || 'GET')
372372
this.mode = options.mode || this.mode || null
373-
this.signal = options.signal || this.signal
373+
this.signal = options.signal || this.signal || (function () {
374+
if ('AbortController' in global) {
375+
var ctrl = new AbortController();
376+
return ctrl.signal;
377+
}
378+
}());
374379
this.referrer = null
375380

376381
if ((this.method === 'GET' || this.method === 'HEAD') && body) {

test/test.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1147,7 +1147,20 @@ exercise.forEach(function(exerciseMode) {
11471147
})
11481148

11491149
featureDependent(suite, exerciseMode !== 'native' || support.aborting, 'aborting', function() {
1150-
test('initially aborted signal', function() {
1150+
test('Request init creates an AbortSignal without option', function() {
1151+
var request = new Request('/request')
1152+
assert.ok(request.signal);
1153+
assert.equal(request.signal.aborted, false);
1154+
})
1155+
1156+
test('Request init passes AbortSignal from option', function () {
1157+
var controller = new AbortController()
1158+
var request = new Request('/request', {signal: controller.signal})
1159+
assert.ok(request.signal);
1160+
assert.deepEqual(controller.signal, request.signal);
1161+
})
1162+
1163+
test('initially aborted signal', function () {
11511164
var controller = new AbortController()
11521165
controller.abort()
11531166

0 commit comments

Comments
 (0)