Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

Commit

Permalink
refactor(urlResolve): return already parsed URLs unchanged
Browse files Browse the repository at this point in the history
Closes #14890
  • Loading branch information
gkalpak committed Apr 4, 2018
1 parent 1e90d03 commit 059d4f6
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
11 changes: 7 additions & 4 deletions src/ng/urlUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ var baseUrlParsingNode;
* http://james.padolsey.com/javascript/parsing-urls-with-the-dom/
*
* @kind function
* @param {string} url The URL to be parsed.
* @param {string|object} url The URL to be parsed. If `url` is not a string, it will be returned
* unchanged.
* @description Normalizes and parses a URL.
* @returns {object} Returns the normalized URL as a dictionary.
*
Expand All @@ -57,6 +58,8 @@ var baseUrlParsingNode;
*
*/
function urlResolve(url) {
if (!isString(url)) return url;

var href = url;

// Support: IE 9-11 only
Expand Down Expand Up @@ -132,7 +135,7 @@ function urlIsAllowedOriginFactory(whitelistedOriginUrls) {
* @returns {boolean} - Whether the specified URL is of an allowed origin.
*/
return function urlIsAllowedOrigin(requestUrl) {
var parsedUrl = isString(requestUrl) ? urlResolve(requestUrl) : requestUrl;
var parsedUrl = urlResolve(requestUrl);
return parsedAllowedOriginUrls.some(urlsAreSameOrigin.bind(null, parsedUrl));
};
}
Expand All @@ -148,8 +151,8 @@ function urlIsAllowedOriginFactory(whitelistedOriginUrls) {
* @returns {boolean} - True if both URLs have the same origin, and false otherwise.
*/
function urlsAreSameOrigin(url1, url2) {
url1 = isString(url1) ? urlResolve(url1) : url1;
url2 = isString(url2) ? urlResolve(url2) : url2;
url1 = urlResolve(url1);
url2 = urlResolve(url2);

return (url1.protocol === url2.protocol &&
url1.host === url2.host);
Expand Down
9 changes: 9 additions & 0 deletions test/ng/urlUtilsSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

describe('urlUtils', function() {
describe('urlResolve', function() {
it('should returned already parsed URLs unchanged', function() {
var urlObj = urlResolve('/foo?bar=baz#qux');
expect(urlResolve(urlObj)).toBe(urlObj);
expect(urlResolve(true)).toBe(true);
expect(urlResolve(null)).toBeNull();
expect(urlResolve(undefined)).toBeUndefined();
});


it('should normalize a relative url', function() {
expect(urlResolve('foo').href).toMatch(/^https?:\/\/[^/]+\/foo$/);
});
Expand Down

0 comments on commit 059d4f6

Please sign in to comment.