1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
content / test / data / indexeddb / open_connection / open_connection.html [blame]
<title>IndexedDB Open Connection</title>
<script>
var connections = {};
var next_request_id = 1;
function OpenConnection(name) {
return new Promise(resolve => {
let request = window.indexedDB.open(name, 1);
request.onsuccess = e => {
connections[name] = e.target.result;
resolve(true);
};
request.onerror = e => {
resolve(false);
}
});
}
function CloseConnection(name) {
connections[name].close();
connections[name] = undefined;
}
function OpenConnectionFromDedicatedWorker() {
return new Promise(resolve => {
const worker = new Worker('open_connection_from_dedicated_worker.js');
let data = {op: 'open_connection', rqid: next_request_id++};
worker.postMessage(data);
const listener = event => {
if (event.data.rqid !== data.rqid)
return;
worker.onmessage = undefined;
resolve(event.data.result);
};
worker.onmessage = listener;
});
}
function OpenConnectionFromSharedWorker() {
return new Promise(resolve => {
const worker = new SharedWorker(
'open_connection_from_shared_worker.js');
let data = {op: 'open_connection', rqid: next_request_id++};
worker.port.postMessage(data);
const listener = event => {
if (event.data.rqid !== data.rqid)
return;
worker.port.onmessage = undefined;
resolve(event.data.result);
};
worker.port.onmessage = listener;
});
}
function OpenConnectionFromServiceWorker() {
return new Promise(async resolve => {
await navigator.serviceWorker.register(
'open_connection_from_service_worker.js');
registration = await navigator.serviceWorker.ready;
var message_channel = new MessageChannel();
message_channel.port1.onmessage = event => {
if (event.data.rqid !== data.rqid)
return;
message_channel.port1.onmessage = undefined;
resolve(event.data.result);
}
let data = {op: 'open_connection', rqid: next_request_id++};
registration.active.postMessage(
data, [message_channel.port2]);
});
}
</script>