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

Side by Side Diff: third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/navigation-redirect-worker.js

Issue 2415873002: Import w3c tests for the service workers (Closed)
Patch Set: Rebase Created 4 years, 2 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 unified diff | Download patch
OLDNEW
(Empty)
1 // We store an empty response for each fetch event request we see
2 // in this Cache object so we can get the list of urls in the
3 // message event.
4 var cacheName = 'urls-' + self.registration.scope;
5
6 var waitUntilPromiseList = [];
7
8 self.addEventListener('message', function(event) {
9 var urls;
10 event.waitUntil(Promise.all(waitUntilPromiseList).then(function() {
11 waitUntilPromiseList = [];
12 return caches.open(cacheName);
13 }).then(function(cache) {
14 return cache.keys();
15 }).then(function(requestList) {
16 urls = requestList.map(function(request) { return request.url; });
17 return caches.delete(cacheName);
18 }).then(function() {
19 event.data.port.postMessage({urls: urls});
20 }));
21 });
22
23 function get_query_params(url) {
24 var search = (new URL(url)).search;
25 if (!search) {
26 return {};
27 }
28 var ret = {};
29 var params = search.substring(1).split('&');
30 params.forEach(function(param) {
31 var element = param.split('=');
32 ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]);
33 });
34 return ret;
35 }
36
37 self.addEventListener('fetch', function(event) {
38 var waitUntilPromise = caches.open(cacheName).then(function(cache) {
39 return cache.put(event.request, new Response());
40 });
41 event.waitUntil(waitUntilPromise);
42
43 var params = get_query_params(event.request.url);
44 if (!params['sw']) {
45 // To avoid races, add the waitUntil() promise to our global list.
46 // If we get a message event before we finish here, it will wait
47 // these promises to complete before proceeding to read from the
48 // cache.
49 waitUntilPromiseList.push(waitUntilPromise);
50 return;
51 }
52
53 event.respondWith(waitUntilPromise.then(function() {
54 if (params['sw'] == 'gen') {
55 return Response.redirect(params['url']);
56 } else if (params['sw'] == 'fetch') {
57 return fetch(event.request);
58 } else if (params['sw'] == 'opaque') {
59 return fetch(new Request(event.request.url, {redirect: 'manual'}));
60 } else if (params['sw'] == 'opaqueThroughCache') {
61 var url = event.request.url;
62 var cache;
63 return caches.delete(url)
64 .then(function() { return self.caches.open(url); })
65 .then(function(c) {
66 cache = c;
67 return fetch(new Request(url, {redirect: 'manual'}));
68 })
69 .then(function(res) { return cache.put(event.request, res); })
70 .then(function() { return cache.match(url); });
71 }
72
73 // unexpected... trigger an interception failure
74 }));
75 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698