Skip to content

Commit afddb6e

Browse files
authored
fix(image): preload should respect referrerPolicy (#49584)
This is a bug fix PR. We should respect referrerPolicy when preloading a priority next/image Reproduce codesandbox: https://codesandbox.io/p/sandbox/boring-fog-4o28oi As you can see, the image still request with `referer` header although we have `referrerPolicy="no-referrer" in img attribute. <img width="645" alt="image" src="https://github.com/vercel/next.js/assets/5862369/6a2779d3-e0e2-4dfe-80d2-c8a4243f430b">
1 parent 5ccf71a commit afddb6e

File tree

8 files changed

+59
-0
lines changed

8 files changed

+59
-0
lines changed

packages/next/src/client/image.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -970,6 +970,7 @@ const Image = forwardRef<HTMLImageElement | null, ImageProps>(
970970
imageSrcSet={imgAttributes.srcSet}
971971
imageSizes={imgAttributes.sizes}
972972
crossOrigin={rest.crossOrigin}
973+
referrerPolicy={rest.referrerPolicy}
973974
{...getDynamicProps(fetchPriority)}
974975
/>
975976
</Head>

packages/next/src/client/legacy/image.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,7 @@ export default function Image({
979979
imageSrcSet: imgAttributes.srcSet,
980980
imageSizes: imgAttributes.sizes,
981981
crossOrigin: rest.crossOrigin,
982+
referrerPolicy: rest.referrerPolicy,
982983
}
983984

984985
const useLayoutEffect =

test/integration/next-image-legacy/default/pages/priority.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@ const Page = () => {
2020
width="400"
2121
height="400"
2222
></Image>
23+
<Image
24+
priority
25+
id="basic-image-with-referrerpolicy"
26+
referrerPolicy="no-referrer"
27+
src="/test.png"
28+
width="400"
29+
height="400"
30+
></Image>
2331
<Image
2432
loading="eager"
2533
id="load-eager"

test/integration/next-image-legacy/default/test/index.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ function runTests(mode) {
131131
imagesrcset:
132132
'/_next/image?url=%2Ftest.jpg&w=640&q=75 1x, /_next/image?url=%2Ftest.jpg&w=828&q=75 2x',
133133
},
134+
{
135+
imagesizes: '',
136+
imagesrcset:
137+
'/_next/image?url=%2Ftest.png&w=640&q=75 1x, /_next/image?url=%2Ftest.png&w=828&q=75 2x',
138+
},
134139
{
135140
imagesizes: '100vw',
136141
imagesrcset:
@@ -147,6 +152,11 @@ function runTests(mode) {
147152
.elementById('basic-image-with-crossorigin')
148153
.getAttribute('loading')
149154
).toBe(null)
155+
expect(
156+
await browser
157+
.elementById('basic-image-with-referrerpolicy')
158+
.getAttribute('loading')
159+
).toBe(null)
150160
expect(
151161
await browser.elementById('load-eager').getAttribute('loading')
152162
).toBe(null)
@@ -170,6 +180,13 @@ function runTests(mode) {
170180
'link[rel=preload][as=image][crossorigin=anonymous][imagesrcset*="test.jpg"]'
171181
)
172182
).toHaveLength(1)
183+
184+
// should preload with referrerpolicy
185+
expect(
186+
await browser.elementsByCss(
187+
'link[rel=preload][as=image][referrerpolicy="no-referrer"][imagesrcset*="test.png"]'
188+
)
189+
).toHaveLength(1)
173190
} finally {
174191
if (browser) {
175192
await browser.close()

test/integration/next-image-new/app-dir/app/priority/page.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ const Page = () => {
2222
height="400"
2323
crossOrigin="anonymous"
2424
></Image>
25+
<Image
26+
priority
27+
id="basic-image-referrerpolicy"
28+
alt="basic-image-referrerpolicy"
29+
src="/test.png"
30+
width="400"
31+
height="400"
32+
referrerPolicy="no-referrer"
33+
></Image>
2534
<Image
2635
loading="eager"
2736
id="load-eager"

test/integration/next-image-new/app-dir/test/index.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,13 @@ function runTests(mode) {
204204
'link[rel=preload][as=image][crossorigin=anonymous][imagesrcset*="test.jpg"]'
205205
)
206206
).toHaveLength(1)
207+
208+
// should preload with referrerpolicy
209+
expect(
210+
await browser.elementsByCss(
211+
'link[rel=preload][as=image][referrerpolicy="no-referrer"][imagesrcset*="test.png"]'
212+
)
213+
).toHaveLength(1)
207214
} finally {
208215
if (browser) {
209216
await browser.close()

test/integration/next-image-new/default/pages/priority.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ const Page = () => {
2222
height="400"
2323
crossOrigin="anonymous"
2424
></Image>
25+
<Image
26+
priority
27+
id="basic-image-referrerpolicy"
28+
alt="basic-image-referrerpolicy"
29+
src="/test.png"
30+
width="400"
31+
height="400"
32+
referrerPolicy="no-referrer"
33+
></Image>
2534
<Image
2635
loading="eager"
2736
id="load-eager"

test/integration/next-image-new/default/test/index.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,13 @@ function runTests(mode) {
204204
)
205205
).length
206206
).toBeGreaterThanOrEqual(1)
207+
208+
// should preload with referrerpolicy
209+
expect(
210+
await browser.elementsByCss(
211+
'link[rel=preload][as=image][referrerpolicy="no-referrer"][imagesrcset*="test.png"]'
212+
)
213+
).toHaveLength(1)
207214
} finally {
208215
if (browser) {
209216
await browser.close()

0 commit comments

Comments
 (0)