Блокировка сетевых запросов Chrome до инициализации расширения - PullRequest
0 голосов
/ 04 января 2019

Я работаю над расширением прокси для браузера 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() бесполезен.

Заранее благодарен за любые советы, предложения, решения / хаки и т. Д.

...