e0fad0e82f
Rediseño de apply_chromium_extension_policy y nueva función de purga in-place, tras resolver por qué las extensiones bloqueadas reaparecían en Chromium 148. - apply_chromium_extension_policy: añade --block (ExtensionInstallBlocklist). Reemplaza el modo ExtensionSettings "*": blocked (que rompía las extensiones unpacked vía --load-extension, p.ej. la de captura de web_proxy con el error 'Loading of unpacked extensions is disabled by the administrator') por una blocklist específica. FIX RAÍZ: los backups se guardan fuera de policies/managed/ (en policy-backups/), porque Chromium lee TODOS los archivos del directorio managed/ sin filtrar extensión de nombre — un extensions.json.bak ahí se mergea con la policy y reinyecta las extensiones del backup (location=7). - clean_chrome_profile_extensions (nueva): purga in-place de un perfil existente (borra carpetas de Extensions/ + refs en Preferences/Secure Preferences) dejando solo la whitelist. Complementa la policy: la policy evita reinstalación, esta desinstala lo ya presente. Requiere chromium cerrado. Ambas: dominio browser, grupo navegator, guard de auto-ejecución, dry-run.
5.0 KiB
5.0 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, params, output
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | params | output | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| clean_chrome_profile_extensions | function | bash | browser | 1.0.0 | impure | clean_chrome_profile_extensions [--user-data-dir <dir>] [--profile-directory <name>] [--keep <ext_id>]... [--dry-run] | Purga in-place las extensiones de un perfil Chrome/Chromium existente que no estén en la whitelist --keep: borra sus carpetas de disco y elimina sus referencias de Preferences y Secure Preferences para que Chromium no las reinstale. Complementaria a apply_chromium_extension_policy_bash_browser que evita reinstalación pero no desinstala lo ya instalado en Chromium 148. |
|
|
false | error_go_core | false | bash/functions/browser/clean_chrome_profile_extensions.sh |
|
JSON en stdout: {profile: "<path>", kept: [id...], removed: [id...]}. Exit 0 en éxito o dry-run. Errores a stderr con exit != 0. |
Ejemplo
# Cerrar Chromium primero (OBLIGATORIO en modo real)
pkill -TERM chromium
# Purgar perfil Default dejando solo uBlock Origin Lite
source $HOME/fn_registry/bash/functions/browser/clean_chrome_profile_extensions.sh
clean_chrome_profile_extensions --keep ddkjiahejlhfcafbddmgiahcphecmpfh
# Previsualizar antes de tocar nada
clean_chrome_profile_extensions --keep ddkjiahejlhfcafbddmgiahcphecmpfh --dry-run
# Perfil no-default con whitelist de dos extensiones
clean_chrome_profile_extensions \
--user-data-dir "$HOME/.config/chromium" \
--profile-directory "Profile 1" \
--keep ddkjiahejlhfcafbddmgiahcphecmpfh \
--keep cjpalhdlnbpafiamejdnhcphjbkeiagm
# Salida esperada (ejemplo):
# {"profile":"/home/enmanuel/.config/chromium/Default","kept":["ddkjiahejlhfcafbddmgiahcphecmpfh"],"removed":["dark-reader-id","another-ext-id"]}
También ejecutable directamente con fn run:
cd $HOME/fn_registry
./fn run clean_chrome_profile_extensions_bash_browser -- --dry-run
Cuando usarla
Úsala después de reducir la whitelist de extensiones con apply_chromium_extension_policy_bash_browser (modo blocked), para quitar del disco las que ya estaban instaladas en el perfil: la policy evita que Chromium reinstale extensiones nuevas, pero en Chromium 148 no desinstala las que ya estaban force-instaladas. Esta función hace la purga determinista del estado existente. También útil antes de una sesión de scraping para dejar el perfil con solo las extensiones necesarias.
Gotchas
- Chromium DEBE estar cerrado antes de ejecutar en modo real. Chromium reescribe
Preferencesdesde memoria al cerrar y desharía toda la purga. La función lo comprueba conpgrep -x chromiumy aborta con exit 2 si hay procesos vivos. En--dry-runno se hace este check. - Combínala con
apply_chromium_extension_policy_bash_browser(blocked) para que las extensiones no vuelvan a instalarse la próxima vez que arranques Chromium. Esta función purga el estado actual; la policy evita la reinstalación futura. - Backup automático de prefs: antes de editar
PreferencesySecure Preferencesla función crea<archivo>.bak.YYYYMMDD. Si ya existe un backup del día no lo sobreescribe. En caso de problemas:cp Preferences.bak.YYYYMMDD Preferences. - Opera por perfil: actúa sobre
--user-data-dir/--profile-directory/Extensions. Si tienes varios perfiles (Default,Profile 1, etc.) debes invocarla una vez por cada uno. - python3 > jq > warn: para editar el JSON de Preferences usa python3 si está disponible, jq como fallback, y emite un warning a stderr (sin abortar) si ninguno está. En ese caso las carpetas sí se borran pero las referencias en Preferences quedan — Chromium podría intentar reinstalar desde Web Store.
- Secure Preferences HMAC: la tabla
protection.macs.extensions.settingstambién se limpia para evitar que Chromium detecte inconsistencia entre el HMAC y la entrada eliminada y resetee configuraciones. Si la HMAC falla de todas formas, Chromium lo trata como perfil potencialmente corrupto y puede resetear algunas prefs — comportamiento esperado de Chromium, no un bug de esta función.
Exit codes
| Código | Significado |
|---|---|
| 0 | Éxito o dry-run completado |
| 1 | Argumento inválido o perfil no encontrado |
| 2 | Chromium está corriendo (solo en modo real) |
| 3 | Directorio Extensions no encontrado |