From fa8f84366418b8af85a4f50295c667733acb6abb Mon Sep 17 00:00:00 2001 From: Ben Mathwig Date: Fri, 7 Jul 2023 11:10:42 -0700 Subject: [PATCH 01/12] Creating gh-pages Branch --- img/origin-hero.svg | 217 +++++++++++++++++++++++++++++++++++++++++++ origin-trials.html | 220 ++++++++++++++++++++++++++++++++++++++++++++ styles.css | 53 +++++++++++ 3 files changed, 490 insertions(+) create mode 100644 img/origin-hero.svg create mode 100644 origin-trials.html create mode 100644 styles.css diff --git a/img/origin-hero.svg b/img/origin-hero.svg new file mode 100644 index 000000000..6582df7b0 --- /dev/null +++ b/img/origin-hero.svg @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/origin-trials.html b/origin-trials.html new file mode 100644 index 000000000..cf1fdf0de --- /dev/null +++ b/origin-trials.html @@ -0,0 +1,220 @@ + + + + + + + + + + +
+
+

Microsoft Edge Origin Trials

+

The Origin Trial system is a way for web developers to connect with browser engineers and the Web standards community, it enables Web developers to experiment in new web platform capabilities and offers a medium where they can continuously provide feedback on various APIs shape, usability and effectiveness after experimenting with them for a limited period of time in real production sites.

+
+
+
+
+

Active Origin Trials

+ + + +
+
+

Getting Started

+

Register for an Experiment

+

