Controles del usuario para los permisos de organizador: guía de transición

Resumen

¿Cuáles son los cambios?

A partir de Chrome 70, los usuarios tienen la capacidad de restringir el acceso del host de la extensión a una lista personalizada de sitios o de configurar las extensiones de modo que requieran un clic para obtener acceso a la página actual.

¿Qué APIs se ven afectadas?

Este cambio afecta a todas las APIs que se ven afectadas por los permisos de host especificados en el manifiesto de tu extensión, así como por las secuencias de comandos de contenido. Las APIs que requieren permisos de host incluyen webRequest, cookies, tabs.executeScript() y tabs.insertCSS(), y realizar solicitudes de origen cruzado, como a través de una XMLHTTPRequest o la API de fetch().

Restringe el acceso

¿Cómo puede el usuario restringir el acceso?

Los usuarios pueden optar por permitir que tu extensión se ejecute cuando se hace clic en ella, en un conjunto específico de sitios o en todos los sitios solicitados. Estas opciones se presentan a los usuarios en la página de chrome://extensions y en el menú contextual de la extensión.

Captura de pantalla de los controles del menú contextual para los permisos del host de tiempo de ejecución, incluidas las opciones para ejecutar la extensión con un clic, en un sitio específico o en todos los sitios.

¿Qué sucede si un usuario elige ejecutar mi extensión "al hacer clic"?

En esencia, la extensión se comporta como si usara el permiso activeTab. La extensión recibe acceso temporal a cualquier host en el que el usuario haga clic en ella, si la extensión lo solicitó (y no es un sitio restringido, como chrome://settings). Cuando se configura para ejecutarse al hacer clic, Chrome asigna a la extensión un círculo y una sombra paralela (consulta a continuación) para indicar que solicita acceso a un sitio en particular.

Captura de pantalla de la insignia que agrega Chrome al ícono de la extensión en la barra de herramientas

¿Qué sucede si un usuario elige ejecutar mi extensión en sitios específicos?

La extensión puede ejecutarse automáticamente en cualquier sitio que el usuario haya elegido y puede acceder a ellos sin necesidad de que el usuario realice ninguna acción. En otros sitios en los que tu extensión solicitó, pero el usuario no otorgó permiso, el comportamiento es el mismo que si el usuario hubiera configurado la extensión para que se ejecute cuando se haga clic.

¿Qué sucede si un usuario elige ejecutar mi extensión en todos los sitios?

La extensión puede acceder automáticamente a cualquier sitio solicitado en el manifiesto.

Comportamientos de la API

API de solicitud web

La extensión aún podrá interceptar, modificar y bloquear las solicitudes de los sitios a los que tiene acceso. En el caso de los sitios a los que la extensión no tiene acceso, Chrome la identifica para indicar que solicita acceso a la página. El usuario puede otorgar acceso a la extensión; luego, Chrome le pide al usuario que actualice la página para permitir que la extensión intercepte las solicitudes de red.

Secuencias de comandos de contenido, tab.executeScript(), rows.insertCSS()

La extensión aún puede insertar secuencias de comandos y hojas de estilo automáticamente en cualquier sitio a los que tenga acceso. En el caso de los sitios a los que la extensión no tiene acceso, Chrome la identifica para indicar que la extensión solicita acceso a la página. Luego, el usuario podrá otorgar acceso a la extensión. Si la secuencia de comandos de contenido se configuró para insertarse en document_idle, la secuencia de comandos se insertará de inmediato. De lo contrario, Chrome solicitará al usuario que actualice la página para permitir que la extensión inserte secuencias de comandos antes en la carga de la página (en document_start o document_end). Las devoluciones de llamada para los métodos tabs.executeScript() y tabs.insertCSS() solo se invocan si el usuario otorga acceso al sitio.

Cookies y página de fondo XHR

La extensión aún puede leer y modificar las cookies de los sitios a los que tiene acceso, así como realizar una XHR de origen cruzado en los sitios. Como no hay una pestaña asociada con una página de extensión que acceda a las cookies de otro origen o mediante XHR a otro host, Chrome no otorga una insignia a la extensión para indicarle al usuario que la extensión solicita acceder a un sitio. Si intentas acceder a una cookie de otro sitio o crear una XHR de origen cruzado, se mostrará un error como si el manifiesto de la extensión no incluyera el permiso de host. En estos casos, te recomendamos que uses permisos opcionales para permitir que el usuario otorgue acceso de tiempo de ejecución a diferentes sitios.

En el siguiente ejemplo se muestra cómo podría funcionar esto para la API de cookies.

Antes:

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

Despué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
      }
    });

Migración

¿Cuáles son las prácticas recomendadas para evitar verse afectados negativamente?

Las extensiones pueden usar las APIs de permisos opcionales, activeTab y declarativeContent para seguir las prácticas recomendadas. Los permisos opcionales se otorgan durante el tiempo de ejecución y permiten que la extensión solicite acceso específico a un sitio. El permiso activeTab no se ve afectado, y las extensiones que lo usan continúan funcionando normalmente. La API de declarativeContent reemplaza varias necesidades para insertar secuencias de comandos en todas las páginas.

¿Qué sucederá con la configuración de mis usuarios actuales?

Este cambio no afectará de inmediato los permisos actuales otorgados a tu extensión. Es decir, seguirá funcionando como antes, a menos que el usuario tome medidas para restringir los sitios a los que tiene permitido acceder. En versiones futuras, Chrome proporcionará más controles a los usuarios para ajustar la configuración.

¿Cómo puedo comprobar si mi extensión tiene permiso para ejecutarse en un sitio?

Puedes usar la API de permissions.contains() para verificar si tu extensión tiene acceso a un origen determinado.