Also see #c5 https://bugs.webkit.org/show_bug.cgi?id=222262#c5
On Thu, Sep 30, 2021 at 9:46 AM Yoav Weiss <yoavwe...@chromium.org> wrote: > OK, so let me recap my understanding: this is an interop bug fix where > we're currently not accepting Promises in the ClipboardItem constructor, > but Safari is (and we should). > There's no compat risk with existing content, as non-Promise calls get > converted into Promises. Future-compat risk exists with browsers that'd > implement Async Clipboard without this, but this intent tries to minimize > that risk. > > Are there specific WPT tests that cover the desired behavior? Looking at > https://wpt.fyi/results/clipboard-apis?label=experimental&label=master&aligned, > there's a lot of yellow... > > > On Wed, Sep 29, 2021 at 7:31 PM Anupam Snigdha <sni...@microsoft.com> > wrote: > >> *That's not really an explainer. Can you expand on what this method does, >> how would the new method look like and how would developers use it?* >> >> >> >> Sorry for not being clear in my initial I2S. The change is fairly trivial >> from a developer’s perspective and has no compat risks so I wasn’t sure an >> i2S was required at all. This is one of the reasons I didn’t prepare an >> Explainer and other documentations as the changes have no impact to >> existing users of async clipboard API >> <https://w3c.github.io/clipboard-apis/#async-clipboard-api>. >> >> >> >> The ClipboardItem <https://w3c.github.io/clipboard-apis/#clipboarditem> >> has a record of string that represents a MIME type and ClipboardItemData >> <https://w3c.github.io/clipboard-apis/#typedefdef-clipboarditemdata> >> that represents Promises to Blobs corresponding to the MIME types. >> >> The current implementation of Clipboarditem’s constructor in Chromium >> takes Blobs and not Promises to Blobs which is not how it’s defined in the >> specification. ClipboardItem is only used in async clipboard API for >> reading/writing data to the clipboard. This API has been standardized and >> implemented in Chromium & Safari. This doesn’t affect existing sites that >> use DataTransfer >> <https://html.spec.whatwg.org/multipage/dnd.html#datatransfer> items for >> copy/paste scenarios. >> >> >> >> Definition of existing ClipboardItem constructor in Chromium: >> >> interface ClipboardItem { >> >> [RaisesException] constructor(record<DOMString, Blob> items, >> >> optional ClipboardItemOptions options = {}); >> >> readonly attribute FrozenArray<DOMString> types; >> >> >> >> [ >> >> CallWith=ScriptState >> >> ] Promise<Blob> getType(DOMString type); >> >> }; >> >> Proposed definition of ClipboardItem constructor: >> >> interface ClipboardItem { >> >> [RaisesException] constructor(record<DOMString, Promise<Blob>> items, >> >> optional ClipboardItemOptions options = {}); >> >> readonly attribute FrozenArray<DOMString> types; >> >> >> >> [ >> >> CallWith=ScriptState >> >> ] Promise<Blob> getType(DOMString type); >> >> }; >> >> >> >> Currently in Chromium, developers call the async write using the Blob >> type as shown below: >> >> const html_text = new Blob( >> >> ['<html><body><div>hello</div></body></html>'], {type: >> 'text/html'}); >> >> const clipboard_item = new ClipboardItem({ >> >> 'text/html': html_text >> >> }); >> >> navigator.clipboard.write([clipboard_item]); >> >> >> >> With the proposed implementation, they can pass promises to Blobs as >> shown below: >> >> navigator.clipboard.write([ >> >> new ClipboardItem({ >> >> "text/html": Promise.resolve(new Blob(['<p >> style=\'color: red; font-style: oblique;\'>This text was copied using >> </p>'], {type: 'text/html'})),}),]); >> > > Thanks for writing that down, that greatly clarifies things! :) > > >> >> >> *Was this change discussed in a standards venue?* >> >> This is an existing spec and have been approved by the Editing WG. >> >> >> >> *Is there compat risk here? Are developers already using the non-Promise >> method? What is it returning today?* >> >> *What should adoption patterns to avoid risks in non-supporting >> browsers?* >> >> No compat risks as shown in the above examples. Developers can keep using >> the Blobs to ClipboardItem constructor. The promises would be resolved >> implicitly with my change. >> >> Non supporting browsers are not affected by this change as the >> ClipboardItem object can only be used in async clipboard APIs. >> >> >> >> *If not, it'd be good to ask for official signals: >> https://bit.ly/blink-signals >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbit.ly%2Fblink-signals&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682368655%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=cETjjsqyUaRocNL1QnK%2FYADWxTiFJ9Fvoe26gGDkB28%3D&reserved=0>* >> >> I’m not sure if it requires any signals as the async clipboard API is >> already in development. Browsers have to implement async clipboard APIs >> first before making any changes to Clipboarditem object. When they do >> implement this API, they should ideally follow the spec and implement a >> promise based ClipboardItem and not what is currently implemented in >> Chromium. >> >> >> >> >> >> *From:* Yoav Weiss <yoavwe...@chromium.org> >> *Sent:* Wednesday, September 29, 2021 4:54 AM >> *To:* Anupam Snigdha <sni...@microsoft.com> >> *Cc:* blink-dev <blink-dev@chromium.org>; Marijn Kruisselbrink < >> m...@chromium.org>; Bo Cupp <pc...@microsoft.com> >> *Subject:* [EXTERNAL] Re: [blink-dev] Intent to Implement and Ship: Add >> support for Promise to Blobs in clipboard item >> >> >> >> >> >> >> >> On Wed, Sep 29, 2021 at 3:02 AM 'Anupam Snigdha' via blink-dev < >> blink-dev@chromium.org> wrote: >> >> Contact emails >> >> sni...@microsoft.com, m...@chromium.org >> >> Explainer >> >> https://www.w3.org/TR/clipboard-apis/#typedefdef-clipboarditemdata >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.w3.org%2FTR%2Fclipboard-apis%2F%23typedefdef-clipboarditemdata&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682198754%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=yl7uDdsSoKFAtVj6DSk1ELjihiFt3F1ivSPgrBMURVE%3D&reserved=0> >> >> >> >> That's not really an explainer. Can you expand on what this method does, >> how would the new method look like and how would developers use it? >> >> >> >> >> >> Specification >> >> https://www.w3.org/TR/clipboard-apis/#typedefdef-clipboarditemdata >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.w3.org%2FTR%2Fclipboard-apis%2F%23typedefdef-clipboarditemdata&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682198754%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=yl7uDdsSoKFAtVj6DSk1ELjihiFt3F1ivSPgrBMURVE%3D&reserved=0> >> >> Summary >> >> Add promise support to `ClipboardItem` object. This helps the web author >> to call async clipboard write method without having to provide the Blob >> data synchronously. Authors can choose to resolve the promise later when >> the Blob data is available. >> Blink component >> >> Blink>DataTransfer >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.chromium.org%2Fp%2Fchromium%2Fissues%2Flist%3Fq%3Dcomponent%3ABlink%253EDataTransfer&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682208759%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=oO%2FSFBNtnKSLfV3P%2B5XtjekT8yFnVOJgocB4hGA9kwk%3D&reserved=0> >> TAG review >> >> N/A. The spec is in Working Draft state and has already been shipped by >> Apple. >> >> >> >> Was this change discussed in a standards venue? >> >> >> >> >> TAG review status >> >> Not applicable >> Risks >> >> None. Currently the API takes in a Blob type and the promise to a Blob >> would resolve implicitly which wouldn’t require any changes nor would it >> break any existing sites. >> >> >> >> Is there compat risk here? Are developers already using the non-Promise >> method? What is it returning today? >> >> What should adoption patterns to avoid risks in non-supporting browsers? >> >> >> >> Interoperability and Compatibility >> >> >> *Gecko*: In Development( >> https://bugzilla.mozilla.org/show_bug.cgi?id=1619947 >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.mozilla.org%2Fshow_bug.cgi%3Fid%3D1619947&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682368655%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=xXCeizVhUY6RtyyURPplt4t5ip4o4ajYrxGG1tzyYX4%3D&reserved=0> >> ) >> >> >> >> It's not clear what this issue actually implements. Did they already >> implement and ship the Promise based API? >> >> If not, it'd be good to ask for official signals: >> https://bit.ly/blink-signals >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbit.ly%2Fblink-signals&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682368655%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=cETjjsqyUaRocNL1QnK%2FYADWxTiFJ9Fvoe26gGDkB28%3D&reserved=0> >> >> >> >> >> *WebKit*: Shipped >> >> *Web developers*: Positive ( >> https://bugs.chromium.org/p/chromium/issues/detail?id=1014310 >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.chromium.org%2Fp%2Fchromium%2Fissues%2Fdetail%3Fid%3D1014310&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682378651%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=%2FyC4PBjSi6uilcLCzuQ43%2FDUOeHgpmDNhy%2FTBMmguIQ%3D&reserved=0>). >> This is also a highly requested feature by MS Office products. >> Debuggability >> >> The async clipboard APIs have basic tooling support as described in this >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdocs.google.com%2Fdocument%2Fd%2F1eJn5QIX4JFGackDYmdLxWXEmTDkSGj_ZGz5XY4uCKbY%2Fedit&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682388644%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=rI0dZkzNiJLTfRZZWUuVfbAQ1zlVA5v9nhJU2hh87Dw%3D&reserved=0> >> doc. >> Is this feature fully tested by web-platform-tests >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fchromium.googlesource.com%2Fchromium%2Fsrc%2F%2B%2Fmaster%2Fdocs%2Ftesting%2Fweb_platform_tests.md&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682388644%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=7kMR%2Fcq509r0jsf9gfnsa%2B4OnDM5hIxehyu8YG7g%2Bg0%3D&reserved=0> >> ? >> >> Yes >> Flag name >> >> None. >> Requires code in //chrome? >> >> False >> Tracking bug >> >> https://bugs.chromium.org/p/chromium/issues/detail?id=1014310 >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.chromium.org%2Fp%2Fchromium%2Fissues%2Fdetail%3Fid%3D1014310&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682398641%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=avzHc%2FlddFJMjKF88i7CMmo5BRT0g8NeiNU9%2Fj0q%2BE0%3D&reserved=0> >> Estimated milestones >> >> 96 >> Link to entry on the Chrome Platform Status >> >> https://www.chromestatus.com/feature/5733949474078720 >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.chromestatus.com%2Ffeature%2F5733949474078720&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682398641%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=tmdl4Z1alApJui5k87QvzHIzzB%2FzFD%2BFV6jvFtk%2BM9o%3D&reserved=0> >> >> This intent message was generated by Chrome Platform Status >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.chromestatus.com%2F&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682408632%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=dZ31sjCAeKgKfviU2rYtpSUFKE81EWh8Byj14cMQPmE%3D&reserved=0> >> . >> >> >> >> -- >> 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/SN6PR00MB0397C14B0F073635A96B475ACFA99%40SN6PR00MB0397.namprd00.prod.outlook.com >> <https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fa%2Fchromium.org%2Fd%2Fmsgid%2Fblink-dev%2FSN6PR00MB0397C14B0F073635A96B475ACFA99%2540SN6PR00MB0397.namprd00.prod.outlook.com%3Futm_medium%3Demail%26utm_source%3Dfooter&data=04%7C01%7Csnianu%40microsoft.com%7C3f34562d18864e01b63e08d9833fe13b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637685132682408632%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=fcTOB1xRVcVYwWbBsaPtsdJ90cL76AKmMwZ4uJGftTo%3D&reserved=0> >> . >> >> -- > 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/CAL5BFfX1OBfHzKxfC49qXbw67NiFx6JkO-Af1oEM_%2B7E9CmUKA%40mail.gmail.com > <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAL5BFfX1OBfHzKxfC49qXbw67NiFx6JkO-Af1oEM_%2B7E9CmUKA%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- Thomas Steiner, PhD—Developer Advocate (https://blog.tomayac.com, https://twitter.com/tomayac) Google Germany GmbH, ABC-Str. 19, 20354 Hamburg, Germany Geschäftsführer: Paul Manicle, Halimah DeLaine Prado Registergericht und -nummer: Hamburg, HRB 86891 -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.1.23 (GNU/Linux) iFy0uwAntT0bE3xtRa5AfeCheCkthAtTh3reSabiGbl0ck0fjumBl3DCharaCTersAttH3b0ttom. hTtPs://xKcd.cOm/1181/ -----END PGP SIGNATURE----- -- 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/CALgRrLmXoL1MLMPU9retXStEzW7bFjGnR9_kkJHu1%3D%2BFRQUTUg%40mail.gmail.com.