diff options
| -rw-r--r-- | src/Angular.js | 2 | ||||
| -rw-r--r-- | src/AngularPublic.js | 3 | ||||
| -rw-r--r-- | src/service/httpBackend.js | 20 | ||||
| -rw-r--r-- | test/service/httpBackendSpec.js | 12 |
4 files changed, 17 insertions, 20 deletions
diff --git a/src/Angular.js b/src/Angular.js index 9a4470eb..2a9fb556 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -101,8 +101,6 @@ var $$scope = '$scope', angularWidget = extensionMap(angular, 'widget', shivForIE), /** @name angular.module.ng */ angularInputType = extensionMap(angular, 'inputType', lowercase), - /** @name angular.module.ng */ - angularCallbacks = extensionMap(angular, 'callbacks'), nodeName_, uid = ['0', '0', '0'], DATE_ISOSTRING_LN = 24; diff --git a/src/AngularPublic.js b/src/AngularPublic.js index e5c70a8b..7664ed8c 100644 --- a/src/AngularPublic.js +++ b/src/AngularPublic.js @@ -47,7 +47,8 @@ function publishExternalAPI(angular){ 'version': version, 'isDate': isDate, 'lowercase': lowercase, - 'uppercase': uppercase + 'uppercase': uppercase, + 'callbacks': {counter: 0} }); angularModule.ng = ngModule; diff --git a/src/service/httpBackend.js b/src/service/httpBackend.js index 7443347f..6ea7df0f 100644 --- a/src/service/httpBackend.js +++ b/src/service/httpBackend.js @@ -17,31 +17,29 @@ var XHR = window.XMLHttpRequest || function() { */ function $HttpBackendProvider() { this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { - return createHttpBackend($browser, XHR, $browser.defer, $window, $document[0].body, - $window.location.href.replace(':', '')); + return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks, + $document[0].body, $window.location.href.replace(':', '')); }]; } -function createHttpBackend($browser, XHR, $browserDefer, $window, body, locationProtocol) { - var idCounter = 0; - +function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locationProtocol) { // TODO(vojta): fix the signature return function(method, url, post, callback, headers, timeout) { $browser.$$incOutstandingRequestCount(); if (lowercase(method) == 'jsonp') { - var callbackId = ('angular_' + Math.random() + '_' + (idCounter++)).replace(/\d\./, ''); - $window[callbackId] = function(data) { - $window[callbackId].data = data; + var callbackId = '_' + (callbacks.counter++).toString(36); + callbacks[callbackId] = function(data) { + callbacks[callbackId].data = data; }; var script = $browser.addJs(url.replace('JSON_CALLBACK', callbackId), null, function() { - if ($window[callbackId].data) { - completeRequest(callback, 200, $window[callbackId].data); + if (callbacks[callbackId].data) { + completeRequest(callback, 200, callbacks[callbackId].data); } else { completeRequest(callback, -2); } - delete $window[callbackId]; + delete callbacks[callbackId]; body.removeChild(script); }); } else { diff --git a/test/service/httpBackendSpec.js b/test/service/httpBackendSpec.js index ccd9e4b6..b9bf2b18 100644 --- a/test/service/httpBackendSpec.js +++ b/test/service/httpBackendSpec.js @@ -1,6 +1,6 @@ describe('$httpBackend', function() { - var $backend, $browser, $window, + var $backend, $browser, callbacks, xhr, fakeBody, callback; // TODO(vojta): should be replaced by $defer mock @@ -19,10 +19,10 @@ describe('$httpBackend', function() { beforeEach(inject(function($injector) { - $window = {}; + callbacks = {}; $browser = $injector.get('$browser'); fakeBody = {removeChild: jasmine.createSpy('body.removeChild')}; - $backend = createHttpBackend($browser, MockXhr, fakeTimeout, $window, fakeBody); + $backend = createHttpBackend($browser, MockXhr, fakeTimeout, callbacks, fakeBody); callback = jasmine.createSpy('done'); })); @@ -135,7 +135,7 @@ describe('$httpBackend', function() { url = script.url.split('?cb='); expect(url[0]).toBe('http://example.org/path'); - $window[url[1]]('some-data'); + callbacks[url[1]]('some-data'); script.done(); expect(callback).toHaveBeenCalledOnce(); @@ -149,10 +149,10 @@ describe('$httpBackend', function() { var script = $browser.$$scripts.shift(), callbackId = script.url.split('?cb=')[1]; - $window[callbackId]('some-data'); + callbacks[callbackId]('some-data'); script.done(); - expect($window[callbackId]).toBeUndefined(); + expect(callbacks[callbackId]).toBeUndefined(); expect(fakeBody.removeChild).toHaveBeenCalledOnce(); expect(fakeBody.removeChild).toHaveBeenCalledWith(script); }); |
