feat(browser): apply_chromium_extension_policy soporta --keep id=update_url

Permite force-instalar extensiones self-hosted bajo managed policy indicando
un update_url propio (p.ej. file:// a un update.xml local que apunta a un .crx).
Necesario para cargar extensiones propias (como la de captura de web_proxy)
cuando hay una managed policy activa y --load-extension queda desactivado en
Chromium 137+. Forma simple '<id>' sigue usando el update_url por defecto.
This commit is contained in:
Egutierrez
2026-06-05 17:22:20 +02:00
parent e0fad0e82f
commit b75bd7e154
2 changed files with 10 additions and 5 deletions
@@ -5,7 +5,7 @@ lang: bash
domain: browser domain: browser
version: "1.1.0" version: "1.1.0"
purity: impure purity: impure
signature: "apply_chromium_extension_policy [--keep <ext_id>]... [--block <ext_id>]... [--policy-path <path>] [--update-url <url>] [--dry-run]" signature: "apply_chromium_extension_policy [--keep <ext_id[=update_url]>]... [--block <ext_id>]... [--policy-path <path>] [--update-url <url>] [--dry-run]"
description: "Escribe de forma idempotente la política managed de Chromium combinando ExtensionInstallForcelist (force-instala la whitelist --keep) y ExtensionInstallBlocklist (bloquea y desinstala la blocklist --block). No usa el comodín \"*\" blocked, por lo que NO afecta a las extensiones unpacked cargadas con --load-extension. Guarda backup fuera del directorio managed/ (que Chromium lee entero). Requiere sudo para escribir en /etc; en --dry-run no toca el sistema." description: "Escribe de forma idempotente la política managed de Chromium combinando ExtensionInstallForcelist (force-instala la whitelist --keep) y ExtensionInstallBlocklist (bloquea y desinstala la blocklist --block). No usa el comodín \"*\" blocked, por lo que NO afecta a las extensiones unpacked cargadas con --load-extension. Guarda backup fuera del directorio managed/ (que Chromium lee entero). Requiere sudo para escribir en /etc; en --dry-run no toca el sistema."
tags: [chromium, extensions, policy, browser, navegator, managed-policy, idempotent] tags: [chromium, extensions, policy, browser, navegator, managed-policy, idempotent]
uses_functions: [] uses_functions: []
@@ -15,8 +15,8 @@ returns_optional: false
error_type: "error_go_core" error_type: "error_go_core"
imports: [] imports: []
params: params:
- name: "--keep <ext_id>" - name: "--keep <ext_id[=update_url]>"
desc: "ID de extensión de Chrome Web Store a force-instalar (repetible). Va a ExtensionInstallForcelist. Ejemplo: ddkjiahejlhfcafbddmgiahcphecmpfh (uBlock Origin Lite)." desc: "ID de extensión a force-instalar (repetible). Va a ExtensionInstallForcelist. Forma simple '<id>' usa el update_url por defecto (Web Store). Forma '<id>=<update_url>' fuerza una extensión self-hosted: por ejemplo '<id>=file:///home/u/.web_proxy/update.xml' instala un .crx local empaquetado bajo managed policy (necesario porque --load-extension queda desactivado cuando hay managed policy). Ejemplo Web Store: ddkjiahejlhfcafbddmgiahcphecmpfh (uBlock Origin Lite)."
- name: "--block <ext_id>" - name: "--block <ext_id>"
desc: "ID de extensión a bloquear y desinstalar en cualquier perfil (repetible). Va a ExtensionInstallBlocklist. Solo afecta a los IDs listados; el resto de extensiones no se toca." desc: "ID de extensión a bloquear y desinstalar en cualquier perfil (repetible). Va a ExtensionInstallBlocklist. Solo afecta a los IDs listados; el resto de extensiones no se toca."
- name: "--policy-path <path>" - name: "--policy-path <path>"
@@ -85,5 +85,6 @@ sudo. `--keep` fuerza y fija las imprescindibles; `--block` elimina las molestas
## Capability growth log ## Capability growth log
- v1.2.0 (2026-06-05) — `--keep` acepta `<id>=<update_url>` para force-instalar extensiones self-hosted (p.ej. un `.crx` local vía `file://` a un `update.xml`), que es la forma de cargar una extensión propia cuando hay managed policy y `--load-extension` está desactivado.
- v1.1.0 (2026-06-05) — añade `--block` (ExtensionInstallBlocklist); reemplaza el modo `ExtensionSettings "*": blocked` (rompía extensiones unpacked) por blocklist específica; mueve los backups fuera de `managed/` (Chromium lee todo el directorio y un `.bak` ahí reinyectaba extensiones). - v1.1.0 (2026-06-05) — añade `--block` (ExtensionInstallBlocklist); reemplaza el modo `ExtensionSettings "*": blocked` (rompía extensiones unpacked) por blocklist específica; mueve los backups fuera de `managed/` (Chromium lee todo el directorio y un `.bak` ahí reinyectaba extensiones).
- v1.0.0 (2026-06-05) — baseline: ExtensionInstallForcelist con whitelist `--keep`. - v1.0.0 (2026-06-05) — baseline: ExtensionInstallForcelist con whitelist `--keep`.
@@ -73,9 +73,13 @@ apply_chromium_extension_policy() {
local forcelist_json="[]" blocklist_json="[]" local forcelist_json="[]" blocklist_json="[]"
if [[ ${#keep_ids[@]} -gt 0 ]]; then if [[ ${#keep_ids[@]} -gt 0 ]]; then
local entries="" first=1 local entries="" first=1
for id in "${keep_ids[@]}"; do for kid in "${keep_ids[@]}"; do
# Cada --keep puede ser "<id>" (usa el update_url por defecto, Web Store) o
# "<id>=<update_url>" para una extensión self-hosted (p.ej. file:// a un update.xml local).
local id="${kid%%=*}" url="$update_url"
[[ "$kid" == *=* ]] && url="${kid#*=}"
[[ $first -eq 0 ]] && entries+=","$'\n' [[ $first -eq 0 ]] && entries+=","$'\n'
entries+=" \"${id};${update_url}\"" entries+=" \"${id};${url}\""
first=0 first=0
done done
forcelist_json=$(printf '[\n%s\n ]' "$entries") forcelist_json=$(printf '[\n%s\n ]' "$entries")