Chromium Code Reviews| Index: LayoutTests/http/tests/serviceworker/chromium/resources/service-worker-mixed-response-worker.js |
| diff --git a/LayoutTests/http/tests/serviceworker/chromium/resources/service-worker-mixed-response-worker.js b/LayoutTests/http/tests/serviceworker/chromium/resources/service-worker-mixed-response-worker.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..bc01825bb0c1350f22807a7b125b208544b39ec6 |
| --- /dev/null |
| +++ b/LayoutTests/http/tests/serviceworker/chromium/resources/service-worker-mixed-response-worker.js |
| @@ -0,0 +1,66 @@ |
| +importScripts('../../../resources/get-host-info.js'); |
| + |
| +var HOST_INFO = get_host_info(); |
| +var PARTIAL_RESOURCE_PATH = |
| + '/serviceworker/chromium/resources/service-worker-mixed-response.php'; |
| + |
| +function get_query_params(url) { |
| + var search = (new URL(url)).search; |
| + if (!search) { |
| + return {}; |
| + } |
| + var ret = {}; |
| + var params = search.substring(1).split('&'); |
| + params.forEach(function(param) { |
| + var element = param.split('='); |
| + ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]); |
| + }); |
| + return ret; |
| +} |
| + |
| +function geneate_partial_byte_response(position) { |
|
falken
2015/07/07 03:23:10
nit: generate
horo
2015/07/07 10:08:11
Done.
|
| + return new Response( |
| + 'Ogg'.substr(position, 1), |
| + { |
| + status: 206, |
| + headers: { |
| + 'content-type': 'audio/ogg', |
| + 'content-range': 'bytes ' + position + '-' + position + '/12983' |
|
falken
2015/07/07 03:23:10
comment for 12983?
horo
2015/07/07 10:08:11
Done.
|
| + } |
| + }); |
| +} |
| + |
| +function fetch_same_origin_partial_resource(position) { |
| + return fetch(HOST_INFO['HTTP_ORIGIN'] + PARTIAL_RESOURCE_PATH + |
| + '?position=' + position) |
| +} |
| + |
| +function fetch_cross_origin_partial_resource(position) { |
| + return fetch(HOST_INFO['HTTP_REMOTE_ORIGIN'] + PARTIAL_RESOURCE_PATH + |
| + '?position=' + position) |
| +} |
| + |
| +self.addEventListener('fetch', function(event) { |
| + if (event.request.url.indexOf('blank.html') != -1) { |
| + // The request is for the page load. |
| + return; |
| + } |
| + var params = get_query_params(event.request.url); |
| + if (event.request.headers.get('range') == 'bytes=0-') { |
| + if (params['SW_FIRST'] == 'gen') { |
| + event.respondWith(geneate_partial_byte_response(0)); |
| + } else if (params['SW_FIRST'] == 'same') { |
| + event.respondWith(fetch_same_origin_partial_resource(0)); |
| + } else if (params['SW_FIRST'] == 'cross') { |
| + event.respondWith(fetch_cross_origin_partial_resource(0)); |
| + } |
| + } else if (event.request.headers.get('range') == 'bytes=1-') { |
| + if (params['SW_SECOND'] == 'gen') { |
| + event.respondWith(geneate_partial_byte_response(1)); |
| + } else if (params['SW_SECOND'] == 'same') { |
| + event.respondWith(fetch_same_origin_partial_resource(1)); |
| + } else if (params['SW_SECOND'] == 'cross') { |
| + event.respondWith(fetch_cross_origin_partial_resource(1)); |
| + } |
| + } |
| + }); |