|
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 modedfn> 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">fullscreendfn> |
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">standalonedfn> |
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-uidfn> |
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">browserdfn> (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 modea> is orthogonal to, |
2435 |
| - and works independently of, the [[[FULLSCREEN]]]. The [=display |
2436 |
| - mode/fullscreen=] <a>display modea> 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 modea> 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 modea> to an
|
|
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-modedfn> |
2534 |
| - td> |
2535 |
| - tr> |
2536 |
| - <tr> |
2537 |
| - <th> |
2538 |
| - For: |
2539 |
| - th> |
2540 |
| - <td> |
2541 |
| - <a data-xref-type="css-at-rule">@mediaa> |
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 modea> 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 |
| - modea> of the <a>top-level browsing contexta>. |
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 modea> 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 modea> 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 modea> 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 | 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