Set rel="external" on "Switch Account" links
When the switch account URL is configured with the same domain as the
app, following the link is captured by the PG catchall route. With this
change the link is always marked with rel="external" so that it will be
disregarded by page.js.
Bug: Issue 7158
Change-Id: I584a5e335935815d70fe4d5205b6c0548a52b340
diff --git a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.js b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.js
index c147456..e95bd41 100644
--- a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.js
+++ b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.js
@@ -66,7 +66,7 @@
if (switchAccountUrl) {
const replacements = {path};
const url = this._interpolateUrl(switchAccountUrl, replacements);
- links.push({name: 'Switch account', url});
+ links.push({name: 'Switch account', url, external: true});
}
links.push({name: 'Sign out', url: '/logout'});
return links;
diff --git a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_test.html b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_test.html
index 6017cb9..1183d9c 100644
--- a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_test.html
+++ b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_test.html
@@ -83,14 +83,20 @@
// Unparameterized switch account link.
let links = element._getLinks('/switch-account');
assert.equal(links.length, 3);
- assert.deepEqual(links[1],
- {name: 'Switch account', url: '/switch-account'});
+ assert.deepEqual(links[1], {
+ name: 'Switch account',
+ url: '/switch-account',
+ external: true,
+ });
// Parameterized switch account link.
links = element._getLinks('/switch-account${path}', '/c/123');
assert.equal(links.length, 3);
- assert.deepEqual(links[1],
- {name: 'Switch account', url: '/switch-account/c/123'});
+ assert.deepEqual(links[1], {
+ name: 'Switch account',
+ url: '/switch-account/c/123',
+ external: true,
+ });
});
test('_interpolateUrl', () => {
diff --git a/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown.js b/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown.js
index a66ab2f..b145e76 100644
--- a/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown.js
+++ b/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown.js
@@ -14,6 +14,9 @@
(function() {
'use strict';
+ const REL_NOOPENER = 'noopener';
+ const REL_EXTERNAL = 'external';
+
Polymer({
is: 'gr-dropdown',
@@ -168,7 +171,10 @@
},
_computeLinkRel(link) {
- return link.target ? 'noopener' : null;
+ // Note: noopener takes precedence over external.
+ if (link.target) { return REL_NOOPENER; }
+ if (link.external) { return REL_EXTERNAL; }
+ return null;
},
_handleItemTap(e) {
diff --git a/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown_test.html b/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown_test.html
index 8654ac8..ab31f7c 100644
--- a/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown_test.html
+++ b/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown_test.html
@@ -72,10 +72,17 @@
});
test('link rel', () => {
- assert.isNull(element._computeLinkRel({url: '/test'}));
- assert.equal(
- element._computeLinkRel({url: '/test', target: '_blank'}),
- 'noopener');
+ let link = {url: '/test'};
+ assert.isNull(element._computeLinkRel(link));
+
+ link = {url: '/test', target: '_blank'};
+ assert.equal(element._computeLinkRel(link), 'noopener');
+
+ link = {url: '/test', external: true};
+ assert.equal(element._computeLinkRel(link), 'external');
+
+ link = {url: '/test', target: '_blank', external: true};
+ assert.equal(element._computeLinkRel(link), 'noopener');
});
test('_getClassIfBold', () => {