Commandes utilisateur pour les autorisations d'organisateur: guide de transition

Résumé

Ce qui change

À partir de Chrome 70, les utilisateurs ont la possibilité de restreindre l'accès des hôtes d'extension à une liste personnalisée de sites, ou de configurer des extensions pour qu'un clic soit nécessaire pour accéder à la page actuelle.

Quelles sont les API concernées ?

Cette modification affecte toutes les API affectées par les autorisations d'hôte spécifiées dans le fichier manifeste de votre extension, ainsi que par les scripts de contenu. Les API qui nécessitent des autorisations d'hôte incluent webRequest, cookies, tabs.executeScript() et tabs.insertCSS(), ainsi que l'exécution de requêtes multi-origines, par exemple via une XMLHTTPRequest ou l'API fetch().

Restreindre l'accès

Comment l'utilisateur peut-il limiter l'accès ?

Les utilisateurs peuvent choisir d'autoriser l'exécution de votre extension lorsqu'un utilisateur clique sur l'annonce, sur un ensemble spécifique de sites ou sur tous les sites demandés. Ces options sont présentées aux utilisateurs sur la page chrome://extensions ainsi que dans le menu contextuel de l'extension.

Capture d'écran des commandes du menu contextuel pour les autorisations d'hôte d'exécution, y compris les options permettant d'exécuter l'extension lors d'un clic, sur un site spécifique ou sur tous les sites.

Que se passe-t-il si un utilisateur choisit d'exécuter mon extension "lors d'un clic" ?

L'extension se comporte essentiellement comme si elle utilisait l'autorisation activeTab. L'extension dispose d'un accès temporaire à tout hôte sur lequel l'utilisateur clique dessus, si cet hôte a été demandé par l'extension (et qu'il ne s'agit pas d'un site restreint, comme chrome://settings). Lorsqu'elle est configurée pour s'exécuter lors d'un clic, Chrome attribue à votre extension un badge d'un cercle et d'une ombre projetée (voir ci-dessous) pour indiquer qu'elle demande l'accès à un site particulier.

Capture d'écran du badge Chrome ajouté à l'icône d'extension dans la barre d'outils

Que se passe-t-il si un utilisateur choisit d'exécuter mon extension sur des sites spécifiques ?

Votre extension est autorisée à s'exécuter automatiquement sur tous les sites choisis par l'utilisateur et peut y accéder sans autre action de la part de l'utilisateur. Sur les autres sites demandés par votre extension, mais qui n'ont pas été autorisés par l'utilisateur, le comportement est le même que si l'utilisateur avait défini l'extension pour qu'elle s'exécute en cas de clic.

Que se passe-t-il si un utilisateur choisit d'exécuter mon extension sur tous les sites ?

L'extension peut accéder automatiquement à tous les sites demandés dans le fichier manifeste.

Comportements de l'API

API Web Request

L'extension peut toujours intercepter, modifier et bloquer les requêtes provenant des sites auxquels elle a accès. Pour les sites auxquels l'extension n'a pas accès, Chrome attribue un badge à l'extension pour indiquer qu'elle demande l'accès à la page. L'utilisateur peut ensuite accorder l'accès à l'extension. Chrome l'invite ensuite à actualiser la page pour permettre à votre extension d'intercepter les requêtes réseau.

Scripts de contenu, tabulations.executeScript(), tabulations.insertCSS()

L'extension peut toujours injecter automatiquement des scripts et des feuilles de style pour tous les sites auxquels elle a accès. Pour les sites auxquels l'extension n'a pas accès, Chrome attribue un badge à l'extension pour indiquer qu'elle demande à accéder à la page. L'utilisateur peut alors accorder l'accès à l'extension. Si le script de contenu a été configuré pour injecter dans document_idle, le script sera injecté immédiatement. Sinon, Chrome invite l'utilisateur à actualiser la page pour permettre à votre extension d'injecter des scripts plus tôt dans le chargement de la page (au début ou à la fin du document). Les rappels des méthodes tabs.executeScript() et tabs.insertCSS() ne sont invoqués que si l'utilisateur autorise l'accès au site.

Cookies et page d'arrière-plan XHR

L'extension peut toujours lire et modifier les cookies à partir de laquelle elle a accès, et effectuer une requête XHR multi-origine sur les sites auxquels elle a accès. Étant donné qu'aucun onglet n'est associé à une page d'extension accédant aux cookies d'une autre origine ou à un XHRing vers un autre hôte, Chrome ne badge pas l'extension pour indiquer à l'utilisateur que l'extension demande à accéder à un site. Toute tentative d'accès à un cookie d'un autre site ou d'exécution d'une requête XHR multi-origine échouera et renverra une erreur comme si le fichier manifeste de l'extension n'incluait pas l'autorisation d'hôte. Dans de tels cas, nous vous encourageons à utiliser des autorisations facultatives afin de permettre à l'utilisateur d'accorder l'accès à l'environnement d'exécution à différents sites.

L'exemple ci-dessous montre comment cela peut fonctionner pour l'API de cookies.

Avant :

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

Après :

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

Migration

Quelles sont les bonnes pratiques pour éviter tout impact négatif ?

Les extensions peuvent utiliser les API facultatives, activeTab et declarativeContent pour suivre les bonnes pratiques. Les autorisations facultatives sont accordées au moment de l'exécution et permettent à l'extension de demander un accès spécifique à un site. L'autorisation activeTab n'est pas affectée et les extensions qui l'utilisent continuent de fonctionner normalement. L'API declarativeContent se substitue à de nombreux besoins liés à l'injection de scripts dans chaque page.

Qu'advient-il des paramètres de mes utilisateurs actuels ?

Cette modification n'aura pas d'incidence immédiate sur les autorisations actuellement accordées à votre extension. En d'autres termes, elle continuera de fonctionner comme avant, sauf si l'utilisateur prend des mesures pour restreindre les sites auxquels il est autorisé à accéder. Dans les prochaines versions, Chrome offrira davantage de commandes aux utilisateurs pour leur permettre d'ajuster les paramètres.

Comment vérifier si mon extension est autorisée à s'exécuter sur un site ?

Vous pouvez utiliser l'API permissions.contains() pour vérifier si l'accès à une origine donnée a été accordé à votre extension.