| <!DOCTYPE html> |
| <body> |
| <script> |
| 'use strict'; |
| const same_origin_src = '/permissions-policy/resources/permissions-policy-allowedfeatures.html'; |
| const cross_origin_src = 'https://{{domains[www1]}}:{{ports[https][0]}}' + same_origin_src; |
| const subframe_header_policy = '?pipe=header(Permissions-Policy,fullscreen='; |
| const policy_all = '*'; |
| const policy_self = 'self'; |
| const policy_none = '\\(\\)'; |
| |
| // Messages gathered from subframes. When all subframe messages are gathered, |
| // it will be send back to top level frame. |
| const subframe_messages = []; |
| |
| let local_frame_all = document.createElement('iframe'); |
| let local_frame_self = document.createElement('iframe'); |
| let local_frame_none = document.createElement('iframe'); |
| local_frame_all.src = same_origin_src + subframe_header_policy + policy_all + ')'; |
| local_frame_self.src = same_origin_src + subframe_header_policy + policy_self + ')'; |
| local_frame_none.src = same_origin_src + subframe_header_policy + policy_none + ')'; |
| |
| let remote_frame_all = document.createElement('iframe'); |
| let remote_frame_self = document.createElement('iframe'); |
| let remote_frame_none = document.createElement('iframe'); |
| remote_frame_all.src = cross_origin_src + subframe_header_policy + policy_all + ')'; |
| remote_frame_self.src = cross_origin_src + subframe_header_policy + policy_self + ')'; |
| remote_frame_none.src = cross_origin_src + subframe_header_policy + policy_none + ')'; |
| |
| window.addEventListener('message', function(evt) { |
| if (evt.source === local_frame_all.contentWindow) { |
| subframe_messages.push({frame: 'local', policy: policy_all, allowedfeatures: evt.data}); |
| } else if (evt.source === local_frame_self.contentWindow) { |
| subframe_messages.push({frame: 'local', policy: policy_self, allowedfeatures: evt.data}); |
| } else if (evt.source === local_frame_none.contentWindow) { |
| subframe_messages.push({frame: 'local', policy: policy_none, allowedfeatures: evt.data}); |
| } else if (evt.source === remote_frame_all.contentWindow) { |
| subframe_messages.push({frame: 'remote', policy: policy_all, allowedfeatures: evt.data}); |
| } else if (evt.source === remote_frame_self.contentWindow) { |
| subframe_messages.push({frame: 'remote', policy: policy_self, allowedfeatures: evt.data}); |
| } else if (evt.source === remote_frame_none.contentWindow) { |
| subframe_messages.push({frame: 'remote', policy: policy_none, allowedfeatures: evt.data}); |
| } |
| |
| if (subframe_messages.length == 6) |
| parent.postMessage(subframe_messages, '*'); |
| }); |
| |
| document.body.appendChild(local_frame_all); |
| document.body.appendChild(local_frame_self); |
| document.body.appendChild(local_frame_none); |
| document.body.appendChild(remote_frame_all); |
| document.body.appendChild(remote_frame_self); |
| document.body.appendChild(remote_frame_none); |
| </script> |
| </body> |
| |