OLD | NEW |
---|---|
(Empty) | |
1 importScripts('../../../resources/get-host-info.js'); | |
2 | |
3 var HOST_INFO = get_host_info(); | |
4 var PARTIAL_RESOURCE_PATH = | |
5 '/serviceworker/chromium/resources/service-worker-mixed-response.php'; | |
6 | |
7 function get_query_params(url) { | |
8 var search = (new URL(url)).search; | |
9 if (!search) { | |
10 return {}; | |
11 } | |
12 var ret = {}; | |
13 var params = search.substring(1).split('&'); | |
14 params.forEach(function(param) { | |
15 var element = param.split('='); | |
16 ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]); | |
17 }); | |
18 return ret; | |
19 } | |
20 | |
21 function geneate_partial_byte_response(position) { | |
falken
2015/07/07 03:23:10
nit: generate
horo
2015/07/07 10:08:11
Done.
| |
22 return new Response( | |
23 'Ogg'.substr(position, 1), | |
24 { | |
25 status: 206, | |
26 headers: { | |
27 'content-type': 'audio/ogg', | |
28 'content-range': 'bytes ' + position + '-' + position + '/12983' | |
falken
2015/07/07 03:23:10
comment for 12983?
horo
2015/07/07 10:08:11
Done.
| |
29 } | |
30 }); | |
31 } | |
32 | |
33 function fetch_same_origin_partial_resource(position) { | |
34 return fetch(HOST_INFO['HTTP_ORIGIN'] + PARTIAL_RESOURCE_PATH + | |
35 '?position=' + position) | |
36 } | |
37 | |
38 function fetch_cross_origin_partial_resource(position) { | |
39 return fetch(HOST_INFO['HTTP_REMOTE_ORIGIN'] + PARTIAL_RESOURCE_PATH + | |
40 '?position=' + position) | |
41 } | |
42 | |
43 self.addEventListener('fetch', function(event) { | |
44 if (event.request.url.indexOf('blank.html') != -1) { | |
45 // The request is for the page load. | |
46 return; | |
47 } | |
48 var params = get_query_params(event.request.url); | |
49 if (event.request.headers.get('range') == 'bytes=0-') { | |
50 if (params['SW_FIRST'] == 'gen') { | |
51 event.respondWith(geneate_partial_byte_response(0)); | |
52 } else if (params['SW_FIRST'] == 'same') { | |
53 event.respondWith(fetch_same_origin_partial_resource(0)); | |
54 } else if (params['SW_FIRST'] == 'cross') { | |
55 event.respondWith(fetch_cross_origin_partial_resource(0)); | |
56 } | |
57 } else if (event.request.headers.get('range') == 'bytes=1-') { | |
58 if (params['SW_SECOND'] == 'gen') { | |
59 event.respondWith(geneate_partial_byte_response(1)); | |
60 } else if (params['SW_SECOND'] == 'same') { | |
61 event.respondWith(fetch_same_origin_partial_resource(1)); | |
62 } else if (params['SW_SECOND'] == 'cross') { | |
63 event.respondWith(fetch_cross_origin_partial_resource(1)); | |
64 } | |
65 } | |
66 }); | |
OLD | NEW |