| self.onmessage = function(e) { |
| var port = e.data.port; |
| var options = e.data.options; |
| |
| e.waitUntil(self.clients.matchAll(options) |
| .then(function(clients) { |
| var message = []; |
| clients.forEach(function(client) { |
| var frame_type = client.frameType; |
| if (client.url.indexOf('clients-matchall-include-uncontrolled.https.html') > -1 && |
| client.frameType == 'auxiliary') { |
| // The test tab might be opened using window.open() by the test framework. |
| // In that case, just pretend it's top-level! |
| frame_type = 'top-level'; |
| } |
| if (e.data.includeLifecycleState) { |
| message.push({visibilityState: client.visibilityState, |
| focused: client.focused, |
| url: client.url, |
| lifecycleState: client.lifecycleState, |
| type: client.type, |
| frameType: frame_type}); |
| } else { |
| message.push([client.visibilityState, |
| client.focused, |
| client.url, |
| client.type, |
| frame_type]); |
| } |
| }); |
| // Sort by url |
| if (!e.data.disableSort) { |
| message.sort(function(a, b) { return a[2] > b[2] ? 1 : -1; }); |
| } |
| port.postMessage(message); |
| }) |
| .catch(e => { |
| port.postMessage('clients.matchAll() rejected: ' + e); |
| })); |
| }; |