From 4f57236614415eea919221ea5f99c4d8689b3267 Mon Sep 17 00:00:00 2001 From: Tobias Bosch Date: Thu, 2 Jan 2014 14:37:48 -0800 Subject: fix($httpBackend): Ignore multiple calls to onreadystatechange with readyState=4 On mobile webkit `onreadystatechange` might by called multiple times with `readyState===4` caused by xhrs that are resolved while the app is in the background. Fixes #5426. --- test/ng/httpBackendSpec.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'test/ng/httpBackendSpec.js') diff --git a/test/ng/httpBackendSpec.js b/test/ng/httpBackendSpec.js index 8c843d2a..5a392538 100644 --- a/test/ng/httpBackendSpec.js +++ b/test/ng/httpBackendSpec.js @@ -90,6 +90,18 @@ describe('$httpBackend', function() { expect(callback).toHaveBeenCalledOnce(); }); + // onreadystatechange might by called multiple times + // with readyState === 4 on mobile webkit caused by + // xhrs that are resolved while the app is in the background (see #5426). + it('should remove onreadystatechange when it is called with readyState=4 to ignore multiple calls', function() { + $backend('GET', 'URL', null, callback); + xhr = MockXhr.$$lastInstance; + + xhr.status = 200; + xhr.readyState = 4; + xhr.onreadystatechange(); + expect(xhr.onreadystatechange).toBeUndefined(); + }); it('should set only the requested headers', function() { $backend('POST', 'URL', null, noop, {'X-header1': 'value1', 'X-header2': 'value2'}); -- cgit v1.2.3