diff --git a/features/attribution-reporting.yml b/features/attribution-reporting.yml index 1b9fcc23869..f2d56143355 100644 --- a/features/attribution-reporting.yml +++ b/features/attribution-reporting.yml @@ -1,6 +1,12 @@ name: Attribution reporting -description: The Attribution Reporting API measures when an ad click or view leads to a conversion, such as a purchase on an advertiser site. +description: The attribution reporting API measures when an ad click or view leads to a conversion, such as a purchase on an advertiser site. spec: https://wicg.github.io/attribution-reporting-api/ +discouraged: + removal_date: 2026-06-01 # Chrome 150 + reason: Following the announcement that Chrome will maintain its current approach to third-party cookies, Chrome decided to withdraw certain Privacy Sandbox features including the attribution reporting API. + according_to: + - https://groups.google.com/a/chromium.org/g/blink-dev/c/4K2RRt6VYCQ + - https://chromestatus.com/feature/6320639375966208 compat_features: - api.HTMLAnchorElement.attributionSrc - api.HTMLAreaElement.attributionSrc diff --git a/features/related-website-sets.yml b/features/related-website-sets.yml new file mode 100644 index 00000000000..425a58a5483 --- /dev/null +++ b/features/related-website-sets.yml @@ -0,0 +1,15 @@ +name: Related website sets +description: Related website sets declares relationships between sites so the browser allows cookie and storage access between them through methods such as `document.requestStorageAccessFor()`. +spec: + - https://wicg.github.io/first-party-sets/ + - https://privacycg.github.io/requestStorageAccessFor/ +discouraged: + removal_date: 2026-06-01 # Chrome 150 + reason: Following the announcement that Chrome will maintain its current approach to third-party cookies, Chrome decided to withdraw certain Privacy Sandbox features including the related website sets. + according_to: + - https://groups.google.com/a/chromium.org/g/blink-dev/c/V-wPXyoruac + - https://chromestatus.com/feature/5162221567082496 + - https://chromestatus.com/feature/5194473869017088 +compat_features: + - api.Document.requestStorageAccessFor + - api.Permissions.permission_top-level-storage-access diff --git a/features/related-website-sets.yml.dist b/features/related-website-sets.yml.dist new file mode 100644 index 00000000000..76650256039 --- /dev/null +++ b/features/related-website-sets.yml.dist @@ -0,0 +1,23 @@ +# Generated from: related-website-sets.yml +# Do not edit this file by hand. Edit the source file instead! + +status: + baseline: false + support: + chrome: "119" + chrome_android: "120" + edge: "119" +compat_features: + # baseline: false + # support: + # chrome: "113" + # chrome_android: "120" + # edge: "113" + - api.Permissions.permission_top-level-storage-access + + # baseline: false + # support: + # chrome: "119" + # chrome_android: "119" + # edge: "119" + - api.Document.requestStorageAccessFor diff --git a/features/shared-storage-locks.yml b/features/shared-storage-locks.yml index f9fbd26a180..375e3a9f306 100644 --- a/features/shared-storage-locks.yml +++ b/features/shared-storage-locks.yml @@ -1,6 +1,12 @@ name: Shared storage locks description: The `withLock` option to `set()`, `append()`, `delete()`, `clear()`, and `batchUpdate()` methods of the `sharedStorage` API prevents duplicate reporting from cross-site race conditions. spec: https://wicg.github.io/shared-storage/#web-locks-integration +discouraged: + removal_date: 2026-06-01 # Chrome 150 + reason: Following the announcement that Chrome will maintain its current approach to third-party cookies, Chrome decided to withdraw certain Privacy Sandbox features including shared storage locks. + according_to: + - https://groups.google.com/a/chromium.org/g/blink-dev/c/uh5Ke6qyegc + - https://chromestatus.com/feature/5076349064708096 compat_features: - api.SharedStorage.batchUpdate - api.SharedStorageAppendMethod diff --git a/features/shared-storage.yml b/features/shared-storage.yml index fdcf440ed0a..6f8ecd0486b 100644 --- a/features/shared-storage.yml +++ b/features/shared-storage.yml @@ -1,6 +1,12 @@ name: Shared storage -description: The `sharedStorage` API stores data to a shared space where the data can then be processed without the ability to track users across the different sites they visit. A common use case is measuring the reach of third-party ads without using user-tracking cookies." +description: The `sharedStorage` API stores data to a shared space where the data can then be processed without the ability to track users across the different sites they visit. A common use case is measuring the reach of third-party ads without using user-tracking cookies. spec: https://wicg.github.io/shared-storage/ +discouraged: + removal_date: 2026-06-01 # Chrome 150 + reason: Following the announcement that Chrome will maintain its current approach to third-party cookies, Chrome decided to withdraw certain Privacy Sandbox features including the shared storage. + according_to: + - https://groups.google.com/a/chromium.org/g/blink-dev/c/uh5Ke6qyegc + - https://chromestatus.com/feature/5076349064708096 group: - storage - worklets diff --git a/features/storage-access.yml b/features/storage-access.yml index a1a520da5b2..40540320869 100644 --- a/features/storage-access.yml +++ b/features/storage-access.yml @@ -7,8 +7,6 @@ status: compat_features: - api.Document.hasStorageAccess - api.Document.requestStorageAccess - - api.Document.requestStorageAccessFor - api.Permissions.permission_storage-access - - api.Permissions.permission_top-level-storage-access - html.elements.iframe.allow.storage-access - http.headers.Permissions-Policy.storage-access diff --git a/features/storage-access.yml.dist b/features/storage-access.yml.dist index c3540da373e..b92851375c5 100644 --- a/features/storage-access.yml.dist +++ b/features/storage-access.yml.dist @@ -43,17 +43,3 @@ compat_features: # edge: "113" - html.elements.iframe.allow.storage-access - http.headers.Permissions-Policy.storage-access - - # baseline: false - # support: - # chrome: "113" - # chrome_android: "120" - # edge: "113" - - api.Permissions.permission_top-level-storage-access - - # baseline: false - # support: - # chrome: "119" - # chrome_android: "119" - # edge: "119" - - api.Document.requestStorageAccessFor diff --git a/features/topics.yml b/features/topics.yml index 2ec72e29625..71bb8f73332 100644 --- a/features/topics.yml +++ b/features/topics.yml @@ -1,6 +1,12 @@ name: Topics -description: The Topics API reports a user's likely subject-matter interests (as determined by the browser, known as topics) to iframes. This allows for interest-based advertising that does not rely on user's exact browsing history, third-party cookies, or fingerprinting. +description: The topics API reports a user's likely subject-matter interests (as determined by the browser, known as topics) to iframes. This allows for interest-based advertising that does not rely on user's exact browsing history, third-party cookies, or fingerprinting. spec: https://patcg-individual-drafts.github.io/topics/ +discouraged: + removal_date: 2026-06-01 # Chrome 150 + reason: Following the announcement that Chrome will maintain its current approach to third-party cookies, Chrome decided to withdraw certain Privacy Sandbox features including the topics API. + according_to: + - https://groups.google.com/a/chromium.org/g/blink-dev/c/_R85yctz4Rs + - https://chromestatus.com/feature/5135370673061888 compat_features: - api.Document.browsingTopics - html.elements.iframe.browsingtopics diff --git a/index.ts b/index.ts index 3b2b01a3714..cd9a441237b 100644 --- a/index.ts +++ b/index.ts @@ -10,7 +10,7 @@ import { GroupData, SnapshotData, WebFeaturesData } from './types'; import { BASELINE_LOW_TO_HIGH_DURATION, coreBrowserSet, getStatus, parseRangedDateString } from 'compute-baseline'; import { Compat } from 'compute-baseline/browser-compat-data'; import { assertRequiredRemovalDateSet, assertValidFeatureReference } from './assertions'; -import { isMoved, isSplit } from './type-guards'; +import { isMoved, isOrdinaryFeatureData, isSplit } from './type-guards'; // The longest name allowed, to allow for compact display. const nameMaxLength = 80; @@ -159,16 +159,25 @@ for (const [key, data] of yamlEntries('features')) { } } - // Convert markdown to text+HTML. - if (data.description) { + if (isOrdinaryFeatureData(data)) { + // Convert Markdown fields + const description = data.description as unknown; + if (typeof description !== "string" || description.trim().length === 0) { + throw new Error(`${key}.yml is missing a description value!`); + } const { text, html } = convertMarkdown(data.description); data.description = text; data.description_html = html; - } - if (data.discouraged) { - const { text, html } = convertMarkdown(data.discouraged.reason); - data.discouraged.reason = text; - data.discouraged.reason_html = html; + + if ("discouraged" in data) { + const reason = data.discouraged.reason as unknown; + if (typeof reason !== "string" || reason.trim().length === 0) { + throw new Error(`${key}.yml is missing a discouraged reason value!`); + } + const { text, html } = convertMarkdown(data.discouraged.reason); + data.discouraged.reason = text; + data.discouraged.reason_html = html; + } } // Compute Baseline high date from low date. diff --git a/text.ts b/text.ts index 7bd7aebe2f9..4f86a2727dc 100644 --- a/text.ts +++ b/text.ts @@ -5,7 +5,11 @@ import remarkParse from "remark-parse"; import remarkRehype from "remark-rehype"; import { unified } from "unified"; -export function convertMarkdown(markdown: string) { +export function convertMarkdown(markdown: unknown) { + if (typeof markdown !== "string") { + throw new Error(`${markdown} is not a string!`); + } + const mdTree = unified().use(remarkParse).parse(markdown); const htmlTree = unified().use(remarkRehype).runSync(mdTree); const text = hastTreeToString(htmlTree);