Я работаю над расширением прокси для браузера Chrome. Мое расширение устанавливает настройки прокси браузера, используя:
chrome.proxy.settings.set({
value: config,
scope: 'regular',
});
Где в конфигурации используется режим fixed_servers
.
Прокси-серверы требуют аутентификации, поэтому у меня есть:
chrome.webRequest.onAuthRequired.addListener(details => {
// Some logic
return {
authCredentials: {
username: usernameValue,
password: passwordValue,
},
};
});
Вплоть до последней 71-й версии Chrome эта логика работала, как и ожидалось:
Browser boots > extensions initialized > all traffic goes through proxy and auth requests from proxy server are handled by listener
.
Начиная с 71-й версии, кажется, что браузер не ждет инициализации расширений (проблема появляется после Hard Quit, то есть с использованием command + Q
) и начинает отправлять запросы. Поскольку конфигурация прокси уже установлена:
Requests go through proxy > proxy server requests authentication > extension is still not initialized by browser, therefore auth request listener is not added in the background as well - since there is nothing to intercept auth requests - native auth prompt is sown for the user
.
Это заканчивается в очень плохом UX + моментах спустя, когда расширение инициализируется, слушатель уже на месте, поэтому пользователь может либо заполнить приглашение и отправить, либо просто отменить - в любом случае прокси-сервер и его аутентификация работают.
Я ищу решение этой ситуации.
Может быть, есть способ установить некоторую конфигурацию для браузера, которая запрещает ему выполнять запросы до тех пор, пока не будет инициализировано определенное расширение, или какой-либо способ приостановить / сбросить / очистить конфигурацию прокси перед выходом из браузера (тогда я мог бы вручную установить прокси снова при инициализации). Или любое другое исправление для данной ситуации.
Я уже пытался использовать chrome.windows
методы для отслеживания того, когда окна браузера создаются и удаляются, а при последнем удалении пытался вызвать chrome.proxy.settings.clear({ scope: 'regular' }, function() {...});
, но, как я выяснил, только sync
может произойти до выхода в то время как async
нет, следовательно, chrome.proxy.settings.clear()
бесполезен.
Заранее благодарен за любые советы, предложения, решения / хаки и т. Д.