From a39c8c3c0aacf869abf5cd2987668230eb2795e6 Mon Sep 17 00:00:00 2001 From: Gensuke Toshiro Date: Thu, 10 Nov 2022 10:43:23 +0900 Subject: [PATCH] fix: session referer rewritten in iframe tasks Closes https://github.com/DevExpress/testcafe/issues/7376 --- src/proxy/index.ts | 2 +- test/server/proxy/regression-test.js | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/proxy/index.ts b/src/proxy/index.ts index b2c09d4e9..0bde5dbc0 100644 --- a/src/proxy/index.ts +++ b/src/proxy/index.ts @@ -211,7 +211,7 @@ export default class Proxy extends Router { const windowId = refererDest && refererDest.windowId || void 0; if (session) { - session.options.referer = referer || session.options.referer; + if (!isIframe) session.options.referer = referer || session.options.referer; res.setHeader(BUILTIN_HEADERS.contentType, 'application/x-javascript'); addPreventCachingHeaders(res); diff --git a/test/server/proxy/regression-test.js b/test/server/proxy/regression-test.js index 40b179fb0..97fa3f333 100644 --- a/test/server/proxy/regression-test.js +++ b/test/server/proxy/regression-test.js @@ -1591,6 +1591,33 @@ describe('Regression', () => { }); }); + it('Should not alter referer after the iframe task (GH-7376)', async () => { + session.getPayloadScript = async () => 'PayloadScript'; + session.getIframePayloadScript = async () => 'IframePayloadScript'; + + const expectedReferer = getProxyUrl('http://example.com/'); + + await request({ + headers: { + referer: proxy.openSession('http://example.com', session), + }, + url: 'http://localhost:1836/task.js', + resolveWithFullResponse: true, + }); + + expect(session.options.referer).eql(expectedReferer); + + await request({ + headers: { + referer: proxy.openSession('http://iframe.example.com', session), + }, + url: 'http://localhost:1836/iframe-task.js', + resolveWithFullResponse: true, + }); + + expect(session.options.referer).eql(expectedReferer); + }); + it('Should use `referrer` from the session options if it is not existed in request (GH-6295)', () => { const req = { url: getProxyUrl('http://example.com/'),