Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(742)

Unified Diff: third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/clients-get-worker.js

Issue 2778903002: Upstream service worker `client` tests to WPT (Closed)
Patch Set: Remove unnecessary branch Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
- });
- }
+ }));
};

Powered by Google App Engine
This is Rietveld 408576698