https://github.com/web-platform-tests/wpt
Tip revision: 7cb0d28a36927eb21b7984a80c6629969634a1e2 authored by moz-wptsync-bot on 13 March 2018, 19:13:50 UTC
Performance.measure(name) should not throw if name is one of the readonly attribute of the Performance interface,
Performance.measure(name) should not throw if name is one of the readonly attribute of the Performance interface,
Tip revision: 7cb0d28
nfc_push.https.html
<!DOCTYPE html>
<meta charset=utf-8>
<title>Web NFC: Test exceptions in nfc.push</title>
<link rel="author" title="Intel" href="http://www.intel.com"/>
<link rel="help" href="https://w3c.github.io/web-nfc/"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/nfc_help.js"></script>
<div id="log"></div>
<script>
"use strict";
const invalid_type_messages =
[
// Invalid NFCPushMessage type
undefined,
// NFCMessage.records: should have at least 1 valid record.
// https://w3c.github.io/web-nfc/#the-push-method - Step 8.
createMessage([{}]),
// https://w3c.github.io/web-nfc/#dfn-map-text-to-ndef
// NFCRecord must have data.
createMessage([createTextRecord()]),
// NFCRecord.data for 'text' record must be number or string.
createMessage([createTextRecord(test_buffer_data)]),
createMessage([createTextRecord(test_json_data)]),
// https://w3c.github.io/web-nfc/#dfn-map-a-json-object-to-ndef
// NFCRecord must have data.
createMessage([createJsonRecord()]),
// NFCRecord.data for 'json' record must be object.
createMessage([createJsonRecord(test_buffer_data)]),
createMessage([createJsonRecord(test_number_data)]),
createMessage([createJsonRecord(test_text_data)]),
// https://w3c.github.io/web-nfc/#dfn-map-a-url-to-ndef
// NFCRecord must have data.
createMessage([createUrlRecord()]),
// NFCRecord.data for 'url' record must be string.
createMessage([createUrlRecord(test_buffer_data)]),
createMessage([createUrlRecord(test_number_data)]),
createMessage([createUrlRecord(test_json_data)]),
// https://w3c.github.io/web-nfc/#dfn-map-binary-data-to-ndef
// NFCRecord must have data.
createMessage([createOpaqueRecord()]),
// NFCRecord.data for 'opaque' record must be ArrayBuffer.
createMessage([createOpaqueRecord(test_text_data)]),
createMessage([createOpaqueRecord(test_number_data)]),
createMessage([createOpaqueRecord(test_json_data)])
];
const invalid_syntax_messages =
[
// NFCRecord.mediaType for 'text' record must be 'text/*'.
createMessage([createRecord('text', 'application/json',
test_number_data)]),
// Data for 'url' record, must be a valid URL.
createMessage([createUrlRecord('Invalid URL:// Data')]),
// NFCRecord.mediaType for 'json' record must be 'application/json' or
// starts with 'application/' and ends with '+json'.
createMessage([createRecord('json', 'image/png', test_json_data)]),
createMessage([createRecord('json', 'application/x+y', test_json_data)]),
createMessage([createRecord('json', 'custom/app+json', test_json_data)]),
];
promise_test(t => {
let promises = [];
invalid_type_messages.forEach(message => {
promises.push(
promise_rejects(t, new TypeError(), navigator.nfc.push(message)));
});
return Promise.all(promises);
}, "Test that promise is rejected with TypeError if NFCMessage is invalid.");
promise_test(t => {
let promises = [];
invalid_syntax_messages.forEach(message => {
promises.push(
promise_rejects(t, 'SyntaxError', navigator.nfc.push(message)));
});
return Promise.all(promises);
}, "'Test that promise is rejected with SyntaxError if NFCMessage contains invalid records.");
promise_test(t => {
return promise_rejects(t, new TypeError(), navigator.nfc.push(test_text_data, { timeout: "invalid"}));
}, "nfc.push should fail with TypeError when invalid timeout is provided.");
promise_test(t => {
return promise_rejects(t, new TypeError(), navigator.nfc.push(test_text_data, { timeout: -1 }));
}, "nfc.push should fail with TypeError when invalid negative timeout value is provided.");
promise_test(t => {
return promise_rejects(t, 'TimeoutError', navigator.nfc.push(test_text_data, { timeout: 1 }));
}, "nfc.push should fail with TimeoutError when timer expires.");
promise_test(t => {
let promise = navigator.nfc.push(test_text_data, { timeout: 100 });
navigator.nfc.cancelPush();
return promise_rejects(t, 'AbortError', promise);
}, "nfc.cancelPush should reject pending promise with AbortError.");
promise_test(t => {
return promise_rejects(t, 'NotSupportedError', navigator.nfc.push(new ArrayBuffer(32 * 1024 + 1)));
}, "Reject promise with NotSupportedError if NFC message size exceeds 32KB.");
promise_test(t => {
let message = createMessage([createTextRecord(test_text_data)]);
message.url = '%00/invalid/ path';
return promise_rejects(t, 'SyntaxError', navigator.nfc.push(message));
}, "Reject promise with SyntaxError if WebNFC Id cannot be created from provided URL.");
promise_test(t => {
let message = createMessage([createRecord('json','application/json',
{ get x(){ return this; } })]);
return promise_rejects(t, 'SyntaxError', navigator.nfc.push(message));
}, "Reject promise with SyntaxError if 'json' record cannot be serialized.");
promise_test(t => {
return promise_rejects(t, new TypeError(), navigator.nfc.push(test_text_data, {target: "invalid"}));
}, "nfc.push should fail with TypeError when invalid target value is provided.");
promise_test(t => {
return promise_rejects(t, new TypeError(), navigator.nfc.cancelPush("invalid"));
}, "nfc.cancelPush should fail with TypeError when invalid id value is provided.");
promise_test(() => {
return new Promise((resolve,reject) => {
let iframe = document.createElement('iframe');
iframe.srcdoc = '<script>' +
' window.onmessage = message => {' +
' if (message.data === "Ready") {' +
' let onSuccess = () => { parent.postMessage("Failure", "*"); };' +
' let onError = error => {' +
' if (error.name == "SecurityError") {' +
' parent.postMessage("Success", "*");' +
' } else {' +
' parent.postMessage("Failure", "*");' +
' }' +
' };' +
' navigator.nfc.push("Test").then(onSuccess, onError);' +
' }' +
' };' +
'<\/script>';
iframe.onload = () => iframe.contentWindow.postMessage('Ready', '*');
document.body.appendChild(iframe);
window.onmessage = message => {
if (message.data == 'Success') {
resolve();
} else if (message.data == 'Failure') {
reject();
}
}
});
}, 'Test that WebNFC API is not accessible from iframe context.');
</script>