Thank you, Alex, for the LGTM!
Thomas, thanks for having a look. Those points you raise are precisely
what this permissions policy aims to address. I tried to capture this
in more detail in the explainer
webappsec-permissions-policy/policies/focus-without-user-activation.md
at ffiori/webappsec-permissions-policy
<https://github.com/ffiori/webappsec-permissions-policy/blob/focus-without-user-activation-explainer/policies/focus-without-user-activation.md>.
Let me know if you have any questions.
Fernando
On Monday, October 19, 2026 at 4:19:14 PM UTC-7 [email protected]
wrote:
not clear how this interfaces with w3c, but here are a few threats
I found partly from AI.
* *Keystroke Redirection & Phishing (Focus Theft):*Embedded
third-party content can silently pull focus away from the main
page input fields. If a user is typing sensitive information
(e.g., credentials, credit card numbers, or search queries),
their keystrokes can be redirected into an embedded iframe or
form without visual or immediate notice.
1 <https://chromestatus.com/feature/5179186249465856>
2
<https://mail.google.com/mail/u/0/#all/%23thread-f:1879048351712254581%7Cmsg-f:1879503045256153924>
* *Accessibility Disruption for Assistive Technologies:*Screen
readers and keyboard-only navigation depend heavily on stable
focus. Unprompted focus changes forcibly relocate the reading
or keyboard focus, confusing visually or mobility-impaired
users and preventing them from navigating predictably.
3
<https://www.webaccessibility.com/resource-library/best-practice/?bestPractice=801>
* *Keyboard Navigation Hijacking:*Users attempting to navigate
forms or pages via keyboard shortcuts or |Tab|keys can be
trapped or thrown off course if a script continually pulls
focus back to a specific element.
3
<https://www.webaccessibility.com/resource-library/best-practice/?bestPractice=801>
* *UI Flickering & Performance Degradation:*When multiple
scripts or embedded frames aggressively run scripts (e.g.,
using |element.focus()|, |window.focus()|, or |blur|event
polling) to reclaim or maintain focus, it results in visible
screen flickering and erratic user interface behavior.
1 <https://chromestatus.com/feature/5179186249465856>
2
<https://mail.google.com/mail/u/0/#all/%23thread-f:1879048351712254581%7Cmsg-f:1879503045256153924>
* *Unwanted Modals & Dialog Interruptions:*Scripts can force
focus into programmatic popups or dialogs
(|dialog.showModal()|, popover focusing, or |autofocus|),
disrupting the workflow without any preceding user action or
gesture.
1 <https://chromestatus.com/feature/5179186249465856>
Also note that focus may become another threat with folding
screens which now have an open possible with focus that could be
major confusion.
Peace ..tom jones
On Mon, Oct 19, 2026 at 11:16 AM Alex Russell
<[email protected]> wrote:
LGTM1, pending test updates and such.
On Thursday, October 15, 2026 at 2:56:08 PM UTC-7
[email protected] wrote:
Thank you Philip for taking a look. Yes this test matches
the spec, but it fails because blink blocks autofocus in
cross-origin frames even when the policy is allowed. I'm
working on updating the implementation to make this work,
I will let you know when that's done and the test passes
again.
Thanks,
Fernando
On Thursday, October 15, 2026 at 2:04:15 AM UTC-7 Philip
Jägenstedt wrote:
https://wpt.fyi/results/permissions-policy/experimental-features/focus-without-user-activation-enabled.sub.html?label=master&label=experimental&aligned&q=focus-without
<https://wpt.fyi/results/permissions-policy/experimental-features/focus-without-user-activation-enabled.sub.html?label=master&label=experimental&aligned&q=focus-without>
is failing, does this test match the spec and if so is
the plan to make it pass before shipping?
On Wed, Oct 14, 2026 at 7:49 PM 'Fernando Fiori' via
blink-dev <[email protected]> wrote:
*Contact emails*
[email protected], [email protected],
[email protected], [email protected],
[email protected]
*Explainer*
https://github.com/ffiori/webappsec-permissions-policy/blob/focus-without-user-activation-explainer/policies/focus-without-user-activation.md
*Specification*
https://html.spec.whatwg.org/#focus-without-user-activation-feature
*Summary*
Gives embedders control over programmatic focus
from embedded content via the
`focus-without-user-activation` permissions
policy. When the policy is denied for the
initiating frame, programmatic focus changes (from
`element.focus()`, `autofocus`, `window.focus()`,
and the focusing steps for dialogs and popovers)
are blocked unless that frame has transient user
activation or focus is already within its subtree.
This does not prevent dialogs or popovers from
opening. User-initiated focus such as clicking or
tabbing is never affected. The policy can be set
via a `Permissions-Policy` HTTP response header or
the iframe `allow` attribute. Focus delegation is
supported: a parent frame that has focus can
programmatically pass focus to a child iframe,
even if the child has the policy denied, and once
a frame has focus it can move focus within its own
subtree.
*Blink component*
Blink>FeaturePolicy
<https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3EFeaturePolicy%22>
*Web Feature ID*
Missing feature
*Motivation*
Embedded third-party content such as ads, widgets,
and iframes can programmatically steal input focus
from the top-level page without any user
interaction, silently redirecting keystrokes and
creating security and accessibility problems. This
was originally reported by engineers working on
advertising security for large publishers. Today
developers have no reliable way to prevent it: the
sandbox attribute disables JavaScript entirely,
breaking most embedded content, and JavaScript
focus-reclaiming hacks using blur listeners or
polling are unreliable, cause visible focus
flickering, and do not scale across multiple
iframes. This policy provides fine-grained,
declarative control over programmatic focus from
embedded content.
*Initial public proposal*
https://github.com/w3c/webappsec-permissions-policy/issues/273
*Search tags*
focus-without-user-activation
<https://chromestatus.com/features#tags:focus-without-user-activation>,
focus
<https://chromestatus.com/features#tags:focus>,
permissions policy
<https://chromestatus.com/features#tags:permissions%20policy>
*TAG review*
https://github.com/w3ctag/design-reviews/issues/1066
*TAG review status*
Issues addressed
*Origin Trial Name*
focus-without-user-activation Permissions Policy
*Goals for experimentation*
Validate the current API design and get feedback
on whether it satisfies developer needs in real
life use cases.
*Chromium Trial Name*
BlockingFocusWithoutUserActivation
*Link to origin trial feedback summary*
https://groups.google.com/a/chromium.org/g/blink-dev/c/GLmp1IrJ4Ig/m/WSWz-Iv5AgAJ
*Origin Trial documentation link*
https://github.com/ffiori/webappsec-permissions-policy/blob/focus-without-user-activation-explainer/policies/focus-without-user-activation.md
*WebFeature UseCounter name*
kFocusWithoutUserActivationPolicySet
*Risks*
*Interoperability and Compatibility*
/Gecko/: No
signal
(https://github.com/mozilla/standards-positions/issues/1080)
/WebKit/:
Support
(https://github.com/WebKit/standards-positions/issues/406)
/Web developers/:
Positive
(https://github.com/w3c/webappsec-permissions-policy/issues/273) Several
comments on that thread expressing web developer
support.
/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?/
No impact on WebView applications. The policy
shipping with a default of allow * would avoid
breaking any webapp that uses focus APIs and make
it an opt-in feature for web developers. Also the
implementation has a base::Feature
(BlockingFocusWithoutUserActivation) killswitch
that can be flipped off in case of compat issues.
*Debuggability*
There are console messages when focus movement is
blocked by this permissions policy to help
developers debug their implementations related to
this feature.
*Will this feature be supported on all six Blink
platforms (Windows, Mac, Linux, ChromeOS, Android,
and Android WebView)?*
Yes
*Is this feature fully tested by
web-platform-tests
<https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>?*
Yes
https://wpt.fyi/results/permissions-policy/experimental-features?label=master&label=experimental&aligned&q=focus-without
<https://wpt.fyi/results/permissions-policy/experimental-features?label=master&label=experimental&aligned&q=focus-without>
*Flag name on about://flags*
blocking-focus-without-user-activation
*Finch feature name*
BlockingFocusWithoutUserActivation
*Rollout plan*
Will ship enabled for all users
*Requires code in //chrome?*
False
*Tracking bug*
https://crbug.com/40095111
*Measurement*
Added UseCounters FocusWithoutUserActivation*:
FocusWithoutUserActivationAllowedByPolicy:
https://chromestatus.com/metrics/feature/timeline/popularity/5873
FocusWithoutUserActivationAllowedByDescendant:
https://chromestatus.com/metrics/feature/timeline/popularity/5874
FocusWithoutUserActivationBlocked:
https://chromestatus.com/metrics/feature/timeline/popularity/5875
FocusWithoutUserActivationPolicySet:
https://chromestatus.com/metrics/feature/timeline/popularity/5876
They were added in this CL:
https://chromium-review.googlesource.com/c/chromium/src/+/7770268
*Adoption expectation*
Microsoft Teams has already adopted the
`focus-without-user-activation` permissions policy
and rolled it out in public preview. They're
expected to use the feature by default as soon as
it ships.
*Adoption plan*
Microsoft Teams has rolled out the policy in
public preview and plans to enable it by default
once it ships.
*Estimated milestones*
Shipping on desktop
158
Origin trial desktop first
149
Origin trial desktop last
152
Shipping on Android
158
Origin trial Android first
149
Origin trial Android last
152
Shipping on WebView
158
Origin trial WebView first
149
Origin trial WebView last
152
*Anticipated spec changes*
/Open questions about a feature may be a source of
future web compat or interop issues. Please list
open issues (e.g. links to known github issues in
the project for the feature specification) whose
resolution may introduce web compat/interop risk
(e.g., changing to naming or structure of the API
in a non-backward-compatible way)./
https://github.com/whatwg/html/pull/11519
*Link to entry on the Chrome Platform Status*
https://chromestatus.com/feature/5179186249465856?gate=4630319955705856
*Links to previous Intent discussions*
Intent to Experiment:
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/69d6e35a.050a0220.1c79a0.0dc6.GAE%40google.com
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
[email protected].
To view this discussion visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CH3PR00MB2480A0093FF93B090CE7DFDADC9D2%40CH3PR00MB2480.namprd00.prod.outlook.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CH3PR00MB2480A0093FF93B090CE7DFDADC9D2%40CH3PR00MB2480.namprd00.prod.outlook.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 [email protected].
To view this discussion visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/25748a7d-275a-450d-9a83-d3841faffa44n%40chromium.org
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/25748a7d-275a-450d-9a83-d3841faffa44n%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 [email protected].
To view this discussion visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/b5ba5c44-fecb-4e8a-b579-4e607e9daa46n%40chromium.org
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/b5ba5c44-fecb-4e8a-b579-4e607e9daa46n%40chromium.org?utm_medium=email&utm_source=footer>.