From b75bd7e1545ccbeb9df860292be8cf4c8e20dfcd Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Fri, 5 Jun 2026 17:22:20 +0200 Subject: [PATCH] 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 '' sigue usando el update_url por defecto. --- bash/functions/browser/apply_chromium_extension_policy.md | 7 ++++--- bash/functions/browser/apply_chromium_extension_policy.sh | 8 ++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/bash/functions/browser/apply_chromium_extension_policy.md b/bash/functions/browser/apply_chromium_extension_policy.md index 860c894c..e1827942 100644 --- a/bash/functions/browser/apply_chromium_extension_policy.md +++ b/bash/functions/browser/apply_chromium_extension_policy.md @@ -5,7 +5,7 @@ lang: bash domain: browser version: "1.1.0" purity: impure -signature: "apply_chromium_extension_policy [--keep ]... [--block ]... [--policy-path ] [--update-url ] [--dry-run]" +signature: "apply_chromium_extension_policy [--keep ]... [--block ]... [--policy-path ] [--update-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." tags: [chromium, extensions, policy, browser, navegator, managed-policy, idempotent] uses_functions: [] @@ -15,8 +15,8 @@ returns_optional: false error_type: "error_go_core" imports: [] params: - - name: "--keep " - desc: "ID de extensión de Chrome Web Store a force-instalar (repetible). Va a ExtensionInstallForcelist. Ejemplo: ddkjiahejlhfcafbddmgiahcphecmpfh (uBlock Origin Lite)." + - name: "--keep " + desc: "ID de extensión a force-instalar (repetible). Va a ExtensionInstallForcelist. Forma simple '' usa el update_url por defecto (Web Store). Forma '=' fuerza una extensión self-hosted: por ejemplo '=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 " 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 " @@ -85,5 +85,6 @@ sudo. `--keep` fuerza y fija las imprescindibles; `--block` elimina las molestas ## Capability growth log +- v1.2.0 (2026-06-05) — `--keep` acepta `=` 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.0.0 (2026-06-05) — baseline: ExtensionInstallForcelist con whitelist `--keep`. diff --git a/bash/functions/browser/apply_chromium_extension_policy.sh b/bash/functions/browser/apply_chromium_extension_policy.sh index 80f7f0b7..228f2368 100644 --- a/bash/functions/browser/apply_chromium_extension_policy.sh +++ b/bash/functions/browser/apply_chromium_extension_policy.sh @@ -73,9 +73,13 @@ apply_chromium_extension_policy() { local forcelist_json="[]" blocklist_json="[]" if [[ ${#keep_ids[@]} -gt 0 ]]; then local entries="" first=1 - for id in "${keep_ids[@]}"; do + for kid in "${keep_ids[@]}"; do + # Cada --keep puede ser "" (usa el update_url por defecto, Web Store) o + # "=" 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' - entries+=" \"${id};${update_url}\"" + entries+=" \"${id};${url}\"" first=0 done forcelist_json=$(printf '[\n%s\n ]' "$entries")