Permissions-Policy
==================

HTTP の **`Permissions-Policy`** ヘッダーは、自身のフレームおよび文書内の `<iframe>` 要素で、ブラウザーの機能を使用することを許可または拒否する仕組みを提供します。

詳しくは、権限ポリシーの記事を参照してください。

|  |  |
| --- | --- |
| ヘッダー種別 | レスポンスヘッダー |
| 禁止ヘッダー名 | はい |

構文
--
```

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


`<directive>`

`allowlist` に適用される権限ポリシーディレクティブです。許可されているディレクティブ名の一覧は、以下のディレクティブを参照してください。

`<allowlist>`

許可リストは、以下の値のうち 1 つ以上を取るオリジンの空白区切りのリストです。

* `*`: この機能は、この文書と、含まれるすべての閲覧コンテキスト (iframe) でオリジンに関係なく許可されます。
* `()`: (空の許可リスト): この機能は最上位および含まれる閲覧コンテキストで無効になります。
* `self`: この機能は、この文書と、含まれるすべての閲覧コンテキスト (iframe) のうち、同じオリジンのものに許可されます。
* `src`: (iframe の `allow` 属性のみ) この iframe に読み込まれた文書が iframe の src 属性の URL と同じオリジンから来ている限り、この機能はこの iframe で許可されます。

**メモ:** `src` のオリジンは iframe の `allow` 属性の中でのみ使用され、これが*既定の* `allowlist` の値です。
* <origin>: この機能は特定のオリジン (例えば、 `https://example.com`) で許可されます。オリジンは空白で区切ってください。ただし、 `<iframe>` の `allow` 属性には引き継がれないことに注意してください。

`*` の値 (すべてのオリジンで有効) または `()` (すべてのオリジンで無効) は単独でのみ使用できますが、 `self` と `src` は一つ以上のオリジンと一緒に使用することができます。

機能はそれぞれ、既定の許可リストを持つよう定義されています。

**メモ:** ディレクティブにはデフォルトの allowlist があり、 `Permissions-Policy` HTTP ヘッダーでは常に `*`, `self` または `none` になります。これらは個々のディレクティブのリファレンスページで指定されています。 `<iframe>` の `allow` 属性では、デフォルトの動作は常に `src` です。


ブラウザーがサポートしている場合、許可リストで複数の異なるサブドメインを明示的に指定する代わりに許可ポリシーのオリジンにワイルドカードを含めることができます。

そのため以下のような指定は


```http
("https://example.com" "https://a.example.com" "https://b.example.com" "https://c.example.com")
```


このように書き換えることができます。


```http
("https://example.com" "https://*.example.com")
```


> 
> **Note:** `"https://*.example.com"` は `"https://example.com"` とは別のオリジンになります。
> 
> 
> 

ディレクティブ
-------

`accelerometer`

現在の文書が、端末の加速度に関する情報を、 `Accelerometer` インターフェイスを通じて収集することを許可するかどうかを制御します。

`ambient-light-sensor`

現在の文書が、端末の周囲の環境における光量についての情報を、 `AmbientLightSensor` インターフェイスを通じて収集することを許可するかどうかを制御します。

`autoplay`

現在の文書で `HTMLMediaElement` インターフェイスがメディアの自動再生をリクエストすることを無効にするかどうかを制御します。このポリシーが有効であり、ユーザーによる操作がなかった場合、 `HTMLMediaElement.play()` が返す `Promise` が `DOMException` で拒否されます。 `<audio>` および `<video>` 要素の `autoplay` 属性は無視されます。

`battery`

Battery Status API の使用を許可するかどうかを制御します。このポリシーが無効になっている場合、 `Navigator.getBattery()` が返す `Promise` は `NotAllowedError` の `DOMException` で拒否されます。

`camera`

現在の文書が動画入力機器を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 `getUserMedia()` が返す `Promise` は `NotAllowedError` の `DOMException` で拒否されます。

`display-capture`

現在の文書が `getDisplayMedia()` メソッドを使用して画面の内容をキャプチャすることを許可するかどうかを制御します。このポリシーが無効であれば、表示内容をキャプチャする許可がない場合、 `getDisplayMedia()` から返却されるプロミスが `NotAllowedError` で拒否されます。

`document-domain`

現在の文書が `document.domain` を設定することを許可するかどうかを制御します。このポリシーが無効な場合、 `document.domain` を設定しようとすると失敗し、 `SecurityError` の `DOMException` が発生します。

`encrypted-media`

現在の文書が Encrypted Media Extensions (en-US) API (EME) を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 `Navigator.requestMediaKeySystemAccess()` (en-US) から返却された `Promise` が `DOMException` で拒否されます。

`execution-while-not-rendered` (en-US)

