Actualice la configuración de URL de escucha de WebExtension webRequest.onBeforeRequest desde un script separado

Actualmente estoy creando una WebExtension en la que registro un escucha en las solicitudes web que se realizan, como tales:

main.js:

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

dóndesites es una matriz que contiene una lista de URL cargadas desde una página de configuración.

Al cambiar estas configuraciones, que viven en archivos HTML y JavaScript separados, quiero actualizar el oyente antes mencionado para que ahora contenga la nueva lista de sitios.

Tengo problemas para obtener acceso a este oyente desde el archivo JavaScript de configuración, como

 onBeforeRequest.removeListener(callback)

requiere la devolución de llamada original como argumento.

¿Alguien sabe cómo puedo, desde un archivo JavaScript diferente, actualizar este oyente?

Ejemplo de problema (3 archivos):

manifest.json:

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

donde settings.html a su vez carga 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"]);

Respuestas a la pregunta(2)

Su respuesta a la pregunta