Controlli utente per le autorizzazioni host: guida alla transizione

Riepilogo

Cosa cambierà?

A partire da Chrome 70, gli utenti hanno la possibilità di limitare l'accesso dell'host delle estensioni a un elenco personalizzato di siti o di configurare le estensioni in modo che richiedano un clic per ottenere l'accesso alla pagina corrente.

Quali API sono interessate?

Questa modifica interessa tutte le API interessate dalle autorizzazioni host specificate nel file manifest dell'estensione e dagli script di contenuti. Le API che richiedono autorizzazioni host includono webRequest, cookies, tabs.executeScript() e tabs.insertCSS() e l'esecuzione di richieste multiorigine, ad esempio tramite un'API XMLHTTPRequest o fetch().

Limitazione dell'accesso

In che modo l'utente può limitare l'accesso?

Gli utenti possono scegliere di consentire la pubblicazione della tua estensione al clic, su un insieme specifico di siti o su tutti i siti richiesti. Queste opzioni vengono presentate agli utenti nella pagina chrome://extensions e nel menu contestuale dell'estensione.

Uno screenshot dei controlli del menu contestuale per le autorizzazioni dell'host di runtime, incluse le opzioni per eseguire l'estensione al clic, su un sito specifico o su tutti i siti.

Che cosa succede se un utente sceglie di pubblicare la mia estensione "al clic"?

Sostanzialmente, l'estensione si comporta come se utilizzasse l'autorizzazione activeTab. All'estensione viene concesso l'accesso temporaneo a qualsiasi host su cui l'utente fa clic sull'estensione, se tale host è stato richiesto dall'estensione (e non è un sito con limitazioni, ad esempio chrome://settings). Se impostata per l'esecuzione al clic, Chrome assegna all'estensione un badge con un cerchio e un'ombra (vedi sotto) per indicare che richiede l'accesso a un determinato sito.

Uno screenshot del badge che Chrome aggiunge all'icona dell'estensione nella barra degli strumenti

Che cosa succede se un utente sceglie di pubblicare la mia estensione su siti specifici?

L'estensione può essere pubblicata automaticamente su tutti i siti scelti dall'utente e può accedervi senza ulteriori azioni dell'utente. Su altri siti per cui la tua estensione ha richiesto l'estensione, ma per cui l'utente non ha concesso l'autorizzazione, si comporta come se l'utente avesse impostato l'estensione al clic.

Che cosa succede se un utente sceglie di pubblicare la mia estensione su tutti i siti?

L'estensione può accedere automaticamente a qualsiasi sito richiesto nel manifest.

Comportamenti delle API

API Web Request

L'estensione può comunque intercettare, modificare e bloccare qualsiasi richiesta proveniente dai siti a cui ha accesso. Per i siti a cui l'estensione non ha accesso, Chrome assegna un badge all'estensione per indicare che l'estensione richiede l'accesso alla pagina. L'utente può quindi concedere l'accesso all'estensione e Chrome chiede all'utente di aggiornare la pagina per consentire all'estensione di intercettare le richieste di rete.

Script di contenuti, tabs.executeScript(), tabs.insertCSS()

L'estensione può comunque inserire automaticamente script e fogli di stile per qualsiasi sito a cui ha accesso. Per i siti a cui l'estensione non ha accesso, Chrome assegna un badge all'estensione per indicare che l'estensione richiede l'accesso alla pagina. L'utente potrà quindi concedere l'accesso all'estensione. Se lo script dei contenuti è stato impostato per l'inserimento in document_idle, lo script viene inserito immediatamente. In caso contrario, Chrome chiede all'utente di aggiornare la pagina per consentire all'estensione di inserire gli script prima del caricamento pagina (all'indirizzo document_start o document_end). I callback per i metodi tabs.executeScript() e tabs.insertCSS() vengono richiamati solo se l'utente concede l'accesso al sito.

Cookie e pagina di sfondo XHR

L'estensione può comunque leggere e modificare eventuali cookie ed eseguire un XHR multiorigine per i siti a cui ha accesso. Poiché non esiste una scheda associata a una pagina di estensione che accede a cookie o XHRing di un'altra origine a un altro host, Chrome non assegna un badge all'estensione per indicare all'utente che l'estensione richiede l'accesso a un sito. Il tentativo di accedere a un cookie per un altro sito o di creare un XHR multiorigine non riuscirà e genererà un errore, come se il manifest dell'estensione non includesse l'autorizzazione host. In questi casi, ti invitiamo a utilizzare autorizzazioni facoltative per consentire all'utente di concedere l'accesso di runtime a siti diversi.

L'esempio seguente illustra come potrebbe funzionare per l'API dei cookie.

Prima:

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

Dopo:

{
  ...
  "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
      }
    });

Migrazione

Quali sono le best practice per evitare di subire conseguenze negative?

Le estensioni possono utilizzare le API autorizzazioni facoltative, activeTab e declarativeContent per seguire le best practice. In fase di runtime vengono concesse autorizzazioni facoltative e consentono all'estensione di richiedere l'accesso specifico a un sito. L'autorizzazione activeTab non è interessata e le estensioni che la utilizzano continuano a funzionare normalmente. L'API declarativeContent sostituisce molte delle esigenze dell'inserimento di script in ogni pagina.

Che cosa succede alle impostazioni dei miei utenti attuali?

Questa modifica non avrà effetto immediato sulle autorizzazioni attuali concesse alla tua estensione. In altre parole, continuerà a funzionare come prima, a meno che l'utente non intervenga per limitare i siti a cui gli è consentito accedere. Nelle versioni future, Chrome fornirà agli utenti ulteriori controlli per modificare le impostazioni.

Come faccio a verificare se la mia estensione è autorizzata a essere eseguita su un sito?

Puoi utilizzare l'API permissions.contains() per verificare se all'estensione è stato concesso l'accesso a una determinata origine.