aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Angular.js2
-rw-r--r--src/AngularPublic.js3
-rw-r--r--src/service/httpBackend.js20
-rw-r--r--test/service/httpBackendSpec.js12
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);
});