Thanks for getting this cleaned up and clarified, and for getting the spec
PR landed. This now seems quite trivial to me - just extending the existing
unsanitized reading capability into an option of the async clipboard API.
LGTM2

On Wed, Nov 29, 2023 at 4:39 PM Alex Russell <slightly...@chromium.org>
wrote:

> Thanks for re-sending this under different cover. I understand that the
> previous entry's Security review covers this, so LGTM1
>
> Best,
>
> Alex
>
> On Wednesday, November 29, 2023 at 1:27:31 PM UTC-8 snianu wrote:
>
>> Resending the I2S with all the updates and a summary of discussion that
>> happened in a different I2S thread
>> <https://mail.google.com/mail/u/1/?ui=2&ik=ad97730700&view=lg&permmsgid=msg-f:1783916238508658206&ser=1>
>> .
>>
>>
>> Contact emails
>>
>> sni...@microsoft.com, sa...@microsoft.com, est...@chromium.org,
>> jsb...@chromium.org, asu...@chromium.org, ansol...@microsoft.com
>>
>>
>> Explainer
>>
>>
>> https://github.com/w3c/editing/blob/gh-pages/docs/clipboard-unsanitized/explainer.md
>>
>>
>> Specification
>>
>> *https://w3c.github.io/clipboard-apis/#dom-clipboard-read
>> <https://w3c.github.io/clipboard-apis/#dom-clipboard-read>*
>>
>>
>> Summary
>>
>> This proposal provides an `unsanitized` option in the
>> navigation.clipboard.read() method to get the unsanitized HTML format.
>> Unless sites explicitly opt-into reading the unsanitized HTML, they will
>> get the sanitized HTML fragment by-default. Currently, when we read
>> text/html MIME type using the async clipboard API, the sanitizer is invoked
>> to strip out contents from the HTML markup due to security concerns, and
>> styles are inlined into the HTML markup, which leads to a bloated HTML
>> payload and loss of fidelity of HTML content when read by web authors or
>> native apps.
>>
>>
>> The DataTransfer API in Chromium does not perform any sanitization,
>> returning only unsanitized HTML markup. Therefore, this change gives web
>> authors the ability to use the async clipboard API without regressing
>> behavior compared to the DataTransfer API.
>>
>>
>> Comments
>>
>> For more context on this change, here is a discussion between
>> stakeholders:
>> https://docs.google.com/document/d/1ha0pcpQsEgVGtPK8dd8N_0P1ynI7rXV7bR5ZFmOTD6Y/edit?usp=sharing
>>
>>
>> Blink component
>>
>> Blink>DataTransfer
>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EDataTransfer>
>>
>>
>> Search tags
>>
>> unsanitized html
>> <https://chromestatus.com/features#tags:unsanitized%20html>, async api
>> <https://chromestatus.com/features#tags:async%20api>, clipboard
>> <https://chromestatus.com/features#tags:clipboard>
>>
>>
>> TAG review
>>
>> The TAG reviewed the unsanitized option as part of a broader review of
>> the pickling API (now called web custom formats).
>>
>> https://github.com/w3ctag/design-reviews/issues/636#issuecomment-919324784
>>
>> https://github.com/w3ctag/design-reviews/issues/636#issuecomment-869792053
>>
>>
>> TAG review status
>>
>> Issues addressed.
>>
>>
>> WebFeature UseCounter name
>>
>> AsyncClipboardAPIUnsanitizedRead
>>
>>
>> Risks
>>
>> Interoperability and Compatibility
>>
>>
>> This is a Chromium-only feature (see discussion in
>> https://docs.google.com/document/d/1ha0pcpQsEgVGtPK8dd8N_0P1ynI7rXV7bR5ZFmOTD6Y/edit?usp=sharing),
>> so adding a dictionary as an argument in read will be ignored in
>> non-Chromium browsers and the HTML read might be sanitized. As this change
>> aligns the sanitization behavior of the DataTransfer API and the Clipboard
>> Async API, existing paste targets that support DataTransfer APIs
>> unsanitized HTML don't need to make updates on how they handle HTML if they
>> decide to transition to the Clipboard Async API.
>>
>>
>> Firefox provides access to unsanitized HTML via DataTransfer APIs, which
>> matches Chromium's behavior, and Safari only allows access to unsanitized
>> HTML if it's being read within the same origin.
>>
>>
>> *Gecko*: Neutral (
>> https://github.com/mozilla/standards-positions/issues/769)
>> https://github.com/w3c/clipboard-apis/issues/150#issuecomment-1031684598
>>
>>
>> *WebKit*: Negative (
>> https://github.com/w3c/clipboard-apis/issues/150#issuecomment-974236367)
>>
>>
>> *Web developers*: Positive. Positive signals from Excel Online,
>> https://groups.google.com/a/chromium.org/g/blink-dev/c/j9fDbU9E2Ds/m/IPocqIfEAwAJ?utm_medium=email&utm_source=footer
>>
>>
>> Ergonomics
>>
>> With this feature, we have added a dictionary argument to the read()
>> method, where web authors will explicitly request for the unsanitized HTML
>> format.
>>
>>
>> Activation
>>
>> The current Async Clipboard API read method as specified in
>> https://w3c.github.io/clipboard-apis/#dom-clipboard-read isn't affected
>> by the introduction of this feature as the default implementation of the
>> API is unchanged, and the new `unsanitized` parameter in the read() method
>> will not impact behavior on unsupported browsers(optional formats
>> dictionary will be ignored). The behavior is validated through existing web
>> tests.
>>
>>
>> Security
>>
>> Sites have to explicitly opt into reading unsanitized HTML content via
>> the "unsanitized" option, so any sites that don't have that option, would
>> get the default, sanitized HTML content. The legacy DataTransfer APIs
>> already allow access to unsanitized HTML content, so we don't think this
>> will create any additional security loopholes.
>>
>>
>>
>> WebView application risks
>>
>> *Does this intent deprecate or change behavior of existing APIs, such
>> that it has potentially high risk for Android WebView-based applications?*
>>
>> No. This is an opt-in feature so existing Android webview-based
>> applications can continue reading sanitized HTML unless they explicitly
>> opt-into reading unsanitized HTML via the `unsanitized` option.
>>
>>
>> Debuggability
>>
>> No specific DevTools changes are required. This feature is treated like
>> any other JS method.
>>
>>
>> Will this feature be supported on all six Blink platforms (Windows, Mac,
>> Linux, Chrome OS, Android, and Android WebView)?
>>
>> Yes
>>
>>
>> Is this feature fully tested by web-platform-tests
>> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>
>> ?
>>
>> Yes
>>
>>
>> https://github.com/web-platform-tests/wpt/blob/38cdcdeeac/clipboard-apis/async-unsanitized-html-formats-write-read.tentative.https.html
>> ,
>>
>>
>> https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/external/wpt/clipboard-apis/async-unsanitized-html-formats-write-read.tentative.https.html
>>
>>
>> Flag name on chrome://flags
>>
>> ClipboardUnsanitizedContent
>>
>>
>> Finch feature name
>>
>> None
>>
>>
>> Non-finch justification
>>
>> None
>>
>>
>> Requires code in //chrome?
>>
>> False
>>
>>
>> Tracking bug
>>
>> https://bugs.chromium.org/p/chromium/issues/detail?id=1268679
>>
>>
>> Measurement
>>
>> Added usage metrics: ClipboardUnsanitizedContent
>>
>>
>> Adoption expectation
>>
>> Excel online is ready to use this API. They are trying to move away from
>> DataTransfer APIs and use Async clipboard APIs to take advantage of async
>> behavior and new capabilities like web custom formats, and preventing
>> sanitization of HTML is a blocker for this migration.
>>
>>
>> Adoption plan
>>
>> Excel app plans to leverage the feature immediately.
>>
>>
>> Sample links
>>
>> https://viridian-hypnotic-cut.glitch.me/
>>
>>
>> Estimated milestones
>>
>> Shipping on desktop
>>
>> 121
>>
>>
>> Shipping on Android
>>
>> 121
>>
>>
>> *Link to entry on the Chrome Platform Status*
>>
>>
>> *Old Chrome status entry: *
>> https://chromestatus.com/feature/5716132676763648*: *All feature review
>> gates were approved except API owners sign-off. Since this is a new feature
>> and not a change in behavior of an existing web API, a new chromestatus
>> entry was created:
>>
>> *New Chrome status entry: *
>> https://chromestatus.com/feature/5203909459312640
>>
>>
>> Summary of the discussion
>>
>>
>> There was some confusion around whether web custom format already
>> provides the ability to read/write unsanitized HTML content from within a
>> site using a `web text/html` format. To clarify, this proposal allows web
>> authors to read unsanitized HTML content from the built-in HTML format that
>> many native apps (that may not have support for “web text/html” format)
>> write to the clipboard.
>>
>>
>> If an app doesn’t opt-into reading the unsanitized HTML content, then the
>> default async clipboard read() method for the built-in text/html format
>> would return a sanitized fragment.
>>
>>
>> Existing DataTransfer APIs already provide the ability to read/write
>> unsanitized HTML content to the clipboard in the built-in HTML format, so
>> this proposal aligns the read behavior between async clipboard read()
>> method and DataTransfer getData() method.
>>
>>
>> Spec changes were made to add the `unsanitized` option to the read()
>> method: https://w3c.github.io/clipboard-apis/#dom-clipboard-read
>>
>>
>> Old I2S thread discussions:
>> https://mail.google.com/mail/u/1/?ui=2&ik=ad97730700&view=lg&permmsgid=msg-f:1783916238508658206&ser=1
>>
>>
>> Thanks,
>> Anupam
>>
>> Sent from Outlook <http://aka.ms/weboutlook>
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to blink-dev+unsubscr...@chromium.org.
To view this discussion on the web visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAFUtAY-0qzysLaUrD9OUbDkq5dzeBA948F9ZxcD%3Djkh58ssk4w%40mail.gmail.com.

Reply via email to