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);      });  | 
