iframeのアプリケーションにPermissionを委譲する仕様

追記 20180918
Chromeではこういう形で実装されました (W3Cで提案されているものとは別物)
asnokaze.hatenablog.com

Permission Delegation To Embedded Web Applications

iframeで埋め込まれたクロスオリジンのWebアプリケーションがPermissionを要求するとこともあります、しかしユーザにとっても分かりづらく、扱いづらい点があります。Googleの調査でも、ユーザはiframe内のアプリケーションによるPermission要求を正しく理解していないという結果が出ているようです。


W3Cでは、公式のドキュメントにはなってませんが、「Permission Delegation To Embedded Web Applications」という、 iframeなどで埋め込まれたWebアプリケーションへのPermission委譲の仕様が議論されています。Chromeでも実装への議論がメーリングリスト上で行なわれています。


基本的に、埋め込む側がPermissionを保持し、そのPermissionを埋め込まれた側に委譲する仕組みです。こうすることで、ユーザとしてもどのオリジンにPermissionを許可しているか分かりやすくなります。ブラウザがPermissionを記憶したり解除する際もiframeを埋め込んでいるオリジンの管理だけで良くなりますし、管理画面も分かりやすくなるでしょう。


さらに、今までは埋め込まれる側がPermissionを要求することを規制できませんでしたが、委譲方式をとることで埋め込む側がコントロールできるようになります。


ただし、互換性の問題や、ユーザは今まで通り自身でPermission管理を行いたいという要望もあるかもしれません。

委譲方法

委譲方法は、iframeの属性に指定する方法と、JavaScriptから実行する方法があります。


以下の通り、permissionsに要求するpermissionを指定することで委譲することが出来ます。

<iframe id="embedee" src="https://maps.example.com/" permissions="geolocation"></iframe>


また、Javascriptからnavigator.permissions.delegateと実行することで指定されたiframeにPermissionを委譲出来ます。

var iframe = document.getElementById('embedee');
navigator.permissions.delegate({embedee: iframe, name: 'geolocation'}).then(
  function() {
    // Delegated geolocation.
  }).catch(function() {
    // Delegation failed.
  });


JavaScriptからは委譲を辞めることも出来ます。

navigator.permissions.undelegate({embedee: iframe, name: 'geolocation'});