Atualizar as configurações de URL do ouvinte do WebExtension webRequest.onBeforeRequest a partir de um script separado

Atualmente, estou criando uma WebExtension na qual registro um ouvinte nas solicitações da Web que estão sendo feitas, como:

main.js:

chrome.webRequest.onBeforeRequest.addListener(main_function, {urls: sites}, ["blocking"]);

Ondesites é uma matriz que contém uma lista de URLs carregados de uma página de configurações.

Ao alterar essas configurações, que vivem em arquivos HTML e JavaScript separados, desejo atualizar o ouvinte mencionado para agora conter a nova lista de sites.

Estou tendo problemas para obter acesso a este ouvinte no arquivo JavaScript de configurações, como

 onBeforeRequest.removeListener(callback)

requer o retorno de chamada original como argumento.

Alguém sabe como posso, a partir de um arquivo JavaScript diferente, atualizar esse ouvinte?

Exemplo de problema (3 arquivos):

manifest.json:

{
    ...
    "permissions": ["webRequest", "webRequestBlocking", "storage"],
    "background: { "scripts": ["main.js"] },
    "options_ui": { "page":"settings.html" }
}

onde o settings.html, por sua vez, carrega o settings.js.

main.js:

/* I wont type out the code to load this array from settings. You will have to imagine it being loaded */
all_urls = ["http://www.google.com", "http://www.stackoverflow.com"];

function example_callback() {
    console.log("Hello World!");
}

chome.webRequest.onBeforeRequest.addListener(example_callback, {urls: all_urls}, ["blocking"]);

settings.js:

/* Again, imagine that the settings are edited by this file and saved to storage. */
all_urls = ["https://www.google.com"];

/* This is where the problem lies. Listener cannot be removed, as callback is not available in this file */
chrome.webRequest.onBeforeRequest.removeListener(); // Wont work
chrome.webRequest.onBeforeRequest.addListener(example_callback, {urls: all_urls}, ["blocking"]);

questionAnswers(2)

yourAnswerToTheQuestion