表示されないフレーム内 (例えば iframe が `hidden` または `display: none` の場合) でタスクを実行するかどうかを制御します。

`execution-while-out-of-viewport` (en-US)

ビューポートの見える範囲外にあるフレーム内のタスクを実行するかどうかを制御します。

`fullscreen`

現在の文書が `Element.requestFullscreen()` を使用することを許可するかどうかを制御します。このポリシーが無効であれば、返却された `Promise` が `TypeError` で拒否されます。

`gamepad` (en-US)

 現在の文書が Gamepad API を使用することを許可するかどうかを制御します。
 このポリシーが無効であれば、 `Navigator.getGamepads()` の呼び出しで `SecurityError` の `DOMException` が発生するようになり、 `gamepadconnected` および `gamepaddisconnected` イベントは発生しなくなります。


`geolocation`

現在の文書が `Geolocation` インターフェイスを使用することを許可するかどうかを制御します。このポリシーが無効であれば、 `getCurrentPosition()` および `watchPosition()` を呼び出すと、関数のコールバックが呼び出され、 `PositionError` コードが `PERMISSION_DENIED` になります。

`gyroscope` (en-US)

現在の文書が `Gyroscope` インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。

`layout-animations` (en-US)

現在の文書がレイアウトアニメーションを表示することを許可するかどうかを制御します。

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

現在の文書が古い形式の画像を表示することを許可するかどうかを制御します。

`magnetometer` (en-US)

現在の文書が `Magnetometer` インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。

`microphone`

現在の文書がオーディオ入力端末を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 `MediaDevices.getUserMedia()` で返却されたプロミス (`Promise`) が `NotAllowedError` の `DOMException` で拒否されます。

`midi`

現在の文書が Web MIDI API を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 `Navigator.requestMIDIAccess()` から返却された `Promise` が `DOMException` で拒否されます。

`navigation-override`

ページ作成者が 空間ナビゲーションの動作を制御したり、完全にキャンセルしたりすることができる仕組みの利用可能性を制御します。

`oversized-images` (en-US)

現在の文書が大きな画像をダウンロードして表示することを許可するかどうかを制御します。

`payment`

現在の文書が Payment Request API を使用することを許可するかどうかを制御します。このポリシーが有効であれば、 `PaymentRequest()` コンストラクターで `SecurityError` の `DOMException` が発生します。

`picture-in-picture`

現在の文書が、該当する API を使用して Picture-in-Picture モードで動画を再生することを許可するかどうかを制御します。

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

現在の文書が Web Authentication API を使用して、すでに保存されている公開鍵資格情報を再取得することを許可するかどうかを制御します (例: `navigator.credentials.get({publicKey: ..., ...})` (en-US))。

`speaker-selection` (en-US)

現在の文書が Audio Output Devices API を使用して、スピーカーを列挙したり選択したりすることを許可するかどうかを制御します。

`sync-xhr` (en-US)

現在の文書が同期 `XMLHttpRequest` リクエストを行うことを許可するかどうかを制御します。

`unoptimized-images` (en-US) 
Experimental

Non-standard

現在の文書が最適化されていない画像をダウンロードしたり表示したりすることを許可するかどうかを制御します。

`unsized-media` (en-US) 
Experimental

Non-standard

現在の文書が初期レイアウトの完了後にメディア要素の大きさを変更することを許可するかどうかを制御し案す。

`usb` (en-US)

現在の文書が WebUSB API を使用することを許可するかどうかを制御します。

`screen-wake-lock`

現在の文書が Screen Wake Lock API を使用して、端末が画面をオフにしたり暗くしたりしてはいけないことを示すことを許可するかどうかを制御します。

`web-share`

現在の文書が Web Share API の `Navigator.share()` を使用して、テキスト、リンク、画像、その他のコンテンツをモバイルアプリなどのユーザーが任意に選択した任意の場所に共有することを許可するかどうかを制御します。

`xr-spatial-tracking`

現在の文書が WebXR Device API を使用して WebXR セッションと対話することを許可するかどうかを制御します。

例
-

SecureCorp Inc. が、アプリケーションでマイクと Geolocation API を無効にしたがっているとします。以下の権限ポリシーを設定する HTTP レスポンスヘッダーを配信することで実現できます。
```

Permissions-Policy: microphone=(), geolocation=()
```


オリジンのリストに `()` キーワードを指定すると、指定された機能がオリジンに関係なく、すべての閲覧コンテキスト (iframe を含む) で無効になります。

仕様書
---

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

ブラウザーの互換性
---------

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

関連情報
----

* 権限ポリシー
* `Document.featurePolicy` および `FeaturePolicy` (en-US)
* Feature-Policy Tester (Chrome Developer Tools extension)
* `Content-Security-Policy`
* `Referrer-Policy`