mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-05-08 23:04:45 +00:00
Don't check url (by HEAD request) before navigateTo
Removed angular.scenario.Application.checkUrlStatus_ method and these tests: * should call error handler if status check fails * should perform a HEAD request to verify file existence * should call error handler if status code is less than 200 * should call error handler if status code is greater than 299 * should call error handler if status code is greater than 299
This commit is contained in:
parent
b85e95709d
commit
c5f0342ad8
2 changed files with 9 additions and 118 deletions
|
|
@ -37,35 +37,6 @@ angular.scenario.Application.prototype.getWindow_ = function() {
|
||||||
return contentWindow;
|
return contentWindow;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks that a URL would return a 2xx success status code. Callback is called
|
|
||||||
* with no arguments on success, or with an error on failure.
|
|
||||||
*
|
|
||||||
* Warning: This requires the server to be able to respond to HEAD requests
|
|
||||||
* and not modify the state of your application.
|
|
||||||
*
|
|
||||||
* @param {string} url Url to check
|
|
||||||
* @param {Function} callback function(error) that is called with result.
|
|
||||||
*/
|
|
||||||
angular.scenario.Application.prototype.checkUrlStatus_ = function(url, callback) {
|
|
||||||
var self = this;
|
|
||||||
_jQuery.ajax({
|
|
||||||
url: url.replace(/#.*/, ''), //IE encodes and sends the url fragment, so we must strip it
|
|
||||||
type: 'HEAD',
|
|
||||||
complete: function(request) {
|
|
||||||
if (request.status < 200 || request.status >= 300) {
|
|
||||||
if (!request.status) {
|
|
||||||
callback.call(self, 'Sandbox Error: Cannot access ' + url);
|
|
||||||
} else {
|
|
||||||
callback.call(self, request.status + ' ' + request.statusText);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
callback.call(self);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Changes the location of the frame.
|
* Changes the location of the frame.
|
||||||
*
|
*
|
||||||
|
|
@ -87,21 +58,16 @@ angular.scenario.Application.prototype.navigateTo = function(url, loadFn, errorF
|
||||||
this.executeAction(loadFn);
|
this.executeAction(loadFn);
|
||||||
} else {
|
} else {
|
||||||
frame.css('display', 'none').attr('src', 'about:blank');
|
frame.css('display', 'none').attr('src', 'about:blank');
|
||||||
this.checkUrlStatus_(url, function(error) {
|
this.context.find('#test-frames').append('<iframe>');
|
||||||
if (error) {
|
frame = this.getFrame_();
|
||||||
return errorFn(error);
|
frame.load(function() {
|
||||||
|
frame.unbind();
|
||||||
|
try {
|
||||||
|
self.executeAction(loadFn);
|
||||||
|
} catch (e) {
|
||||||
|
errorFn(e);
|
||||||
}
|
}
|
||||||
self.context.find('#test-frames').append('<iframe>');
|
}).attr('src', url);
|
||||||
frame = this.getFrame_();
|
|
||||||
frame.load(function() {
|
|
||||||
frame.unbind();
|
|
||||||
try {
|
|
||||||
self.executeAction(loadFn);
|
|
||||||
} catch (e) {
|
|
||||||
errorFn(e);
|
|
||||||
}
|
|
||||||
}).attr('src', url);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
this.context.find('> h2 a').attr('href', url).text(url);
|
this.context.find('> h2 a').attr('href', url).text(url);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,6 @@ describe('angular.scenario.Application', function() {
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
frames = _jQuery("<div></div>");
|
frames = _jQuery("<div></div>");
|
||||||
app = new angular.scenario.Application(frames);
|
app = new angular.scenario.Application(frames);
|
||||||
app.checkUrlStatus_ = function(url, callback) {
|
|
||||||
callback.call(this);
|
|
||||||
};
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return new $window and $document after navigate', function() {
|
it('should return new $window and $document after navigate', function() {
|
||||||
|
|
@ -82,15 +79,6 @@ describe('angular.scenario.Application', function() {
|
||||||
expect(called).toBeTruthy();
|
expect(called).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should call error handler if status check fails', function() {
|
|
||||||
app.checkUrlStatus_ = function(url, callback) {
|
|
||||||
callback.call(this, 'Example Error');
|
|
||||||
};
|
|
||||||
app.navigateTo('http://localhost/', angular.noop, function(error) {
|
|
||||||
expect(error).toEqual('Example Error');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should hide old iframes and navigate to about:blank', function() {
|
it('should hide old iframes and navigate to about:blank', function() {
|
||||||
app.navigateTo('http://localhost/#foo');
|
app.navigateTo('http://localhost/#foo');
|
||||||
app.navigateTo('http://localhost/#bar');
|
app.navigateTo('http://localhost/#bar');
|
||||||
|
|
@ -151,67 +139,4 @@ describe('angular.scenario.Application', function() {
|
||||||
expect(handlers.length).toEqual(1);
|
expect(handlers.length).toEqual(1);
|
||||||
handlers[0]();
|
handlers[0]();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('jQuery ajax', function() {
|
|
||||||
var options;
|
|
||||||
var response;
|
|
||||||
var jQueryAjax;
|
|
||||||
|
|
||||||
beforeEach(function() {
|
|
||||||
response = {
|
|
||||||
status: 200,
|
|
||||||
statusText: 'OK'
|
|
||||||
};
|
|
||||||
jQueryAjax = _jQuery.ajax;
|
|
||||||
_jQuery.ajax = function(opts) {
|
|
||||||
options = opts;
|
|
||||||
opts.complete.call(this, response);
|
|
||||||
};
|
|
||||||
app.checkUrlStatus_ = angular.scenario.Application.
|
|
||||||
prototype.checkUrlStatus_;
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(function() {
|
|
||||||
_jQuery.ajax = jQueryAjax;
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should perform a HEAD request to verify file existence', function() {
|
|
||||||
app.navigateTo('http://www.google.com/', angular.noop, angular.noop);
|
|
||||||
expect(options.type).toEqual('HEAD');
|
|
||||||
expect(options.url).toEqual('http://www.google.com/');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should call error handler if status code is less than 200', function() {
|
|
||||||
var finished;
|
|
||||||
response.status = 199;
|
|
||||||
response.statusText = 'Error Message';
|
|
||||||
app.navigateTo('http://localhost/', angular.noop, function(error) {
|
|
||||||
expect(error).toEqual('199 Error Message');
|
|
||||||
finished = true;
|
|
||||||
});
|
|
||||||
expect(finished).toBeTruthy();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should call error handler if status code is greater than 299', function() {
|
|
||||||
var finished;
|
|
||||||
response.status = 300;
|
|
||||||
response.statusText = 'Error';
|
|
||||||
app.navigateTo('http://localhost/', angular.noop, function(error) {
|
|
||||||
expect(error).toEqual('300 Error');
|
|
||||||
finished = true;
|
|
||||||
});
|
|
||||||
expect(finished).toBeTruthy();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should call error handler if status code is 0 for sandbox error', function() {
|
|
||||||
var finished;
|
|
||||||
response.status = 0;
|
|
||||||
response.statusText = '';
|
|
||||||
app.navigateTo('http://localhost/', angular.noop, function(error) {
|
|
||||||
expect(error).toEqual('Sandbox Error: Cannot access http://localhost/');
|
|
||||||
finished = true;
|
|
||||||
});
|
|
||||||
expect(finished).toBeTruthy();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue