diff --git a/packages/lint/src/rules/media.test.ts b/packages/lint/src/rules/media.test.ts index 9aaca84eb..e4cc0dad3 100644 --- a/packages/lint/src/rules/media.test.ts +++ b/packages/lint/src/rules/media.test.ts @@ -267,4 +267,32 @@ describe("media rules", () => { const finding = result.findings.find((f) => f.code === "media_in_subcomposition"); expect(finding).toBeUndefined(); }); + + it("reports error for media with crossorigin (breaks preview when host omits CORS)", async () => { + const html = ` + +
+ +
+ +`; + const result = await lintHyperframeHtml(html); + const finding = result.findings.find((f) => f.code === "media_crossorigin_breaks_preview"); + expect(finding).toBeDefined(); + expect(finding?.severity).toBe("error"); + expect(finding?.elementId).toBe("v1"); + }); + + it("does not flag media without crossorigin", async () => { + const html = ` + +
+ +
+ +`; + const result = await lintHyperframeHtml(html); + const finding = result.findings.find((f) => f.code === "media_crossorigin_breaks_preview"); + expect(finding).toBeUndefined(); + }); }); diff --git a/packages/lint/src/rules/media.ts b/packages/lint/src/rules/media.ts index 03d5f53bf..8864682d7 100644 --- a/packages/lint/src/rules/media.ts +++ b/packages/lint/src/rules/media.ts @@ -483,6 +483,33 @@ export const mediaRules: Array<(ctx: LintContext) => HyperframeLintFinding[]> = return findings; }, + // media_crossorigin_breaks_preview — `crossorigin` on