1. 序論
この文書は、Webプラットフォーム上の強力な 機能を使用する権限を要求するための関数を規定します。
さまざまなWeb APIには、それらを使用する開発者の意図を通知する方法がばらばらにあります:
-
[notifications] APIは、開発者が 権限を要求し、権限状態を明示的に確認できるようにします。
-
[geolocation-API]は、 権限要求を位置情報要求と混同しています。
開発者が、すべての強力な機能について従うべき単一のパターンを持っている場合、 権限関連コードを設計することはより容易になります。
2. 要求 API
partial interface Permissions {Promise <PermissionStatus >request (object ); };permissionDesc
request(permissionDesc)メソッドが
呼び出されたとき、ユーザーエージェントは、パラメーターpermissionDescを渡して、次のアルゴリズムをMUSTで実行します:
-
rootDescを、permissionDescが参照するオブジェクトを、
PermissionDescriptor型のIDL値に変換したものとします。 これが例外を投げる場合、 その例外で拒否されたpromiseを返し、これらの 手順を中止します。 -
typedDescriptorを、permissionDescが参照するオブジェクトを、
rootDesc.の 権限記述子型の IDL値に変換したものとします。これが例外を投げる場合、その 例外で拒否されたpromiseを返し、これらの手順を中止します。name -
promiseを、新しく作成された
Promiseとします。 -
promiseを返し、次の手順を非同期に継続します。
-
typedDescriptorについてPermissionStatusを作成する手順を実行し、 statusをその結果とします。
-
typedDescriptor.nameで名付けられた機能の権限要求アルゴリズムを、 typedDescriptorおよびstatusを 引数として実行します。 -
前の手順が例外を投げた場合、その 例外でpromiseを拒否します。
-
それ以外の場合、promiseをstatusで解決します。
3. 権限レジストリ内の追加フィールド
権限 レジストリ内の強力な機能は、さらに権限要求 アルゴリズムを定義します:
- 入力
- 挙動
-
さらなる 権限の要求内のアルゴリズムを使用して、権限を増やそうとするために必要な任意のプロンプトをユーザーに表示し、 権限結果型のインスタンスを 一致するように更新します。
- 返り値
-
何も返しませんが、要求が例外的に失敗しうる場合は例外を投げることがあります。 (単に権限が拒否されることは例外ではありません。)
- 呼び出し元の例
- 既定
-
指定されない場合、これは既定の権限要求 アルゴリズムになります。
3.1. 既定の要求アルゴリズム
既定の権限要求アルゴリズムは、PermissionDescriptor
permissionDescおよびPermissionStatus
statusが与えられたとき、次の手順を実行します:
-
permissionDescおよびstatusに対して既定の権限照会アルゴリズムを実行します。
-
status.stateが"prompt"でない場合、 これらの手順を中止します。 -
permissionDescを使用する権限を要求します。
-
permissionDescおよびstatusに対して既定の権限照会アルゴリズムを 再度実行します。
環境設定オブジェクト内に権限を永続的に保存しないブラウザーでは、これは常に
"prompt"を返しますが、 それでもユーザーに不要なプロンプトを表示します。これは、 適切なオブジェクト能力を決して返せないため、 既定の権限要求アルゴリズムを 使用する権限が存在すべきでないことを意味するかもしれません。
4. セキュリティ上の考慮事項
セキュリティ上の考慮事項は特定されていません。
5. プライバシー上の考慮事項
プライバシー上の考慮事項は特定されていません。