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

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.

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.

Reply via email to