Files
fn_registry/bash/functions/browser/delete_chrome_profile.md
Egutierrez ae841ceedb feat(browser): CRUD de perfiles Chromium + pipeline reset_chrome_profiles
Cinco funciones nuevas (dominio browser, grupo navegator) que cierran los gaps
de gestión de perfiles, más un pipeline que las orquesta:

- backup_chrome_bookmarks / restore_chrome_bookmarks: backup y restore de los
  archivos Bookmarks (copia byte a byte verbatim para preservar el checksum
  interno; en Chromium 148 los bookmarks no están bajo el super_mac de Secure
  Preferences). Guard por user-data-dir (no global).
- delete_chrome_profile: borra la carpeta del perfil + limpia su entrada en
  Local State (info_cache, profiles_order, last_active_profiles, last_used).
- create_chrome_profile: lanza chromium headless (vía systemd-run) para que la
  managed policy instale la whitelist de extensiones, y asigna el nombre legible
  en Local State. Mata todo el árbol de chromium del udd antes de editar Local
  State (los hijos zygote/gpu no repiten --user-data-dir pero referencian la ruta).
- list_chrome_profile_extensions (Go): lista extensiones de un perfil con
  ID/name/version/location/enabled/fromPolicy. 7 unit tests.
- reset_chrome_profiles (pipeline): backup -> cerrar chromium -> delete -> create
  -> restore -> verify. Destructivo (--yes), --dry-run seguro.

Validado: unit tests Go verdes, backup/restore byte-idéntico, delete limpia Local
State, create instala la forcelist global (uBlock + web_proxy) en perfiles nuevos.
2026-06-06 01:24:21 +02:00

5.5 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
delete_chrome_profile function bash browser 1.0.0 impure delete_chrome_profile --user-data-dir <dir> --profile <name> [--profile <name>]... [--dry-run] Borra por completo uno o varios perfiles Chrome/Chromium: elimina la carpeta del perfil del disco y limpia todas sus referencias en Local State (info_cache, profiles_order, last_active_profiles, last_used, variations_google_groups). Requiere que Chromium esté cerrado. Hace backup automático de Local State antes de editar y valida el JSON resultante restaurando el backup si es inválido.
navegator
chromium
profile
cleanup
browser
scraping
false error_go_core
false
bash/functions/browser/delete_chrome_profile.sh
name desc
--user-data-dir Ruta raíz del user-data-dir de Chrome/Chromium (obligatorio). Ej: ~/.config/chromium
name desc
--profile Nombre de la carpeta del perfil a borrar (repetible, mínimo uno obligatorio). Ej: 'Default', 'Profile 1'
name desc
--dry-run Muestra qué carpetas borraría y qué claves de Local State quitaría sin tocar nada. No activa el guard de chromium cerrado.
JSON en stdout. Modo real: {deleted:[{profile, dir_removed, local_state_cleaned}...], last_used:'<nuevo>', backup:'Local State.bak.YYYYMMDD'}. Modo dry-run: {dry_run:true, would_delete:[{profile, dir_exists, would_remove, local_state_would_clean}...]}. Errores a stderr con exit != 0.

Ejemplo

# Cerrar Chromium primero (OBLIGATORIO en modo real)
pkill -TERM chromium

# Borrar un perfil
source $HOME/fn_registry/bash/functions/browser/delete_chrome_profile.sh
delete_chrome_profile \
    --user-data-dir "$HOME/.config/chromium" \
    --profile "Profile 1"
# Salida: {"deleted":[{"profile":"Profile 1","dir_removed":true,"local_state_cleaned":true}],"last_used":"Default","backup":"Local State.bak.20260606"}

# Borrar varios perfiles a la vez
delete_chrome_profile \
    --user-data-dir "$HOME/.config/chromium" \
    --profile "Profile 1" \
    --profile "Profile 2"

# Previsualizar sin tocar nada (no requiere Chromium cerrado)
delete_chrome_profile \
    --user-data-dir "$HOME/.config/chromium" \
    --profile "Profile 1" \
    --dry-run
# Salida: {"dry_run":true,"would_delete":[{"profile":"Profile 1","dir_exists":true,"would_remove":true,"local_state_would_clean":true}]}

# Con un user-data-dir sintético para pruebas
mkdir -p /tmp/test_udd/Default /tmp/test_udd/"Profile 1"
echo '{"profile":{"info_cache":{"Default":{},"Profile 1":{}},"profiles_order":["Default","Profile 1"],"last_active_profiles":["Profile 1"],"last_used":"Profile 1"},"variations_google_groups":{}}' \
    > "/tmp/test_udd/Local State"
delete_chrome_profile --user-data-dir /tmp/test_udd --profile "Profile 1" --dry-run

También ejecutable directamente con fn run:

cd $HOME/fn_registry
./fn run delete_chrome_profile_bash_browser -- \
    --user-data-dir "$HOME/.config/chromium" --profile "Profile 1" --dry-run

Cuando usarla

Úsala cuando necesites limpiar completamente un perfil de Chromium: antes de crear un perfil de scraping fresco, para depurar problemas de perfiles corruptos, o para liberar espacio eliminando perfiles de sesión temporales. A diferencia de borrar solo la carpeta, esta función también retira las referencias de Local State para que Chromium no muestre el perfil fantasma ni intente acceder a él al arrancar.

Gotchas

  • Chromium DEBE estar cerrado antes de ejecutar en modo real. Chromium reescribe Local State desde memoria al cerrar y desharía todos los cambios. La función comprueba pgrep -x chromium y aborta con exit 2 si detecta procesos vivos. En --dry-run este check no se activa.
  • Operación destructiva e irreversible: todos los datos del perfil (cookies, logins guardados, historial, caché, contraseñas) se pierden permanentemente al borrar la carpeta. No hay papelera.
  • Backup automático de Local State: antes de editar, la función crea <udd>/Local State.bak.YYYYMMDD. Si ya existe un backup del día no lo sobreescribe. Restaurar manualmente: cp "Local State.bak.YYYYMMDD" "Local State".
  • Validación JSON tras edición: si el JSON de Local State queda inválido (raro pero posible con perfiles con nombres muy especiales), la función restaura el backup automáticamente y sale con exit != 0.
  • Nombres de perfil con espacios: los nombres como "Profile 1" se pasan entre comillas al script Python. El parsing usa json.loads por lo que los espacios no dan problemas, pero deben pasarse correctamente en el shell: --profile "Profile 1".
  • python3 > jq > warning: usa python3 para editar Local State, jq como fallback. Si ninguno está disponible, las carpetas se borran pero Local State queda sin modificar (Chromium podría mostrar perfiles fantasma al arrancar).
  • last_used reasignado automáticamente: si el perfil borrado era el last_used, la función asigna el primer perfil restante en info_cache. Si no queda ningún perfil, last_used queda como cadena vacía.
  • No afecta a --profile Default si es el único perfil: lo borrará igualmente — Chromium puede quedar sin ningún perfil configurado y recreará Default al arrancar.

Exit codes

Código Significado
0 Éxito o dry-run completado
1 Argumento inválido, directorio o Local State no encontrado, JSON inválido tras edición
2 Chromium está corriendo (solo en modo real)