| Index: third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/clients-get-worker.js
|
| diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/clients-get-worker.js b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/clients-get-worker.js
|
| index 9ac2c22645897ad1f15c19170b635cb4b3db077c..ca4444f3533577989be8f0651bad46b3c6911e61 100644
|
| --- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/clients-get-worker.js
|
| +++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/clients-get-worker.js
|
| @@ -1,53 +1,48 @@
|
| +// This worker is designed to expose information about clients that is only available from Service Worker contexts.
|
| +//
|
| +// In the case of the `onfetch` handler, it provides the `clientId` property of
|
| +// the `event` object. In the case of the `onmessage` handler, it provides the
|
| +// Client instance attributes of the requested clients.
|
| self.onfetch = function(e) {
|
| - if (e.request.url.indexOf("clients-get-frame.html") >= 0) {
|
| - if (e.clientId === null) {
|
| - e.respondWith(fetch(e.request));
|
| - } else {
|
| - e.respondWith(Response.error());
|
| - }
|
| + if (e.request.mode === 'navigate' && e.clientId !== null) {
|
| + e.respondWith(Response.error(
|
| + '`clientId` incorrectly set to non-null value for request with mode `navigate`'
|
| + ));
|
| + return;
|
| + }
|
| +
|
| + if (/\/clientId$/.test(e.request.url)) {
|
| + e.respondWith(new Response(e.clientId));
|
| return;
|
| }
|
| - e.respondWith(new Response(e.clientId));
|
| };
|
|
|
| self.onmessage = function(e) {
|
| var port = e.data.port;
|
| - if (e.data.message == 'get_client_ids') {
|
| - var clientIds = e.data.clientIds;
|
| - var message = [];
|
| + var client_ids = e.data.clientIds;
|
| + var message = [];
|
|
|
| - Promise.all(
|
| - clientIds.map(function(clientId) {
|
| - return self.clients.get(clientId);
|
| - }).concat(self.clients.get("invalid-id"))
|
| - ).then(function(clients) {
|
| - clients.forEach(function(client) {
|
| - if (client instanceof Client) {
|
| - message.push([client.visibilityState,
|
| - client.focused,
|
| - client.url,
|
| - client.frameType]);
|
| - } else {
|
| - message.push(client);
|
| - }
|
| - });
|
| - port.postMessage(message);
|
| - });
|
| - } else if (e.data.message == 'get_other_client_id') {
|
| - var clientId = e.data.clientId;
|
| - var message;
|
| -
|
| - self.clients.get(clientId)
|
| - .then(function(client) {
|
| - if (client instanceof Client) {
|
| - message = [client.visibilityState,
|
| - client.focused,
|
| - client.url,
|
| - client.frameType];
|
| + e.waitUntil(Promise.all(
|
| + client_ids.map(function(client_id) {
|
| + return self.clients.get(client_id);
|
| + }))
|
| + .then(function(clients) {
|
| + // No matching client for a given id or a matched client is off-origin
|
| + // from the service worker.
|
| + if (clients.length == 1 && clients[0] == undefined) {
|
| + port.postMessage(clients[0]);
|
| } else {
|
| - message = client;
|
| + clients.forEach(function(client) {
|
| + if (client instanceof Client) {
|
| + message.push([client.visibilityState,
|
| + client.focused,
|
| + client.url,
|
| + client.frameType]);
|
| + } else {
|
| + message.push(client);
|
| + }
|
| + });
|
| + port.postMessage(message);
|
| }
|
| - port.postMessage(message);
|
| - });
|
| - }
|
| + }));
|
| };
|
|
|