Intent to Ship: Scroll To Text Fragment

2829 views
Skip to first unread message

Nick Burris

unread,
Oct 9, 2019, 2:10:24 PM10/9/19
to blink-dev, David Bokan, Bryan McQuade

Contact emails

nbu...@chromium.org, bo...@chromium.org, bmcq...@chromium.org


Explainer

https://github.com/WICG/ScrollToTextFragment


Spec

WICG draft spec: https://wicg.github.io/ScrollToTextFragment/

TAG review: https://github.com/w3ctag/design-reviews/issues/392


Summary

Scroll To Text allows URLs to link to a piece of text in a webpage rather than just linking to an existing element fragment. The motivating use cases are to enable user sharing of specific content and allow deep-linking references to information.


Link to “Intent to Implement” blink-dev discussion

Intent to implement: https://groups.google.com/a/chromium.org/d/msg/blink-dev/aKI6doxffgQ/7dzrVvo4CAAJ

Intent to experiment: https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/NySZyk6UMEs


Link to Origin Trial feedback summary

We requested feedback in the form of Github issues: https://github.com/WICG/ScrollToTextFragment/issues

We did not get specific feedback from origins other than Google Search, who used the origin trial to link featured snippets to the text fragment in the page that they are quoting. Google Search provided the following feedback:


“We experimented with Scroll To Text on Featured Snippets on Google Search, where it scrolls to and highlights the same passage on the source page upon opening. We see improvements in the search experience as a result of this feature. By allowing users to jump to the content that is most relevant to their queries, we observe that users consume content on the source page more effectively. Additionally, users end up consuming content from a wider range of search results. There are already two other similar launches within Google Search on small fraction of traffic. This feature will help greatly expand the coverage.”


This feedback provides a strong signal that the feature improves user engagement and helps surface information on the web.


Is this feature supported on all six Blink platforms (Windows, Mac, Linux, Chrome OS, Android, and Android WebView)?

Yes.


Demo link

With the feature enabled (in latest canary with --enable-blink-features=TextFragmentIdentifiers)

https://en.wikipedia.org/wiki/Cat#Characteristics:~:text=Claws-,Like%20almost,the%20Felidae%2C,-cats


Risks

Interoperability and Compatibility   

There is some small compatibility risk due to the fragment directive behavior. This was added to minimize compatibility risk on pages that use the fragment for state. Because we now strip the section of the fragment after the delimiter, links that contain that delimiter :~: will be mutated. We’ve analyzed the Google search crawler’s database of “seen links” in the last 5 years and didn’t get any hits. We’ve also added Blink UseCounters to track how often we see :~: in the URL fragment unrelated to this feature without any hits yet (will get stable data with M78). Biggest risk here is corporate intranets where we have little visibility.


The usual interop risk of other browsers not implementing this feature applies. However, the risk should be low since links using this syntax will be interpreted as a regular fragment in UAs not implementing it; the page will still load but without intended scrolling/highlighting. This seems like a low-severity fallback with users unlikely to even notice. Similar rationale applies in the event we’d need to unship this feature.


