Very exciting to see progress on this longstanding problem!

On Sat, Feb 15, 2025 at 3:35 AM Kyra Seevers <kyraseev...@chromium.org>
wrote:

> Contact emails
>
> kyraseev...@chromium.org, miketa...@chromium.org, a...@google.com
>
> Explainer
>
>
> https://github.com/explainers-by-googlers/Partitioning-visited-links-history
>
> Specification
>
> https://drafts.csswg.org/selectors-4/#visited-privacy
>

As you note below, this isn't a real specification of the behavior you're
proposing to ship. Instead, it contains that behavior in a non-normative
appendix.

It's therefore unclear to what extent the behavior here represents
cross-browser consensus, and what types of interop and compat risks this is
leaving us up to.

Can you say more about what's missing from getting a cross-browser
agreed-upon algorithm specified by the CSSWG? Are there other candidate
algorithms that other browsers are championing, which we might be in
conflict with?


>
> Summary
>
> To eliminate user browsing history leaks, anchor elements are styled as
> :visited only if they have been clicked from this top-level site and frame
> origin before. On the browser-side, this means that the VisitedLinks
> hashtable is now partitioned via "triple-keying", or by storing the
> following for each visited link: <link URL, top-level site, frame origin>.
> By only styling links that have been clicked on this site and frame before,
> the many side-channel attacks that have been developed to obtain :visited
> links styling information are now obsolete, as they no longer provide sites
> with new information about users.
>
> There is an exception for "self-links", where links to a site's own pages
> can be styled as :visited even if they have not been clicked on in this
> exact top-level site and frame origin before. This exemption is only
> enabled in top-level frames or subframes which are same-origin with the
> top-level frame. The privacy benefits above are still achieved because
> sites may already know which of its subpages a user has visited, so no new
> information is exposed. This was a community-requested exception which
> improves user experience as well.
>
> Blink component
>
> Blink>History>VisitedLinks
> <https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3EHistory%3EVisitedLinks%22>
>
> Search tags
>
> visited links <https://chromestatus.com/features#tags:visited%20links>, 
> :visited
> selector <https://chromestatus.com/features#tags::visited%20selector>, 
> partitioning
> history <https://chromestatus.com/features#tags:partitioning%20history>
>
> TAG review
>
> https://github.com/w3ctag/design-reviews/issues/896
>
> TAG review status
>
> Satisfied with concerns
>
> Risks
>
> Interoperability and Compatibility
>
> There has been lots of word-of-mouth and official interest from the Web
> Platform in adopting this feature cross-browser.
>
> Gecko: Positive (
> https://github.com/mozilla/standards-positions/issues/1040)
>
> WebKit: No signal (
> https://github.com/WebKit/standards-positions/issues/363)
>
> Web developers: No official signals, see below for more details
>
> Other signals: Positive or neutral initial signals from security and
> privacy researchers at the XS-Leaks summit. There are no security concerns
> about this design and lots of interest in finally resolving this exploit.
> Feedback from UX that CSS extensibility is in-demand from developers right
> now, and this work would pave the way for less restricted CSS on anchor
> elements. In addition, support from various developers who believe that
> taking care of this long-standing privacy leak will allow their own
> security and privacy solutions to advance once history sniffing is no
> longer an issue.
>
> Ergonomics
>
> This design is asynchronous and not used in tandem with other APIs.
>
> Activation
>
> Since this is a Finch roll-out, there are no additional activation risks.
>
> Security
>
> For this design we worked with the Chrome Security Architecture team to
> ensure reasonable precautions were taken against leaks via renderer
> compromises.
>
> WebView application risks
>
> There is no risk for WebView based-applications because WebView has its
> own History system and stores :visited links using different code from the
> other platforms. For this reason, we are not shipping triple-key
> partitioning to WebView.
>
>
> Debuggability
>
> No DevTools support is required.
>
>
> Will this feature be supported on all six Blink platforms (Windows, Mac,
> Linux, ChromeOS, Android, and Android WebView)?
>
> No
>
> This feature is not currently supported on iOS or Android Webview. For
> iOS, this feature requires WebKit to alter its CSS parsing to support
> triple-key partitioning. Android Webview relies on an entirely different
> system to populate history, so it will require a separate design.
>
>
> Is this feature fully tested by web-platform-tests
> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>
> ?
>
> No
>
> This feature is not tested by automated Web Platform Tests because the
> :visited selector, in its current state, cannot be queried via JavaScript (
> https://developer.mozilla.org/en-US/docs/Web/CSS/Privacy_and_the_:visited_selector).
> As a result, we can only test :visited-ness via a manual test
> <https://chromium-review.googlesource.com/c/chromium/src/+/6262650/8>
> which relies on users visually confirming the correct links are :visited,
> or unit and integration tests internal to Chrome.
>

Couldn't this be tested with reftests
<https://web-platform-tests.org/writing-tests/reftests.html>?


> DevTrial instructions
>
>
> https://github.com/explainers-by-googlers/Partitioning-visited-links-history?tab=readme-ov-file#how-to-experiment
>
> Flag name on about://flags
>
> #partition-visited-link-database-with-self-links
>
> Finch feature name
>
> PartitionVisitedLinkDatabaseWithSelfLinks
>
> Requires code in //chrome?
>
> True - code is added to 2 areas of //chrome code:
>
>    1.
>
>    chrome/browser/history/history_tab_helper.h/.cc to add explicit
>    parameters for top-level site and is_ephemeral to HistoryAddPageArgs and
>    populate them; we later access this information in non-chrome code to add
>    navigations to the history database
>    2.
>
>    chrome/browser/chrome_content_browser_client.cc to add a navigation
>    throttle which intercepts the origins of incoming navigations (doesn’t
>    actually throttle) to calculate its per-origin salt. This was added as part
>    of the mitigations to prevent the entire table being leaked in the event of
>    a renderer compromise.
>
>
> Tracking bug
>
> https://bugs.chromium.org/p/chromium/issues/detail?id=1448609
>
> Launch bug
>
> https://launch.corp.google.com/launch/4330864
>
> Availability expectation
>
> Other browsers have expressed interest in implementing :visited links
> partitioning at TPAC 2023 and 2024. I expect that the feature is available
> across the Web Platform in the next couple of years.
>
> Non-OSS dependencies
>
> Does the feature depend on any code or APIs outside the Chromium open
> source repository and its open-source dependencies to function?
>
> No
>
> Estimated milestones
>
> Enabled by Default on Desktop and Android*
>
> 135
>
> Stable 100% via Finch on Desktop and Android*
>
> 133
>
> Multi-Arm Finch Experiment Began
>
> 128
>
> Multi-Arm Finch Experiment Ended
>
> 133
>
> Database Finch Experiment Began
>
> 118
>
> Database Finch Experiment Ended
>
> 121
>
> DevTrial on Desktop and Android Began
>
> 132
>
> * We intend to launch to Stable 100% via Finch configuration, which will
> have a min milestone of M133. The corresponding ENABLED_BY_DEFAULT chromium
> CL will likely land in M135.
>
> Anticipated spec changes
>
> The current CSS Selectors spec language is broad enough to support
> partitioning :visited link history. However, we have added specification
> that UAs MUST take some action to protect user browsing history [1], with a
> note which describes our triple-key solution [2]:
>
> [1] https://drafts.csswg.org/selectors-4/#link
>
> [2] https://drafts.csswg.org/selectors-4/#visited-privacy
>
> Link to entry on the Chrome Platform Status
>
> https://chromestatus.com/feature/5101991698628608?gate=5127548398206976
>
> Links to previous Intent discussions
>
> Intent to Prototype:
> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CA%2BmmbXbbLWwmRYH5SWx0%2BMWkfB2UY2miOAq4r0MZc34i_sWqBw%40mail.gmail.com
>
> Intent to Experiment (Phase 1):
> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CA%2BmmbXYy4CSMuPLY0HJuTbZt0qPz5ZUsGUToFJuCE%2BTfC86umA%40mail.gmail.com
>
> Intent to Experiment (Phase 2):
> https://groups.google.com/a/chromium.org/g/blink-dev/c/U5AX0OXaxM8/m/tIGr4bJJBgAJ?utm_medium=email&utm_source=footer
>
> Ready for Trial:
> https://groups.google.com/a/chromium.org/g/blink-dev/c/lg73meqgggo/m/dgqIFrveDgAJ?utm_medium=email&utm_source=footer
>
>
> This intent message was generated by Chrome Platform Status
> <https://chromestatus.com/>.
>
> --
> 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 visit
> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CA%2BmmbXY%3D2PpZ9cQ5EQBLDwi2F6O7gocPDm7cZEw-6C2huodEmg%40mail.gmail.com
> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CA%2BmmbXY%3D2PpZ9cQ5EQBLDwi2F6O7gocPDm7cZEw-6C2huodEmg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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 visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAM0wra8yFJeNMjti6yfo2D-1Jmyg5nLLafAbXiqUceX3Z8ZSZg%40mail.gmail.com.

Reply via email to