Bug 1592198 [wpt PR 19971] - [webnfc] Support reading/writing 'unknown' type records, a=testonly

Automatic update from web-platform-tests
[webnfc] Support reading/writing 'unknown' type records

Previously, TNF_UNKNOWN records were read and represented as 'opaque'
type records, and writing TNF_UNKNOWN records was not supported.

As part of effort to make web nfc more of a low level API, we have the
spec change https://github.com/w3c/web-nfc/pull/373 that defines an
explicit mapping for
  TNF_UNKNOWN  <---> 'unknown' type NDEFRecord

This CL introduces the new 'unknown' type and supports reading/writing
them accordingly.

BUG=520391

Change-Id: I384256d35b665c740edb9bef221d3319bf7df063
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1886114
Commit-Queue: Leon Han <leon.han@intel.com>
Reviewed-by: Reilly Grant <reillyg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#712001}

--

wpt-commits: d4a7c5c8ff1f9a56e692b19469e655fd7f684582
wpt-pr: 19971

Differential Revision: https://phabricator.services.mozilla.com/D53616
This commit is contained in:
Leon Han 2019-11-04 11:57:31 +00:00 committed by moz-wptsync-bot
parent 0d9bf24bda
commit 92f18465e1
4 changed files with 52 additions and 1 deletions

View File

@ -33,6 +33,13 @@ const NDEFReaderOptionTests =
unmatchedScanOptions: {recordType: "json"},
message: createMessage([createOpaqueRecord(test_buffer_data)])
},
{
desc: "Test that reading data succeed when NDEFScanOptions'" +
" recordType is set to 'unknown'.",
scanOptions: {recordType: "unknown"},
unmatchedScanOptions: {recordType: "json"},
message: createMessage([createUnknownRecord(test_buffer_data)])
},
{
desc: "Test that reading data succeed when NDEFScanOptions'" +
" recordType is set to 'text'.",
@ -102,6 +109,13 @@ const ReadMultiMessagesTests =
message: createMessage([createOpaqueRecord(test_buffer_data)]),
unmatchedMessage: createMessage([createJsonRecord(test_json_data)])
},
{
desc: "Test that filtering 'unknown' record from different messages" +
" correctly with NDEFScanOptions' recordType is set to 'unknown'.",
scanOptions: {recordType: "unknown"},
message: createMessage([createUnknownRecord(test_buffer_data)]),
unmatchedMessage: createMessage([createUrlRecord(test_url_data)])
},
{
desc: "Test that filtering 'text' record from different messages" +
" correctly with NDEFScanOptions' recordType is set to 'text'.",

View File

@ -161,6 +161,30 @@
'json() has the same content with the original dictionary');
}, 'NDEFRecord constructor with JSON record type');
test(() => {
assert_throws(new TypeError, () => new NDEFRecord(
createUnknownRecord("A string is not a BufferSource")),
'Only BufferSource is allowed to be the record data.');
let buffer = new ArrayBuffer(4);
new Uint8Array(buffer).set([1, 2, 3, 4]);
// Feed ArrayBuffer.
{
const record = new NDEFRecord(createUnknownRecord(buffer));
assert_equals(record.recordType, 'unknown', 'recordType');
assert_array_equals(new Uint8Array(record.data.buffer), [1, 2, 3, 4],
'data has the same content with the original buffer');
}
// Feed ArrayBufferView.
{
let buffer_view = new Uint8Array(buffer, 1);
const record = new NDEFRecord(createUnknownRecord(buffer_view));
assert_equals(record.recordType, 'unknown', 'recordType');
assert_array_equals(new Uint8Array(record.data.buffer), [2, 3, 4],
'data has the same content with the original buffer view');
}
}, 'NDEFRecord constructor with unknown record type');
test(() => {
let buffer = new ArrayBuffer(4);
let buffer_view = new Uint8Array(buffer);

View File

@ -70,6 +70,14 @@ const invalid_type_messages =
createMessage([createOpaqueRecord(test_number_data)]),
createMessage([createOpaqueRecord(test_json_data)]),
// NDEFRecord must have data.
createMessage([createUnknownRecord()]),
// NDEFRecord.data for 'unknown' record must be BufferSource.
createMessage([createUnknownRecord(test_text_data)]),
createMessage([createUnknownRecord(test_number_data)]),
createMessage([createUnknownRecord(test_json_data)]),
// https://w3c.github.io/web-nfc/#dfn-map-external-data-to-ndef
// NDEFRecord must have data.
createMessage([createRecord('w3.org:xyz', '', undefined)]),
@ -301,13 +309,14 @@ nfc_test(async (t, mockNFC) => {
createJsonRecord(test_json_data),
createJsonRecord(test_number_data),
createOpaqueRecord(test_buffer_data),
createUnknownRecord(test_buffer_data),
createUrlRecord(test_url_data),
createUrlRecord(test_url_data, true),
createRecord('w3.org:xyz', '', test_buffer_data)],
test_message_origin);
await writer.push(message);
assertNDEFMessagesEqual(message, mockNFC.pushedMessage());
}, "NDEFWriter.push NDEFMessage containing text, json, opaque, url, absolute-url \
}, "NDEFWriter.push NDEFMessage containing text, json, opaque, unknown, url, absolute-url \
and external records with default NDEFPushOptions.");
nfc_test(async (t, mockNFC) => {

View File

@ -111,6 +111,10 @@ function createOpaqueRecord(buffer) {
return createRecord('opaque', 'application/octet-stream', buffer);
}
function createUnknownRecord(buffer) {
return createRecord('unknown', '', buffer);
}
function createUrlRecord(url, isAbsUrl) {
if (isAbsUrl) {
return createRecord('absolute-url', 'text/plain', url);