diff --git a/src/ng/httpBackend.js b/src/ng/httpBackend.js index 565e1b126fd4..d2806e3eeeb6 100644 --- a/src/ng/httpBackend.js +++ b/src/ng/httpBackend.js @@ -121,14 +121,14 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc } function completeRequest(callback, status, response, headersString) { - var protocol = urlResolve(url).protocol; - // cancel timeout and subsequent timeout promise resolution timeoutId && $browserDefer.cancel(timeoutId); jsonpDone = xhr = null; - // fix status code for file protocol (it's always 0) - status = (protocol == 'file' && status === 0) ? (response ? 200 : 404) : status; + // fix status code when it is 0 (0 status is undocumented). + // Occurs when accessing file resources. + // On Android 4.1 stock browser it occurs while retrieving files from application cache. + status = (status === 0) ? (response ? 200 : 404) : status; // normalize IE bug (http://bugs.jquery.com/ticket/1450) status = status == 1223 ? 204 : status; diff --git a/test/ng/httpBackendSpec.js b/test/ng/httpBackendSpec.js index 49514d8e3c75..92781f9a9eca 100644 --- a/test/ng/httpBackendSpec.js +++ b/test/ng/httpBackendSpec.js @@ -421,7 +421,7 @@ describe('$httpBackend', function() { // TODO(vojta): test whether it fires "async-end" on both success and error }); - describe('file protocol', function() { + describe('protocols that return 0 status code', function() { function respond(status, content) { xhr = MockXhr.$$lastInstance; @@ -435,7 +435,7 @@ describe('$httpBackend', function() { it('should convert 0 to 200 if content', function() { $backend = createHttpBackend($browser, createMockXhr); - $backend('GET', 'file:///whatever/index.html', null, callback); + $backend('GET', 'someProtocol:///whatever/index.html', null, callback); respond(0, 'SOME CONTENT'); expect(callback).toHaveBeenCalled(); @@ -446,7 +446,7 @@ describe('$httpBackend', function() { it('should convert 0 to 404 if no content', function() { $backend = createHttpBackend($browser, createMockXhr); - $backend('GET', 'file:///whatever/index.html', null, callback); + $backend('GET', 'someProtocol:///whatever/index.html', null, callback); respond(0, ''); expect(callback).toHaveBeenCalled(); @@ -462,10 +462,10 @@ describe('$httpBackend', function() { hash : "#/C:/", host : "", hostname : "", - href : "file:///C:/base#!/C:/foo", + href : "someProtocol:///C:/base#!/C:/foo", pathname : "/C:/foo", port : "", - protocol : "file:", + protocol : "someProtocol:", search : "", setAttribute: angular.noop };