From 0a5050eb3c1f1ed84134f23a44b97a7261114060 Mon Sep 17 00:00:00 2001 From: Thibault Leruitte Date: Wed, 4 Apr 2012 16:41:50 +0200 Subject: [PATCH] fix($location): don't rewrite links to different base paths links to different base paths should not be left untouched --- src/ng/location.js | 3 ++ test/ng/locationSpec.js | 82 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/src/ng/location.js b/src/ng/location.js index 6bed261f2c8e..9feee5ad87c5 100644 --- a/src/ng/location.js +++ b/src/ng/location.js @@ -503,6 +503,9 @@ function $LocationProvider(){ var href = elm.attr('href'); if (!href || isDefined(elm.attr('ng-ext-link')) || elm.attr('target')) return; + // link to different base path + if (href[0] === '/' && href.indexOf(pathPrefix) !== 0) return; + // remove same domain from full url links (IE7 always returns full hrefs) href = href.replace(absUrlPrefix, ''); diff --git a/test/ng/locationSpec.js b/test/ng/locationSpec.js index 18f884fef9c1..98167b4e47a7 100644 --- a/test/ng/locationSpec.js +++ b/test/ng/locationSpec.js @@ -864,6 +864,88 @@ describe('$location', function() { }); + it('should not rewrite when link to different base path when history enabled on new browser', + function() { + configureService('/other_base/link', true, true); + inject( + initBrowser(), + initLocation(), + function($browser) { + browserTrigger(link, 'click'); + expectNoRewrite($browser); + } + ); + }); + + + it('should not rewrite when link to different base path when history enabled on old browser', + function() { + configureService('/other_base/link', true, false); + inject( + initBrowser(), + initLocation(), + function($browser) { + browserTrigger(link, 'click'); + expectNoRewrite($browser); + } + ); + }); + + + it('should not rewrite when link to different base path when history disabled', function() { + configureService('/other_base/link', false); + inject( + initBrowser(), + initLocation(), + function($browser) { + browserTrigger(link, 'click'); + expectNoRewrite($browser); + } + ); + }); + + + it('should not rewrite when full link to different base path when history enabled on new browser', + function() { + configureService('http://host.com/other_base/link', true, true); + inject( + initBrowser(), + initLocation(), + function($browser) { + browserTrigger(link, 'click'); + expectNoRewrite($browser); + } + ); + }); + + + it('should not rewrite when full link to different base path when history enabled on old browser', + function() { + configureService('http://host.com/other_base/link', true, false); + inject( + initBrowser(), + initLocation(), + function($browser) { + browserTrigger(link, 'click'); + expectNoRewrite($browser); + } + ); + }); + + + it('should not rewrite when full link to different base path when history disabled', function() { + configureService('http://host.com/other_base/link', false); + inject( + initBrowser(), + initLocation(), + function($browser) { + browserTrigger(link, 'click'); + expectNoRewrite($browser); + } + ); + }); + + // don't run next tests on IE<9, as browserTrigger does not simulate pressed keys if (!(msie < 9)) {