El permiso "activeTab"

El permiso "activeTab" otorga a una extensión acceso temporal a la pestaña actualmente activa cuando el usuario invoca la extensión, por ejemplo, cuando hace clic en su acción. El acceso a la pestaña durará mientras el usuario esté en esa página y se revoca cuando el usuario sale de la pestaña o la cierra. Por ejemplo, si el usuario invoca la extensión en https://example.com y luego navega a https://example.com/foo, la extensión seguirá teniendo acceso a la página. Si el usuario navega a https://chromium.org, se revoca el acceso.

Esto sirve como alternativa para muchos usos de "<all_urls>", pero no muestra ningún mensaje de advertencia durante la instalación:

Sin "activeTab":

Sin ActiveTab

Si usas "activeTab", ejecuta el siguiente comando:

Con ActiveTab

Ejemplo

Consulta la extensión de muestra de Page Redder:

manifest.json:

{
  "name": "Page Redder",
  "version": "2.0",
  "permissions": [
    "activeTab",
    "scripting"
  ],
  "background": {
    "service_worker": "service-worker.js"
  },
  "action": {
    "default_title": "Make this page red"
  },
  "manifest_version": 3
}

service-worker:

function reddenPage() {
  document.body.style.backgroundColor = 'red';
}

chrome.action.onClicked.addListener((tab) => {
  if (!tab.url.includes('chrome://')) {
    chrome.scripting.executeScript({
      target: { tabId: tab.id },
      func: reddenPage
    });
  }
});

Motivación

Considera una extensión de recorte web que tiene una acción y un elemento de menú contextual. Es posible que esta extensión solo necesite acceder a las pestañas cuando se hace clic en su acción o cuando se ejecute su elemento de menú contextual.

Sin "activeTab", esta extensión debería solicitar acceso completo y persistente a cada sitio web para que pueda hacer su trabajo si el usuario la llama. Es mucho poder confiar en una extensión tan simple. Además, si la extensión se ve comprometida, el atacante obtiene acceso a todo lo que tenía la extensión.

Por el contrario, una extensión con el permiso "activeTab" solo obtiene acceso a una pestaña en respuesta a un gesto explícito del usuario. Si la extensión se ve comprometida, el atacante deberá esperar a que el usuario invoque la extensión para obtener acceso. Y ese acceso solo dura hasta que se navega por la pestaña o se cierra.

Qué permite "activeTab"

Mientras el permiso "activeTab" esté habilitado para una pestaña, una extensión puede hacer lo siguiente:

  • Llama a scripting.insertCSS() o scripting.executeScript() en esa pestaña si también se declara el permiso "scripting" (como en el ejemplo anterior).
  • Obtén la URL, el título y el ícono de página de esa pestaña a través de una API que muestre un objeto tabs.Tab (básicamente, "activeTab" otorga permiso de host de manera temporal).
  • Intercepta solicitudes de red en la pestaña al origen del marco principal de la pestaña mediante la API de webRequest. La extensión obtiene temporalmente permisos de host para el origen del marco principal de la pestaña.

Cómo invocar ActiveTab

Los siguientes gestos del usuario habilitan el permiso "activeTab":