@@ -2378,67 +2378,14 @@ <h3>
2378
2378
</ section >
2379
2379
< section >
2380
2380
< h2 >
2381
- Display modes
2381
+ Choosing a display mode
2382
2382
</ h2 >
2383
2383
< p >
2384
- A < dfn > display mode</ dfn > represents how the web application is being
2384
+ A [=display mode=], as defined in [[MEDIAQUERIES-5]],
2385
+ represents how the web application is being
2385
2386
presented within the context of an OS (e.g., in fullscreen, etc.).
2386
2387
Display modes correspond to user interface (UI) metaphors and
2387
- functionality in use on a given platform. The UI conventions of the
2388
- display modes are purely advisory and implementers are free to
2389
- interpret them how they best see fit.
2390
- </ p >
2391
- < p >
2392
- This specification defines the following [=display modes=]:
2393
- </ p >
2394
- < dl >
2395
- < dt >
2396
- < dfn data-dfn-for ="display mode "> fullscreen</ dfn >
2397
- </ dt >
2398
- < dd >
2399
- Opens the web application with browser UI elements hidden and takes
2400
- up the entirety of the available display area.
2401
- </ dd >
2402
- < dt >
2403
- < dfn data-dfn-for ="display mode "> standalone</ dfn >
2404
- </ dt >
2405
- < dd >
2406
- Opens the web application to look and feel like a standalone native
2407
- application. This can include the application having a different
2408
- window, its own icon in the application launcher, etc. In this mode,
2409
- the user agent will exclude standard browser UI elements such as an
2410
- URL bar, but can include other system UI elements such as a status
2411
- bar and/or system back button.
2412
- </ dd >
2413
- < dt >
2414
- < dfn data-dfn-for ="display mode "> minimal-ui</ dfn >
2415
- </ dt >
2416
- < dd >
2417
- This mode is similar to [=display mode/standalone=], but provides the
2418
- end-user with some means to access a minimal set of UI elements for
2419
- controlling navigation (i.e., back, forward, reload, and perhaps some
2420
- way of viewing the document's address). A user agent can include
2421
- other platform specific UI elements, such as "share" and "print"
2422
- buttons or whatever is customary on the platform and user agent.
2423
- </ dd >
2424
- < dt >
2425
- < dfn data-dfn-for ="display mode "> browser</ dfn > (default)
2426
- </ dt >
2427
- < dd >
2428
- Opens the web application using the platform-specific convention for
2429
- opening hyperlinks in the user agent (e.g., in a browser tab or a new
2430
- window).
2431
- </ dd >
2432
- </ dl >
2433
- < p class ="note ">
2434
- The [=display mode/fullscreen=] < a > display mode</ a > is orthogonal to,
2435
- and works independently of, the [[[FULLSCREEN]]]. The [=display
2436
- mode/fullscreen=] < a > display mode</ a > affects the fullscreen state of
2437
- the browser window, while the [[FULLSCREEN]] API operates on an element
2438
- contained within the viewport. As such, a web application can have its
2439
- < a > display mode</ a > set to [=display mode/fullscreen=], while
2440
- `document.fullScreenElement` returns `null`, and `fullscreenEnabled`
2441
- returns `false`.
2388
+ functionality in use on a given platform.
2442
2389
</ p >
2443
2390
< p >
2444
2391
Once a user agent [=applies=] a particular < a > display mode</ a > to an
@@ -2518,130 +2465,17 @@ <h2>
2518
2465
mode/fullscreen=]", "[=display mode/standalone=]", "[=display
2519
2466
mode/minimal-ui=]", "[=display mode/browser=]" ».
2520
2467
</ p >
2521
- < section data-cite ="css-conditional-3 ">
2522
- < h3 >
2523
- The `'display-mode'` media feature
2524
- </ h3 >
2525
- < table class ="def descdef mq ">
2526
- < tbody >
2527
- < tr >
2528
- < th >
2529
- Name:
2530
- </ th >
2531
- < td >
2532
- < dfn data-dfn-for ="@media " data-dfn-type ="descriptor "
2533
- data-export =""> display-mode</ dfn >
2534
- </ td >
2535
- </ tr >
2536
- < tr >
2537
- < th >
2538
- For:
2539
- </ th >
2540
- < td >
2541
- < a data-xref-type ="css-at-rule "> @media</ a >
2542
- </ td >
2543
- </ tr >
2544
- < tr >
2545
- < th >
2546
- Value:
2547
- </ th >
2548
- < td class ="prod ">
2549
- [=display mode/fullscreen=] | [=display mode/standalone=] |
2550
- [=display mode/minimal-ui=] | [=display mode/browser=]
2551
- </ td >
2552
- </ tr >
2553
- < tr >
2554
- < th >
2555
- Type:
2556
- </ th >
2557
- < td >
2558
- discrete
2559
- </ td >
2560
- </ tr >
2561
- </ tbody >
2562
- </ table >
2563
- < p >
2564
- The `display-mode` media feature represents, via a CSS media query
2565
- [[MEDIAQ]], the < a > display mode</ a > of the web application. This
2566
- media feature applies to the top-level browsing context and any child
2567
- browsing contexts. Child browsing contexts reflect the < a > display
2568
- mode</ a > of the < a > top-level browsing context</ a > .
2569
- </ p >
2570
- < p >
2571
- A user agent MUST expose the '`display-mode`' media feature
2572
- irrespective of whether a manifest is being applied to a browsing
2573
- context. For example, if the end-user puts the whole user agent into
2574
- fullscreen, then the user agent would reflect this change to CSS and
2575
- scripts via the '`display-mode`' media feature.
2576
- </ p >
2577
- < aside class ="note ">
2578
- < p >
2579
- Please note that the `fullscreen` < a > display mode</ a > is not
2580
- directly related to the CSS `:fullscreen` pseudo-class specified in
2581
- the [[[FULLSCREEN]]]. The `:fullscreen` pseudo-class matches
2582
- exclusively when a [[HTML]] element is put into the fullscreen
2583
- element stack. However, a side effect of calling the
2584
- `requestFullscreen()` method on an element using the [[FULLSCREEN]]
2585
- API is that the browser window can enter a fullscreen mode at the
2586
- OS-level. In such a case, both `:fullscreen` and `(display-mode:
2587
- fullscreen)` will match.
2588
- </ p >
2589
- < p >
2590
- On some platforms, it is possible for a user to put a browser
2591
- window into fullscreen without the aid of the [[[FULLSCREEN]]].
2592
- When this happens, the `:fullscreen` pseudo class will not match,
2593
- but `(display-mode: fullscreen)` will match. This is exemplified in
2594
- CSS code below.
2595
- </ p >
2596
- < pre class ="example css ">
2597
- /* applies when the window is fullscreen */
2598
- @media all and (display-mode: fullscreen) {
2599
- ...
2600
- }
2601
-
2602
- /* applies when an element goes fullscreen */
2603
- #game:fullscreen {
2604
- ...
2605
- }
2606
- </ pre >
2607
- </ aside >
2608
- < p >
2609
- A user agent MUST reflect the applied < a > display mode</ a > of the web
2610
- application via a CSS media query [[MEDIAQ]].
2611
- </ p >
2612
- < section >
2613
- < h4 >
2614
- Examples
2615
- </ h4 >
2616
- < p >
2617
- An example in CSS:
2618
- </ p >
2619
- < pre class ="example css " title ="Using 'display-mode' media feature ">
2620
- @media all and (display-mode: minimal-ui) {
2621
- /* ... */
2622
- }
2623
- @media all and (display-mode: standalone) {
2624
- /* ... */
2625
- }
2626
- </ pre >
2627
- < p >
2628
- Accessing the display-mode media feature in ECMAScript through
2629
- `matchMedia()` of [[CSSOM-VIEW]]:
2630
- </ p >
2631
- < pre class ="example js " title =
2632
- "Accessing 'display-mode' media feature with script ">
2633
- const standalone = matchMedia( '(display-mode: standalone)' );
2634
-
2635
- standalone.onchange = (e) => {
2636
- /* handle changes to display mode */
2637
- }
2638
-
2639
- if (standalone.matches) {
2640
- /* do standalone things */
2641
- }
2642
- </ pre >
2643
- </ section >
2644
- </ section >
2468
+ < p >
2469
+ A user agent MUST reflect the applied < a > display mode</ a > of the web
2470
+ application in the '`display-mode`' media feature [[MEDIAQUERIES-5]].
2471
+ </ p >
2472
+ < p class =note >
2473
+ A user agent will expose the '`display-mode`' media feature
2474
+ irrespective of whether a manifest is being applied to a browsing
2475
+ context. For example, if the end-user puts the application into
2476
+ fullscreen, then the user agent would reflect this change to CSS and
2477
+ scripts via the '`display-mode`' media feature.
2478
+ </ p >
2645
2479
</ section >
2646
2480
< section id ="priv-sec ">
2647
2481
< h2 >
@@ -2746,13 +2580,11 @@ <h2>
2746
2580
animated transition, or speaking the text "Launching application X".
2747
2581
</ p >
2748
2582
< p >
2749
- The `'display-mode'` media feature allows an origin access to aspects
2750
- of a user’s local computing environment and, together with the
2751
- `display` member, allows an origin some measure of control over a user
2752
- agent’s native UI: Through a CSS media query, a script can know the
2753
- display mode of a web application. An attacker could, in such a case,
2754
- exploit the fact that an application is being displayed in fullscreen
2583
+ The `display` member allows an origin some measure of control over a user
2584
+ agent’s native UI. After taking over the full screen, it could attempt
2755
2585
to mimic the user interface of another application.
2586
+ This is also facilitated by the `'display-mode'` media feature [[MEDIAQUERIES-5]],
2587
+ through which a script can know the display mode of a web application.
2756
2588
</ p >
2757
2589
</ section >
2758
2590
< section class ="appendix ">
0 commit comments