Our framework is consistent with [Chrome Origin Trials](https://developers.chrome.com/origintrials/#/trials/active), simply click the `register` button for any of the available experiments in our Origin Trials Developer console, provide your website's origin, and we will instantly generate a token once you agree to our terms and conditions and submit the form.

+ +

There are 2 ways to use the tokens provide in your page:

+ + Option 1: Using a <meta> Tag +

Add an origin-trial tag to the head of any page, example:

+ +

+                <meta http-equiv="origin-trial" content="your-token-gues-here">
+            
+ + + Option 2: Using an HTTP Header + Another option is to add `Origin-Trial` to your HTTP server response headers, example: + +

+                Origin-Trial: your-token-goes-here
+            
+ +

Once you have registered your website for an experiment, you will be able to use the experimental API without requiring your beta testers to turn a feature flag in [edge://flags](about://flags).

+ +

Web Developer Guidelines

+ +

Allowed Origins

+ +

The Edge Origin Trials portal today **only supports SSL Enabled Origins**, websites wanting to register for an experiment must have `HTTPS` properly implemented. However, in future portal releases we are looking to enable more secure origins such as:

+ +
    +
  • Localhost: it's going to be possible to register `http://localhost` in experiments, today developer can *enable* the appropriate feature flag in [edge://flags](about://flags).
  • +
  • Extensions: it's going to be possible for `extensions://` prefixed origins to enroll in experiments.
  • +
+ +

Subdomains, URL Paths and Query Params

+ +

It is possible to only enroll a specific subdomain such as `https://dev.example.com` or an origin with wild-card match to all it's subdomains by answering *Yes* to the "Do you need to match all subdomains for the provided origin?" question in the [Microsoft Edge Origin Trials Developer Console](https://developer.microsoft.com/en-us/microsoft-edge/origin-trials). However, the following scenarios are **not** possible:

+ +
    +
  • https://example.com/path/new-feature
  • +
  • https://example.com/path/new-feature?test_id=12345
  • +
+ +

Registered Trial Duration

+ +

Once you have registered for a trial, your token will be valid for **6 weeks**, which this is the standard duration for a trial cycle, and the end of each cycle, you are eligible to renew after providing your feedback on the API you are experimenting with.

+ +

We will send out emails reminding you to provide feedback and renew before your token expires.

+ +

Experiment duration

+ +

The duration of an experiment is usually longer than 6 weeks, the standard duration for a trial cycle. When browsing available experiments you will be able to see which versions of Edge the experiment will be available for as well as the estimated end date.

+ +

A browser feature team may decide to early-end an experiment in case of any major security incidents caused by the feature, or they have collected enough feedback and concluded the currently proposed API does not meet the web developer needs, and a major redesign need to happen. We will be sending out emails to all developers enrolled in an experiment in the case of early-end.

+ +

Opting out of an experiment

+ +

To opt out of an experiment, you can simply remove the token we have provided from your page's HEAD `meta` tag or server's response HTTP header.

+ +

Experimental feature implementation best practices

+ +

MDN has a great resource on best practices for feature detection, you can [view it here](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Feature_detection). In summary, it is important to always provide a working experience if the feature your website is using does not exist in the browser your visitor is running, this is extremely applicable when relying on an experimental feature using a token that needs to be renewed every 6 weeks.

+
+ +
+ + diff --git a/styles.css b/styles.css new file mode 100644 index 000000000..73959ebf4 --- /dev/null +++ b/styles.css @@ -0,0 +1,53 @@ +html, body { + margin: 0; + padding: 0; + font-size: 14px; + min-height: 100vh; + box-sizing: border-box; +} + +body { + font-family: "Segoe UI",Segoe,"Segoe WP","Lucida Grande","Lucida Sans",Verdana,sans-serif; + background-color: #f2f2f2; + border-top: 5px solid #004b50; + border-bottom: 10px solid #004b50; +} + +header { + background-color: #018273; + color: #f2f2f2; + display: flex; + justify-content: center; + height: 256px; +} + +main { + margin: 0 auto; + max-width: 50%; +} + +header h1 { + margin: 0; + padding: 0; + font-weight: 200; +} + +.header__section-left { + display: flex; + flex-direction: column; + justify-content: center; + width: 50%; +} + +.note { + background-color: rgba(28, 190, 28, 0.25); + padding: 1rem 1.2rem; +} + +.note::before { + content: 'NOTE'; + display: block; + font-weight: 600; + color: rgb(14, 80, 14); + padding: 0rem 0rem 1rem 0rem +} \ No newline at end of file From eb702ec2fb7cde70e663e650a1fdabdb4a02b5ca Mon Sep 17 00:00:00 2001 From: Ben Mathwig Date: Mon, 10 Jul 2023 14:08:45 -0700 Subject: [PATCH 02/12] Updating Origin Trials Landing Page Added new code to power the active trials cards via a JSON file checked in to the folder. Updated the wording on the site to clarify a few things. Moved trial-card component to it's own file. --- origin-trials.html | 220 --------------------- {img => origin-trials/img}/origin-hero.svg | 0 origin-trials/index.html | 70 +++++++ origin-trials/script.js | 41 ++++ styles.css => origin-trials/styles.css | 10 + origin-trials/trial-card.component.html | 59 ++++++ origin-trials/trial-card.component.js | 76 +++++++ origin-trials/trials.json | 18 ++ 8 files changed, 274 insertions(+), 220 deletions(-) delete mode 100644 origin-trials.html rename {img => origin-trials/img}/origin-hero.svg (100%) create mode 100644 origin-trials/index.html create mode 100644 origin-trials/script.js rename styles.css => origin-trials/styles.css (81%) create mode 100644 origin-trials/trial-card.component.html create mode 100644 origin-trials/trial-card.component.js create mode 100644 origin-trials/trials.json diff --git a/origin-trials.html b/origin-trials.html deleted file mode 100644 index cf1fdf0de..000000000 --- a/origin-trials.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - - - - -
-
-

Microsoft Edge Origin Trials

-

The Origin Trial system is a way for web developers to connect with browser engineers and the Web standards community, it enables Web developers to experiment in new web platform capabilities and offers a medium where they can continuously provide feedback on various APIs shape, usability and effectiveness after experimenting with them for a limited period of time in real production sites.

-
-
-
-
-

Active Origin Trials

- - - -
-
-

Getting Started

-

Register for an Experiment

-

Our framework is consistent with [Chrome Origin Trials](https://developers.chrome.com/origintrials/#/trials/active), simply click the `register` button for any of the available experiments in our Origin Trials Developer console, provide your website's origin, and we will instantly generate a token once you agree to our terms and conditions and submit the form.

- -

There are 2 ways to use the tokens provide in your page:

- - Option 1: Using a <meta> Tag -

Add an origin-trial tag to the head of any page, example:

- -

-                <meta http-equiv="origin-trial" content="your-token-gues-here">
-            
- - - Option 2: Using an HTTP Header - Another option is to add `Origin-Trial` to your HTTP server response headers, example: - -

-                Origin-Trial: your-token-goes-here
-            
- -

Once you have registered your website for an experiment, you will be able to use the experimental API without requiring your beta testers to turn a feature flag in [edge://flags](about://flags).

- -

Web Developer Guidelines

- -

Allowed Origins

- -

The Edge Origin Trials portal today **only supports SSL Enabled Origins**, websites wanting to register for an experiment must have `HTTPS` properly implemented. However, in future portal releases we are looking to enable more secure origins such as:

- -
    -
  • Localhost: it's going to be possible to register `http://localhost` in experiments, today developer can *enable* the appropriate feature flag in [edge://flags](about://flags).
  • -
  • Extensions: it's going to be possible for `extensions://` prefixed origins to enroll in experiments.
  • -
- -

Subdomains, URL Paths and Query Params

- -

It is possible to only enroll a specific subdomain such as `https://dev.example.com` or an origin with wild-card match to all it's subdomains by answering *Yes* to the "Do you need to match all subdomains for the provided origin?" question in the [Microsoft Edge Origin Trials Developer Console](https://developer.microsoft.com/en-us/microsoft-edge/origin-trials). However, the following scenarios are **not** possible:

- -
    -
  • https://example.com/path/new-feature
  • -
  • https://example.com/path/new-feature?test_id=12345
  • -
- -

Registered Trial Duration

- -

Once you have registered for a trial, your token will be valid for **6 weeks**, which this is the standard duration for a trial cycle, and the end of each cycle, you are eligible to renew after providing your feedback on the API you are experimenting with.

- -

We will send out emails reminding you to provide feedback and renew before your token expires.

- -

Experiment duration

- -

The duration of an experiment is usually longer than 6 weeks, the standard duration for a trial cycle. When browsing available experiments you will be able to see which versions of Edge the experiment will be available for as well as the estimated end date.

- -

A browser feature team may decide to early-end an experiment in case of any major security incidents caused by the feature, or they have collected enough feedback and concluded the currently proposed API does not meet the web developer needs, and a major redesign need to happen. We will be sending out emails to all developers enrolled in an experiment in the case of early-end.

- -

Opting out of an experiment

- -

To opt out of an experiment, you can simply remove the token we have provided from your page's HEAD `meta` tag or server's response HTTP header.

- -

Experimental feature implementation best practices

- -

MDN has a great resource on best practices for feature detection, you can [view it here](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Feature_detection). In summary, it is important to always provide a working experience if the feature your website is using does not exist in the browser your visitor is running, this is extremely applicable when relying on an experimental feature using a token that needs to be renewed every 6 weeks.

-
- -
- - diff --git a/img/origin-hero.svg b/origin-trials/img/origin-hero.svg similarity index 100% rename from img/origin-hero.svg rename to origin-trials/img/origin-hero.svg diff --git a/origin-trials/index.html b/origin-trials/index.html new file mode 100644 index 000000000..614fcfe64 --- /dev/null +++ b/origin-trials/index.html @@ -0,0 +1,70 @@ + + + + + + + + +
+
+

Microsoft Edge Origin Trials

+

Origin trials give web developers access to experimental web platform features to ensure utility and stability of a feature prior to being available to every developer. These trials are open to all developers and are limited in duration and usage.

+
+
+
+

Active Origin Trials

+
+
+
+

Getting Started

+

Register for an Experiment

+

Our registration process is consistent with Chrome Origin Trials, simply click the Register button for any of the available experiments listed above. Follow the prompts in the registration form and we'll send you a valid token to use on your site.

+ +

Using an Origin Trial Token

+

There are two ways to use the tokens provide in your page:

+ + Option 1: Using a <meta> Tag +

Add an origin-trial tag to the head of any page.

+ +

+                    <meta http-equiv="origin-trial" content="your-token-goes-here">
+                
+ + Option 2: Using an HTTP Header +

Alternatively, you can add an `Origin-Trial` header to your HTTP server response.

+ +

+                    Origin-Trial: your-token-goes-here
+                
+ +

When a token is found in a document, Microsoft Edge will automatically turn on the Edge Feature Flag corresponding to the trial for which the token is valid. This will allow visitors of the application to use the feature despite it's off-by-default state in their local browser.

+ +

Developer Guidelines

+ +

Allowed Origins

+

Edge origin trials only support SSL-enabled domains. For localhost testing of a feature, please use the appropriate Edge Feature Flag located in about://flags. In the future, we may publish public tokens that are valid for localhost testing. + +

Subdomains, URL Paths and Query Params

+

Origin trial tokens can be configured to support a single domain or subdomain, but they can also be configured to support wild card subdomains for a specific domain. For example, a developer can register https://beta.example.com without subdomain support or a developer can register https://example.com with the subdomain support checkbox selected at registration time to enable all subdomains of that origin.

+ +

Paths and query parameters are not supported by the origin trial system. URIs that are submitted with trailing paths or query parameters, such as https://example.com/path/new-feature will be registered as the root domain.

+ +

Origin Trial Duration

+

Once you have registered for a trial, your token will be valid until the expiration date listed on the trial informational card. After this date, the token will no longer function and the feature associated with the trial will be considered ready to ship or be brought back for further development based on developer feedback.

+ +

A browser feature team may decide to early-end an experiment in case of any major security incidents caused by the feature, or they have collected enough feedback and concluded the currently proposed API does not meet the web developer needs, and a major redesign need to happen. We will be sending out emails to all developers enrolled in an experiment in the case of early-end.

+ +

Providing Feedback on an Origin Trial

+

If you would like to provide public feedback for a particular trial, please click the issues button located next to the registration button for that trial. We track all feedback as GitHub issues in order to allow for public discourse on ergonomics and stability of a feature.

+ +

Opting out of an experiment

+

To opt out of an experiment, you can simply remove the token we have provided from the <meta> tag or from the server response headers.

+ +

Experimental feature implementation best practices

+

MDN has a great resource on best practices for feature detection, you can view it here. We encourage all developers to treat origin trials as experimental and provide graceful fallback mechanisms should the token expire or the browser team choose to discontinue an active trial.

+
+
+ + + diff --git a/origin-trials/script.js b/origin-trials/script.js new file mode 100644 index 000000000..21c6eed7a --- /dev/null +++ b/origin-trials/script.js @@ -0,0 +1,41 @@ +if (document.readyState != 'loading') { + onload(); +} else { + document.addEventListener('DOMContentLoaded', onload); +} + +async function onload() { + await populateActiveTrialList(); +} + +async function populateActiveTrialList() { + + let trials = await fetch('trials.json') + .then( stream => stream.json() ) + + let active = trials["active"]; + + let section = document.querySelector("#active-trials-section"); + + active.forEach( trial => { + let label = trial["label"]; + let expires = trial["expiration"]; + let explainer = trial["explainer"]; + let issue = trial["issue"]; + + let card = document.createElement("trial-card"); + + card.setAttribute("label", label); + card.setAttribute("expires", expires); + + if (explainer != undefined) { + card.setAttribute("explainer", explainer); + } + + if (issue != undefined) { + card.setAttribute("issue", issue); + } + + section.appendChild(card); + }); +} \ No newline at end of file diff --git a/styles.css b/origin-trials/styles.css similarity index 81% rename from styles.css rename to origin-trials/styles.css index 73959ebf4..0fbb0601c 100644 --- a/styles.css +++ b/origin-trials/styles.css @@ -32,6 +32,12 @@ header h1 { font-weight: 200; } +hr { + margin: 4rem 0 4rem 0; + border: 1px solid #dfdfdf; + border-top: 1px solid #b0b0b0; +} + .header__section-left { display: flex; flex-direction: column; @@ -50,4 +56,8 @@ header h1 { font-weight: 600; color: rgb(14, 80, 14); padding: 0rem 0rem 1rem 0rem +} + +#active-trials-section { + margin: 4rem 0 0 0; } \ No newline at end of file diff --git a/origin-trials/trial-card.component.html b/origin-trials/trial-card.component.html new file mode 100644 index 000000000..442282c68 --- /dev/null +++ b/origin-trials/trial-card.component.html @@ -0,0 +1,59 @@ + +
+ + Explainer + + + +
\ No newline at end of file diff --git a/origin-trials/trial-card.component.js b/origin-trials/trial-card.component.js new file mode 100644 index 000000000..7910b863a --- /dev/null +++ b/origin-trials/trial-card.component.js @@ -0,0 +1,76 @@ +fetch("trial-card.component.html") + .then( stream => stream.text() ) + .then( text => define(text) ); + +const REGISTRATION_LINK = "https://aka.ms/origin-trial-registration" + +function define(template) { + class TrialCard extends HTMLElement { + constructor() { + super(); + + this._shadow = this.attachShadow({ mode: "open" }); + this._shadow.innerHTML = template; + + // Store references to internal components + this._heading = this._shadow.querySelector('.trial-card__title'); + this._explainer = this._shadow.querySelector('.trial-card__explainer'); + this._expires = this._shadow.querySelector('.trial-card__expires'); + this._badge = this._shadow.querySelector('.trial-card__issue-badge'); + this._register = this._shadow.querySelector('.trial-card__registration-button'); + } + + connectedCallback() { + // Set initial values of elements based on attributes + let heading = this.getAttribute("label"); + let explainer = this.getAttribute("explainer"); + let expires = this.getAttribute("expires"); + let issue = this.getAttribute("issue"); + + this._heading.innerHTML = heading; + this._expires.innerHTML = expires; + + this._explainer.setAttribute('href', explainer); + + if (issue != null && issue.length > 0) { + this._badge.setAttribute('href', this.getIssueLink(issue)); + + let img = document.createElement('img'); + img.src = this.getIssueBadgeLink(issue); + + this._badge.appendChild(img) + } else { + this._badge.setAttribute('href', this.getGenericIssueLink(heading)); + + let img = document.createElement('img'); + img.src = this.getIssueBadgeLink('OriginTrialFeedback'); + + this._badge.appendChild(img); + } + + this._register.addEventListener('click', () => window.open(REGISTRATION_LINK, '_blank')) + } + + attributeChangedCallback(name, previous, current) { + console.log(`${name} ${previous} ${current}`); + } + + getIssueBadgeLink(tag) { + let encoded = encodeURI(tag); + return `https://img.shields.io/github/issues/MicrosoftEdge/MSEdgeExplainers/${encoded}?label=issues`; + } + + getIssueLink(tag) { + let encoded = encodeURI(tag); + let label = tag.replace(' ', '+') + return `https://github.com/MicrosoftEdge/MSEdgeExplainers/issues/new?labels=${label},OriginTrialFeedback&title=%5B${encoded}%5D+Feedback` + } + + getGenericIssueLink(name) { + let encoded = encodeURI(name); + return `https://github.com/MicrosoftEdge/MSEdgeExplainers/issues/new?labels=OriginTrialFeedback&title=%5B${encoded}%5D+Feedback`; + } + } + + customElements.define('trial-card', TrialCard); +} \ No newline at end of file diff --git a/origin-trials/trials.json b/origin-trials/trials.json new file mode 100644 index 000000000..59fb5c5b7 --- /dev/null +++ b/origin-trials/trials.json @@ -0,0 +1,18 @@ +{ + "active": [ + { + "label": "Web Haptics API", + "expiration": "2023-12-31", + "issue": "HapticsDevice API", + "explainer": "https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/HapticsDevice/explainer.md" + },{ + "label": "Digital Goods API", + "expiration": "2023-12-31", + "explainer": "#" + } + ], + + "expired": [ + + ] +} \ No newline at end of file From e8f5a23db6d177bc56a073cab2b70c182deb0a11 Mon Sep 17 00:00:00 2001 From: Ben Mathwig Date: Tue, 11 Jul 2023 12:18:08 -0700 Subject: [PATCH 03/12] [Origin Trials] Adding new Trial Adding the 'SystemEntropy in PerformanceNavigationTiming' trial to active trial list. --- origin-trials/trials.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/origin-trials/trials.json b/origin-trials/trials.json index 59fb5c5b7..644e45b73 100644 --- a/origin-trials/trials.json +++ b/origin-trials/trials.json @@ -3,12 +3,17 @@ { "label": "Web Haptics API", "expiration": "2023-12-31", - "issue": "HapticsDevice API", + "issue": "WebHaptics", "explainer": "https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/HapticsDevice/explainer.md" },{ "label": "Digital Goods API", "expiration": "2023-12-31", "explainer": "#" + },{ + "label": "SystemEntropy in PerformanceNavigationTiming", + "expiration": "2023-11-1", + "explainer": "https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/PerformanceNavigationTiming%20for%20User%20Agent%20Launch/explainer.md", + "issue": "PerformanceNavigationTimingSystemEntropy " } ], From 5fc1837d0c723b72ff7c2ff9e9f6438610de950f Mon Sep 17 00:00:00 2001 From: Ben Mathwig Date: Tue, 11 Jul 2023 12:25:21 -0700 Subject: [PATCH 04/12] [Origin Trials] Fixing Card Styles --- origin-trials/trial-card.component.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/origin-trials/trial-card.component.html b/origin-trials/trial-card.component.html index 442282c68..88a5c271e 100644 --- a/origin-trials/trial-card.component.html +++ b/origin-trials/trial-card.component.html @@ -13,7 +13,8 @@ display: block; line-height: 32px; font-weight: 600; - flex-grow: 0.75; + flex-grow: 1; + max-width: 50%; } .trial-card__explainer { From e65f1638edff5ed6fa368355c37d602b27da014c Mon Sep 17 00:00:00 2001 From: Ben Mathwig Date: Wed, 12 Jul 2023 10:36:22 -0700 Subject: [PATCH 05/12] [Origin Trial] Adding Unsanitized HTML Async Clipboard API Trial --- origin-trials/trials.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/origin-trials/trials.json b/origin-trials/trials.json index 644e45b73..1ef3e0791 100644 --- a/origin-trials/trials.json +++ b/origin-trials/trials.json @@ -13,7 +13,13 @@ "label": "SystemEntropy in PerformanceNavigationTiming", "expiration": "2023-11-1", "explainer": "https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/PerformanceNavigationTiming%20for%20User%20Agent%20Launch/explainer.md", - "issue": "PerformanceNavigationTimingSystemEntropy " + "issue": "PerformanceNavigationTimingSystemEntropy ", + "flag": "MsUserAgentLaunchNavType" + },{ + "label": "Unsanitized HTML for Async Clipboard API", + "expiration": "2024-02-29", + "explainer": "https://github.com/w3c/editing/blob/gh-pages/docs/clipboard-unsanitized/explainer.md", + "flag": "EdgeClipboardUnsanitizedContent" } ], From 796fa361935f02a68689b583587aec2552ca240e Mon Sep 17 00:00:00 2001 From: Dan Clark Date: Tue, 8 Aug 2023 09:42:18 -0700 Subject: [PATCH 06/12] Add Upstream Trials to Origin Trials Page Added upstream origin trials via new JSON file. Offline script can generate the JSON file periodically for updates. --- .../{trials.json => downstream-trials.json} | 4 + origin-trials/index.html | 5 +- origin-trials/script.js | 30 ++- origin-trials/styles.css | 17 +- origin-trials/trial-card.component.html | 8 +- origin-trials/trial-card.component.js | 58 +++-- origin-trials/upstream-trials.json | 224 ++++++++++++++++++ 7 files changed, 310 insertions(+), 36 deletions(-) rename origin-trials/{trials.json => downstream-trials.json} (81%) create mode 100644 origin-trials/upstream-trials.json diff --git a/origin-trials/trials.json b/origin-trials/downstream-trials.json similarity index 81% rename from origin-trials/trials.json rename to origin-trials/downstream-trials.json index 1ef3e0791..3b619241f 100644 --- a/origin-trials/trials.json +++ b/origin-trials/downstream-trials.json @@ -3,21 +3,25 @@ { "label": "Web Haptics API", "expiration": "2023-12-31", + "repo": "MicrosoftEdge/MSEdgeExplainers", "issue": "WebHaptics", "explainer": "https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/HapticsDevice/explainer.md" },{ "label": "Digital Goods API", "expiration": "2023-12-31", + "repo": "MicrosoftEdge/MSEdgeExplainers", "explainer": "#" },{ "label": "SystemEntropy in PerformanceNavigationTiming", "expiration": "2023-11-1", + "repo": "MicrosoftEdge/MSEdgeExplainers", "explainer": "https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/PerformanceNavigationTiming%20for%20User%20Agent%20Launch/explainer.md", "issue": "PerformanceNavigationTimingSystemEntropy ", "flag": "MsUserAgentLaunchNavType" },{ "label": "Unsanitized HTML for Async Clipboard API", "expiration": "2024-02-29", + "repo": "MicrosoftEdge/MSEdgeExplainers", "explainer": "https://github.com/w3c/editing/blob/gh-pages/docs/clipboard-unsanitized/explainer.md", "flag": "EdgeClipboardUnsanitizedContent" } diff --git a/origin-trials/index.html b/origin-trials/index.html index 614fcfe64..9aace9181 100644 --- a/origin-trials/index.html +++ b/origin-trials/index.html @@ -14,7 +14,10 @@

Microsoft Edge Origin Trials

Active Origin Trials

-
+
+
Active Chrome Origin Trials (Also available in Edge) +
+

Getting Started

diff --git a/origin-trials/script.js b/origin-trials/script.js index 21c6eed7a..cea03e48d 100644 --- a/origin-trials/script.js +++ b/origin-trials/script.js @@ -5,31 +5,37 @@ if (document.readyState != 'loading') { } async function onload() { - await populateActiveTrialList(); + let edgeSection = document.querySelector("#edge-active-trials-section"); + let chromeSection = document.querySelector("#chrome-active-trials-section"); + await populateActiveTrialList('downstream-trials.json', edgeSection, /*isUpstream=*/false); + await populateActiveTrialList('upstream-trials.json', chromeSection, /*isUpstream=*/true); } -async function populateActiveTrialList() { +async function populateActiveTrialList(trialsFile, section, isUpstream) { - let trials = await fetch('trials.json') + let trials = await fetch(trialsFile) .then( stream => stream.json() ) let active = trials["active"]; - let section = document.querySelector("#active-trials-section"); - active.forEach( trial => { - let label = trial["label"]; - let expires = trial["expiration"]; - let explainer = trial["explainer"]; - let issue = trial["issue"]; + let label = trial["label"]; + let expires = trial["expiration"]; + let explainer = trial["explainer"]; + let repo = trial["repo"]; + let issue = trial["issue"]; + let feedbackLink = trial["feedbackLink"]; let card = document.createElement("trial-card"); card.setAttribute("label", label); card.setAttribute("expires", expires); - - if (explainer != undefined) { - card.setAttribute("explainer", explainer); + card.setAttribute("explainer", explainer); + card.setAttribute("repo", repo); + card.setAttribute("upstream", isUpstream); + + if (feedbackLink != undefined) { + card.setAttribute("feedbackLink", feedbackLink); } if (issue != undefined) { diff --git a/origin-trials/styles.css b/origin-trials/styles.css index 0fbb0601c..da0f759d2 100644 --- a/origin-trials/styles.css +++ b/origin-trials/styles.css @@ -45,6 +45,19 @@ hr { width: 50%; } +details { + margin-top: 1.5rem; +} + +details section { + margin-top: 1.5rem; +} + +summary { + font-size: 1.5em; + font-weight: bold; +} + .note { background-color: rgba(28, 190, 28, 0.25); padding: 1rem 1.2rem; @@ -57,7 +70,3 @@ hr { color: rgb(14, 80, 14); padding: 0rem 0rem 1rem 0rem } - -#active-trials-section { - margin: 4rem 0 0 0; -} \ No newline at end of file diff --git a/origin-trials/trial-card.component.html b/origin-trials/trial-card.component.html index 88a5c271e..6a43c774a 100644 --- a/origin-trials/trial-card.component.html +++ b/origin-trials/trial-card.component.html @@ -15,13 +15,18 @@ font-weight: 600; flex-grow: 1; max-width: 50%; + overflow-wrap: break-word; } - .trial-card__explainer { + .trial-card__explainer, .trial-card__feedback { font-weight: 500; font-style: italic; } + .trial-card__feedback { + display: none; + } + .trial-card__expires { display: block; line-height: 32px; @@ -56,5 +61,6 @@ Explainer + \ No newline at end of file diff --git a/origin-trials/trial-card.component.js b/origin-trials/trial-card.component.js index 7910b863a..dc14546a1 100644 --- a/origin-trials/trial-card.component.js +++ b/origin-trials/trial-card.component.js @@ -17,33 +17,50 @@ function define(template) { this._explainer = this._shadow.querySelector('.trial-card__explainer'); this._expires = this._shadow.querySelector('.trial-card__expires'); this._badge = this._shadow.querySelector('.trial-card__issue-badge'); + this._feedback = this._shadow.querySelector('.trial-card__feedback'); this._register = this._shadow.querySelector('.trial-card__registration-button'); } connectedCallback() { // Set initial values of elements based on attributes - let heading = this.getAttribute("label"); - let explainer = this.getAttribute("explainer"); - let expires = this.getAttribute("expires"); - let issue = this.getAttribute("issue"); + let heading = this.getAttribute("label"); + let explainer = this.getAttribute("explainer"); + let expires = this.getAttribute("expires"); + let repo = this.getAttribute("repo"); + let issue = this.getAttribute("issue"); + let feedbackLink = this.getAttribute("feedbackLink"); + let isUpstream = this.getAttribute("upstream"); this._heading.innerHTML = heading; this._expires.innerHTML = expires; this._explainer.setAttribute('href', explainer); - if (issue != null && issue.length > 0) { - this._badge.setAttribute('href', this.getIssueLink(issue)); + if (feedbackLink != null) { + this._feedback.setAttribute('href', feedbackLink); + + this._badge.style.display = "none"; + this._feedback.style.display = "inline"; + } else if (issue != null && issue.length > 0) { + this._badge.setAttribute('href', this.getIssueLink(repo, issue)); let img = document.createElement('img'); - img.src = this.getIssueBadgeLink(issue); + if (isUpstream === "false") { + img.src = this.getIssueBadgeLink(repo, issue); + } else { + img.src = this.getIssueBadgeLink(repo, ""); + } this._badge.appendChild(img) } else { - this._badge.setAttribute('href', this.getGenericIssueLink(heading)); + this._badge.setAttribute('href', this.getGenericIssueLink(repo, heading)); let img = document.createElement('img'); - img.src = this.getIssueBadgeLink('OriginTrialFeedback'); + if (isUpstream === "false") { + img.src = this.getIssueBadgeLink(repo, 'OriginTrialFeedback'); + } else { + img.src = this.getIssueBadgeLink(repo, ""); + } this._badge.appendChild(img); } @@ -55,20 +72,25 @@ function define(template) { console.log(`${name} ${previous} ${current}`); } - getIssueBadgeLink(tag) { - let encoded = encodeURI(tag); - return `https://img.shields.io/github/issues/MicrosoftEdge/MSEdgeExplainers/${encoded}?label=issues`; + getIssueBadgeLink(repo, tag) { + let encodedTag = tag.length > 0 ? `/${encodeURI(tag)}` : ""; + return `https://img.shields.io/github/issues/${repo}${encodedTag}?label=issues`; } - getIssueLink(tag) { - let encoded = encodeURI(tag); + getIssueLink(repo, tag) { + let encodedTag = encodeURI(tag); let label = tag.replace(' ', '+') - return `https://github.com/MicrosoftEdge/MSEdgeExplainers/issues/new?labels=${label},OriginTrialFeedback&title=%5B${encoded}%5D+Feedback` + return `https://github.com/${repo}/issues/new?labels=${label},OriginTrialFeedback&title=%5B${encodedTag}%5D+Feedback` } - getGenericIssueLink(name) { - let encoded = encodeURI(name); - return `https://github.com/MicrosoftEdge/MSEdgeExplainers/issues/new?labels=OriginTrialFeedback&title=%5B${encoded}%5D+Feedback`; + getGenericIssueLink(repo, name) { + if (repo === "MicrosoftEdge/MSEdgeExplainers") { + let encodedName = encodeURI(name); + return `https://github.com/${repo}/issues/new?labels=OriginTrialFeedback&title=%5B${encodedName}%5D+Feedback`; + } else { + return `https://github.com/${repo}/issues/new`; + } + } } diff --git a/origin-trials/upstream-trials.json b/origin-trials/upstream-trials.json new file mode 100644 index 000000000..81d7c6106 --- /dev/null +++ b/origin-trials/upstream-trials.json @@ -0,0 +1,224 @@ +{ + "active": [ + { + "label": "Back/forward cache NotRestoredReason API", + "expiration": "2023-08-08", + "repo": "rubberyuzu/bfcache-not-retored-reason", + "explainer": "https://github.com/rubberyuzu/bfcache-not-retored-reason/blob/main/NotRestoredReason.md" + }, + { + "label": "Background Blur", + "expiration": "2023-11-02", + "repo": "w3c/mediacapture-extensions", + "explainer": "https://github.com/riju/backgroundBlur/blob/main/explainer.md" + }, + { + "label": "CompressionDictionaryTransport", + "expiration": "2024-04-30", + "repo": "WICG/compression-dictionary-transport", + "explainer": "https://github.com/WICG/compression-dictionary-transport" + }, + { + "label": "Compute Pressure", + "expiration": "2024-01-04", + "repo": "w3c/compute-pressure", + "explainer": "https://developer.chrome.com/docs/web-platform/compute-pressure/" + }, + { + "label": "COOP: restrict-properties", + "expiration": "2024-02-06", + "feedbackLink": "https://docs.google.com/forms/d/1pJ-c7GlAYrwu95vIg9l1MDpBMhSDDTM4f6GXEIsAod0/edit?resourcekey=0-gDRkC9ScABNyMI9Y_VDA4w", + "explainer": "https://github.com/hemeryar/coi-with-popups" + }, + { + "label": "Cross App and Web Attribution Measurement", + "expiration": "2024-02-06", + "repo": "WICG/attribution-reporting-api", + "explainer": "https://github.com/WICG/attribution-reporting-api/blob/main/app_to_web.md" + }, + { + "label": "DisableThirdPartySessionStoragePartitioningAfterGeneralPartitioning", + "expiration": "2024-09-03", + "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_dd2p0f6kgIwZ9D8", + "explainer": "https://github.com/wanderview/quota-storage-partitioning/blob/main/explainer.md" + }, + { + "label": "DisableThirdPartyStoragePartitioning", + "expiration": "2024-09-03", + "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_0qAfKX5h4w9BsVg", + "explainer": "https://github.com/wanderview/quota-storage-partitioning/blob/main/explainer.md" + }, + { + "label": "Document Picture-in-Picture", + "expiration": "2023-09-07", + "repo": "WICG/document-picture-in-picture", + "explainer": "https://github.com/WICG/document-picture-in-picture" + }, + { + "label": "EditContext", + "expiration": "2024-03-05", + "repo": "w3c/edit-context", + "explainer": "https://github.com/w3c/edit-context/blob/gh-pages/explainer.md" + }, + { + "label": "Explicit Compile Hints with Magic Comments", + "expiration": "2023-11-02", + "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_9SLyOGnTj2cwo0C", + "explainer": "https://docs.google.com/document/d/19xTAM4A75tz0xUq_velMzGA4JHEgXpyflUxXTcuNiyE/edit?usp=sharing" + }, + { + "label": "FedCM IDP Sign-in Status API", + "expiration": "2024-02-06", + "repo": "fedidcg/FedCM", + "explainer": "https://github.com/fedidcg/FedCM/blob/main/proposals/idp-sign-in-status-api.md" + }, + { + "label": "FedCM: Auto Re-Authentication API", + "expiration": "2023-08-08", + "repo": "fedidcg/FedCM", + "explainer": "https://github.com/fedidcg/FedCM/issues/429" + }, + { + "label": "Long Animation Frames", + "expiration": "2024-03-05", + "repo": "w3c/longtasks", + "explainer": "https://github.com/w3c/longtasks/blob/main/loaf-explainer.md" + }, + { + "label": "No-Vary-Search support in navigation prefetch cache", + "expiration": "2024-01-04", + "repo": "WICG/nav-speculation", + "explainer": "https://github.com/WICG/nav-speculation/blob/main/no-vary-search.md" + }, + { + "label": "Page Unload Beacon", + "expiration": "2023-09-19", + "repo": "WICG/unload-beacon", + "explainer": "https://chromium.googlesource.com/chromium/src/+/main/docs/experiments/page-unload-beacon.md" + }, + { + "label": "Payment handler minimal header UX", + "expiration": "2023-12-07", + "feedbackLink": "https://bugs.chromium.org/p/chromium/issues/entry?components=Blink%3EPayments", + "explainer": "https://groups.google.com/a/chromium.org/g/blink-dev/c/NQ-WLvfmPs8" + }, + { + "label": "Privacy Sandbox Relevance and Measurement", + "expiration": "2023-09-19", + "feedbackLink": "https://developer.chrome.com/blog/privacy-sandbox-unified-origin-trial/#where-can-developers-give-feedback-and-get-support", + "explainer": "https://developer.chrome.com/blog/privacy-sandbox-unified-origin-trial/" + }, + { + "label": "Private Network Access from non-secure contexts", + "expiration": "2024-02-06", + "repo": "WICG/private-network-access", + "explainer": "https://developer.chrome.com/blog/private-network-access-update/" + }, + { + "label": "Reduce Accept-Language", + "expiration": "2023-08-08", + "repo": "Tanych/accept-language", + "explainer": "https://github.com/Tanych/accept-language" + }, + { + "label": "RTCLegacyTrackStats", + "expiration": "2023-09-23", + "feedbackLink": "https://groups.google.com/a/chromium.org/g/blink-dev/c/NZVXsJQ7tV8", + "explainer": "https://w3c.github.io/webrtc-stats/" + }, + { + "label": "RTCPeerConnection callback-based getStats() API", + "expiration": "2024-03-07", + "feedbackLink": "https://crbug.com/822696", + "explainer": "https://w3c.github.io/webrtc-stats/" + }, + { + "label": "scheduler.yield()", + "expiration": "2024-01-04", + "repo": "wicg/scheduling-apis", + "explainer": "https://github.com/WICG/scheduling-apis/blob/main/implementation-status.md" + }, + { + "label": "ServiceWorker static routing API", + "expiration": "2024-04-02", + "repo": "w3c/ServiceWorker", + "explainer": "https://github.com/yoshisatoyanagisawa/service-worker-static-routing-api" + }, + { + "label": "ServiceWorkerBypassFetchHandlerForMainResources", + "expiration": "2023-09-23", + "repo": "w3c/ServiceWorker", + "explainer": "https://github.com/sisidovski/service-worker-bypass-fetch-handler-for-main-resource" + }, + { + "label": "SharedArrayBuffers in non-isolated pages on Desktop platforms", + "expiration": "2024-03-07", + "feedbackLink": "https://bugs.chromium.org/p/chromium/issues/entry?components=Internals%3ESandbox%3ESiteIsolation", + "explainer": "https://developer.chrome.com/blog/enabling-shared-array-buffer/" + }, + { + "label": "Speculation Rules - Document rules, response header, deliveryType", + "expiration": "2024-01-04", + "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_4HePq4hnaw2MZUi", + "explainer": "https://github.com/WICG/nav-speculation/blob/main/chrome-2023q1-experiment-overview.md" + }, + { + "label": "Storage Buckets API", + "expiration": "2024-01-04", + "repo": "WICG/storage-buckets", + "explainer": "https://developer.chrome.com/blog/storage-buckets/" + }, + { + "label": "The Popover API", + "expiration": "2023-08-10", + "repo": "openui/open-ui", + "explainer": "https://open-ui.org/components/popup.research.explainer" + }, + { + "label": "User-Agent Reduction Deprecation", + "expiration": "2023-09-23", + "repo": "w3ctag/design-reviews", + "explainer": "https://docs.google.com/document/d/1d-K43rzfDGxNM4H6Yzh5lV08KJwLsae06i4Q0A8snME" + }, + { + "label": "Web App Dark Mode v2", + "expiration": "2023-08-08", + "repo": "WICG/manifest-incubations", + "explainer": "https://github.com/w3c/manifest/issues/1045" + }, + { + "label": "WebAssembly Garbage Collection", + "expiration": "2023-11-02", + "feedbackLink": "https://bugs.chromium.org/p/v8/issues/list", + "explainer": "https://github.com/WebAssembly/gc/blob/master/proposals/gc/Overview.md" + }, + { + "label": "WebGPU", + "expiration": "2023-08-10", + "repo": "gpuweb/gpuweb", + "explainer": "https://gpuweb.github.io/gpuweb/" + }, + { + "label": "WebGPU WebCodecs integration", + "expiration": "2023-12-07", + "repo": "gpuweb/gpuweb", + "explainer": "https://gpuweb.github.io/gpuweb/explainer/#image-input" + }, + { + "label": "WebSQL", + "expiration": "2024-05-28", + "feedbackLink": "https://crbug.com/695592", + "explainer": "https://developer.chrome.com/blog/deprecating-web-sql/" + }, + { + "label": "X-Requested-With in WebView Deprecation", + "expiration": "2024-06-27", + "feedbackLink": "https://bugs.chromium.org/p/chromium/issues/entry?template=Webview+Bugs&labels=XRW-Deprecation", + "explainer": "https://docs.google.com/document/d/e/2PACX-1vSSTEsHVfTXwOW80Tqy4c5TW6wSnt9b8v7-ZWUF3ZqLDs03EatEuyPCqwaUaa2s0a7mFm3Wh61bgVoz/pub" + } + ], + + "expired": [ + + ] +} \ No newline at end of file From 9fa1ba92c75dfeb22daefc92452ca315873856b0 Mon Sep 17 00:00:00 2001 From: Dan Clark Date: Fri, 25 Aug 2023 16:10:34 -0700 Subject: [PATCH 07/12] Update upstream Origin Trials (#675) --- origin-trials/upstream-trials.json | 402 +++++++++++++---------------- 1 file changed, 186 insertions(+), 216 deletions(-) diff --git a/origin-trials/upstream-trials.json b/origin-trials/upstream-trials.json index 81d7c6106..c9ac173cc 100644 --- a/origin-trials/upstream-trials.json +++ b/origin-trials/upstream-trials.json @@ -1,222 +1,192 @@ { "active": [ { - "label": "Back/forward cache NotRestoredReason API", - "expiration": "2023-08-08", - "repo": "rubberyuzu/bfcache-not-retored-reason", - "explainer": "https://github.com/rubberyuzu/bfcache-not-retored-reason/blob/main/NotRestoredReason.md" - }, - { - "label": "Background Blur", - "expiration": "2023-11-02", - "repo": "w3c/mediacapture-extensions", - "explainer": "https://github.com/riju/backgroundBlur/blob/main/explainer.md" - }, - { - "label": "CompressionDictionaryTransport", - "expiration": "2024-04-30", - "repo": "WICG/compression-dictionary-transport", - "explainer": "https://github.com/WICG/compression-dictionary-transport" - }, - { - "label": "Compute Pressure", - "expiration": "2024-01-04", - "repo": "w3c/compute-pressure", - "explainer": "https://developer.chrome.com/docs/web-platform/compute-pressure/" - }, - { - "label": "COOP: restrict-properties", - "expiration": "2024-02-06", - "feedbackLink": "https://docs.google.com/forms/d/1pJ-c7GlAYrwu95vIg9l1MDpBMhSDDTM4f6GXEIsAod0/edit?resourcekey=0-gDRkC9ScABNyMI9Y_VDA4w", - "explainer": "https://github.com/hemeryar/coi-with-popups" - }, - { - "label": "Cross App and Web Attribution Measurement", - "expiration": "2024-02-06", - "repo": "WICG/attribution-reporting-api", - "explainer": "https://github.com/WICG/attribution-reporting-api/blob/main/app_to_web.md" - }, - { - "label": "DisableThirdPartySessionStoragePartitioningAfterGeneralPartitioning", - "expiration": "2024-09-03", - "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_dd2p0f6kgIwZ9D8", - "explainer": "https://github.com/wanderview/quota-storage-partitioning/blob/main/explainer.md" - }, - { - "label": "DisableThirdPartyStoragePartitioning", - "expiration": "2024-09-03", - "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_0qAfKX5h4w9BsVg", - "explainer": "https://github.com/wanderview/quota-storage-partitioning/blob/main/explainer.md" - }, - { - "label": "Document Picture-in-Picture", - "expiration": "2023-09-07", - "repo": "WICG/document-picture-in-picture", - "explainer": "https://github.com/WICG/document-picture-in-picture" - }, - { - "label": "EditContext", - "expiration": "2024-03-05", - "repo": "w3c/edit-context", - "explainer": "https://github.com/w3c/edit-context/blob/gh-pages/explainer.md" - }, - { - "label": "Explicit Compile Hints with Magic Comments", - "expiration": "2023-11-02", - "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_9SLyOGnTj2cwo0C", - "explainer": "https://docs.google.com/document/d/19xTAM4A75tz0xUq_velMzGA4JHEgXpyflUxXTcuNiyE/edit?usp=sharing" - }, - { - "label": "FedCM IDP Sign-in Status API", - "expiration": "2024-02-06", - "repo": "fedidcg/FedCM", - "explainer": "https://github.com/fedidcg/FedCM/blob/main/proposals/idp-sign-in-status-api.md" - }, - { - "label": "FedCM: Auto Re-Authentication API", - "expiration": "2023-08-08", - "repo": "fedidcg/FedCM", - "explainer": "https://github.com/fedidcg/FedCM/issues/429" - }, - { - "label": "Long Animation Frames", - "expiration": "2024-03-05", - "repo": "w3c/longtasks", - "explainer": "https://github.com/w3c/longtasks/blob/main/loaf-explainer.md" - }, - { - "label": "No-Vary-Search support in navigation prefetch cache", - "expiration": "2024-01-04", - "repo": "WICG/nav-speculation", - "explainer": "https://github.com/WICG/nav-speculation/blob/main/no-vary-search.md" - }, - { - "label": "Page Unload Beacon", - "expiration": "2023-09-19", - "repo": "WICG/unload-beacon", - "explainer": "https://chromium.googlesource.com/chromium/src/+/main/docs/experiments/page-unload-beacon.md" - }, - { - "label": "Payment handler minimal header UX", - "expiration": "2023-12-07", - "feedbackLink": "https://bugs.chromium.org/p/chromium/issues/entry?components=Blink%3EPayments", - "explainer": "https://groups.google.com/a/chromium.org/g/blink-dev/c/NQ-WLvfmPs8" - }, - { - "label": "Privacy Sandbox Relevance and Measurement", - "expiration": "2023-09-19", - "feedbackLink": "https://developer.chrome.com/blog/privacy-sandbox-unified-origin-trial/#where-can-developers-give-feedback-and-get-support", - "explainer": "https://developer.chrome.com/blog/privacy-sandbox-unified-origin-trial/" - }, - { - "label": "Private Network Access from non-secure contexts", - "expiration": "2024-02-06", - "repo": "WICG/private-network-access", - "explainer": "https://developer.chrome.com/blog/private-network-access-update/" - }, - { - "label": "Reduce Accept-Language", - "expiration": "2023-08-08", - "repo": "Tanych/accept-language", - "explainer": "https://github.com/Tanych/accept-language" - }, - { - "label": "RTCLegacyTrackStats", - "expiration": "2023-09-23", - "feedbackLink": "https://groups.google.com/a/chromium.org/g/blink-dev/c/NZVXsJQ7tV8", - "explainer": "https://w3c.github.io/webrtc-stats/" - }, - { - "label": "RTCPeerConnection callback-based getStats() API", - "expiration": "2024-03-07", - "feedbackLink": "https://crbug.com/822696", - "explainer": "https://w3c.github.io/webrtc-stats/" - }, - { - "label": "scheduler.yield()", - "expiration": "2024-01-04", - "repo": "wicg/scheduling-apis", - "explainer": "https://github.com/WICG/scheduling-apis/blob/main/implementation-status.md" - }, - { - "label": "ServiceWorker static routing API", - "expiration": "2024-04-02", - "repo": "w3c/ServiceWorker", - "explainer": "https://github.com/yoshisatoyanagisawa/service-worker-static-routing-api" - }, - { - "label": "ServiceWorkerBypassFetchHandlerForMainResources", - "expiration": "2023-09-23", - "repo": "w3c/ServiceWorker", - "explainer": "https://github.com/sisidovski/service-worker-bypass-fetch-handler-for-main-resource" - }, - { - "label": "SharedArrayBuffers in non-isolated pages on Desktop platforms", - "expiration": "2024-03-07", - "feedbackLink": "https://bugs.chromium.org/p/chromium/issues/entry?components=Internals%3ESandbox%3ESiteIsolation", - "explainer": "https://developer.chrome.com/blog/enabling-shared-array-buffer/" - }, - { - "label": "Speculation Rules - Document rules, response header, deliveryType", - "expiration": "2024-01-04", - "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_4HePq4hnaw2MZUi", - "explainer": "https://github.com/WICG/nav-speculation/blob/main/chrome-2023q1-experiment-overview.md" - }, - { - "label": "Storage Buckets API", - "expiration": "2024-01-04", - "repo": "WICG/storage-buckets", - "explainer": "https://developer.chrome.com/blog/storage-buckets/" - }, - { - "label": "The Popover API", - "expiration": "2023-08-10", - "repo": "openui/open-ui", - "explainer": "https://open-ui.org/components/popup.research.explainer" - }, - { - "label": "User-Agent Reduction Deprecation", - "expiration": "2023-09-23", - "repo": "w3ctag/design-reviews", - "explainer": "https://docs.google.com/document/d/1d-K43rzfDGxNM4H6Yzh5lV08KJwLsae06i4Q0A8snME" - }, - { - "label": "Web App Dark Mode v2", - "expiration": "2023-08-08", - "repo": "WICG/manifest-incubations", - "explainer": "https://github.com/w3c/manifest/issues/1045" - }, - { - "label": "WebAssembly Garbage Collection", - "expiration": "2023-11-02", - "feedbackLink": "https://bugs.chromium.org/p/v8/issues/list", - "explainer": "https://github.com/WebAssembly/gc/blob/master/proposals/gc/Overview.md" - }, - { - "label": "WebGPU", - "expiration": "2023-08-10", - "repo": "gpuweb/gpuweb", - "explainer": "https://gpuweb.github.io/gpuweb/" - }, - { - "label": "WebGPU WebCodecs integration", - "expiration": "2023-12-07", - "repo": "gpuweb/gpuweb", - "explainer": "https://gpuweb.github.io/gpuweb/explainer/#image-input" - }, - { - "label": "WebSQL", - "expiration": "2024-05-28", - "feedbackLink": "https://crbug.com/695592", - "explainer": "https://developer.chrome.com/blog/deprecating-web-sql/" - }, - { - "label": "X-Requested-With in WebView Deprecation", - "expiration": "2024-06-27", - "feedbackLink": "https://bugs.chromium.org/p/chromium/issues/entry?template=Webview+Bugs&labels=XRW-Deprecation", - "explainer": "https://docs.google.com/document/d/e/2PACX-1vSSTEsHVfTXwOW80Tqy4c5TW6wSnt9b8v7-ZWUF3ZqLDs03EatEuyPCqwaUaa2s0a7mFm3Wh61bgVoz/pub" - } - ], + "label": "Background Blur", + "expiration": "2023-11-02", + "repo": "w3c/mediacapture-extensions", + "explainer": "https://github.com/riju/backgroundBlur/blob/main/explainer.md" + }, + { + "label": "CompressionDictionaryTransport", + "expiration": "2024-04-30", + "repo": "WICG/compression-dictionary-transport", + "explainer": "https://github.com/WICG/compression-dictionary-transport" + }, + { + "label": "Compute Pressure", + "expiration": "2024-01-04", + "repo": "w3c/compute-pressure", + "explainer": "https://developer.chrome.com/docs/web-platform/compute-pressure/" + }, + { + "label": "COOP: restrict-properties", + "expiration": "2024-02-06", + "feedbackLink": "https://docs.google.com/forms/d/1pJ-c7GlAYrwu95vIg9l1MDpBMhSDDTM4f6GXEIsAod0/edit?resourcekey=0-gDRkC9ScABNyMI9Y_VDA4w", + "explainer": "https://github.com/hemeryar/coi-with-popups" + }, + { + "label": "Cross App and Web Attribution Measurement", + "expiration": "2024-02-06", + "repo": "WICG/attribution-reporting-api", + "explainer": "https://github.com/WICG/attribution-reporting-api/blob/main/app_to_web.md" + }, + { + "label": "DisableThirdPartySessionStoragePartitioningAfterGeneralPartitioning", + "expiration": "2024-09-03", + "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_dd2p0f6kgIwZ9D8", + "explainer": "https://github.com/wanderview/quota-storage-partitioning/blob/main/explainer.md" + }, + { + "label": "DisableThirdPartyStoragePartitioning", + "expiration": "2024-09-03", + "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_0qAfKX5h4w9BsVg", + "explainer": "https://github.com/wanderview/quota-storage-partitioning/blob/main/explainer.md" + }, + { + "label": "Document Picture-in-Picture", + "expiration": "2023-09-07", + "repo": "WICG/document-picture-in-picture", + "explainer": "https://github.com/WICG/document-picture-in-picture" + }, + { + "label": "EditContext", + "expiration": "2024-03-05", + "repo": "w3c/edit-context", + "explainer": "https://github.com/w3c/edit-context/blob/gh-pages/explainer.md" + }, + { + "label": "Explicit Compile Hints with Magic Comments", + "expiration": "2023-11-02", + "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_9SLyOGnTj2cwo0C", + "explainer": "https://docs.google.com/document/d/19xTAM4A75tz0xUq_velMzGA4JHEgXpyflUxXTcuNiyE/edit?usp=sharing" + }, + { + "label": "FedCM IDP Sign-in Status API", + "expiration": "2024-02-06", + "repo": "fedidcg/FedCM", + "explainer": "https://github.com/fedidcg/FedCM/blob/main/proposals/idp-sign-in-status-api.md" + }, + { + "label": "Long Animation Frames", + "expiration": "2024-03-05", + "repo": "w3c/longtasks", + "explainer": "https://github.com/w3c/longtasks/blob/main/loaf-explainer.md" + }, + { + "label": "No-Vary-Search support in navigation prefetch cache", + "expiration": "2024-01-04", + "repo": "WICG/nav-speculation", + "explainer": "https://github.com/WICG/nav-speculation/blob/main/no-vary-search.md" + }, + { + "label": "Page Unload Beacon", + "expiration": "2023-09-19", + "repo": "WICG/unload-beacon", + "explainer": "https://chromium.googlesource.com/chromium/src/+/main/docs/experiments/page-unload-beacon.md" + }, + { + "label": "Payment handler minimal header UX", + "expiration": "2023-12-07", + "feedbackLink": "https://bugs.chromium.org/p/chromium/issues/entry?components=Blink%3EPayments", + "explainer": "https://groups.google.com/a/chromium.org/g/blink-dev/c/NQ-WLvfmPs8" + }, + { + "label": "Privacy Sandbox Relevance and Measurement", + "expiration": "2023-09-19", + "feedbackLink": "https://developer.chrome.com/blog/privacy-sandbox-unified-origin-trial/#where-can-developers-give-feedback-and-get-support", + "explainer": "https://developer.chrome.com/blog/privacy-sandbox-unified-origin-trial/" + }, + { + "label": "Private Network Access from non-secure contexts", + "expiration": "2024-02-06", + "repo": "WICG/private-network-access", + "explainer": "https://developer.chrome.com/blog/private-network-access-update/" + }, + { + "label": "RTCLegacyTrackStats", + "expiration": "2023-09-23", + "feedbackLink": "https://groups.google.com/a/chromium.org/g/blink-dev/c/NZVXsJQ7tV8", + "explainer": "https://w3c.github.io/webrtc-stats/" + }, + { + "label": "RTCPeerConnection callback-based getStats() API", + "expiration": "2024-03-07", + "feedbackLink": "https://crbug.com/822696", + "explainer": "https://w3c.github.io/webrtc-stats/" + }, + { + "label": "scheduler.yield()", + "expiration": "2024-01-04", + "repo": "wicg/scheduling-apis", + "explainer": "https://github.com/WICG/scheduling-apis/blob/main/implementation-status.md" + }, + { + "label": "ServiceWorker static routing API", + "expiration": "2024-04-02", + "repo": "w3c/ServiceWorker", + "explainer": "https://github.com/yoshisatoyanagisawa/service-worker-static-routing-api" + }, + { + "label": "ServiceWorkerBypassFetchHandlerForMainResources", + "expiration": "2023-09-23", + "repo": "w3c/ServiceWorker", + "explainer": "https://github.com/sisidovski/service-worker-bypass-fetch-handler-for-main-resource" + }, + { + "label": "SharedArrayBuffers in non-isolated pages on Desktop platforms", + "expiration": "2024-03-07", + "feedbackLink": "https://bugs.chromium.org/p/chromium/issues/entry?components=Internals%3ESandbox%3ESiteIsolation", + "explainer": "https://developer.chrome.com/blog/enabling-shared-array-buffer/" + }, + { + "label": "Speculation Rules - Document rules, response header, deliveryType", + "expiration": "2024-01-04", + "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_4HePq4hnaw2MZUi", + "explainer": "https://github.com/WICG/nav-speculation/blob/main/chrome-2023q1-experiment-overview.md" + }, + { + "label": "Storage Buckets API", + "expiration": "2024-01-04", + "repo": "WICG/storage-buckets", + "explainer": "https://developer.chrome.com/blog/storage-buckets/" + }, + { + "label": "Tabbed Web Apps", + "expiration": "2024-04-30", + "repo": "WICG/manifest-incubations", + "explainer": "https://github.com/WICG/manifest-incubations/blob/gh-pages/tabbed-mode-explainer.md" + }, + { + "label": "User-Agent Reduction Deprecation", + "expiration": "2023-09-23", + "repo": "w3ctag/design-reviews", + "explainer": "https://docs.google.com/document/d/1d-K43rzfDGxNM4H6Yzh5lV08KJwLsae06i4Q0A8snME" + }, + { + "label": "WebAssembly Garbage Collection", + "expiration": "2024-03-05", + "feedbackLink": "https://bugs.chromium.org/p/v8/issues/list", + "explainer": "https://github.com/WebAssembly/gc/blob/master/proposals/gc/Overview.md" + }, + { + "label": "WebGPU WebCodecs integration", + "expiration": "2023-12-07", + "repo": "gpuweb/gpuweb", + "explainer": "https://gpuweb.github.io/gpuweb/explainer/#image-input" + }, + { + "label": "WebSQL", + "expiration": "2024-05-28", + "feedbackLink": "https://crbug.com/695592", + "explainer": "https://developer.chrome.com/blog/deprecating-web-sql/" + }, + { + "label": "X-Requested-With in WebView Deprecation", + "expiration": "2024-06-27", + "feedbackLink": "https://bugs.chromium.org/p/chromium/issues/entry?template=Webview+Bugs&labels=XRW-Deprecation", + "explainer": "https://docs.google.com/document/d/e/2PACX-1vSSTEsHVfTXwOW80Tqy4c5TW6wSnt9b8v7-ZWUF3ZqLDs03EatEuyPCqwaUaa2s0a7mFm3Wh61bgVoz/pub" + } +], "expired": [ From ccd7a5bca9e55e9ec1217efc9e32f1e37389442d Mon Sep 17 00:00:00 2001 From: ElormCoch <139378688+ElormCoch@users.noreply.github.com> Date: Wed, 30 Aug 2023 12:44:37 -0700 Subject: [PATCH 08/12] Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds. (#678) --- origin-trials/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/origin-trials/styles.css b/origin-trials/styles.css index da0f759d2..6e5fb21a7 100644 --- a/origin-trials/styles.css +++ b/origin-trials/styles.css @@ -15,7 +15,7 @@ body { header { background-color: #018273; - color: #f2f2f2; + color: #fefefe; display: flex; justify-content: center; height: 256px; From 0127897aae1a8c0c510a967e14678f42bf6f3f02 Mon Sep 17 00:00:00 2001 From: ElormCoch <139378688+ElormCoch@users.noreply.github.com> Date: Wed, 6 Sep 2023 10:27:34 -0700 Subject: [PATCH 09/12] Ensures links have accessible text with aria-label (#686) * Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds. * [a11y] ensure links have accessible text --- origin-trials/trial-card.component.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/origin-trials/trial-card.component.js b/origin-trials/trial-card.component.js index dc14546a1..34f672217 100644 --- a/origin-trials/trial-card.component.js +++ b/origin-trials/trial-card.component.js @@ -43,6 +43,7 @@ function define(template) { this._feedback.style.display = "inline"; } else if (issue != null && issue.length > 0) { this._badge.setAttribute('href', this.getIssueLink(repo, issue)); + this._badge.setAttribute('aria-label', `Feedback link for ${heading}`); let img = document.createElement('img'); if (isUpstream === "false") { @@ -54,6 +55,7 @@ function define(template) { this._badge.appendChild(img) } else { this._badge.setAttribute('href', this.getGenericIssueLink(repo, heading)); + this._badge.setAttribute('aria-label', `Feedback link for ${heading}`); let img = document.createElement('img'); if (isUpstream === "false") { From 70925eb717d2b9a3ee760531b5326514bf64bd9e Mon Sep 17 00:00:00 2001 From: Amanda Baker Date: Wed, 11 Oct 2023 15:57:01 -0700 Subject: [PATCH 10/12] Add acquisition Info API as a downstream OT --- origin-trials/downstream-trials.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/origin-trials/downstream-trials.json b/origin-trials/downstream-trials.json index 3b619241f..222a2f2bc 100644 --- a/origin-trials/downstream-trials.json +++ b/origin-trials/downstream-trials.json @@ -24,6 +24,13 @@ "repo": "MicrosoftEdge/MSEdgeExplainers", "explainer": "https://github.com/w3c/editing/blob/gh-pages/docs/clipboard-unsanitized/explainer.md", "flag": "EdgeClipboardUnsanitizedContent" + },{ + "label": "Acquisition Info API", + "expiration": "2024-05-21", + "repo": "MicrosoftEdge/MSEdgeExplainers", + "explainer": "https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/AcquisitionInfo/explainer.md", + "issue": "Acquisition Info", + "flag": "msAcquisitionInfo" } ], From 49c960f4a48e7d6f08c27cc64ba89e984d20157f Mon Sep 17 00:00:00 2001 From: Amanda Baker Date: Wed, 11 Oct 2023 16:27:37 -0700 Subject: [PATCH 11/12] Alphabetize downstream OTs --- origin-trials/downstream-trials.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/origin-trials/downstream-trials.json b/origin-trials/downstream-trials.json index 222a2f2bc..dd6cbfdf0 100644 --- a/origin-trials/downstream-trials.json +++ b/origin-trials/downstream-trials.json @@ -1,11 +1,12 @@ { "active": [ { - "label": "Web Haptics API", - "expiration": "2023-12-31", + "label": "Acquisition Info API", + "expiration": "2024-05-21", "repo": "MicrosoftEdge/MSEdgeExplainers", - "issue": "WebHaptics", - "explainer": "https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/HapticsDevice/explainer.md" + "explainer": "https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/AcquisitionInfo/explainer.md", + "issue": "Acquisition Info", + "flag": "msAcquisitionInfo" },{ "label": "Digital Goods API", "expiration": "2023-12-31", @@ -25,12 +26,11 @@ "explainer": "https://github.com/w3c/editing/blob/gh-pages/docs/clipboard-unsanitized/explainer.md", "flag": "EdgeClipboardUnsanitizedContent" },{ - "label": "Acquisition Info API", - "expiration": "2024-05-21", + "label": "Web Haptics API", + "expiration": "2023-12-31", "repo": "MicrosoftEdge/MSEdgeExplainers", - "explainer": "https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/AcquisitionInfo/explainer.md", - "issue": "Acquisition Info", - "flag": "msAcquisitionInfo" + "issue": "WebHaptics", + "explainer": "https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/HapticsDevice/explainer.md" } ], From d9b53796343d1ebb39ebb4429b5658c43d1828b8 Mon Sep 17 00:00:00 2001 From: Amanda Baker Date: Thu, 12 Oct 2023 11:53:36 -0700 Subject: [PATCH 12/12] Expire upstream OTs (#696) --- origin-trials/upstream-trials.json | 73 +++++++++++++++--------------- 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/origin-trials/upstream-trials.json b/origin-trials/upstream-trials.json index c9ac173cc..73a505327 100644 --- a/origin-trials/upstream-trials.json +++ b/origin-trials/upstream-trials.json @@ -42,12 +42,6 @@ "feedbackLink": "https://google.qualtrics.com/jfe/form/SV_0qAfKX5h4w9BsVg", "explainer": "https://github.com/wanderview/quota-storage-partitioning/blob/main/explainer.md" }, - { - "label": "Document Picture-in-Picture", - "expiration": "2023-09-07", - "repo": "WICG/document-picture-in-picture", - "explainer": "https://github.com/WICG/document-picture-in-picture" - }, { "label": "EditContext", "expiration": "2024-03-05", @@ -78,36 +72,18 @@ "repo": "WICG/nav-speculation", "explainer": "https://github.com/WICG/nav-speculation/blob/main/no-vary-search.md" }, - { - "label": "Page Unload Beacon", - "expiration": "2023-09-19", - "repo": "WICG/unload-beacon", - "explainer": "https://chromium.googlesource.com/chromium/src/+/main/docs/experiments/page-unload-beacon.md" - }, { "label": "Payment handler minimal header UX", "expiration": "2023-12-07", "feedbackLink": "https://bugs.chromium.org/p/chromium/issues/entry?components=Blink%3EPayments", "explainer": "https://groups.google.com/a/chromium.org/g/blink-dev/c/NQ-WLvfmPs8" }, - { - "label": "Privacy Sandbox Relevance and Measurement", - "expiration": "2023-09-19", - "feedbackLink": "https://developer.chrome.com/blog/privacy-sandbox-unified-origin-trial/#where-can-developers-give-feedback-and-get-support", - "explainer": "https://developer.chrome.com/blog/privacy-sandbox-unified-origin-trial/" - }, { "label": "Private Network Access from non-secure contexts", "expiration": "2024-02-06", "repo": "WICG/private-network-access", "explainer": "https://developer.chrome.com/blog/private-network-access-update/" }, - { - "label": "RTCLegacyTrackStats", - "expiration": "2023-09-23", - "feedbackLink": "https://groups.google.com/a/chromium.org/g/blink-dev/c/NZVXsJQ7tV8", - "explainer": "https://w3c.github.io/webrtc-stats/" - }, { "label": "RTCPeerConnection callback-based getStats() API", "expiration": "2024-03-07", @@ -126,12 +102,6 @@ "repo": "w3c/ServiceWorker", "explainer": "https://github.com/yoshisatoyanagisawa/service-worker-static-routing-api" }, - { - "label": "ServiceWorkerBypassFetchHandlerForMainResources", - "expiration": "2023-09-23", - "repo": "w3c/ServiceWorker", - "explainer": "https://github.com/sisidovski/service-worker-bypass-fetch-handler-for-main-resource" - }, { "label": "SharedArrayBuffers in non-isolated pages on Desktop platforms", "expiration": "2024-03-07", @@ -156,12 +126,6 @@ "repo": "WICG/manifest-incubations", "explainer": "https://github.com/WICG/manifest-incubations/blob/gh-pages/tabbed-mode-explainer.md" }, - { - "label": "User-Agent Reduction Deprecation", - "expiration": "2023-09-23", - "repo": "w3ctag/design-reviews", - "explainer": "https://docs.google.com/document/d/1d-K43rzfDGxNM4H6Yzh5lV08KJwLsae06i4Q0A8snME" - }, { "label": "WebAssembly Garbage Collection", "expiration": "2024-03-05", @@ -189,6 +153,41 @@ ], "expired": [ - + { + "label": "Document Picture-in-Picture", + "expiration": "2023-09-07", + "repo": "WICG/document-picture-in-picture", + "explainer": "https://github.com/WICG/document-picture-in-picture" + }, + { + "label": "Page Unload Beacon", + "expiration": "2023-09-19", + "repo": "WICG/unload-beacon", + "explainer": "https://chromium.googlesource.com/chromium/src/+/main/docs/experiments/page-unload-beacon.md" + }, + { + "label": "Privacy Sandbox Relevance and Measurement", + "expiration": "2023-09-19", + "feedbackLink": "https://developer.chrome.com/blog/privacy-sandbox-unified-origin-trial/#where-can-developers-give-feedback-and-get-support", + "explainer": "https://developer.chrome.com/blog/privacy-sandbox-unified-origin-trial/" + }, + { + "label": "RTCLegacyTrackStats", + "expiration": "2023-09-23", + "feedbackLink": "https://groups.google.com/a/chromium.org/g/blink-dev/c/NZVXsJQ7tV8", + "explainer": "https://w3c.github.io/webrtc-stats/" + }, + { + "label": "ServiceWorkerBypassFetchHandlerForMainResources", + "expiration": "2023-09-23", + "repo": "w3c/ServiceWorker", + "explainer": "https://github.com/sisidovski/service-worker-bypass-fetch-handler-for-main-resource" + }, + { + "label": "User-Agent Reduction Deprecation", + "expiration": "2023-09-23", + "repo": "w3ctag/design-reviews", + "explainer": "https://docs.google.com/document/d/1d-K43rzfDGxNM4H6Yzh5lV08KJwLsae06i4Q0A8snME" + } ] } \ No newline at end of file