L'autorisation "activeTab"

L'autorisation "activeTab" donne à une extension un accès temporaire à l'onglet actuellement actif lorsque l'utilisateur appelle l'extension, par exemple en cliquant sur son action. L'accès à cet onglet dure tant que l'utilisateur est sur la page en question. Il est révoqué s'il la quitte ou le ferme. Par exemple, si l'utilisateur appelle l'extension sur https://example.com, puis accède à https://example.com/foo, l'extension continuera d'avoir accès à la page. Si l'utilisateur accède à https://chromium.org, son accès est révoqué.

Cette méthode sert d'alternative pour de nombreuses utilisations de "<all_urls>", mais n'affiche aucun message d'avertissement lors de l'installation:

Sans "activeTab":

Sans ActiveTab

Avec "activeTab" :

Avec ActiveTab

Exemple

Consultez l'exemple d'extension 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
    });
  }
});

Motivation

Prenons l'exemple d'une extension Web Clipping comportant une action et un élément de menu contextuel. Il est possible que cette extension n'ait réellement besoin d'accéder aux onglets que lorsque l'utilisateur clique sur son action ou que son élément de menu contextuel est exécuté.

Sans "activeTab", cette extension devrait demander un accès complet et persistant à chaque site Web, afin de pouvoir fonctionner si l'utilisateur l'appelle. C'est beaucoup de pouvoir à confier à une extension aussi simple. Et si l’extension est compromise, l’attaquant obtient l’accès à tout ce qu’elle avait.

En revanche, une extension disposant de l'autorisation "activeTab" n'obtient l'accès à un onglet qu'en réponse à un geste explicite de l'utilisateur. Si l'extension est compromise, le pirate informatique doit attendre que l'utilisateur l'appelle avant d'obtenir l'accès. Et cet accès ne dure que jusqu'à ce que l'onglet soit consulté ou fermé.

Ce que permet "activeTab"

Lorsque l'autorisation "activeTab" est activée pour un onglet, une extension peut:

  • Appelez scripting.insertCSS() ou scripting.executeScript() dans cet onglet si l'autorisation "scripting" est également déclarée (comme dans l'exemple ci-dessus).
  • Obtenez l'URL, le titre et le favicon de cet onglet via une API qui renvoie un objet tabs.Tab (essentiellement, "activeTab" accorde temporairement l'autorisation d'hôte).
  • Interceptez les requêtes réseau dans l'onglet jusqu'à l'origine du frame principal de l'onglet à l'aide de l'API webRequest. L'extension obtient temporairement les autorisations d'hôte pour l'origine du frame principal de l'onglet.

Appeler activeTab

Les gestes d'utilisateur suivants activent l'autorisation "activeTab":