Add a navigator interface for user activation state.#8254
Add a navigator interface for user activation state.#8254domenic merged 6 commits intowhatwg:mainfrom
navigator interface for user activation state.#8254Conversation
domenic
left a comment
There was a problem hiding this comment.
Thanks for this! I pushed a few minor fixes for style things; please pull them before doing any work.
Unfortunately it turns out the normative prose for the getters here is not great and needs some work. The biggest problem is that this class is exposed to Worker and AudioWorklet, but I have no idea how it could work there.
If we restrict this only to Window (maybe that is OK, since it's only accessible in this PR via window.navigator?) then we can improve the getter definitions as follows. You need to define that each Navigator object (or, perhaps simpler, each Window object) has a corresponding UserActivation object; then, the userActivation getter steps can be defined to return that. For an example, see https://html.spec.whatwg.org/#associated-navigator .
Then, we need to define the hasBeenActive and isActive getter steps in a way that connects up to the actual normative prose for sticky and transient activation. I believe this would be done using something like:
The
hasBeenActivegetter steps are to return true if this's relevant global object has sticky activation; otherwise false.
with the understanding that this only ever works for the Window context, and would need to be redone in a Worker or AudioWorklet context.
That's a good point: because Workers and Worklets are not exposed to users, there is no way these could be activated. Removed them from the
Please check my latest patch. Alternatively, we can move the first IDL definition here to Sec 6.4.1 where we defined "user-activation-states", but it seems more logical to me that the exposed pieces are separated from the (unexposed) data model in the browser. Thoughts?
Done. |
|
Please take a look again. |
domenic
left a comment
There was a problem hiding this comment.
LGTM, thanks! Can you file bugs on Gecko and WebKit and update the original post with them?
The query API has been added recently to the HTML spec: whatwg/html#8254 Change-Id: I66e96b7a49a548f02acdaf2c4efb717fc27dcdc3
Done. |
The query API has been added recently to the HTML spec: whatwg/html#8254 Change-Id: I66e96b7a49a548f02acdaf2c4efb717fc27dcdc3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3900591 Reviewed-by: Robert Flack <flackr@chromium.org> Commit-Queue: Mustaq Ahmed <mustaq@chromium.org> Cr-Commit-Position: refs/heads/main@{#1048227}
The query API has been added recently to the HTML spec: whatwg/html#8254 Change-Id: I66e96b7a49a548f02acdaf2c4efb717fc27dcdc3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3900591 Reviewed-by: Robert Flack <flackr@chromium.org> Commit-Queue: Mustaq Ahmed <mustaq@chromium.org> Cr-Commit-Position: refs/heads/main@{#1048227}
The query API has been added recently to the HTML spec: whatwg/html#8254 Change-Id: I66e96b7a49a548f02acdaf2c4efb717fc27dcdc3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3900591 Reviewed-by: Robert Flack <flackr@chromium.org> Commit-Queue: Mustaq Ahmed <mustaq@chromium.org> Cr-Commit-Position: refs/heads/main@{#1048227}
…as non-tentative., a=testonly Automatic update from web-platform-tests Mark user-activation-query related WPTs as non-tentative. The query API has been added recently to the HTML spec: whatwg/html#8254 Change-Id: I66e96b7a49a548f02acdaf2c4efb717fc27dcdc3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3900591 Reviewed-by: Robert Flack <flackr@chromium.org> Commit-Queue: Mustaq Ahmed <mustaq@chromium.org> Cr-Commit-Position: refs/heads/main@{#1048227} -- wpt-commits: 87986b1b4f79e991b7867278e5a1bf23423a652a wpt-pr: 35920
…as non-tentative., a=testonly Automatic update from web-platform-tests Mark user-activation-query related WPTs as non-tentative. The query API has been added recently to the HTML spec: whatwg/html#8254 Change-Id: I66e96b7a49a548f02acdaf2c4efb717fc27dcdc3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3900591 Reviewed-by: Robert Flack <flackr@chromium.org> Commit-Queue: Mustaq Ahmed <mustaq@chromium.org> Cr-Commit-Position: refs/heads/main@{#1048227} -- wpt-commits: 87986b1b4f79e991b7867278e5a1bf23423a652a wpt-pr: 35920
https://bugs.webkit.org/show_bug.cgi?id=245240 Reviewed by Youenn Fablet and Geoffrey Garen. Implementation of the UserActivation interface: https://html.spec.whatwg.org/#the-useractivation-interface Which was added to HTML via: whatwg/html#8254 The API provides web content a view into DOMWindow::hasTransientActivation() and DOMWindow::hasStickyActivation(). This change excludes anything related "MessageEvent", which has not yet been agreed to by the WHATWG. The tests have been modified to work on WebKit infrastructure without changing the intent of the original tests. In particular: * `domains[www1]` and so on, so those are changed to `hosts[alt][]` * Domains are differentiated by using different ports. * Some of the tests are missing `await`. * Some tests would run before the body was ready. A PR has been sent to WPT to address these issues: web-platform-tests/wpt#36881 The tests are update to 1b73dcd. Some test coming form WTP are non-standard. In particular, tests that rely on `window.open()` and `.requestFullscreen()` are not spec'ed to consume user activation. This is a known issue and will be addressed as a followup in the specs and potentially as changes in WebKit. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/activation-trigger-keyboard-enter.html: * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/activation-trigger-keyboard-escape.html: * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/activation-trigger-mouse-left.html: * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/activation-trigger-mouse-right.html: * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/activation-trigger-pointerevent.html: * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/chained-setTimeout-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/chained-setTimeout.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/html/user-activation/chained-setTimeout.tentative.html. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/chained-setTimeout.tentative-expected.txt: Removed. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/consumption-crossorigin.sub-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/consumption-crossorigin.sub.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/html/user-activation/consumption-crossorigin.sub.tentative.html. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/consumption-crossorigin.sub.tentative-expected.txt: Removed. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/consumption-sameorigin-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/consumption-sameorigin.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/html/user-activation/consumption-sameorigin.tentative.html. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/consumption-sameorigin.tentative-expected.txt: Removed. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/detached-iframe-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/detached-iframe.html: Added. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/message-event-activation-api-iframe-cross-origin.sub.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/message-event-activation-api-iframe-cross-origin.sub.tentative.html: * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/message-event-init.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/message-event-init.tentative.html: * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/navigation-state-reset-crossorigin.sub-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/navigation-state-reset-crossorigin.sub.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/html/user-activation/navigation-state-reset-crossorigin.sub.tentative.html. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/navigation-state-reset-crossorigin.sub.tentative-expected.txt: Removed. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/navigation-state-reset-sameorigin-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/navigation-state-reset-sameorigin.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/html/user-activation/navigation-state-reset-sameorigin.tentative.html. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/navigation-state-reset-sameorigin.tentative-expected.txt: Removed. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/no-activation-thru-escape-key-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/no-activation-thru-escape-key.html: * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/propagation-crossorigin.sub-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/propagation-crossorigin.sub.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/html/user-activation/propagation-crossorigin.sub.tentative.html. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/propagation-crossorigin.sub.tentative-expected.txt: Removed. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/propagation-sameorigin-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/propagation-sameorigin.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/html/user-activation/propagation-sameorigin.tentative.html. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/propagation-sameorigin.tentative-expected.txt: Removed. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/user-activation-interface-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/html/user-activation/user-activation-interface.html: Added. * LayoutTests/platform/gtk/fast/dom/navigator-detached-no-crash-expected.txt: * LayoutTests/platform/ios-wk2/TestExpectations: * LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/user-activation/chained-setTimeout.tentative-expected.txt: Removed. * LayoutTests/platform/mac-wk1/fast/dom/navigator-detached-no-crash-expected.txt: * LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/html/user-activation/no-activation-thru-escape-key-expected.txt: * LayoutTests/platform/mac-wk2/fast/dom/navigator-detached-no-crash-expected.txt: * Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml: * Source/WebCore/CMakeLists.txt: * Source/WebCore/DerivedSources-input.xcfilelist: * Source/WebCore/DerivedSources-output.xcfilelist: * Source/WebCore/DerivedSources.make: * Source/WebCore/Sources.txt: * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/bindings/js/WebCoreBuiltinNames.h: * Source/WebCore/html/NavigatorUserActivation.cpp: Added. (WebCore::NavigatorUserActivation::NavigatorUserActivation): (WebCore::NavigatorUserActivation::userActivation): (WebCore::NavigatorUserActivation::from): (WebCore::NavigatorUserActivation::supplementName): * Source/WebCore/html/NavigatorUserActivation.h: Added. * Source/WebCore/html/URLSearchParams.h: * Source/WebCore/html/UserActivation.cpp: Added. (WebCore::UserActivation::create): (WebCore::UserActivation::UserActivation): (WebCore::UserActivation::navigator): (WebCore::UserActivation::window const): (WebCore::UserActivation::hasBeenActive const): (WebCore::UserActivation::isActive const): * Source/WebCore/html/UserActivation.h: Added. * Source/WebCore/html/UserActivation.idl: Added. * Source/WebCore/page/DOMWindow.cpp: (WebCore::DOMWindow::hasStickyActivation const): * Source/WebCore/page/DOMWindow.h: * Source/WebCore/page/Navigator+UserActivation.idl: Added. Canonical link: https://commits.webkit.org/256572@main
…as non-tentative., a=testonly Automatic update from web-platform-tests Mark user-activation-query related WPTs as non-tentative. The query API has been added recently to the HTML spec: whatwg/html#8254 Change-Id: I66e96b7a49a548f02acdaf2c4efb717fc27dcdc3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3900591 Reviewed-by: Robert Flack <flackr@chromium.org> Commit-Queue: Mustaq Ahmed <mustaq@chromium.org> Cr-Commit-Position: refs/heads/main@{#1048227} -- wpt-commits: 87986b1b4f79e991b7867278e5a1bf23423a652a wpt-pr: 35920
Fixes: #4008
(See WHATWG Working Mode: Changes for more details.)
/index.html ( diff )
/interaction.html ( diff )