Bug 1263469 P5 Add a wpt test case for EventSource. r=ehsan

This commit is contained in:
Ben Kelly 2016-04-15 11:15:58 -07:00
Родитель 8c007635a4
Коммит d62e94bfaa
2 изменённых файлов: 67 добавлений и 0 удалений

Просмотреть файл

@ -478,5 +478,55 @@ async_test(function(t) {
.catch(unreached_rejection(t)); .catch(unreached_rejection(t));
}, 'Service Worker responds to fetch event with the correct cache types'); }, 'Service Worker responds to fetch event with the correct cache types');
async_test(function(t) {
var scope = 'resources/simple.html?eventsource';
var frame;
function test_eventsource(opts) {
return new Promise(function(resolve, reject) {
var eventSource = new frame.contentWindow.EventSource(scope, opts);
eventSource.addEventListener('message', function(msg) {
eventSource.close();
try {
var data = JSON.parse(msg.data);
assert_equals(data.mode, 'cors',
'EventSource should make CORS requests.');
assert_equals(data.cache, 'no-store',
'EventSource should bypass the http cache.');
var expectedCredentials = opts.withCredentials ? 'include'
: 'same-origin';
assert_equals(data.credentials, expectedCredentials,
'EventSource should pass correct credentials mode.');
resolve();
} catch (e) {
reject(e);
}
});
eventSource.addEventListener('error', function(e) {
eventSource.close();
reject('The EventSource fired an error event.');
});
});
}
service_worker_unregister_and_register(t, worker, scope)
.then(function(reg) {
return wait_for_state(t, reg.installing, 'activated');
})
.then(function() { return with_iframe(scope); })
.then(function(f) {
frame = f;
return test_eventsource({ withCredentials: false });
})
.then(function() {
return test_eventsource({ withCredentials: true });
})
.then(function() {
frame.remove();
return service_worker_unregister_and_done(t, scope);
})
.catch(unreached_rejection(t));
}, 'Service Worker should intercept EventSource');
</script> </script>
</body> </body>

Просмотреть файл

@ -95,6 +95,22 @@ function handleCache(event) {
event.respondWith(new Response(event.request.cache)); event.respondWith(new Response(event.request.cache));
} }
function handleEventSource(event) {
if (event.request.mode === 'navigate') {
return;
}
var data = {
mode: event.request.mode,
cache: event.request.cache,
credentials: event.request.credentials
};
var body = 'data:' + JSON.stringify(data) + '\n\n';
event.respondWith(new Response(body, {
headers: { 'Content-Type': 'text/event-stream' }
}
));
}
self.addEventListener('fetch', function(event) { self.addEventListener('fetch', function(event) {
var url = event.request.url; var url = event.request.url;
var handlers = [ var handlers = [
@ -112,6 +128,7 @@ self.addEventListener('fetch', function(event) {
{ pattern: '?used-check', fn: handleUsedCheck }, { pattern: '?used-check', fn: handleUsedCheck },
{ pattern: '?fragment-check', fn: handleFragmentCheck }, { pattern: '?fragment-check', fn: handleFragmentCheck },
{ pattern: '?cache', fn: handleCache }, { pattern: '?cache', fn: handleCache },
{ pattern: '?eventsource', fn: handleEventSource },
]; ];
var handler = null; var handler = null;