Feature-Policy
==============

O cabeçalho HTTP **`Feature-Policy`** provê um mecanismo para permitir ou proibir o uso de funcionalidades do navegador no seu próprio enquadramento, e o conteúdo dentro de quaisquer elementos `<iframe>` no documento.

**Nota:** Este cabeçalho ainda está em estado experimental, e é sujeito a mudança a qualquer momento. Tenha cautela quando implementando isso no seu site. O cabeçalho agora foi renomeado para `Permissions-Policy` na especificação, e este artigo irá eventualmente ser atualizado para refletir estas atualizações.

Para mais informação, veja o artigo principal Policy Feature.

|  |  |
| --- | --- |
| Tipo de cabeçalho | Response header (en-US) |
| Forbidden header name | sim |

Sintaxe
-------
```

Feature-Policy: <directive> <allowlist>
```


`<directive>`

A diretiva Feature Policy que irá aplicar a `allowlist`. Veja Diretivas abaixo para a lista de nomes de diretivas.

`<allowlist>`
{{page("Web/HTTP/Feature\_Policy/Using\_Feature\_Policy", "allowlist")}}
Diretivas
---------

`accelerometer` (en-US)

Controla se o documento atual é permitido de coletar informação sobre a aceleração do dispositivo através da interface `Accelerometer` (en-US).

`ambient-light-sensor` (en-US)

Controla se o documento atual é permitido de coletar informação sobre a quantidade de luz no ambiente ao redor do dispositivo através da interface `AmbientLightSensor` (en-US).

`autoplay` (en-US)

Controla se o documento atual é permitido de tocar a mídia requisitada automaticamente através da interface `HTMLMediaElement` (en-US). Quando esta política é desabilitada e não há ação do usuário, o `Promise` (en-US) retornado pelo `HTMLMediaElement.play()` (en-US) irá rejeitar com uma `DOMException` (en-US). O atributo *autoplay* em elementos `<audio>` e `<video>` será ignorado.

`battery` (en-US)

Controla se o uso da API de Status de Bateria é permitido. Quando esta política está desabilitada, o `Promise` retornado pelo`Navigator.getBattery()` irá rejeitar com um `NotAllowedError` `DOMException` (en-US).

`camera` (en-US)

Controla se o documento atual é permitido de usar entradas de dispositivos de vídeo. Quando esta política está desabilitada, o `Promise` retornado pelo `getUserMedia()` (en-US) irá rejeitar com um `NotAllowedError` `DOMException` (en-US).

`display-capture` (en-US)

Controla se o documento atual é permitido ou não de usar o método `getDisplayMedia()` (en-US) para capturar conteúdos de tela. Quando esta política está desabilitada, a `Promise` retornada pelo `getDisplayMedia()` irá rejeitar com um `NotAllowedError` se a permissão não for obtida para capturar os conteúdos da tela.

`document-domain` (en-US)

Controle se o documento atual é permitido de colocar `document.domain` (en-US). Quando esta política está desabilitada, tentativas em colocar `document.domain` (en-US) irão falhar e causar uma `SecurityError` `DOMException` (en-US) a ser jogada.

`encrypted-media` (en-US)

Controla se o documento atual é permitido de usar a API Extensões de Mídias Encriptadas (*Encrypted Media Extensions*) (en-US) (EME). Quando esta política é desabilitada, a `Promise` (en-US) retornada pelo `Navigator.requestMediaKeySystemAccess()` (en-US) irá rejeitar com um `DOMException` (en-US).

`execution-while-not-rendered`

Controla se as tarefas devem ser executadas em enquadramentos enquanto não são renderizados (e.g. se um enquadramento é `hidden` ou `display: none`).

`execution-while-out-of-viewport`

Controla se as tarefas devem ser executadas em enquadramentos enquanto eles estão fora da janela de visualização visível.

`fullscreen` (en-US)

Controla se o documento atual é permitido de usar `Element.requestFullScreen()` (en-US). Quando esta política está desabilitada, a `Promise` retornada rejeita com um `TypeError` `DOMException` (en-US).

`geolocation` (en-US)

