Contact emails m...@chromium.org
Explainer https://github.com/webscreens/window-placement Specification https://webscreens.github.io/window-placement/ Design docs https://web.dev/multi-screen-window-placement/ Summary Adds new screen information APIs and makes incremental improvements to existing window placement APIs, allowing web applications to offer compelling multi-screen experiences. The existing singular window.screen offers a limited view of available screen space, and window placement functions generally clamp bounds to the current screen. This feature unlocks modern multi-screen workspaces for web applications. Blink component UI>Browser>WebAppInstalls>Desktop <https://bugs.chromium.org/p/chromium/issues/list?q=component:UI%3EBrowser%3EWebAppInstalls%3EDesktop> Search tags window placement <https://chromestatus.com/features#tags:window%20placement>, screen enumeration <https://chromestatus.com/features#tags:screen%20enumeration>, window <https://chromestatus.com/features#tags:window>, open <https://chromestatus.com/features#tags:open>, moveTo <https://chromestatus.com/features#tags:moveTo>, moveBy <https://chromestatus.com/features#tags:moveBy>, requestFullscreen <https://chromestatus.com/features#tags:requestFullscreen>, screen <https://chromestatus.com/features#tags:screen>, display <https://chromestatus.com/features#tags:display>, monitor <https://chromestatus.com/features#tags:monitor>, multi-screen <https://chromestatus.com/features#tags:multi-screen>, multi-display <https://chromestatus.com/features#tags:multi-display>, multi-monitor <https://chromestatus.com/features#tags:multi-monitor>, cross-screen <https://chromestatus.com/features#tags:cross-screen>, cross-display <https://chromestatus.com/features#tags:cross-display>, cross-monitor <https://chromestatus.com/features#tags:cross-monitor> TAG review https://github.com/w3ctag/design-reviews/issues/413 https://github.com/w3ctag/design-reviews/issues/522 https://github.com/w3ctag/design-reviews/issues/602 TAG review status Issues addressed Risks Interoperability and Compatibility Feature detection of new screen information APIs and Permission API integration allows sites to handle different levels of feature support. The Screen IDL interface duplicates EventTarget members for RuntimeEnabled experimentation without changing the stable JS API; this will be rectified after launch approval. Existing window placement APIs generally use compatible multi-screen coordinates, but implementations often restrict bounds to the current screen. We expect low levels of risk in supporting permitted cross-screen placement requests, and falling back on legacy same-screen behavior otherwise. A detailed assessment of API design risks, including Wayland compatibility, multiple virtual workspaces/desktops, and more, can be found at: < https://docs.google.com/document/d/19u5fRKs8iWlpecKBSlfQ6JKrcP4emwK0M_6TNhfz0gs > API surface changes made during the second origin trial are limited to some minor renames, the removal of two unimplemented screen properties, and support for permission policy. An exploratory permission-gated capability to swap the screen of fullscreen windows without a user gesture was reverted to enhance usable security. See < https://github.com/webscreens/window-placement/blob/main/CHANGES.md> The spec is being incubated in the W3C Second Screen CG < https://webscreens.github.io/cg-charter> and is pending adoption by the W3C Second Screen WG <https://w3c.github.io/secondscreen-charter> Gecko: No signal (https://github.com/mozilla/standards-positions/issues/542) We requested a position and are waiting for feedback. Firefox supports cross-screen window.open/move*() requests. This work partly pursues compatibility with that behavior. WebKit: No signal ( https://lists.webkit.org/pipermail/webkit-dev/2021-June/031903.html) We requested a position and are waiting for feedback. Web developers: Positive ( https://github.com/webscreens/window-placement/issues/67) - Discourse: < https://discourse.wicg.io/t/proposal-supporting-window-placement-on-multi-screen-devices > - Twitter: < https://twitter.com/search?q=url%3Amulti-screen-window-placement&src=typed_query&f=live > - Announcement: <https://twitter.com/ChromiumDev/status/1305406689466814464> - HackerNews (was front page): < https://news.ycombinator.com/item?id=24489234> - Citrix: < https://github.com/webscreens/window-placement/issues/67#issuecomment-945859384 > - This work is also of interest to Google Slides Ergonomics The minor improvements to window.open/move*() API behaviors have no effect on their poor ergonomics (synchronous, features string shape, etc.). This API does not preclude future work from improving the ergonomics of those existing APIs. Extending the requestFullscreen dictionary with an optional screen should pose no ergonomic risks. The new multi-screen information APIs incorporated OT feedback to improve naming, object comparison, and event handling ergonomics. Activation This feature incrementally extends existing screen information and window placement interfaces with basic multi-screen support. This immediately enables new compelling experiences through progressive enhancement of existing applications. Security Security and Privacy risks are explored in the specification repository’s W3C Questionnaire < https://github.com/webscreens/window-placement/blob/main/security_and_privacy.md>, and in the respective sections of the draft specification < https://webscreens.github.io/window-placement/#security> and < https://webscreens.github.io/window-placement/#privacy>. That analysis and review uncovered minimal risks. Privacy concerns center around fingerprinting screen information, while security risks center around deceptive, surreptitious, or annoying window placements, such as clickjacking. Gating new functionality with a permission helps mitigate these concerns, and may aid or inspire similar protections for legacy API behavior with similar abuse vectors. The overall added risks are low and further mitigated by limiting to secure contexts, supporting a permissions policy, being selective about display information to expose, and continuing to prevent off-screen window placement. Origin trial feedback - First origin trial: Developer feedback <https://docs.google.com/spreadsheets/d/1S66d7izby2_QNu1FqLY_tEpQA9xkAsruvam7nbsq2TI/edit?resourcekey=0-kfJ0PdgNU5wgmjGWJc8AGg#gid=727492058> (Google-internal doc) was generally straightforward: the API is useful, and it would be difficult or impossible to accomplish anything similar without it. The most common request was that it be made broadly available as soon as possible. There were two feature requests; and while neither is provided with this initial launch, the API shape does not preclude adding support: - to hide the location bar on popup windows - for getScreens() to return information about mirrored displays - Feedback on Github: After the OT, @jakearchibald, @kenchris, and others gave feedback on the API shape < https://github.com/webscreens/window-placement/issues/30>. Changes were made accordingly < https://github.com/webscreens/window-placement/blob/main/CHANGES.md>. - Second origin trial: Once again, developer feedback <https://docs.google.com/spreadsheets/d/1S66d7izby2_QNu1FqLY_tEpQA9xkAsruvam7nbsq2TI/edit?resourcekey=0-kfJ0PdgNU5wgmjGWJc8AGg#gid=1625618615> (Google-internal doc) was broadly positive. One feature was requested three times: the ability to open a new window and immediately make it fullscreen. This feature is on our roadmap. Demand for this API is high, and we want to give developers the chance to start using it as soon as possible. Thus it makes sense to launch an MVP, then add additional features like this one. Debuggability New and existing screen and window APIs are readily debuggable using the developer tools console. Is this feature fully tested by web-platform-tests <https://chromium.googlesource.com/chromium/src/+/master/docs/testing/web_platform_tests.md> ? WPTs cover the presence of new JS APIs and some basic API functionality: < https://wpt.fyi/results/screen-details>, <https://wpt.live/window-placement>, and < https://wpt.fyi/results/fullscreen/api/element-request-fullscreen-options.tentative.html>. We aim to extend test coverage and support for multi-screen mocking < https://crbug.com/1252062> and cross-screen window placement tests < https://crbug.com/1022988> soon. Flag name chrome://flags#enable-experimental-web-platform-features enables the WindowPlacement RuntimeEnabled feature flag ( --enable-blink-features=WindowPlacement) Requires code in //chrome? Not really - Some relevant test, permission, and pre-existing windowing code lives in //chrome. Tracking bug https://bugs.chromium.org/p/chromium/issues/detail?id=897300 Launch bug https://bugs.chromium.org/p/chromium/issues/detail?id=1255960 Measurement https://chromestatus.com/metrics/feature/popularity#V8Window_GetScreenDetails_Method Sample links https://michaelwasserman.github.io/window-placement-demo/ https://web.dev/multi-screen-window-placement/#demo Estimated milestones OriginTrial desktop last 96 OriginTrial desktop first 93 DevTrial on desktop 93 Link to entry on the Chrome Platform Status https://chromestatus.com/feature/5252960583942144 Links to previous Intent discussions Intent to Prototype: < https://groups.google.com/a/chromium.org/g/blink-dev/c/X6rEbWvU7cI> Intent to Experiment: (OT1) < https://groups.google.com/a/chromium.org/g/blink-dev/c/C6xw8i1ZIdE> Intent to Experiment: (OT2) < https://groups.google.com/a/chromium.org/g/blink-dev/c/jznxQK1U8ZQ> 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 on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAEsbcpUThcD2OSgoebUZuXSevjwBGV0r8Kw3SDrCXGjtB6kx-w%40mail.gmail.com.