Cambiar de perfil de proxy debería cambiar la cuenta seleccionada, no añadir otro oyente onAuthRequired. De lo contrario, los cierres antiguos pueden seguir respondiendo con la cuenta de una selección anterior.

Registre un único oyente con nombre en el nivel superior del service worker. Lea la cuenta actual cuando llegue un evento:

function answerProxyChallenge(details, reply) {
  if (!details.isProxy) {
    reply({});
    return;
  }
  chrome.storage.session.get('selectedProxy').then(({selectedProxy: p}) => {
    if (!p || details.challenger.host !== p.host ||
        details.challenger.port !== p.port) {
      reply({});
      return;
    }
    reply({authCredentials: {username: p.username, password: p.password}});
  }).catch(() => reply({cancel: true}));
}

chrome.webRequest.onAuthRequired.addListener(
  answerProxyChallenge,
  {urls: ['<all_urls>']},
  ['asyncBlocking'],
);

Este fragmento supone que la extensión ya guarda el proxy HTTP seleccionado bajo selectedProxy, con un puerto numérico y su cuenta prevista. El manifiesto necesita webRequest, webRequestAuthProvider, storage y los permisos de host requeridos. La propia selección de proxy también necesita el permiso proxy.

El registro ocurre de forma síncrona. El almacenamiento se lee dentro de la devolución de llamada, después de que Chrome tenga un oyente instalado al que enviar. Registrarse solo después de que se resuelva una promesa de almacenamiento inicial crea una brecha de despertar.

Añada un límite de rechazo antes de publicar

El fragmento muestra el registro y la selección de cuenta. Añada un registro de reintentos acotado para cada solicitud, de modo que una contraseña rechazada no se envíe indefinidamente. Limpie ese registro al completarse o fallar. Las variables globales del worker pueden desaparecer cuando este se detiene, así que guarde el estado necesario entre despertares en un área de almacenamiento adecuada de la extensión.

storage.session sobrevive a los reinicios del worker dentro de la sesión del navegador; no es un almacenamiento permanente de cuentas entre reinicios del navegador. Defina qué hace la extensión cuando no hay ninguna cuenta seleccionada disponible.

Las comprobaciones isProxy y challenger evitan que un desafío de un sitio web no relacionado reciba esta cuenta. Si el navegador nunca envía el evento, la limpieza del oyente por sí sola no puede producirlo: inspeccione la solicitud real, los permisos y el comportamiento del navegador por separado.

Artículos relacionados