One point worth highlighting relates to the fragment directive behavior mentioned above. Some existing pages break when any fragment is specified at all (due to page script using the fragment). E.g. (https://www.webmd.com/pain-management/knee-pain/picture-of-the-knee). Adding any fragment to this link will cause the page to load in a broken state. The fragment directive works around this. However, a UA that doesn’t implement it and loads a link like this will see this breakage e.g. (https://www.webmd.com/pain-management/knee-pain/picture-of-the-knee#:~:text=Knee). We expect the number of pages like this is very low; webmd.com is the only one we’ve seen that breaks catastrophically like this but this is a risk as there isn’t a good way to measure it.


Edge: No signals

Firefox: No signals

Safari: No signals

Web / Framework developers: 

We’ve seen some positive sentiment from twitter users:

Positive: https://twitter.com/brucel/status/1168888603671433222

Positive: https://twitter.com/rem/status/1168864475379916802

Neutral/Informational: https://twitter.com/glenngabe/status/1164850052608774145 

Neutral/Informational: https://twitter.com/brodieseo/status/1172724843302621184



Ergonomics

The default usage of this feature is independent of other platform APIs. When the feature is activated, Chrome must search the page for the target text on page load, however this is followed by a user-visible scroll and highlight assuming the target text is found. We observed a median latency of 26 milliseconds from the time we start processing the text fragment directive until the end of the scroll.


Activation

The feature is easy to use as-is; simply append :~:text=example to the URL fragment (i.e. append #:~:text=example to a URL with no fragment) to activate the feature.


The feature would benefit from a reference implementation for determining what the optimal text directive parameters are for a given text fragment on a page. We are working on a Chrome extension that generates scroll to text links, and plan to open source this extension on https://github.com/GoogleChromeLabs to serve as a reference.


Is this feature fully tested by web-platform-tests? Link to test suite results from wpt.fyi.

https://wpt.fyi/results/scroll-to-text-fragment/scroll-to-text-fragment.html

All tests pass on the Chromium implementation when the feature is enabled (wpt expectations are set to “not run” for Chromium as the feature is disabled by default).


Entry on the feature dashboard

https://chromestatus.com/feature/4733392803332096

Brian Birtles

unread,
Oct 9, 2019, 6:57:04 PM10/9/19
to blink-dev, bo...@chromium.org, bmcq...@chromium.org
Sorry to be a broken record, but the original I2I thread mentioned the "intent to go through the standards process". Any chance this could moved onto a standards track (not WICG) before shipping?

The explainer itself says, "Once we're satisfied that we understand the space sufficiently, this work will move into the appropriate standardization forum." I guess if we're shipping we understand the space sufficiently?

Thanks!


2019年10月10日木曜日 3時10分24秒 UTC+9 Nick Burris:

Anne van Kesteren

unread,
Oct 10, 2019, 10:25:35 AM10/10/19
to Brian Birtles, blink-dev, David Bokan, bmcq...@chromium.org
On Thu, Oct 10, 2019 at 12:57 AM Brian Birtles <br...@birchill.co.jp> wrote:
> Sorry to be a broken record, but the original I2I thread mentioned the "intent to go through the standards process". Any chance this could moved onto a standards track (not WICG) before shipping?
>
> The explainer itself says, "Once we're satisfied that we understand the space sufficiently, this work will move into the appropriate standardization forum." I guess if we're shipping we understand the space sufficiently?

Yeah, that would be great. I only found out two hours ago that the
plan of record does involve changes to the URL parser, despite that
plan being seemingly abandoned six days ago due to pushback from the
URL community. The feature definitely seems interesting, but could use
some more refinement and collaborative design work.

(Also, I don't think anyone got back to me with regards to the
security issue I pointed out in
https://github.com/w3ctag/design-reviews/issues/392#issuecomment-510855073.)

Yoav Weiss

unread,
Oct 10, 2019, 10:50:44 AM10/10/19
to Anne van Kesteren, Brian Birtles, blink-dev, David Bokan, Bryan McQuade
On Thu, Oct 10, 2019 at 4:25 PM Anne van Kesteren <ann...@annevk.nl> wrote:
On Thu, Oct 10, 2019 at 12:57 AM Brian Birtles <br...@birchill.co.jp> wrote:
> Sorry to be a broken record, but the original I2I thread mentioned the "intent to go through the standards process". Any chance this could moved onto a standards track (not WICG) before shipping?
>
> The explainer itself says, "Once we're satisfied that we understand the space sufficiently, this work will move into the appropriate standardization forum." I guess if we're shipping we understand the space sufficiently?

Yeah, that would be great. I only found out two hours ago that the
plan of record does involve changes to the URL parser, despite that
plan being seemingly abandoned six days ago due to pushback from the
URL community. The feature definitely seems interesting, but could use
some more refinement and collaborative design work.

I think there are two distinct questions here: venue and collaboration.

When it comes to venue, the current spec's processing seems to be mostly monkey-patching the HTML and URL specs, indicating that WHATWG is probably the right venue for this to graduate to.
At the same time, landing features in WHATWG specs require multi-engine commitment, and looking at Mozilla's 2.5-months-old standards position issue doesn't really indicate implementer commitment, or anything at all. From a practical standpoint, it's clearer and easier for the spec to live as a standalone document rather than a WHATWG PR, while we're waiting for multi-engine commitment.

But, that in no means preclude collaboration. The spec is in WICG, which was built specifically to enable multi-vendor collaboration when incubating new ideas. I'm sure everyone would be thrilled to have your feedback directly there, to make sure we get this right.


(Also, I don't think anyone got back to me with regards to the
security issue I pointed out in
https://github.com/w3ctag/design-reviews/issues/392#issuecomment-510855073.)

Good point. Added a comment on a related issue to make sure this doesn't fall through the cracks.
 

--
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+...@chromium.org.
To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CADnb78gQciCj-UfNDn4cWjyHKkfymkxOq0-wUKH4yOQMrzLyWg%40mail.gmail.com.

Yoav Weiss

unread,
Oct 10, 2019, 11:06:28 AM10/10/19
to Nick Burris, blink-dev, David Bokan, Bryan McQuade
Thanks for working on this! This is an exciting change that many people's first reaction when hearing about it is "I wanted that for years!" (myself included).

I believe we'd need to address the security concerns from Anne before shipping. Would also be good to hear back from Tess about the interoperability concerns she raised and confirm that they were fully addressed.


Summary

Scroll To Text allows URLs to link to a piece of text in a webpage rather than just linking to an existing element fragment. The motivating use cases are to enable user sharing of specific content and allow deep-linking references to information.


Link to “Intent to Implement” blink-dev discussion

Intent to implement: https://groups.google.com/a/chromium.org/d/msg/blink-dev/aKI6doxffgQ/7dzrVvo4CAAJ

Intent to experiment: https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/NySZyk6UMEs


Link to Origin Trial feedback summary

We requested feedback in the form of Github issues: https://github.com/WICG/ScrollToTextFragment/issues

We did not get specific feedback from origins other than Google Search, who used the origin trial to link featured snippets to the text fragment in the page that they are quoting. Google Search provided the following feedback:


“We experimented with Scroll To Text on Featured Snippets on Google Search, where it scrolls to and highlights the same passage on the source page upon opening. We see improvements in the search experience as a result of this feature. By allowing users to jump to the content that is most relevant to their queries, we observe that users consume content on the source page more effectively. Additionally, users end up consuming content from a wider range of search results. There are already two other similar launches within Google Search on small fraction of traffic. This feature will help greatly expand the coverage.”


This feedback provides a strong signal that the feature improves user engagement and helps surface information on the web.


Is this feature supported on all six Blink platforms (Windows, Mac, Linux, Chrome OS, Android, and Android WebView)?

Yes.


Demo link

With the feature enabled (in latest canary with --enable-blink-features=TextFragmentIdentifiers)

https://en.wikipedia.org/wiki/Cat#Characteristics:~:text=Claws-,Like%20almost,the%20Felidae%2C,-cats


Risks

Interoperability and Compatibility   

There is some small compatibility risk due to the fragment directive behavior. This was added to minimize compatibility risk on pages that use the fragment for state. Because we now strip the section of the fragment after the delimiter, links that contain that delimiter :~: will be mutated. We’ve analyzed the Google search crawler’s database of “seen links” in the last 5 years and didn’t get any hits. We’ve also added Blink UseCounters to track how often we see :~: in the URL fragment unrelated to this feature without any hits yet (will get stable data with M78). Biggest risk here is corporate intranets where we have little visibility.


The usual interop risk of other browsers not implementing this feature applies. However, the risk should be low since links using this syntax will be interpreted as a regular fragment in UAs not implementing it; the page will still load but without intended scrolling/highlighting. This seems like a low-severity fallback with users unlikely to even notice. Similar rationale applies in the event we’d need to unship this feature.


One point worth highlighting relates to the fragment directive behavior mentioned above. Some existing pages break when any fragment is specified at all (due to page script using the fragment). E.g. (https://www.webmd.com/pain-management/knee-pain/picture-of-the-knee). Adding any fragment to this link will cause the page to load in a broken state. The fragment directive works around this. However, a UA that doesn’t implement it and loads a link like this will see this breakage e.g. (https://www.webmd.com/pain-management/knee-pain/picture-of-the-knee#:~:text=Knee). We expect the number of pages like this is very low; webmd.com is the only one we’ve seen that breaks catastrophically like this but this is a risk as there isn’t a good way to measure it.


What's the feature detection story here? How can referrers avoid from adding such links to non-supporting UAs?
 

Edge: No signals

Firefox: No signals

Safari: No signals

Web / Framework developers: 

We’ve seen some positive sentiment from twitter users:

Positive: https://twitter.com/brucel/status/1168888603671433222

Positive: https://twitter.com/rem/status/1168864475379916802

Neutral/Informational: https://twitter.com/glenngabe/status/1164850052608774145 

Neutral/Informational: https://twitter.com/brodieseo/status/1172724843302621184



Ergonomics

The default usage of this feature is independent of other platform APIs. When the feature is activated, Chrome must search the page for the target text on page load, however this is followed by a user-visible scroll and highlight assuming the target text is found. We observed a median latency of 26 milliseconds from the time we start processing the text fragment directive until the end of the scroll.


Activation

The feature is easy to use as-is; simply append :~:text=example to the URL fragment (i.e. append #:~:text=example to a URL with no fragment) to activate the feature.


The feature would benefit from a reference implementation for determining what the optimal text directive parameters are for a given text fragment on a page. We are working on a Chrome extension that generates scroll to text links, and plan to open source this extension on https://github.com/GoogleChromeLabs to serve as a reference.


Is this feature fully tested by web-platform-tests? Link to test suite results from wpt.fyi.

https://wpt.fyi/results/scroll-to-text-fragment/scroll-to-text-fragment.html

All tests pass on the Chromium implementation when the feature is enabled (wpt expectations are set to “not run” for Chromium as the feature is disabled by default).


Entry on the feature dashboard

https://chromestatus.com/feature/4733392803332096

--
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+...@chromium.org.

David Bokan

unread,
Oct 10, 2019, 2:38:58 PM10/10/19
to Anne van Kesteren, Brian Birtles, blink-dev, Bryan McQuade
Apologies, we did go over this internally with our security reviewers but I forgot to reply on the thread. The outcome was that we consider this one of several mitigations, rather than a hard security boundary. Given that this means a popup is visible, and the attacker would need to phish user gestures, and they can only search on word boundaries, and they would still need some exploit to determine a cross-origin scroll, we felt that this wasn't concerning enough to add a ton of complexity to lock down further. 

Regarding the other security restrictions, they're documented in the explainer - I just opened up a PR to add normative text into the spec for those.

Yeah, that would be great. I only found out two hours ago that the
plan of record does involve changes to the URL parser, despite that
plan being seemingly abandoned six days ago due to pushback from the
URL community. The feature definitely seems interesting, but could use
some more refinement and collaborative design work.

That was a bit miscommunication from me (sorry again). The plan to allow using multiple '#' in a URL was abandoned. The parsing of the fragment (to split it on the :~: token) needs to be specified somewhere. The URL spec seemed to make sense to me at first but I think it could be made a part of HTML by moving the spec text wholesale and making this an HTML-only concept. FWIW, Chrome's implementation doesn't make any low-level URL-parsing changes so this probably makes sense. I'm happy to continue following up on this either in https://github.com/whatwg/url/issues/445 or in a new issue in the WICG

FWIW, we've been openly and productively collaborating with a number of outside contributors from other W3C working groups and made lots of improvements based on their feedback. I'd be happy to move this into WHATWG but, as Yoav mentioned, that'll require interest from a second implementer. It's worth noting that the Edge team has been interested and experimenting with something very similar in parallel and we've been in contact with them but, given we're both Blink based now, I'm not sure if that would be grounds for moving into WHATWG.
Message has been deleted

Chris Palmer

unread,
Oct 10, 2019, 4:18:25 PM10/10/19
to blink-dev, ann...@annevk.nl, br...@birchill.co.jp, bmcq...@chromium.org
(Sorry, ignore my previous message.)

Yeah, I agree that handling the new token in the fragment fits better in the HTML spec than in the URL spec.

Nick Burris

unread,
Oct 10, 2019, 5:31:54 PM10/10/19
to blink-dev, nbu...@chromium.org, bo...@chromium.org, bmcq...@chromium.org
We want to add a window.location.fragmentDirective object to allow feature detection:

typeof(window.location.fragmentDirective) != 'undefined'

This object is empty in the initial implementation, but could be expanded to provide APIs on top of the fragment directive, for example whether we found a match (we don't want to simply expose the fragment directive text as it may contain privacy sensitive information). I recently added a section to our draft spec on feature detection; also see #19.
 
 

Edge: No signals

Firefox: No signals

Safari: No signals

Web / Framework developers: 

We’ve seen some positive sentiment from twitter users:

Positive: https://twitter.com/brucel/status/1168888603671433222

Positive: https://twitter.com/rem/status/1168864475379916802

Neutral/Informational: https://twitter.com/glenngabe/status/1164850052608774145 

Neutral/Informational: https://twitter.com/brodieseo/status/1172724843302621184



Ergonomics

The default usage of this feature is independent of other platform APIs. When the feature is activated, Chrome must search the page for the target text on page load, however this is followed by a user-visible scroll and highlight assuming the target text is found. We observed a median latency of 26 milliseconds from the time we start processing the text fragment directive until the end of the scroll.


Activation

The feature is easy to use as-is; simply append :~:text=example to the URL fragment (i.e. append #:~:text=example to a URL with no fragment) to activate the feature.


The feature would benefit from a reference implementation for determining what the optimal text directive parameters are for a given text fragment on a page. We are working on a Chrome extension that generates scroll to text links, and plan to open source this extension on https://github.com/GoogleChromeLabs to serve as a reference.


Is this feature fully tested by web-platform-tests? Link to test suite results from wpt.fyi.

https://wpt.fyi/results/scroll-to-text-fragment/scroll-to-text-fragment.html

All tests pass on the Chromium implementation when the feature is enabled (wpt expectations are set to “not run” for Chromium as the feature is disabled by default).


Entry on the feature dashboard

https://chromestatus.com/feature/4733392803332096

--
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+unsubscribe@chromium.org.

David Bokan

unread,
Oct 15, 2019, 12:35:32 AM10/15/19
to blink-dev, ann...@annevk.nl, br...@birchill.co.jp, bmcq...@chromium.org
If it's helpful, I've made our security review document public. It lists the threats and mitigations we've considered and might help explain some of our rationale and decisions relating to the design.

Yoav Weiss

unread,
Oct 15, 2019, 1:07:28 AM10/15/19
to David Bokan, blink-dev, Anne van Kesteren, br...@birchill.co.jp, bmcq...@chromium.org


On Tue, Oct 15, 2019, 07:35 David Bokan <bo...@chromium.org> wrote:
If it's helpful, I've made our security review document public. It lists the threats and mitigations we've considered and might help explain some of our rationale and decisions relating to the design.


That's extremely helpful!! Thanks for making it public!

--
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+...@chromium.org.
To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/51def0f9-4fd4-450a-b0c2-c976c398c58e%40chromium.org.

Daniel Bratell

unread,
Oct 24, 2019, 4:11:21 PM10/24/19
to Yoav Weiss, David Bokan, blink-dev, Anne van Kesteren, br...@birchill.co.jp, bmcq...@chromium.org

Indeed, that information is valuable to anyone implementing this features.

bokan, nburris, I think the spec should be updated to include information about the feature's vulnerability to timing attacks, unless implemented with proper safeguards as you have done. I see nothing about it in the security/privacy part of the specification right now.

/Daniel

fantasai

unread,
Oct 24, 2019, 4:49:45 PM10/24/19
to Nick Burris, blink-dev, David Bokan, Bryan McQuade, Chris Wilson, WHAT Working Group
On 10/9/19 8:10 PM, Nick Burris wrote:
>
> Summary
>
> Scroll To Text allows URLs to link to a piece of text in a webpage rather than
> just linking to an existing element fragment. The motivating use cases are to
> enable user sharing of specific content and allow deep-linking references to
> information.

So, like, this sounds conceptually like a great feature to have for the Web.
But this

> Edge: No signals
>
> Firefox: No signals <https://github.com/mozilla/standards-positions/issues/194>
>
> Safari: No signals

makes it seem like you really haven't put much effort into figuring out where
the other browser vendors stand on the issue. Given this is an Intent to Ship,
I interpret not having figured out where the other vendors stand even at the
coarse level of “excited to have spec, plan to implement”, “supportive but not
prioritizing; will accept patches”, or “opposed to the feature in its current
state” as not really caring what they think. You have contacts into these
organizations; I am sure you could solicit such answers where there aren't any
if you thought it was necessary.

Google engineers keep asserting that, no, we really care about standardization
and moving the Web forward together with the other browser vendors. Look at
the processes we made to help us do that! But Web standardization efforts have
always tried to move forward on the basis of consensus. Meanwhile the attitude
here seems to be ”There was a template for the positions of other browsers, a
blank answer could be provided in the template, nobody reviewing it cares that
there was a blank answer, so let's just ship the thing we (Google) want.”

If this was a blank code review in your template, I imagine you would try
harder to get the reviewer's answer, and give a good explanation of your
attempts and their failure if indeed you could not solicit a response, before
asking for lgtm.

Yoav Weiss wrote:

> When it comes to venue, the current spec's processing seems to be mostly
> monkey-patching the HTML and URL specs, indicating that WHATWG is probably
> the right venue for this to graduate to. At the same time, landing features
> in WHATWG specs require multi-engine commitment, and looking at Mozilla's
> 2.5-months-old standards position issue doesn't really indicate implementer
> commitment, or anything at all. From a practical standpoint, it's clearer
> and easier for the spec to live as a standalone document rather than a
> WHATWG PR, while we're waiting for multi-engine commitment.
>
> But, that in no means preclude collaboration. The spec is in WICG, which
> was built specifically to enable multi-vendor collaboration when incubating
> new ideas. I'm sure everyone would be thrilled to have your feedback directly
> there, to make sure we get this right.

I would like to point out a couple things:

1. WICG is explicitly billing itself an incubation venue, not a
standardization venue. At the point you're planning to ship a feature, I think
that qualifies as beyond incubation, yes? So continuing work there at this
point would be inappropriate.

2. If the WHATWG rules for incorporating something are too stringent to allow
standardization in a timely manner, maybe you should consider changing them?
It's not like Google has no say in the WHATWG process. Perhaps something like
“two implementation commitments *or* implemented in one browser with other
browsers at least in favor of the feature and willing to implement it at some
point in the future even if they haven't committed to apply their own
resources yet” could be enough for inclusion.

To paraphrase Sir Tim Berners-Lee, process is a tool to help you do good work:
if your process is inhibiting you from doing said work, you should fix said
process. Allowing Google to do standardization work in an appropriate
multi-vendor standards forum, and using that process to seek positive
consensus on its proposals prior to deciding to ship, would be better than the
circumvention of the standardization processes *and spirit* being demonstrated
here, I would think.

~fantasai

Yoav Weiss

unread,
Oct 24, 2019, 6:29:58 PM10/24/19
to fantasai, Nick Burris, blink-dev, David Bokan, Bryan McQuade, Chris Wilson, WHAT Working Group
If you look at the linked TAG review issue, you could see that we have solicited and got opinions from various engineers working for said browser vendors. (and addressed multiple concerns raised)
However, at least when it comes to Mozilla, my understanding is that opinions of their engineers don't count for the purpose of stating support, unless expressed on their standards positions repo alongside an official commitment.
An issue was opened on that repo almost three months ago, trying to solicit their opinions and commitment. We have received zero replies on that issue.
If you have any suggestions as to what we could have better done on that front, we'd definitely take them into consideration for next time.
 

Yoav Weiss wrote:

> When it comes to venue, the current spec's processing seems to be mostly
> monkey-patching the HTML and URL specs, indicating that WHATWG is probably
> the right venue for this to graduate to. At the same time, landing features
> in WHATWG specs require multi-engine commitment, and looking at Mozilla's
> 2.5-months-old standards position issue doesn't really indicate implementer
> commitment, or anything at all. From a practical standpoint, it's clearer
> and easier for the spec to live as a standalone document rather than a
> WHATWG PR, while we're waiting for multi-engine commitment.
>
> But, that in no means preclude collaboration. The spec is in WICG, which
> was built specifically to enable multi-vendor collaboration when incubating
> new ideas. I'm sure everyone would be thrilled to have your feedback directly
> there, to make sure we get this right.

I would like to point out a couple things:

1. WICG is explicitly billing itself an incubation venue, not a
standardization venue. At the point you're planning to ship a feature, I think
that qualifies as beyond incubation, yes? So continuing work there at this
point would be inappropriate.

The WICG is indeed not a standardization venue, and once we have support from other vendors, we should definitely move the specification to one. But as can be noted reading through the Blink interoperability principles document, "being on a standards track" is not a shipping requirement for a feature.
We aren't always going to wait until Mozilla and/or Apple are officially in favor of the feature before we ship it. At the same time, one lesson we can take from this is that when other browsers haven't come to an official position at all, we should do a better job of capturing the outreach we've attempted.
 

2. If the WHATWG rules for incorporating something are too stringent to allow
standardization in a timely manner, maybe you should consider changing them?
It's not like Google has no say in the WHATWG process. Perhaps something like
“two implementation commitments *or* implemented in one browser with other
browsers at least in favor of the feature and willing to implement it at some
point in the future even if they haven't committed to apply their own
resources yet” could be enough for inclusion.

Such a rule would still not have helped in this particular case, where we have no official signal from other vendors that can qualify as "in favor".
 

To paraphrase Sir Tim Berners-Lee, process is a tool to help you do good work:
if your process is inhibiting you from doing said work, you should fix said
process. Allowing Google to do standardization work in an appropriate
multi-vendor standards forum, and using that process to seek positive
consensus on its proposals prior to deciding to ship, would be better than the
circumvention of the standardization processes *and spirit* being demonstrated
here, I would think.

I strongly reject your accusation that working in the open (for the last 9 months) and actively seeking out feedback from the web community at large and from other vendors in particular is somehow "circumventing the standardization processes and spirit"!


~fantasai


--
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+...@chromium.org.

Maciej Stachowiak

unread,
Oct 24, 2019, 10:04:14 PM10/24/19
to fantasai, Nick Burris, blink-dev, WHAT Working Group, David Bokan, Chris Wilson, Bryan McQuade


> On Oct 24, 2019, at 1:49 PM, fantasai <fantasa...@inkedblade.net> wrote:
>
> On 10/9/19 8:10 PM, Nick Burris wrote:
>> Summary
>> Scroll To Text allows URLs to link to a piece of text in a webpage rather than just linking to an existing element fragment. The motivating use cases are to enable user sharing of specific content and allow deep-linking references to information.
>
> So, like, this sounds conceptually like a great feature to have for the Web.
> But this
>
>> Edge: No signals
>> Firefox: No signals <https://github.com/mozilla/standards-positions/issues/194>
>> Safari: No signals
>
> makes it seem like you really haven't put much effort into figuring out where the other browser vendors stand on the issue. Given this is an Intent to Ship, I interpret not having figured out where the other vendors stand even at the coarse level of “excited to have spec, plan to implement”, “supportive but not prioritizing; will accept patches”, or “opposed to the feature in its current state” as not really caring what they think. You have contacts into these organizations; I am sure you could solicit such answers where there aren't any if you thought it was necessary.
>
> Google engineers keep asserting that, no, we really care about standardization and moving the Web forward together with the other browser vendors. Look at the processes we made to help us do that! But Web standardization efforts have always tried to move forward on the basis of consensus. Meanwhile the attitude here seems to be ”There was a template for the positions of other browsers, a blank answer could be provided in the template, nobody reviewing it cares that there was a blank answer, so let's just ship the thing we (Google) want.”
>
> If this was a blank code review in your template, I imagine you would try harder to get the reviewer's answer, and give a good explanation of your attempts and their failure if indeed you could not solicit a response, before asking for lgtm.

I don’t think anyone at Apple was asked to provide a position. It’s true this spec has been out there for a while, but there’s so many specs these days that it’s hard to predict which will be up for an Intent to Ship next.

I often see links to an Intent to Ship or Intent to Implement where Safari is noted as “no public signals” or “no signals” but no one actually asked us. Sometimes I even see this stated when we clearly said somewhere (perhaps in an issue comment) that we think the feature is a bad idea, at least as proposed.

So on the whole, I don’t think Chrome engineers do as good a job as they could of actively soliciting signals. Members of the WebKit team at Apple are usually happy to provide an opinion if asked, or at least point to someone who can give an informed opinion. We also make sure to sync internally on things like this, to be able to give relatively official opinions.

It’s possible that this is a Blink process problem, and that maybe “no signals” should be accompanied by a record of the lack of signal and/or attempt to solicit one, to remind Blinkers to actively ask. Assuming that’s the intention of the signals section.

(This is not an opinion on the specific spec; it seems like a generally good feature, but the fragment directive syntax and requirement for UAs to strip it seems bound to cause interop problems with browsers that don’t implement this spec.)


>
> Yoav Weiss wrote:
>
>> When it comes to venue, the current spec's processing seems to be mostly monkey-patching the HTML and URL specs, indicating that WHATWG is probably the right venue for this to graduate to. At the same time, landing features in WHATWG specs require multi-engine commitment, and looking at Mozilla's 2.5-months-old standards position issue doesn't really indicate implementer commitment, or anything at all. From a practical standpoint, it's clearer and easier for the spec to live as a standalone document rather than a WHATWG PR, while we're waiting for multi-engine commitment.
>> But, that in no means preclude collaboration. The spec is in WICG, which was built specifically to enable multi-vendor collaboration when incubating new ideas. I'm sure everyone would be thrilled to have your feedback directly there, to make sure we get this right.
>
> I would like to point out a couple things:
>
> 1. WICG is explicitly billing itself an incubation venue, not a standardization venue. At the point you're planning to ship a feature, I think that qualifies as beyond incubation, yes? So continuing work there at this point would be inappropriate.

It’s especially concerning that WICG does not require either multiple implementation experience (like W3C WGs do) or multiple implementor support (like WHATWG does). As a result, single-implementation specifications with no track to multi-engine implementation look exactly the same as incubation projects with multi-implementor support. In addition, because WICG requires “multiple party” (but not multiple implementation) support, sometimes we end up with specs using the WICG “Community Group Draft Report” logo while in an individual’s personal repo rather than in WICG.

I think these are process problems with WICG.

(Note, I’m not commenting on whether this CG report would never have multiple implementations).

>
> 2. If the WHATWG rules for incorporating something are too stringent to allow standardization in a timely manner, maybe you should consider changing them? It's not like Google has no say in the WHATWG process. Perhaps something like “two implementation commitments *or* implemented in one browser with other browsers at least in favor of the feature and willing to implement it at some point in the future even if they haven't committed to apply their own resources yet” could be enough for inclusion.

For clarity, WHATWG rules do not require implementation commitments for a feature addition, just nonbonding “support”:
https://whatwg.org/working-mode#additions

So the situation you describe would be more than enough.

In principle WHATWG process could be changed to require a statement of support from only a single implementation. But I think that would be a change for the worse, and I’d likely oppose it if proposed.

Manuel Rego Casasnovas

unread,
Oct 25, 2019, 4:40:41 AM10/25/19
to blin...@chromium.org
Apart from other issues that were already pointed out on this thread,
one more comment inline.

On 09/10/2019 20:10, Nick Burris wrote:
> https://wpt.fyi/results/scroll-to-text-fragment/scroll-to-text-fragment.html
>
> All tests pass on the Chromium implementation when the feature is
> enabled (wpt expectations are set to “not run” for Chromium as the
> feature is disabled by default).

This is just 1 test with 16 cases, 5 of them passing already in Firefox.
Is this good enough? Don't we need more tests here?

My 2 cents,
Rego

David Bokan

unread,
Oct 25, 2019, 4:59:14 AM10/25/19
to Maciej Stachowiak, fantasai, Nick Burris, blink-dev, WHAT Working Group, Chris Wilson, Bryan McQuade
On Fri, Oct 25, 2019 at 5:11 AM Daniel Bratell <brat...@gmail.com> wrote:

bokan, nburris, I think the spec should be updated to include information about the feature's vulnerability to timing attacks, unless implemented with proper safeguards as you have done. I see nothing about it in the security/privacy part of the specification right now. 

Thank you for pointing that out, it was an accidental omission when I added the
security section. I've created a PR with some text about this.

On Fri, Oct 25, 2019 at 5:49 AM fantasai <fantasa...@inkedblade.net> wrote:
> Edge: No signals
> Firefox: No signals <https://github.com/mozilla/standards-positions/issues/194>
> Safari: No signals

makes it seem like you really haven't put much effort into figuring out where
the other browser vendors stand on the issue. Given this is an Intent to Ship,
I interpret not having figured out where the other vendors stand even at the
coarse level of “excited to have spec, plan to implement”, “supportive but not
prioritizing; will accept patches”, or “opposed to the feature in its current
state” as not really caring what they think. You have contacts into these
organizations; I am sure you could solicit such answers where there aren't any
if you thought it was necessary.

It can be somewhat difficult, especially for those of us who don't actually have
many cross-vendor contacts, to get these kinds of signals. In particular, turning
private e-mail discussions with individual engineers into official and public
statements of support/opposition from the organization can be somewhat daunting
(or at least, there doesn't seem to be a standard process to follow).

That said, I can see your point and how this appears to those outside and I agree
I should have done a better job here. Why don't we take a step back and consider
this I2S temporarily suspended while I take another stab at this and we work on
incorporating some of the spec feedback above. 

I'd like to make a related process point as someone who isn't steeped in
the standards process: it's often difficult to get meaningful engagement from
other vendors until we're ready to ship. It's understandable; everyone's busy
with their own work to review all the early-stage proposals floating around. I
reached out to engineers from other vendors early and filed bugs in WHATWG
but it's hard to get someone to meaningfully engage.

The kind of feedback we received here would have been wonderful to have
several weeks ago. What should we be doing to get to this step earlier? I don't
want to be constantly spamming individuals and lists as I don't think that'll
scale, but I think it'd be useful to have some standard way to signal "we're
serious about this proposal, and it's baked enough at this point that we need
other implementers to review it". I was under the impression TAG reviews
serve at least part of this purpose.


Anne van Kesteren

unread,
Oct 25, 2019, 5:13:18 AM10/25/19
to David Bokan, Maciej Stachowiak, fantasai, Nick Burris, blink-dev, WHAT Working Group, Chris Wilson, Bryan McQuade
On Fri, Oct 25, 2019 at 10:59 AM 'David Bokan' via blink-dev
<blin...@chromium.org> wrote:
> The kind of feedback we received here would have been wonderful to have
> several weeks ago. What should we be doing to get to this step earlier?

For WHATWG, PRs against standards tend to help as they require review,
implementer commitments, and adequate test coverage. And editors will
provide guidance for all of those.

David Bokan

unread,
Oct 25, 2019, 5:30:05 AM10/25/19
to Manuel Rego Casasnovas, blink-dev
On Fri, Oct 25, 2019 at 5:40 PM Manuel Rego Casasnovas <re...@igalia.com> wrote:
> All tests pass on the Chromium implementation when the feature is
> enabled (wpt expectations are set to “not run” for Chromium as the
> feature is disabled by default).

This is just 1 test with 16 cases, 5 of them passing already in Firefox.

Each case is testing an individual piece of functionality, I don't think it makes much difference whether they're in separate files vs file with multiple cases.

The passing tests in Firefox and Edge are those that are ensuring negative behavior (i.e. don't scroll into view if the context doesn't match). A non-implementing UA will pass those, they're mostly interesting if the positive-behavior passes as well.

Is this good enough? Don't we need more tests here?

We can and will continue to improve these though I think these cases cover the broad functionality and so serve as a good starting point. I think we can work on adding some edge-cases.

David Bokan

unread,
Oct 25, 2019, 8:47:15 AM10/25/19
to blink-dev, bo...@google.com, m...@apple.com, fantasa...@inkedblade.net, nbu...@chromium.org, wha...@whatwg.org, cwi...@google.com, bmcq...@chromium.org


On Friday, October 25, 2019 at 6:13:18 PM UTC+9, Anne van Kesteren wrote:
For WHATWG, PRs against standards tend to help as they require review,
implementer commitments, and adequate test coverage. And editors will
provide guidance for all of those.

Thanks, I'll keep that in mind next time - I never would have thought of this since I'd assume a PR against WHATWG be closer to the final steps.

Yoav Weiss

unread,
Oct 25, 2019, 9:08:55 AM10/25/19
to Maciej Stachowiak, fantasai, Nick Burris, blink-dev, WHAT Working Group, David Bokan, Chris Wilson, Bryan McQuade
On Fri, Oct 25, 2019 at 4:04 AM 'Maciej Stachowiak' via blink-dev <blin...@chromium.org> wrote:


> On Oct 24, 2019, at 1:49 PM, fantasai <fantasa...@inkedblade.net> wrote:
>
> On 10/9/19 8:10 PM, Nick Burris wrote:
>> Summary
>> Scroll To Text allows URLs to link to a piece of text in a webpage rather than just linking to an existing element fragment. The motivating use cases are to enable user sharing of specific content and allow deep-linking references to information.
>
> So, like, this sounds conceptually like a great feature to have for the Web.
> But this
>
>> Edge: No signals
>> Firefox: No signals <https://github.com/mozilla/standards-positions/issues/194>
>> Safari: No signals
>
> makes it seem like you really haven't put much effort into figuring out where the other browser vendors stand on the issue. Given this is an Intent to Ship, I interpret not having figured out where the other vendors stand even at the coarse level of “excited to have spec, plan to implement”, “supportive but not prioritizing; will accept patches”, or “opposed to the feature in its current state” as not really caring what they think. You have contacts into these organizations; I am sure you could solicit such answers where there aren't any if you thought it was necessary.
>
> Google engineers keep asserting that, no, we really care about standardization and moving the Web forward together with the other browser vendors. Look at the processes we made to help us do that! But Web standardization efforts have always tried to move forward on the basis of consensus. Meanwhile the attitude here seems to be ”There was a template for the positions of other browsers, a blank answer could be provided in the template, nobody reviewing it cares that there was a blank answer, so let's just ship the thing we (Google) want.”
>
> If this was a blank code review in your template, I imagine you would try harder to get the reviewer's answer, and give a good explanation of your attempts and their failure if indeed you could not solicit a response, before asking for lgtm.

I don’t think anyone at Apple was asked to provide a position. It’s true this spec has been out there for a while, but there’s so many specs these days that it’s hard to predict which will be up for an Intent to Ship next.

I often see links to an Intent to Ship or Intent to Implement where Safari is noted as “no public signals” or “no signals” but no one actually asked us. Sometimes I even see this stated when we clearly said somewhere (perhaps in an issue comment) that we think the feature is a bad idea, at least as proposed.

So on the whole, I don’t think Chrome engineers do as good a job as they could of actively soliciting signals. Members of the WebKit team at Apple are usually happy to provide an opinion if asked, or at least point to someone who can give an informed opinion. We also make sure to sync internally on things like this, to be able to give relatively official opinions.

What would be the best way to solicit such feedback in a scalable way? No all engineers sending intents personally know someone on the WebKit team to ask for their opinion.
Would opening an issue on WebKit's bugzilla be the right way to get such an opinion?
 

It’s possible that this is a Blink process problem, and that maybe “no signals” should be accompanied by a record of the lack of signal and/or attempt to solicit one, to remind Blinkers to actively ask. Assuming that’s the intention of the signals section.

(This is not an opinion on the specific spec; it seems like a generally good feature, but the fragment directive syntax and requirement for UAs to strip it seems bound to cause interop problems with browsers that don’t implement this spec.)


>
> Yoav Weiss wrote:
>
>> When it comes to venue, the current spec's processing seems to be mostly monkey-patching the HTML and URL specs, indicating that WHATWG is probably the right venue for this to graduate to. At the same time, landing features in WHATWG specs require multi-engine commitment, and looking at Mozilla's 2.5-months-old standards position issue doesn't really indicate implementer commitment, or anything at all. From a practical standpoint, it's clearer and easier for the spec to live as a standalone document rather than a WHATWG PR, while we're waiting for multi-engine commitment.
>> But, that in no means preclude collaboration. The spec is in WICG, which was built specifically to enable multi-vendor collaboration when incubating new ideas. I'm sure everyone would be thrilled to have your feedback directly there, to make sure we get this right.
>
> I would like to point out a couple things:
>
> 1. WICG is explicitly billing itself an incubation venue, not a standardization venue. At the point you're planning to ship a feature, I think that qualifies as beyond incubation, yes? So continuing work there at this point would be inappropriate.

It’s especially concerning that WICG does not require either multiple implementation experience (like W3C WGs do) or multiple implementor support (like WHATWG does). As a result, single-implementation specifications with no track to multi-engine implementation look exactly the same as incubation projects with multi-implementor support. In addition, because WICG requires “multiple party” (but not multiple implementation) support, sometimes we end up with specs using the WICG “Community Group Draft Report” logo while in an individual’s personal repo rather than in WICG.

 
There's ongoing discussion on making the CG templates look less authoritative. Once that lands, it will hopefully make it clear that specifications on WICG are in no way a standard.
Requiring multiple implementations for an incubation would defy the purpose of incubations. The "barrier for entry" to getting a WICG repo is proving that you have a use-case that's interesting to solve, not that you have an well-thought-out solution. That comes later, as part of the incubation work.
And even incubations that are being worked on by multiple implementers should not look authoritative at first, as presumably they are still in flux. At the point where a multi-implementer incubation is stable, it should probably graduate to the appropriate WG.

Regarding personal specifications with a "CG draft report" logo, that sounds like a bug. Could you point me to such examples?
Maybe we can improve the tooling to make sure that doesn't happen.


I think these are process problems with WICG.

(Note, I’m not commenting on whether this CG report would never have multiple implementations).

>
> 2. If the WHATWG rules for incorporating something are too stringent to allow standardization in a timely manner, maybe you should consider changing them? It's not like Google has no say in the WHATWG process. Perhaps something like “two implementation commitments *or* implemented in one browser with other browsers at least in favor of the feature and willing to implement it at some point in the future even if they haven't committed to apply their own resources yet” could be enough for inclusion.

For clarity, WHATWG rules do not require implementation commitments for a feature addition, just nonbonding “support”:
https://whatwg.org/working-mode#additions

So the situation you describe would be more than enough.

In principle WHATWG process could be changed to require a statement of support from only a single implementation. But I think that would be a change for the worse, and I’d likely oppose it if proposed.

>
> To paraphrase Sir Tim Berners-Lee, process is a tool to help you do good work: if your process is inhibiting you from doing said work, you should fix said process. Allowing Google to do standardization work in an appropriate multi-vendor standards forum, and using that process to seek positive consensus on its proposals prior to deciding to ship, would be better than the circumvention of the standardization processes *and spirit* being demonstrated here, I would think.
>
> ~fantasai
>

--
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+...@chromium.org.

Frédéric Wang

unread,
Oct 25, 2019, 10:44:16 AM10/25/19
to blin...@chromium.org
On 25/10/2019 11:29, David Bokan wrote:
On Fri, Oct 25, 2019 at 5:40 PM Manuel Rego Casasnovas <re...@igalia.com> wrote:
> All tests pass on the Chromium implementation when the feature is
> enabled (wpt expectations are set to “not run” for Chromium as the
> feature is disabled by default).

This is just 1 test with 16 cases, 5 of them passing already in Firefox.

Each case is testing an individual piece of functionality, I don't think it makes much difference whether they're in separate files vs file with multiple cases.

The passing tests in Firefox and Edge are those that are ensuring negative behavior (i.e. don't scroll into view if the context doesn't match). A non-implementing UA will pass those, they're mostly interesting if the positive-behavior passes as well.

nit: Actually it's really 15 if we ignore the harness status https://github.com/web-platform-tests/wpt.fyi/issues/62 :-)

Anyway, I agree that what matters are subcases and this kind of passing tests for browsers without support is expected.

However, I think rego's point is that 15 test cases is probably still a small amount compared to the specification size. Do you agree? (see more below)


Is this good enough? Don't we need more tests here?

We can and will continue to improve these though I think these cases cover the broad functionality and so serve as a good starting point. I think we can work on adding some edge-cases.
Improving the tests sounds good, especially to help this to be reviewed and implemented by other browser vendors. Some random comments after quickly skimming over the spec and tests:

- Do you know how much of the spec is covered by tests? I can't find the case "#:~:text=textStart,-suffix" for example and I assume 0, 1 or multiple matches should be tested in each case.

- Should %c be tested for character other that space? For example searching strings involving non-ascii and non-BMP characters seems an important use case for that feature? Or character that is part of the syntax such as "," or "-", so that we are sure they can be searched too by escaping them.

- What would be the default scroll alignment/behavior parameters when the scroll into view is performed? (as a comparison Element.scrollIntoView has block="start", inline="nearest", and behavior="auto")

- Is the CSS scroll-behavior property taken into account to perform smooth scrolling? Which element the CSS property would be read from? (I guess document.body in quirks mode? root element otherwise?)

- The test relies on BroadcastChannel which is not implemented in all browsers :-( Is it a requirement for the feature? If not, would it possible not to rely on BroadcastChannel for testing this feature?

- Can test_cases have a human-readable description, used in addition to the fragment in the test description? That would make things easier to understand and to better see test coverage.

- Similarly, <link rel="help"> tag would help to identify the relevant sections in the spec.

- Would it be possible to use template_literals? I personally find it easier to read than string concatenation.

Hope that helps,

-- 
Frédéric Wang

David Bokan

unread,
Oct 25, 2019, 11:56:25 AM10/25/19
to Frédéric Wang, blink-dev
On Fri, Oct 25, 2019 at 11:44 PM Frédéric Wang <fw...@igalia.com> wrote:
However, I think rego's point is that 15 test cases is probably still a small amount compared to the specification size. Do you agree? (see more below)

 Yes, point taken. The tests were ported from Blink's web tests so they make assumptions (e.g. if multiple matches work in one case they'll work in others) but I agree for WPT it makes sense (and shouldn't be hard) to make fewer assumptions like this.

- The test relies on BroadcastChannel which is not implemented in all browsers :-( Is it a requirement for the feature? If not, would it possible not to rely on BroadcastChannel for testing this feature?

Thanks, I didn't know it's not implemented across all browsers. nburris@ might know better what the requirement is. One of the tricky factors here the security restrictions make it difficult to test programmatically (e.g. navigating the top-level window), I suspect that may be related to working around that.

Hope that helps,

Thank you! All these points are all very helpful!

Nick Burris

unread,
Oct 25, 2019, 1:03:36 PM10/25/19
to blink-dev, fw...@igalia.com
Yes, using BroadcastChannel is not an ideal solution but was the only solution I could find that works with the security restrictions, which are meant to specifically guard against a window being able to programmatically perform a scroll-to-text navigation and observe the result. Thanks for the feedback on the web platform tests! I'll expand on these cases and explore alternatives to using BroadcastChannel.

Chris Wilson

unread,
Oct 25, 2019, 1:34:21 PM10/25/19
to Maciej Stachowiak, fantasai, Nick Burris, blink-dev, WHAT Working Group, David Bokan, Bryan McQuade
On Thu, Oct 24, 2019 at 6:35 PM Maciej Stachowiak <m...@apple.com> wrote: