зеркало из 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));
|
||||
}, '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>
|
||||
</body>
|
||||
|
|
|
@ -95,6 +95,22 @@ function handleCache(event) {
|
|||
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) {
|
||||
var url = event.request.url;
|
||||
var handlers = [
|
||||
|
@ -112,6 +128,7 @@ self.addEventListener('fetch', function(event) {
|
|||
{ pattern: '?used-check', fn: handleUsedCheck },
|
||||
{ pattern: '?fragment-check', fn: handleFragmentCheck },
|
||||
{ pattern: '?cache', fn: handleCache },
|
||||
{ pattern: '?eventsource', fn: handleEventSource },
|
||||
];
|
||||
|
||||
var handler = null;
|
||||
|
|
Загрузка…
Ссылка в новой задаче