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.

Reply via email to