зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1263469 P5 Add a wpt test case for EventSource. r=ehsan
This commit is contained in:
Родитель
8c007635a4
Коммит
d62e94bfaa
|
@ -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;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче