- From: Copilot <notifications@github.com>
- Date: Sun, 24 May 2026 21:34:11 -0700
- To: w3c/manifest <manifest@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/manifest/pull/1218/review/4354232581@github.com>
@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