mirror of
https://github.com/servo/servo.git
synced 2025-08-28 08:38:20 +01:00
Update web-platform-tests to revision 58eb04cecbbec2e18531ab440225e38944a9c444
This commit is contained in:
parent
25e8bf69e6
commit
665817d2a6
35333 changed files with 1818077 additions and 16036 deletions
|
@ -3,22 +3,89 @@
|
|||
<meta charset="utf-8">
|
||||
<link rel="author" title="Intel" href="http://www.intel.com">
|
||||
<link rel="author" title="He Yue" href="mailto:yue.he@intel.com">
|
||||
<link rel="author" title="Tomoyuki Shimizu" href="https://github.com/tomoyukilabs/">
|
||||
<link rel="help" href="http://w3c.github.io/presentation-api/#interface-presentationconnectionlist">
|
||||
<script src="../common.js"></script>
|
||||
<script src="stash.js"></script>
|
||||
<script>
|
||||
var addConnection = function(connection) {
|
||||
connection.onconnected = function () {
|
||||
this.onmessage = function (evt) {
|
||||
this.send(evt.data);
|
||||
const message1 = '1st';
|
||||
const message2 = '2nd';
|
||||
const message3 = new Uint8Array([51, 114, 100]); // "3rd"
|
||||
const message4 = new Uint8Array([52, 116, 104]); // "4th"
|
||||
const message5 = new Uint8Array([108, 97, 115, 116]); // "last"
|
||||
|
||||
const toUint8Array = buf => {
|
||||
return buf instanceof ArrayBuffer ? new Uint8Array(buf) : buf;
|
||||
}
|
||||
|
||||
// convert ArrayBuffer or Uint8Array into string
|
||||
const toText = buf => {
|
||||
const arr = toUint8Array(buf);
|
||||
return !buf ? null : arr.reduce((result, item) => {
|
||||
return result + String.fromCharCode(item);
|
||||
}, '');
|
||||
}
|
||||
|
||||
// compare two ArrayBuffer or Uint8Array
|
||||
const compare = (a, b) => {
|
||||
const p = toUint8Array(a);
|
||||
const q = toUint8Array(b);
|
||||
return !!p && !!q && p.every((item, index) => { return item === q[index]; });
|
||||
};
|
||||
|
||||
const stash = new Stash(stashIds.toReceiver, stashIds.toController);
|
||||
|
||||
const addConnection = connection => {
|
||||
connection.onconnect = function() {
|
||||
let result = [], testCase;
|
||||
|
||||
this.onmessage = event => {
|
||||
// PresentationConnection_send-manual.html
|
||||
if (testCase === 'send') {
|
||||
if (typeof event.data === 'string') {
|
||||
result.push({ type: 'text', data: event.data });
|
||||
}
|
||||
// default value of connection.binaryType is "arraybuffer"
|
||||
else if(event.data instanceof ArrayBuffer) {
|
||||
result.push({ type: 'binary', data: toText(event.data) });
|
||||
if (compare(event.data, message5)) {
|
||||
stash.send(JSON.stringify(result));
|
||||
}
|
||||
}
|
||||
else {
|
||||
result.push({ type: 'error' });
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
stash.receive().then(data => {
|
||||
testCase = data;
|
||||
|
||||
// PresentationConnection_send-manual.html
|
||||
if (testCase === 'send') {
|
||||
stash.send('ok');
|
||||
}
|
||||
// PresentationConnection_onmessage-manual.html
|
||||
else if (testCase === 'onmessage') {
|
||||
connection.send(message1); // string
|
||||
connection.send(message2); // string
|
||||
connection.send(new Blob([message3])); // Blob
|
||||
connection.send(message4.buffer); // ArrayBuffer
|
||||
connection.send(message5); // ArrayBufferView
|
||||
stash.receive().then(data => {
|
||||
connection.send(message5);
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
navigator.presentation.receiver.connectionList
|
||||
.then(function(list) {
|
||||
list.onconnectionavailable = function(evt) {
|
||||
.then(list => {
|
||||
list.onconnectionavailable = evt => {
|
||||
addConnection(evt.connection);
|
||||
};
|
||||
list.connections.map(function(connection) {
|
||||
list.connections.map(connection => {
|
||||
addConnection(connection);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
var Stash = function(inbound, outbound) {
|
||||
this.stashPath = '/presentation-api/controlling-ua/support/stash.py?id=';
|
||||
this.inbound = inbound;
|
||||
this.outbound = outbound;
|
||||
}
|
||||
|
||||
// initialize a stash on wptserve
|
||||
Stash.prototype.init = function() {
|
||||
return Promise.all([
|
||||
fetch(this.stashPath + this.inbound).then(response => {
|
||||
return response.text();
|
||||
}),
|
||||
fetch(this.stashPath + this.outbound).then(response => {
|
||||
return response.text();
|
||||
})
|
||||
]);
|
||||
}
|
||||
|
||||
// upload a test result to a stash on wptserve
|
||||
Stash.prototype.send = function(result) {
|
||||
return fetch(this.stashPath + this.outbound, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ type: 'data', data: result })
|
||||
}).then(response => {
|
||||
return response.text();
|
||||
}).then(text => {
|
||||
return text === 'ok' ? null : Promise.reject();
|
||||
})
|
||||
};
|
||||
|
||||
// wait until a test result is uploaded to a stash on wptserve
|
||||
Stash.prototype.receive = function() {
|
||||
return new Promise((resolve, reject) => {
|
||||
let intervalId;
|
||||
const interval = 500; // msec
|
||||
const polling = () => {
|
||||
return fetch(this.stashPath + this.inbound).then(response => {
|
||||
return response.text();
|
||||
}).then(text => {
|
||||
if (text) {
|
||||
try {
|
||||
const json = JSON.parse(text);
|
||||
if (json.type === 'data')
|
||||
resolve(json.data);
|
||||
else
|
||||
reject();
|
||||
} catch(e) {
|
||||
resolve(text);
|
||||
}
|
||||
clearInterval(intervalId);
|
||||
}
|
||||
});
|
||||
};
|
||||
intervalId = setInterval(polling, interval);
|
||||
});
|
||||
};
|
||||
|
||||
// reset a stash on wptserve
|
||||
Stash.prototype.stop = function() {
|
||||
return Promise.all([
|
||||
fetch(this.stashPath + this.inbound).then(response => {
|
||||
return response.text();
|
||||
}),
|
||||
fetch(this.stashPath + this.outbound).then(response => {
|
||||
return response.text();
|
||||
})
|
||||
]).then(() => {
|
||||
return Promise.all([
|
||||
fetch(this.stashPath + this.inbound, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ type: 'stop' })
|
||||
}).then(response => {
|
||||
return response.text();
|
||||
}),
|
||||
fetch(this.stashPath + this.outbound, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ type: 'stop' })
|
||||
}).then(response => {
|
||||
return response.text();
|
||||
})
|
||||
]);
|
||||
});
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
def main(request, response):
|
||||
key = request.GET.first("id")
|
||||
|
||||
if request.method == "POST":
|
||||
request.server.stash.put(key, request.body)
|
||||
return "ok"
|
||||
else:
|
||||
value = request.server.stash.take(key)
|
||||
assert request.server.stash.take(key) is None
|
||||
return value
|
Loading…
Add table
Add a link
Reference in a new issue