From 9329dd1dc87e2274dd0a49ce8ea9d761af0269a5 Mon Sep 17 00:00:00 2001 From: Kyle Bowden <1393788+kyle-bowden@users.noreply.github.com> Date: Thu, 28 Mar 2024 11:24:54 +0000 Subject: [PATCH] PLATUI-2829: Revert change to display backlink when referer is empty (#360) --- CHANGELOG.md | 6 ++++ package-lock.json | 2 +- package.json | 2 +- .../back-link-helper/back-link-helper.js | 34 ++++++++----------- .../back-link-helper/back-link-helper.test.js | 11 ++++-- 5 files changed, 32 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02394c42..8cbd5576 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +## [6.13.0] - 2024-03-27 + +### Changed + +- Revert change to retain the back link even when the referrer is empty + ## [6.12.0] - 2024-03-26 ### Changed diff --git a/package-lock.json b/package-lock.json index 2d1c5b5b..c8c584f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "hmrc-frontend", - "version": "6.12.0", + "version": "6.13.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index cd2595da..6ba6b413 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hmrc-frontend", - "version": "6.12.0", + "version": "6.13.0", "description": "Design patterns for HMRC frontends", "scripts": { "start": "gulp dev", diff --git a/src/components/back-link-helper/back-link-helper.js b/src/components/back-link-helper/back-link-helper.js index fc62c492..57538edd 100644 --- a/src/components/back-link-helper/back-link-helper.js +++ b/src/components/back-link-helper/back-link-helper.js @@ -5,27 +5,23 @@ function BackLinkHelper($module, window, document) { } BackLinkHelper.prototype.init = function init() { - const isReferrerExternal = () => { - // If there is no referrer, consider it on the same domain - if (!this.document.referrer) { - return false; - } - - try { - const currentDomain = new URL(this.window.location.href).hostname; - const referrerDomain = new URL(this.document.referrer).hostname; - - // Check if the referrer is not the same as the current domain - return currentDomain !== referrerDomain; - } catch (err) { - return false; - } - }; - // do nothing if History API is absent if (this.window.history) { - // hide the backlink if the referrer is on a different domain - if (isReferrerExternal()) { + // eslint-disable-next-line max-len + /* TODO: It remains unclear whether a check for the same domain is necessary for security reasons. + There may be user research suggesting considerations regarding the visibility of the + back link on refresh. + Currently, a page refresh sets the referer to empty, leading to the back link being hidden + under our existing logic. + */ + // eslint-disable-next-line max-len + const referrerNotOnSameDomain = () => { + const referer = this.document.referrer; + return !referer || referer.indexOf(this.window.location.host) === -1; + }; + + // hide the backlink if the referrer is on a different domain or the referrer is not set + if (referrerNotOnSameDomain()) { this.$module.classList.add('hmrc-hidden-backlink'); } else { // prevent resubmit warning diff --git a/src/components/back-link-helper/back-link-helper.test.js b/src/components/back-link-helper/back-link-helper.test.js index 9df76e34..8290a929 100644 --- a/src/components/back-link-helper/back-link-helper.test.js +++ b/src/components/back-link-helper/back-link-helper.test.js @@ -71,11 +71,18 @@ describe('/components/back-link-helper', () => { expect(mockWindow.history.back).toHaveBeenCalled(); }); - it('does not add .hmrc-hidden-backlink class to backlink when document referer is empty', () => { + it('adds .hmrc-hidden-backlink class to backlink when document referer is empty', () => { const sut = new BackLinkHelper(mockAnchorTag, mockWindow, { referrer: '' }); sut.init(); - expect(mockAnchorTag.classList.add.mock.calls).toHaveLength(0); + expect(mockAnchorTag.classList.add.mock.calls[0][0]).toBe('hmrc-hidden-backlink'); + }); + + it('adds .hmrc-hidden-backlink class to backlink when document referer is null', () => { + const sut = new BackLinkHelper(mockAnchorTag, mockWindow, { referrer: null }); + sut.init(); + + expect(mockAnchorTag.classList.add.mock.calls[0][0]).toBe('hmrc-hidden-backlink'); }); it('adds .hmrc-hidden-backlink class to backlink if document referer is on a different domain', () => {