Controla se o documento atual é permitido de usar a interface `Geolocation`. Quando a política está desabilitada, chamadas para `getCurrentPosition()` e `watchPosition()` irão causar aos *callbacks* da funções serem invocados com um `PositionError` de `PERMISSION_DENIED`.

`gyroscope` (en-US)

Controla se o documento atual é permitido de coletar informação sobre a orientação do dispositivo através da interface `Gyroscope` (en-US).

`layout-animations` (en-US)

Controla se o documento atual é permitido de mostrar animações de *layout*.

`legacy-image-formats` (en-US)

Controla se o documento atual é permitido de mostrar imagens em formatos legados.

`magnetometer` (en-US)

Controla se o documento atual é permitido de coletar informação sobre a orientação do dispositivo através da interface `Magnetometer` (en-US).

`microphone` (en-US)

Controla se o documento atual é permitido de usar entradas de dispositivos de áudio. Quando esta política está desabilitada, a `Promise` retornada pelo `MediaDevices.getUserMedia()` (en-US) irá rejeitar com um `NotAllowedError`.

`midi` (en-US)

Controla se o documento atual é permitido de usar a API Web MIDI (en-US). Quando esta política está desabilitada, a `Promise` retornada pelo `Navigator.requestMIDIAccess()` (en-US) irá rejeitar com um `DOMException` (en-US).

`navigation-override`

Controla a disponibilidade de mecanismos que habilitam o autor da página a tomar controle sobre o comportamento da navegação espacial (spatial navigation), ou cancelar completamente.

`oversized-images` (en-US)

Controla se o documento atual é permitido de baixar e mostrar imagens grandes.

`payment` (en-US)

Controla se o documento atual permite o uso da API de Requisição de Pagamento (*Payment Request API*) (en-US). Quando esta política está desabilitada, o construtor `PaymentRequest()` (en-US) irá jogar um `SecurityError` `DOMException` (en-US).

`picture-in-picture` (en-US)

Controla se o documento atual permite que um vídeo seja permitido tocar no modo *Picture-in-Picture* através da API correspondente.

`publickey-credentials-get` (en-US)

Controla se o documento atual é permitido de usar a API de Autenticação Web (en-US) para resgatar credenciais de chave pública já guardadas, i.e. através do `navigator.credentials.get({publicKey: ..., ...})` (en-US).

`sync-xhr` (en-US)

Controla se o documento atual é permitido de fazer requisições síncronas `XMLHttpRequest`.

`usb` (en-US)

Controla se o documento atual é permitido de usar a API WebUSB.

`vr` (en-US) 
Deprecated

Controla se o documento atual é permitido de usar a API WebVR. Quando esta política é desabilitada, o `Promise` retornado pelo `Navigator.getVRDisplays()` (en-US) irá rejeitar com um `DOMException` (en-US). Tenha em mente que o padrão WebVR está em processo de ser substituído pelo WebXR (en-US).

`wake-lock` (en-US)

Controla se o documento atual é permitido de usar a API Wake Lock para indicar que o dispositivo não deve entrar em modo de economia de energia.

`screen-wake-lock` (en-US)

Controla se o documento atual é permitido de utilizar a API Screen Wake Lock (en-US) para indicar se o dispositivo deve ou não escurecer a tela.

`xr-spatial-tracking` (en-US)

Controla se o documento atual é permitido ou não de usar a API WebXR Device (en-US) para intergir com a sessão WebXR.

Exemplos
--------

SecureCorp Inc. quer desabilitar o Microfone e as APIs de Geolocalização em sua aplicação. Isso pode ser feito entregando o seguinte cabeçalho de resposta HTTP para definir a política de funcionalidade:
```

Feature-Policy: microphone 'none'; geolocation 'none'
```


Especificando a palavra-chave `'none'` para a lista de origem, as funcionalidades especificadas serão desabilitadas para todos os contextos de navegaçnao (incluindo todos os *iframes*), independente da origem.

Especificações
--------------

| Specification |
| --- |
| Permissions Policy # permissions-policy-http-header-field |

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Veja também
-----------

* Feature Policy (en-US)
* Usando Feature Policy
* `Document.featurePolicy` (en-US) and `FeaturePolicy` (en-US)
* Feature-Policy Tester (Chrome Developer Tools extensão)
* `Content-Security-Policy`
* `Referrer-Policy`