Wisselen van proxyprofiel hoort het geselecteerde account te wijzigen, niet nog een onAuthRequired-listener toe te voegen. Anders kunnen oude closures blijven antwoorden met het account van een eerdere keuze.

Registreer één benoemde listener op het hoogste niveau van de service worker. Lees het huidige account wanneer een gebeurtenis binnenkomt:

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'],
);

Dit fragment gaat ervan uit dat de extensie de geselecteerde HTTP-proxy al onder selectedProxy opslaat, met een numerieke poort en het bedoelde account. Het manifest heeft webRequest, webRequestAuthProvider, storage en de vereiste hostrechten nodig. De proxyselectie zelf heeft ook de proxy-toestemming nodig.

De registratie gebeurt synchroon. De opslag wordt in de callback gelezen, nadat Chrome een geïnstalleerde listener heeft om naar te sturen. Pas registreren nadat een eerste opslagpromise is opgelost, zorgt voor een opwaakgat.

Voeg een afwijzingslimiet toe vóór de release

Het fragment toont registratie en accountselectie. Voeg per verzoek een begrensd herpogingsrecord toe zodat een afgewezen wachtwoord niet eindeloos wordt ingestuurd. Ruim dat record op bij voltooiing of fout. Worker-globals kunnen verdwijnen wanneer de worker stopt, dus bewaar de status die nodig is tussen opwaakmomenten in een geschikt opslaggebied van de extensie.

storage.session overleeft herstarts van de worker binnen de browsersessie; het is geen permanente accountopslag tussen herstarts van de browser. Definieer wat de extensie doet wanneer er geen geselecteerd account beschikbaar is.

De isProxy- en challenger-controles voorkomen dat een uitdaging van een ongerelateerde website dit account ontvangt. Als de browser de gebeurtenis nooit aflevert, kan het opruimen van de listener die niet voortbrengen: onderzoek het werkelijke verzoek, de rechten en het browsergedrag afzonderlijk.

Gerelateerde artikelen