@@ -191,3 +191,39 @@ test('client script includes infinite refresh prevention', () => {
191191 assert . ok ( checkScript . includes ( 'catch' ) )
192192 assert . ok ( checkScript . includes ( 'decodeURIComponent' ) )
193193} )
194+
195+ test ( 'client script preserves document.referrer across reloads' , ( ) => {
196+ const hints = getHintUtils ( {
197+ colorScheme : colorSchemeHint ,
198+ timeZone : timeZoneHint ,
199+ reducedMotion : reducedMotionHint ,
200+ } )
201+
202+ const checkScript = hints . getClientHintCheckScript ( )
203+
204+ // Should save document.referrer to sessionStorage before reload
205+ assert . ok (
206+ checkScript . includes ( 'clientHintReferrer' ) ,
207+ 'script should use clientHintReferrer sessionStorage key' ,
208+ )
209+ assert . ok (
210+ checkScript . includes ( "sessionStorage.setItem('clientHintReferrer'" ) ,
211+ 'script should save referrer to sessionStorage before reload' ,
212+ )
213+ assert . ok (
214+ checkScript . includes ( "sessionStorage.getItem('clientHintReferrer')" ) ,
215+ 'script should read saved referrer from sessionStorage after reload' ,
216+ )
217+
218+ // Should restore document.referrer via Object.defineProperty
219+ assert . ok (
220+ checkScript . includes ( "Object.defineProperty(document, 'referrer'" ) ,
221+ 'script should restore document.referrer via Object.defineProperty' ,
222+ )
223+
224+ // Should clean up sessionStorage after restoring
225+ assert . ok (
226+ checkScript . includes ( "sessionStorage.removeItem('clientHintReferrer')" ) ,
227+ 'script should remove saved referrer from sessionStorage after restoring' ,
228+ )
229+ } )
0 commit comments