[Just back from vacation, sorry for the delay]

On Tue, Jul 11, 2023 at 3:44 AM Robert Knight <robertkni...@gmail.com>
wrote:

> Hello,
>
> Hypothesis (https://web.hypothes.is, a web page/PDF/ebook annotation
> tool) uses the "unload" event to signal to one end of a message channel
> when the other end is in a frame that is about to go away. This is a
> workaround for the lack of a "close" event in the Channel Messaging API (
> https://github.com/whatwg/html/issues/1766). If unload events are going
> to be removed from the web platform, it would be useful to have a proper
> solution for detecting when a MessagePort becomes disconnected
> ("disentangled").
>

Thank you for sharing! As a general principle
<https://docs.google.com/document/d/1RC-pBBvsazYfCNNUSkPqAVpSpNJ96U8trhNkfV0v9fk/edit#heading=h.x5bhg5grhfeo>,
we "avoid breaking any use cases which cannot be shown to have a reasonable
alternate implementation". Fergal / Kenji can you follow up offline on this
use case and circle back here with your conclusions? Robert, in your case
could you use the permission policy to re-enable unload events on the frame
until we come up with a better fix? Or are there scenarios where you lack
the ability to add "allow=" attributes to the iframe elements?

Kind Regards,
> Robert Knight
>
> On Monday, 10 July 2023 at 08:13:49 UTC+1 Yoav Weiss wrote:
>
> Thanks for chiming in, Brandon!
>
> I'm glad to hear that the Enterprise constituency is comfortable with the
> plan.
> I'm concerned that there may be a couple other constituencies that may not
> be:
>
>    - Third party widgets that currently use unload to send a single "end
>    of page" beacon. fetchLater() <https://github.com/WICG/pending-beacon> is
>    aiming to be that replacement, but it's not ready just yet.
>    - Enterprise SAAS providers that don't have direct and immediate
>    control over their customers' application configuration, nor on their
>    users' Enterprise Policy.
>
> I think that a short-lived 3P deprecation trial may address these
> constituencies as well. Would you consider adding that to your plans?
>
>
This makes sense to me. Basically we want a plan where each impacted
constituency can opt-out and where we can analyze the use of those
different opt-out mechanisms, right? I agree a short-lived way for 3Ps to
opt-out is a useful risk-mitigation mechanism, but we will have to
communicate clearly that it's intended only to provide time to adopt a
migration strategy.

>
> On Sat, Jul 8, 2023 at 12:55 AM 'Brandon Heenan' via blink-dev <
> blin...@chromium.org> wrote:
>
> Hello, I'm chiming in to provide some thoughts from the enterprise
> perspective.
>
> Our goal is to not block forward progress to the web, but to improve the
> web in an enterprise-friendly way. You shouldn't ever hear me say "you
> can't do X because it's scary to the enterprise team." You should instead
> hear "We expect X to be risky, but here are the things we know we can do to
> make it much less risky."
>
> In this case, yes, this is risky for enterprises. We can say this with
> confidence because we've seen escalations before when we've made changes to
> unload events (crbug.com/933153,  crbug.com/953228).
>
> Kenji and Daisuke have been working with us, and my understanding of the
> plan is to:
>
>    -
>
>    Allow developers to opt-in early to the new behavior (unload event
>    ignored) with a permission policy
>    -
>
>    Communicate the change on chromestatus and the enterprise release
>    notes (already happening
>    
> <https://support.google.com/chrome/a/answer/7679408?sjid=15316582819754370342-NA#skpUnload114>).
>    We will provide a bug link for customers for feedback in a future release.
>    -
>
>    Reach out to enterprises and developers we expect to be affected
>    -
>
>    Introduce an enterprise policy to allow an IT admin to control unload
>    event behavior
>    -
>
>    Introduce a flag in chrome://flags/deprecated to allow end users to
>    control unload event behavior
>    -
>
>    As early as M117, change the default for the policy so that unload
>    events will be ignored. This is the breaking change, and there's likely to
>    be friction here. The two escalations mentioned above both resulted in
>    respins the first time they reached this point. However, this time around,
>    IT admins will be able to fix their environment immediately with the
>    enterprise policy, end users will be able to fix themselves with the
>    deprecation flag, and developers will be able to fix their app with the
>    permission policy. With those mitigations in place, the risk of requiring a
>    respin (or Finch rollback) due to enterprise impact is dramatically
>    reduced, and this is how we eventually successfully shipped both of those
>    above escalations.
>    -
>
>    We expect a long transition period after that. By default, the unload
>    event is ignored, but different stakeholders are able to revert to legacy
>    behavior. Within enterprise, we expect the enterprise policy to be the most
>    useful mitigation, and the deprecation flag is the backup for BYOD or
>    unmanaged devices. For the above escalations, this migration period was
>    over a year, and I'm expecting something similar this time.
>    -
>
>    At some point in the future, we expect to remove those mitigations and
>    remove support for the unload event completely. We don't have any specific
>    dates for that yet; we will be responsive to the needs of web stakeholders,
>    enterprise and otherwise.
>
> The two escalations I mentioned above were successfully resolved and the
> changes to not allow popups on page unload and to not allow synchronous
> XHRs on page unload were shipped. Both of those changes followed
> essentially the same plan I just laid out above, and so I think it's
> reasonable to do the same thing here.
>
>
Thank you so much Brandon for summarizing your perspective on the
enterprise risk, I agree the mitigations make this seem quite tractable
(though still risky).


>
>
> On Thursday, June 29, 2023 at 7:02:06 AM UTC-7 Rick Byers wrote:
>
> On Thu, Jun 29, 2023 at 1:47 AM Kenji Baheux <kenji...@google.com> wrote:
>
>
> On Thu, Jun 29, 2023 at 1:48 PM Fergal Daly <fer...@google.com> wrote:
>
> On Thu, 29 Jun 2023 at 01:16, Rick Byers <rby...@chromium.org> wrote:
>
> Hi Fergal,
> Thanks for pushing through this contentious and challenging deprecation.
> We discussed this in the API owners meeting today and were worried that
> this plan seemed likely to be seriously problematic for enterprises (policy
> opt-out is helpful, but far from a silver bullet unfortunately). To what
> extent have you engaged with them and worked to follow the enterprise
> breaking change policy
> <https://www.chromium.org/developers/enterprise-changes/>? Our hunch is
> that at 1% or 5% we'd get escalations forcing us to abandon this plan. Of
> course, if the enterprise team is OK with it, we could always try anyway
> and see if our hunch is right. It's possible I'm over-indexing on past
> experiences like deprecating sync XHR in unload handlers
> <https://groups.google.com/a/chromium.org/g/blink-dev/c/LnqwTCiT9Gs/m/tO0IBO4PAwAJ>
> and that the enterprise world is different now, but I doubt it :-).
>
>
> In addition to Daisuke's response... are you concerned about enterprises
> that are not using fleet management and so cannot use the opt-out? If you
> think an enterprise policy will not be sufficient, a mitigation for those
> enterprises would be for us to publish an extension that allows anyone to
> re-enable unload (for all sites or for specific sites) by injecting the
> PP:unload header. Are the escalations that can't be resolved by either a
> policy or extension?
>
>
> One extra comment on the extension option (great for desktop).
>
> If you wonder about the mobile BYOD scenarios, where extensions don't
> exist, then we are a bit lucky here because unload is already unreliable on
> mobile. So, it seems extremely unlikely that we'd see mobile enterprise/edu
> products that rely on unload on mobile.
>
> *Rick:* are there specific scenarios / environments that we haven't
> covered?
>
>
> I'm glad to see the conversation with the enterprise team is further along
> than I had realized. Having skip unload events in the release notes
> <https://support.google.com/chrome/a/answer/7679408?sjid=5091298988245423514-NA#skpUnloadEv113>
> since M113 is a significant mitigation, sorry I wasn't caught up on the
> latest. And yes some sort of user opt-out for BYOD (extension or
> chrome::/flags, etc.) seems like an essential mitigation. I defer to the
> enterprise team's judgement here, so if they're OK with proceeding then we
> shouldn't let my enterprise fears block us. I expect we do need some easy
> way for an application to signal that it really does need unload handlers.
> Setting a permission policy is likely orders of magnitude easier than
> converting essential unload handlers to pagehide and ensuring they're safe
> to invoke multiple times.
>
> The other major constituency potentially impacted are ad networks. Perhaps
> the next step should be a 1% finch trial where we can measure various
> ad-related metrics? I'd defer to the judgment of the Chrome Ads team (@Josh
> Karlin).
>
> Anyway, I'm personally OK with 1% stable experiments (and whatever else on
> dev/beta). But I think we should discussing learnings from such 1%
> experiments here publicly before approving a plan to go beyond that.
>
> In general Yoav and I disagree with the WebKit and Gecko feedback here and
> suspect that your original PP default-on proposal is far more likely to be
> a successful deprecation path for Chrome (and, should they choose to
> follow, Edge). I can understand why Firefox and WebKit don't have the same
> constraints around enterprises and so would choose differently for
> themselves. Yoav and I are happy to help in the standards discussions. I'm
> about to go on vacation for 2 weeks but Yoav said he'd follow up with you
> privately to brainstorm next steps. Sound good?
>
>
> I would love to get moving on PP:unload ASAP no matter what. It's been
> through OT and is sitting behind a flag with some sites eager to use it.
> I'm happy to send an I2S for that while we discuss the harder problem. We
> hope that getting that out there can clear out a large chunk of the 1st-
> and 3rd-party unload usage,
>
>
> +1, I'd suggest doing that regardless.
>
> There are a few large sites that have done some legwork on unload handlers
> (theirs and third party partners), and are interested in pushing the
> remaining unload handlers out with PP:unload. Having allies in the
> ecosystem (i.e. extra incentives to migrate), will be helpful going forward
> :)
>
>
> Yep I think this was Yoav and my primary concern. For chrome to have a
> pragmatic and reasonable deprecation path given our user base, we really
> need sites adopting such an API. If we're not going to actually ship such
> an API then I think we'd have to give up on deprecating unload. I'd support
> shipping this API despite the lack of support from WebKit and Gecko.
>
>
> F
>
>
>
> Rick
>
>
> On Wed, Jun 28, 2023 at 4:07 AM Fergal Daly <fer...@google.com> wrote:
>
> Hi API-owners,
>
>
> I am now asking for permission to go ahead with the following concrete
> unload deprecation plan below.
>
>
>
>    -
>
>    Tools and outreach
>    -
>
>       M115 Enable `Permission-Policy: unload` (PP:unload) with the
>       default being enabled. This allows sites to opt-in to unload 
> deprecation.
>       -
>
>       Outreach to 1st/3rd parties, to migrate away from using unload and
>       to enforce this with PP:unload.
>       -
>
>    Deprecation
>    -
>
>       M117 change the default for PP:unload so that unload handlers are
>       skipped by default for 1% of page loads
>       -
>
>       M118 increase to 5% of page loads
>       -
>
>       M119 (last of 2023) increase to 10% of page loads
>       -
>
>       Evaluate progress on reduction of the use of unload
>       -
>
>       M120-128 increase +10% gradually to 100% of page loads
>
>
> Enterprise policy would allow opt-out entirely.
>
>
> Obviously, the deprecation timeline is contingent on unload usage coming
> down in response to the earlier steps.
>
> We expect that 10% of page loads will provide a noticeable signal to sites
> that use unload. Also, if we were to just follow the current spec and not
> run unload when we can BFCache (as happens on Clank/Firefox mobile and all
> WebKit) we expect that we would skip 30-40% of unload handlers when the
> main frame navigates.
>
> Decisions:
>
>    -
>
>    Timeline
>    -
>
>    All navigations vs main-frame navigations only
>
>
> Standardising
>
> We have some new data and have had some further discussions with browser
> vendors. There's no consensus. TL;DR WebKit are opposed to any
> Permissions-Policy but support removing unload eventually. Mozilla are
> still discussing.
>
> Both Mozilla <https://github.com/mozilla/standards-positions/issues/691>
> and WebKit <https://github.com/WebKit/standards-positions/issues/127>
> were opposed to standardising `Permissions-Policy: unload` (defaulting to
> on) because they worried that a containing frame might selectively disable
> unload handlers in a child frame for malicious purposes (no specific cases
> were discussed).
>
> So we flipped to the idea of having PP:unload with the default being
> disabled. We cannot suddenly do that. We need to roll it out gradually.
> WebKit folks are opposed to this and have suggested
> <https://github.com/WebKit/standards-positions/issues/200#issuecomment-1596385073>
> we do a reverse origin trial instead. If our plan works out, eventually we
> would ROT as the final nail but ROT starting now has downsides for users
> and sites and no upside for the implementer.
>
> Mozilla has so far not been negative
> <https://github.com/mozilla/standards-positions/issues/691> on the
> Permissions-Policy off-by-default approach but they are still discussing.
> They are concerned that disabling unloads when subframes are navigating
> could be a problem. We found that about 1/4 of subframe navigations involve
> an `unload` handler (most seem to involve handlers in cross-site and
> same-site site frames). We don't have examples of sites that rely on
> `unload` handlers in this way, although they probably do exist. Migrating
> to `pageshow` or using PP:unload for these sites should be trivial.
>
> We have the option to say that PP:unload only applies to main frame
> navigations. This would mean these sites would be completely unaffected
> however that has some downsides. It is harder to explain and does not end
> with full removal of `unload`. We would prefer to have this apply to all
> navigations unless we find a good reason not to. If we were to change
> part-way, there would be no breakage. We hope that once we drive down usage
> in 3rd-part iframes with PP:unload that the number of unload handlers
> running in subframe navigations decreases significantly.
>
> Finally there was some discussion
> <https://github.com/w3c/webappsec-permissions-policy/issues/513#issuecomment-1564361739>
> about how Permissions-Policy off-by-default should work. Our current
> version requires every page to set the header and every parent to set the
> iframe `allow` attribute. This is maximally conservative. If at some point
> later on there is agreement to standardise on something less conservative,
> it will not break pages that have already re-enabled `unload`.
>
>
> Overall it seems hard to standardise in advance but if we succeed in
> driving down `unload` usage, other browsers are on-board with removing
> unload. The worst case scenario would be where we implement PP:unload
> (which the others do not agree with) but make no noticeable progress on
> `unload` usage. If that happens we can just go with the currently specced
> behaviour (don't run `unload` if BFCaching is possible) and maybe revert
> the PP:unload,
>
> F
>
> On Tue, 9 May 2023 at 16:01, Fergal Daly <fer...@google.com> wrote:
>
> On Mon, 8 May 2023 at 17:51, Rick Byers <rby...@chromium.org> wrote:
>
> Hi Fergal,
> It's exciting to see this moving forward! Just to clarify, this is
> effectively an I2S for the unload permissions-policy, is that right? Or are
> you also requesting permission to stop firing unload events now too?  The
> latter is going to require some significant compat analysis, but could be
> greatly informed by the experience of having some top-level sites opt-out
> of unload for their frame tree.
>
>
> Thanks.
>
> We're not requesting permission to stop firing at this point. It is the
> far-away end-point.
>
>
>
> Any plan to trigger a deprecation warning / report for the installation of
> unload handlers? It might be tricky to find a good balance of useful
> warnings without being too spammy.
>
>
> Permission policy will do this as is with a console warning and
> Reporting-API if you attempt to install a handler that is disallowed by
> policy.
>
>
>
> A couple more questions / comments inline:
>
> On Mon, May 8, 2023 at 7:43 AM Fergal Daly <fer...@chromium.org> wrote:
>
> Contact emails
>
> fer...@chromium.org, kenji...@chromium.org
>
> Explainer
>
>
> https://github.com/fergald/docs/blob/master/explainers/permissions-policy-deprecate-unload.md
>
> Specification
>
> https://github.com/whatwg/html/pull/7915
>
>
> This is still marked as draft. Can you get this ready for review? If it's
> blocked only on having a 2nd implementor show support, then I'd be fine
> shipping based on a PR. But we should at least do what we can to solicit
> feedback on the spec change prior to shipping.
>
>
> Yes. There's nothing in the spec change that isn't in the requests for
> positions but since neither of those are supportive yet, I have not asked
> for review of the PR. I'm hopeful that once we have data on use on unload
> in subframe navigations as discussed here
> <https://github.com/mozilla/standards-positions/issues/691#issuecomment-1484997320>
>  that
> Mozilla will be supportive. Those metrics are in 113 but based on the data
> from beta, we need to change how we record them.
>
>
> Summary
>
> A Permission-Policy for creating unload event listeners will be added.
>
> Initially, the default policy will be set to allow. From there, Chrome
> will gradually migrate the default policy to deny (i.e. increasingly
> disallow the creation of unload event listeners, eventually reaching a
> state where deny fully becomes the default policy). The ultimate goal is
> to remove support for unload event.
>
> Blink component
>
> Blink>PermissionsAPI
> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EPermissionsAPI>
>
> Motivation
>
> The unload event is extremely unreliable. It is ignored in most cases by
> all mobile browsers except Firefox on Android. Furthermore, in Safari, the
> unload event is ignored on both desktop & mobile platforms.
>
> In the current state, unload is a major BFCache blocker (~18 percentage
> points reduction of hit rate for Chrome).
>
> The change  will unlock a large fraction of that hit-rate while providing
> an opt-out for those who need more time to migrate. It also sends a clear
> signal that unload should not be used in new development.
>
> Sidenote: the spec was changed to say that unload should only run if the
> page cannot enter BFCache, which reflects Safari’s behavior, However
> neither Chrome nor Mozilla have implemented this behavior. In Chrome's
> case, we believe that this would suddenly break various sites and would
> make it hard for developers to know if/when unload may run.
>
>
> Initial public proposal
>
> None
>
> TAG review
>
> https://github.com/w3ctag/design-reviews/issues/738
>
> TAG review status
>
> Pending
>
> Risks
>
> Interoperability and Compatibility
>
> If no other browsers implement this, there is a risk that devs continue to
> use unload widely and pages malfunction on chrome. However given that
> alternatives to unload exist it seems entirely possible for sites that are
> actively maintained to move off unload.
>
> Gecko: (
> https://github.com/mozilla/standards-positions/issues/691#issuecomment-1484997320)
> It's possible that pages are depending on `unload` handlers in subframes
> for functionality even without any main frame navigation. We should try to
> understand how common this is before breaking it. It should be possible to
> measure how often subframe unloads fire when the mainframe is not
> navigating. This will give us an upper bound on the size of the problem, -
> Chrome: we have landed code to measure the occurrence of unload in
> different scenarios. We will report back the findings.
>
> WebKit: https://github.com/WebKit/standards-positions/issues/127
>
>
> From a quick skim, it sounds like WebKit is already happy with their
> tradeoff of not firing unload and doesn't see a need for an API that
> reduces unload further, is that about right? WebKit has mostly shipped
> heuristics here without trying to spec them first, right? In general I'm
> not too concerned
>
>
> Yes, there's no great upside for them. I believe the situation as specced
> where unload is unpredictable and likely biased is bad for devs and is
> probably skewing data collected via WebKit (and Chrome/Mozilla mobile) but
> nobody is complaining.
>
> I believe there was support expressed offline for the prospect of killing
> off unload.
>
>
>
> Web developers: Positive (
> https://groups.google.com/a/chromium.org/g/bfcache-dev/c/zTIMx7u4uxo/m/-M4IS6LDBgAJ)
> The web communities we reached out had positive reactions to our proposal
> and we have not heard about any concrete blockers.
>
> Other signals:
>
> WebView application risks
>
> Does this intent deprecate or change behavior of existing APIs, such that
> it has potentially high risk for Android WebView-based applications?
>
> On WebView, we will introduce the Permissions-Policy but not move the
> default to "deny". BFCache does not work on WebView, so the benefit is
> lower. Meanwhile the risk seems higher as we have far less visibility into
> the HTML being run in WebViews. A roll-out to WebView should be done
> independently and in consultation with the WebView team.
>
>
> Sounds like the right strategy to me, thanks!
>
>
> Debuggability
>
> None
>
> Is this feature fully tested by web-platform-tests
> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>
> ?
>
> Yes
>
> Flag name
>
> None
>
>
> Please put the new policy behind a RuntimeEnabledFeature
> <https://chromium.googlesource.com/chromium/src/+/main/third_party/blink/renderer/platform/RuntimeEnabledFeatures.md>.
> It's effectively a new API so is required
> <https://chromium.googlesource.com/chromium/src/+/main/docs/flag_guarding_guidelines.md#When-is-a-flag-required>
> to have a finch killswitch. It sounds to me like it should be unlikely that
> simply adding the new policy could break things, but maybe some scenario is
> possible where we decide breakage in 3p iframes is bad enough to warrant an
> emergency fix?
>
>
> Yes, there will be a flag, maybe more than one. The implementation details
> of rolling this out gradually have not been worked out. See below.
>
>
>
> Requires code in //chrome?
>
> False
>
> Estimated milestones
>
> M115 for availability of Permissions-Policy
>
> M115 is the earliest we would start to disable unload, however
>
>
> Is this a typo? Or are you considering disabling the event in the same
> release we first make the permissions policy available?
>
>
> The plan is to make the PP available with a default of enabled and then
> gradually flip the default to disabled. The details are here
> <https://github.com/fergald/docs/blob/master/explainers/permissions-policy-deprecate-unload.md#logistics-of-deprecation>.
> It's not particularly nice. We have the option to just stop 100% but that
> seems fairly disruptive,
>
> F
>
>
>
> Link to entry on the Chrome Platform Status
>
> https://chromestatus.com/feature/5579556305502208
>
> --
> 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/CAAozHLm7CR6EeL2KmBFyFpYT%3DNPXmTg4roLKV%3D7dRcCE%2BOoGwg%40mail.gmail.com
> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAAozHLm7CR6EeL2KmBFyFpYT%3DNPXmTg4roLKV%3D7dRcCE%2BOoGwg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
>
>
> --
> Kenji BAHEUX (my how-to <http://balance/kenjibaheux>)
> Product Manager - Chrome
> Google Japan
>
> --
> 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/d955dd04-7aac-462a-bd85-d69df8d7d86bn%40chromium.org
> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/d955dd04-7aac-462a-bd85-d69df8d7d86bn%40chromium.org?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 on the web visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAFUtAY970CmvxjY2bF9pvb%3Dwg3E08Lx6uHNxghDAR1gRMFDFXg%40mail.gmail.com.

Reply via email to