Make the grey icon and the review badge visible in Firefox and Firefox for Android, and settle the data declaration their requests affect #3

Open
opened 2026-09-30 15:19:47 +00:00 by tiagoagueda · 0 comments
Owner

The source of this extension is postulo/postulo-chromium, which carries the grey toolbar icon (postulo/postulo-chromium#4), the badge counting captures that need review (postulo/postulo-chromium#5) and the status icon in the popup's footer (postulo/postulo-chromium#9). This issue is what Firefox needs for the icon, badge and tooltip to be seen, and for its data declaration to stay true once the extension asks Postulo things in the background.

What the extension should do in Firefox

The button on the toolbar. MDN gives Manifest V3's action.default_area a default of "menupanel": the button starts in the extensions panel, where nobody sees a grey icon or a badge, until the person pins it. The schema bundled with web-ext's linter (addons-linter 7.20.0) describes the default as "navbar"; nobody has checked a fresh profile. "default_area": "navbar" under action in the shared manifest (postulo-chromium/src/manifest.json, which this repository builds from) settles it either way; the manifest sets none today. Firefox remembers the first placement for an extension id, even across uninstalling and reinstalling, and an extension cannot move its button in code, so this is decided before the first signed package anyone installs. Chromium has no such key; scripts/build.mjs can drop it there if it warns.

Firefox for Android. There is no toolbar: the action is an item under the browser menu's add-ons entry, and its title is the label. action.setIcon, setBadgeText and setTitle are listed as supported there (from 109); how a changed icon shows in that item is undocumented. The badge sits beside the label, and Mozilla bug 1874003 reports a long label pushing it out of view (not reproduced here). Today's label, “Capture this posting in Postulo”, runs to 31 characters in English and 38 in Greek and Armenian; whether it already hides the badge is unchecked. postulo/postulo-chromium#4 proposes a tooltip that gives the reason before that title, which would be longer still.

The background. Firefox runs background.js as an event page, unloaded after 30 s idle, and keeps alarms in memory, lost on restart. The background already recreates its alarm on install and on startup (src/background.js:19-31), which covers the check's schedule, and postulo/postulo-chromium#4 keeps its state in storage.local. A person can withdraw the instance's host permission on the add-on's page, and Firefox grants one only from a user action (“Firefox insists on this”, src/options.js). Send, Save and Test already ask from their click; the background's check never can, so postulo/postulo-chromium#4's no-permission state stays until the person clicks one.

Decisions for this repository

  • default_area. "navbar" (recommended: the state exists to be seen, and the choice is final for this id) or Firefox's default, leaving the pin to the person as on Chromium.
  • The label on Android. Leave the title alone there and let the badge and the popup's footer carry the state (recommended), or set a short state label; runtime.getPlatformInfo() tells Android apart. If today's label already hides the badge, a shorter Android label is a new message key, and postulo-chromium's test/i18n.test.mjs requires every new key in all 40 _locales at once, with identical placeholders: 40 translations in the same commit.
  • The data declaration. The manifest declares data_collection_permissions required: ["none"], and this repository's README explains the minimum versions by it (“the extension collects nothing”). Mozilla defines transmission as data handled outside the add-on or the local browser and documents no exemption for a server the person runs; the Chrome Web Store's user-data FAQ (Q15) lifts its Limited Use rules for a server the person names, though disclosure is still due. The page already leaves on Send; the new requests go unprompted: the reachability check (no token, if it uses the public /healthz) and the review count (GET /api/v1/captures with the token, bringing titles back). Either keep "none" and say in the README why a request to the person's own server does not count, a reading Mozilla has not written down; or declare the categories that apply, such as websiteContent and authenticationInfo, as required, which Firefox shows at install, by Mozilla's account (unchecked here). "none" cannot stand beside another required category: web-ext lint, which both repositories' CI runs, refuses it. Recommended: declare them, before the first signed package anyone installs.

Needs from the server

Nothing: the check and the count use calls Postulo has today. Nothing is filed on postulo/postulo.

Done when

  • In Firefox desktop, a new profile shows the button where decided (on the toolbar, with "navbar"); its icon, badge and tooltip follow the connection state and the count, as on Chromium, and the grey icon is easy to tell from the colour one on light and dark themes.
  • On Firefox for Android, checked on a device (web-ext's firefox-android target loads dist/ onto a phone over adb), the badge is readable beside the label and the state can be read in the menu item or the popup; what a grey icon does there is written down.
  • The data declaration is decided. The README's “Minimum version” line says what is declared and why, and “What Firefox does differently” gains a line on where the button sits and what Android shows. The listing, not in this repository yet although the README says it is (signing is --channel unlisted), says the same once written. PRIVACY.md's new requests are for postulo/postulo-chromium#4 and postulo/postulo-chromium#5 to add.
  • source.json pins a postulo-chromium commit that carries all of it.

From the list of extension improvements of 2026-09-30.

The source of this extension is postulo/postulo-chromium, which carries the grey toolbar icon (postulo/postulo-chromium#4), the badge counting captures that need review (postulo/postulo-chromium#5) and the status icon in the popup's footer (postulo/postulo-chromium#9). This issue is what Firefox needs for the icon, badge and tooltip to be seen, and for its data declaration to stay true once the extension asks Postulo things in the background. ## What the extension should do in Firefox **The button on the toolbar.** MDN gives Manifest V3's `action.default_area` a default of `"menupanel"`: the button starts in the extensions panel, where nobody sees a grey icon or a badge, until the person pins it. The schema bundled with web-ext's linter (addons-linter 7.20.0) describes the default as `"navbar"`; nobody has checked a fresh profile. `"default_area": "navbar"` under `action` in the shared manifest (`postulo-chromium/src/manifest.json`, which this repository builds from) settles it either way; the manifest sets none today. Firefox remembers the first placement for an extension id, even across uninstalling and reinstalling, and an extension cannot move its button in code, so this is decided before the first signed package anyone installs. Chromium has no such key; `scripts/build.mjs` can drop it there if it warns. **Firefox for Android.** There is no toolbar: the action is an item under the browser menu's add-ons entry, and its title is the label. `action.setIcon`, `setBadgeText` and `setTitle` are listed as supported there (from 109); how a changed icon shows in that item is undocumented. The badge sits beside the label, and Mozilla bug 1874003 reports a long label pushing it out of view (not reproduced here). Today's label, “Capture this posting in Postulo”, runs to 31 characters in English and 38 in Greek and Armenian; whether it already hides the badge is unchecked. postulo/postulo-chromium#4 proposes a tooltip that gives the reason before that title, which would be longer still. **The background.** Firefox runs `background.js` as an event page, unloaded after 30 s idle, and keeps alarms in memory, lost on restart. The background already recreates its alarm on install and on startup (`src/background.js:19-31`), which covers the check's schedule, and postulo/postulo-chromium#4 keeps its state in `storage.local`. A person can withdraw the instance's host permission on the add-on's page, and Firefox grants one only from a user action (“Firefox insists on this”, `src/options.js`). Send, Save and Test already ask from their click; the background's check never can, so postulo/postulo-chromium#4's no-permission state stays until the person clicks one. ## Decisions for this repository - **`default_area`.** `"navbar"` (recommended: the state exists to be seen, and the choice is final for this id) or Firefox's default, leaving the pin to the person as on Chromium. - **The label on Android.** Leave the title alone there and let the badge and the popup's footer carry the state (recommended), or set a short state label; `runtime.getPlatformInfo()` tells Android apart. If today's label already hides the badge, a shorter Android label is a new message key, and postulo-chromium's `test/i18n.test.mjs` requires every new key in all 40 `_locales` at once, with identical placeholders: 40 translations in the same commit. - **The data declaration.** The manifest declares `data_collection_permissions` `required: ["none"]`, and this repository's README explains the minimum versions by it (“the extension collects nothing”). Mozilla defines transmission as data handled outside the add-on or the local browser and documents no exemption for a server the person runs; the Chrome Web Store's user-data FAQ (Q15) lifts its Limited Use rules for a server the person names, though disclosure is still due. The page already leaves on Send; the new requests go unprompted: the reachability check (no token, if it uses the public `/healthz`) and the review count (`GET /api/v1/captures` with the token, bringing titles back). Either keep `"none"` and say in the README why a request to the person's own server does not count, a reading Mozilla has not written down; or declare the categories that apply, such as `websiteContent` and `authenticationInfo`, as `required`, which Firefox shows at install, by Mozilla's account (unchecked here). `"none"` cannot stand beside another required category: web-ext lint, which both repositories' CI runs, refuses it. Recommended: declare them, before the first signed package anyone installs. ## Needs from the server Nothing: the check and the count use calls Postulo has today. Nothing is filed on postulo/postulo. ## Done when - In Firefox desktop, a new profile shows the button where decided (on the toolbar, with `"navbar"`); its icon, badge and tooltip follow the connection state and the count, as on Chromium, and the grey icon is easy to tell from the colour one on light and dark themes. - On Firefox for Android, checked on a device (web-ext's `firefox-android` target loads `dist/` onto a phone over adb), the badge is readable beside the label and the state can be read in the menu item or the popup; what a grey icon does there is written down. - The data declaration is decided. The README's “Minimum version” line says what is declared and why, and “What Firefox does differently” gains a line on where the button sits and what Android shows. The listing, not in this repository yet although the README says it is (signing is `--channel unlisted`), says the same once written. PRIVACY.md's new requests are for postulo/postulo-chromium#4 and postulo/postulo-chromium#5 to add. - `source.json` pins a postulo-chromium commit that carries all of it. From the list of extension improvements of 2026-09-30.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Postulo/postulo-firefox#3
No description provided.