Re: [w3c/manifest] Add `installed` CSS media feature (PR #1218)

@Copilot commented on this pull request.

## Pull request overview

Adds specification text for a new `installed` CSS media feature to let documents detect whether the current top-level traversable is running as an installed web application (application context), including cross-origin iframe behavior and privacy considerations.

**Changes:**
- Defines the `installed` media feature with `installed`/`none` values and boolean usage semantics.
- Adds normative requirements for cross-origin nested documents and for updating media query evaluation on transitions.
- Documents privacy properties and includes examples for CSS and `matchMedia()` usage.






---

💡 <a href="/w3c/manifest/new/main?filename=.github/instructions/*.instructions.md" class="Link--inTextBlock" target="_blank" rel="noopener noreferrer">Add Copilot custom instructions</a> for smarter, more guided reviews. <a href="https://docs.github.com/en/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot" class="Link--inTextBlock" target="_blank" rel="noopener noreferrer">Learn how to get started</a>.

> +    <h2 id="installed-media-feature">
+      The `installed` media feature
+    </h2>
+    <p>
+      The <dfn id="mf-installed" data-dfn-type="css-descriptor" data-dfn-for=
+      "@media" class="export">`installed`</dfn> media feature reflects whether
+      the [=document=]'s [=node navigable=]'s [=navigable/top-level
+      traversable=] is an [=application context=]. It takes one of the
+      following values:
+    </p>
+    <dl>
+      <dt>
+        <dfn id="mf-installed-installed" class="export" data-dfn-type="value"
+        data-dfn-for="@media/installed">installed</dfn>
+      </dt>
+      <dd>
+        The [=document=]'s [=node navigable=]'s [=navigable/top-level
+        traversable=] is an [=application context=].
+      </dd>
+      <dt>
+        <dfn id="mf-installed-none" class="export" data-dfn-type="value"
+        data-dfn-for="@media/installed">none</dfn> (default)
+      </dt>
+      <dd>
+        Otherwise.
+      </dd>
+    </dl>
+    <p>
+      The value of <a href="#mf-installed">`installed`</a> MUST be <a href=
+      "#mf-installed-none">`none`</a> in a [=document=] whose
+      [=Document/origin=] is not [=same origin=] with its [=node navigable=]'s
+      [=navigable/top-level traversable=]'s [=navigable/active document=]'s
+      [=Document/origin=].
+    </p>
+    <p class="note">
+      In a [=child navigable=] that is [=same origin=] with its
+      [=navigable/top-level traversable=]'s [=navigable/active document=],
+      <a href="#mf-installed">`installed`</a> reflects the same value as the
+      [=navigable/top-level traversable=], since same-origin script can already
+      observe it via `window.top.matchMedia("(installed)")`.
+    </p>
+    <p class="note">
+      The <a href="#mf-installed">`installed`</a> media feature is designed to
+      be used in a boolean context. `@media (installed)` is true when the value
+      is <a href="#mf-installed-installed">`installed`</a> and false when the
+      value is <a href="#mf-installed-none">`none`</a>. The explicit form
+      `@media (installed: installed)` is valid but the boolean shorthand
+      `@media (installed)` is the idiomatic form.
+    </p>
+    <p class="note">

This new top-level content is introduced as a bare `<h2 id="installed-media-feature">` rather than following the document’s established pattern of wrapping each top-level topic in a `<section id="…">` containing an `<h2>`. Consider converting this block to `<section id="installed-media-feature">…</section>` (and moving the `id` to the `<section>`) to keep the ReSpec structure consistent and avoid outline/ToC inconsistencies.


-- 
Reply to this email directly or view it on GitHub:
https://github.com/w3c/manifest/pull/1218#pullrequestreview-4354232581
You are receiving this because you are subscribed to this thread.

Message ID: <w3c/manifest/pull/1218/review/4354232581@github.com>

Received on Monday, 25 May 2026 04:34:15 UTC