From Chrome 132, developers can participate in a Developer Trial for a new approach to Web pop-ups: Partitioned Popins. This Developer Trial is only available for Desktop, and the feature is not yet available on Android.
A partitioned popin is a new type of pop-up designed for short-lived interactions, such as logins or quick confirmations. It loads web content with two unique features:
Why do we need partitioned popins?
Partitioned popins are designed to maintain the privacy properties of a partitioned iframe and the security properties of pop-ups.
As more users opt in to browsing without third-party cookies, flows that rely on storing data in a pop-up for retrieval in a third-party context later (for example, to maintain user session across sites) may be disrupted. Partitioned popins aim to address this issue.
How do partitioned popins work?
Each partitioned popin's storage is partitioned to its opener. Storage partitioning limits access to cross-site data, mitigating tracking risks and script injection attacks. Learn how storage partitioning works in our documentation.
Consider an opener.example
website that embeds content from
third-party.example
. To display personalized content on opener.example
, the
user needs to sign in on third-party.example
. When third-party cookies are
blocked in the user's browser, the current pop-up flow is as follows:
- The user clicks a login button.
- A dialog opens.
- The user logs in from the top level context of
third-party.example
, and an unpartitioned authentication cookie is written. - The
third-party.example
content embedded onopener.example
doesn't have access to its own top-level cookies written onthird-party.example
when it was presented in a first-party context. This happens because the authentication cookie is unpartitioned and is therefore a third-party cookie.
The storage of a partitioned popin is partitioned to the opener. This changes the steps 3-4 of the flows:
The user logs in from the top-level context of
third-party.example
. As it's open in a partitioned popin, the storage is partitioned byopener.example
.The
third-party.example
content embedded on theopener.example
has access to its own cookie that was set in the popin, since they share the same partitioned storage.
Modal-like UI relative to its opener tab
Partitioned popins aim to help the user understand that the opener and the popin are related:
- When the user switches to another tab, the popin automatically becomes invisible and inaccessible, the same way a modal is only visible when the opener tab is active.
- When the user returns to the opener tab, the popin is shown again.
- The user cannot make changes in the popin's browser address bar.
Try it out
Chrome 132 is introducing a Developer Trial for the Partitioned Popins feature. This means that the feature will be available behind a flag. Here's how you can try partitioned popins:
- Make sure you're using Chrome 132 or later.
- Navigate to
chrome://flags#partitioned-popins
and enable the feature flag. - Restart Chrome.
- Try out our demo.
Use partitioned popins on your website
To use a partitioned popin on your website, call the window.open()
method with the popin
parameter passed:
window.open("third-party-popin.example", "_blank", "popin");
Share your feedback
We're exploring partitioned popins and looking for developer feedback. Here are some potential use case scenarios:
- User authentication flow. If you have a custom authentication flow
implemented, and the authentication happens on a different domain than your
site (for example,
site.example
users sign in onauth-site.example
), try opening the authentication page in a popin to use the session cookie on the opener page. - Embedded content. Try partitioned popins to display additional content from a third-party widget, such as a settings dialog, an image or a PDF (or other content that is usually loaded in a pop-up), rendered in a larger window. In this case, partitioned popins aim to retain the user session state between the third-party widget and your site.
If you have any of these scenarios in your solutions, have other use cases in mind, or want to help shape the future of this feature, try it out and let us know:
- Did you encounter any issues?
- Do you have any suggestions for a better user experience?
- Do you have any suggestions for a better UI? Specifically, do you find that the UI clearly indicates that the opener and the popin are related?
- How useful do you find this feature?
- Are there other use cases you would like to use partitioned popins for?
File an issue on GitHub to share your thoughts.