Hi Michael,
I think you and team have done a great job incorporating TAG and API
ergonomics feedback (hi Jake!) as well as privacy concerns. Nice work.
LGTM1.
On 2/14/22 8:28 PM, Michael Wasserman wrote:
Contact emails
m...@chromium.org <mailto:m...@chromium.org>
Explainer
https://github.com/webscreens/window-placement
<https://github.com/webscreens/window-placement>
Specification
https://webscreens.github.io/window-placement/
<https://webscreens.github.io/window-placement/>
Design docs
https://web.dev/multi-screen-window-placement/
<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.screenoffers 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/413>https://github.com/w3ctag/design-reviews/issues/522
<https://github.com/w3ctag/design-reviews/issues/522>https://github.com/w3ctag/design-reviews/issues/602
<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
<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
<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
<https://webscreens.github.io/cg-charter/>> and is pending adoption by
the W3C Second Screen WG <https://w3c.github.io/secondscreen-charter
<https://w3c.github.io/secondscreen-charter/>>
Gecko: No signal
(https://github.com/mozilla/standards-positions/issues/542
<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
<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
<https://github.com/webscreens/window-placement/issues/67>)
- Discourse:
<https://discourse.wicg.io/t/proposal-supporting-window-placement-on-multi-screen-devices
<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
<https://twitter.com/search?q=url%3Amulti-screen-window-placement&src=typed_query&f=live>>
- Announcement:
<https://twitter.com/ChromiumDev/status/1305406689466814464
<https://twitter.com/ChromiumDev/status/1305406689466814464>>
- HackerNews (was front page):
<https://news.ycombinator.com/item?id=24489234
<https://news.ycombinator.com/item?id=24489234>>
(I was intrigued to see Positive feedback coming from HackerNews, but we
should probably consider that to be Negative.)
- Citrix:
<https://github.com/webscreens/window-placement/issues/67#issuecomment-945859384
<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
requestFullscreendictionary 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
<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
<https://webscreens.github.io/window-placement/#security>> and
<https://webscreens.github.io/window-placement/#privacy
<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:
o
to hide the location bar on popup windows
o
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
<https://github.com/webscreens/window-placement/issues/30>>.
Changes were made accordingly
<https://github.com/webscreens/window-placement/blob/main/CHANGES.md
<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.fyi/results/screen-details>>,
<https://wpt.live/window-placement
<https://wpt.live/window-placement>>, and
<https://wpt.fyi/results/fullscreen/api/element-request-fullscreen-options.tentative.html
<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 <https://crbug.com/1252062>> and
cross-screen window placement tests <https://crbug.com/1022988
<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
<https://bugs.chromium.org/p/chromium/issues/detail?id=897300>
Launch bug
https://bugs.chromium.org/p/chromium/issues/detail?id=1255960
<https://bugs.chromium.org/p/chromium/issues/detail?id=1255960>
Measurement
https://chromestatus.com/metrics/feature/popularity#V8Window_GetScreenDetails_Method
<https://chromestatus.com/metrics/feature/popularity#V8Window_GetScreenDetails_Method>
Sample links
https://michaelwasserman.github.io/window-placement-demo/
<https://michaelwasserman.github.io/window-placement-demo/>
https://web.dev/multi-screen-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
<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
<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
<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
<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
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAEsbcpUThcD2OSgoebUZuXSevjwBGV0r8Kw3SDrCXGjtB6kx-w%40mail.gmail.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 blink-dev+unsubscr...@chromium.org.
To view this discussion on the web visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/cebe36db-8fdb-e2a3-6b99-defd5d1a7de8%40chromium.org.