Skip to content

Commit 9cbdd96

Browse files
arskamachromium-wpt-export-bot
authored andcommitted
web-nfc: Merge NDEFWriter in NDEFReader
NDEFWriter and NDEFReader share a lot of similar features and a writing device, will also read. Therefore it was decided to simplify NDEF functionality, and to have only one class called NDEFReader, which can read and write. refers to w3c/web-nfc#601 Bug: 1131141 Change-Id: I8cc2ce053e5bb43c0fa5b299bdaf5cb5317bf859
1 parent cbbc487 commit 9cbdd96

7 files changed

+58
-68
lines changed

interfaces/web-nfc.idl

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,6 @@ dictionary NDEFRecordInit {
4343

4444
typedef (DOMString or BufferSource or NDEFMessageInit) NDEFMessageSource;
4545

46-
[SecureContext, Exposed=Window]
47-
interface NDEFWriter {
48-
constructor();
49-
50-
Promise<undefined> write(NDEFMessageSource message,
51-
optional NDEFWriteOptions options={});
52-
};
53-
5446
[SecureContext, Exposed=Window]
5547
interface NDEFReader : EventTarget {
5648
constructor();

lint.ignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,10 @@ LAYOUTTESTS APIS: import-maps/common/resources/common-test-helper.js
694694
LAYOUTTESTS APIS: resources/chromium/enable-hyperlink-auditing.js
695695
LAYOUTTESTS APIS: resources/chromium/generic_sensor_mocks.js
696696
LAYOUTTESTS APIS: resources/chromium/webxr-test.js
697+
LAYOUTTESTS APIS: web-nfc/NDEFReader-read-document-hidden-manual.https.html
698+
LAYOUTTESTS APIS: web-nfc/NDEFReader-write-document-hidden-manual.https.html
699+
LAYOUTTESTS APIS: web-nfc/NDEFReader_scan.https.html
700+
LAYOUTTESTS APIS: web-nfc/NDEFReader_write.https.html
697701
LAYOUTTESTS APIS: webxr/resources/webxr_util.js
698702

699703
# Signed Exchange files have hard-coded URLs in the certUrl field

web-nfc/NDEFWriter-document-hidden-manual.https.html renamed to web-nfc/NDEFReader-write-document-hidden-manual.https.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
<!DOCTYPE html>
22
<meta charset="utf-8">
33
<meta name="timeout" content="long">
4-
<title>NDEFWriter.write respect page visibility changes</title>
4+
<title>NDEFReader.write respect page visibility changes</title>
55
<link rel="help" href="https://w3c.github.io/web-nfc/#visible-document">
66
<script src="/resources/testharness.js"></script>
77
<script src="/resources/testharnessreport.js"></script>
88
<script src="resources/nfc-helpers.js"></script>
99
<script>
1010

1111
promise_test(async t => {
12-
const writer = new NDEFWriter();
12+
const writer = new NDEFReader();
1313
const p1 = writer.write(test_text_data);
1414

1515
return await new Promise((resolve, reject) => {
@@ -20,7 +20,7 @@
2020
reject();
2121
});
2222
});
23-
}, "Test NDEFWriter.write operation should be suspend when document is not visible");
23+
}, "Test NDEFReader.write operation should be suspended when document is not visible");
2424

2525
</script>
2626

web-nfc/NDEFWriter_write.https.html renamed to web-nfc/NDEFReader_write.https.html

Lines changed: 51 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@
124124
];
125125

126126
nfc_test(async t => {
127-
const writer = new NDEFWriter();
127+
const writer = new NDEFReader();
128128
const promises = [];
129129
invalid_type_messages.forEach(message => {
130130
promises.push(
@@ -134,7 +134,7 @@
134134
}, "Test that promise is rejected with TypeError if NDEFMessageSource is invalid.");
135135

136136
nfc_test(async t => {
137-
const writer = new NDEFWriter();
137+
const writer = new NDEFReader();
138138
const promises = [];
139139
invalid_syntax_messages.forEach(message => {
140140
promises.push(
@@ -146,20 +146,20 @@
146146

147147
nfc_test(async t => {
148148
await test_driver.set_permission({ name: 'nfc' }, 'denied', false);
149-
const writer = new NDEFWriter();
149+
const writer = new NDEFReader();
150150
await promise_rejects_dom(t, 'NotAllowedError', writer.write(test_text_data));
151-
}, 'NDEFWriter.write should fail if user permission is not granted.');
151+
}, 'NDEFReader.write should fail if user permission is not granted.');
152152

153153
// We do not provide NFC mock here to simulate that there has no available
154154
// implementation for NFC Mojo interface.
155155
nfc_test(async (t, mockNFC) => {
156156
mockNFC.simulateClosedPipe();
157-
const writer = new NDEFWriter();
157+
const writer = new NDEFReader();
158158
await promise_rejects_dom(t, 'NotSupportedError', writer.write(test_text_data));
159-
}, 'NDEFWriter.write should fail if no implementation for NFC Mojo interface is available.');
159+
}, 'NDEFReader.write should fail if no implementation for NFC Mojo interface is available.');
160160

161161
nfc_test(async (t, mockNFC) => {
162-
const writer = new NDEFWriter();
162+
const writer = new NDEFReader();
163163
const controller = new AbortController();
164164

165165
//Make sure push is pending
@@ -176,31 +176,31 @@
176176
});
177177
await rejected;
178178
assert_true(callback_called, 'timeout should have caused the abort');
179-
}, "NDEFWriter.write should fail if abort write request before write happends.");
179+
}, "NDEFReader.write should fail if abort write request before write happends.");
180180

181181
nfc_test(async t => {
182-
const writer = new NDEFWriter();
182+
const writer = new NDEFReader();
183183
const controller = new AbortController();
184184
assert_false(controller.signal.aborted);
185185
controller.abort();
186186
assert_true(controller.signal.aborted);
187187
await promise_rejects_dom(t, 'AbortError',
188188
writer.write(test_text_data, { signal: controller.signal }));
189-
}, "NDEFWriter.write should fail if signal's aborted flag is set.");
189+
}, "NDEFReader.write should fail if signal's aborted flag is set.");
190190

191191
nfc_test(async t => {
192-
const writer = new NDEFWriter();
192+
const writer = new NDEFReader();
193193
const promises = [];
194194
invalid_signals.forEach(invalid_signal => {
195195
promises.push(promise_rejects_js(t, TypeError,
196196
writer.write(test_text_data, { signal: invalid_signal })));
197197
});
198198
await Promise.all(promises);
199-
}, "NDEFWriter.write should fail if signal is not an AbortSignal.");
199+
}, "NDEFReader.write should fail if signal is not an AbortSignal.");
200200

201201
nfc_test(async (t, mockNFC) => {
202-
const writer1 = new NDEFWriter();
203-
const writer2 = new NDEFWriter();
202+
const writer1 = new NDEFReader();
203+
const writer2 = new NDEFReader();
204204
const controller = new AbortController();
205205
const p1 = writer1.write(test_text_data, { signal: controller.signal });
206206

@@ -214,16 +214,16 @@
214214
}, "Synchronously signaled abort.");
215215

216216
nfc_test(async (t, mockNFC) => {
217-
const writer = new NDEFWriter();
217+
const writer = new NDEFReader();
218218
mockNFC.setHWStatus(NFCHWStatus.DISABLED);
219219
await promise_rejects_dom(t, 'NotReadableError', writer.write(test_text_data));
220-
}, "NDEFWriter.write should fail when NFC HW is disabled.");
220+
}, "NDEFReader.write should fail when NFC HW is disabled.");
221221

222222
nfc_test(async (t, mockNFC) => {
223-
const writer = new NDEFWriter();
223+
const writer = new NDEFReader();
224224
mockNFC.setHWStatus(NFCHWStatus.NOT_SUPPORTED);
225225
await promise_rejects_dom(t, 'NotSupportedError', writer.write(test_text_data));
226-
}, "NDEFWriter.write should fail when NFC HW is not supported.");
226+
}, "NDEFReader.write should fail when NFC HW is not supported.");
227227

228228
nfc_test(async () => {
229229
await new Promise((resolve,reject) => {
@@ -242,7 +242,7 @@
242242
}
243243
};
244244
try {
245-
const writer = new NDEFWriter();
245+
const writer = new NDEFReader();
246246
writer.write("Test").then(onSuccess, onError);
247247
} catch(e) {
248248
parent.postMessage("Failure", "*");
@@ -263,12 +263,12 @@
263263
}, 'Test that WebNFC API is not accessible from iframe context.');
264264

265265
nfc_test(async () => {
266-
const writer = new NDEFWriter();
266+
const writer = new NDEFReader();
267267
await writer.write(test_text_data);
268-
}, 'NDEFWriter.write should succeed when NFC HW is enabled');
268+
}, 'NDEFReader.write should succeed when NFC HW is enabled');
269269

270270
nfc_test(async (t, mockNFC) => {
271-
const writer = new NDEFWriter();
271+
const writer = new NDEFReader();
272272
const message = createMessage([createTextRecord(test_text_data),
273273
createMimeRecordFromJson(test_json_data),
274274
createMimeRecord(test_buffer_data),
@@ -279,7 +279,7 @@
279279
test_message_origin);
280280
await writer.write(message);
281281
assertNDEFMessagesEqual(message, mockNFC.pushedMessage());
282-
}, "NDEFWriter.write NDEFMessage containing text, mime, unknown, url, absolute-url \
282+
}, "NDEFReader.write NDEFMessage containing text, mime, unknown, url, absolute-url \
283283
and external records with default NDEFWriteOptions.");
284284

285285
nfc_test(async (t, mockNFC) => {
@@ -291,7 +291,7 @@
291291
// Prepare an external type record that uses |messageContainLocal| as its payload.
292292
const message = createMessage([createRecord('example.com:containsLocalRecord', messageContainLocal)]);
293293

294-
const writer = new NDEFWriter();
294+
const writer = new NDEFReader();
295295
await writer.write(message);
296296
const pushed_message = mockNFC.pushedMessage();
297297

@@ -311,7 +311,7 @@
311311
assert_array_equals(pushed_message.data[0].payloadMessage.data[0].data, new Uint8Array(0),
312312
'payloadMessage is used instead');
313313
assertNDEFMessagesEqual(messageContainText, pushed_message.data[0].payloadMessage.data[0].payloadMessage);
314-
}, "NDEFWriter.write NDEFMessage containing embedded records.");
314+
}, "NDEFReader.write NDEFMessage containing embedded records.");
315315

316316
nfc_test(async (t, mockNFC) => {
317317
// A smart-poster record contains a uri record, text record.
@@ -321,7 +321,7 @@
321321
const message = createMessage([createRecord(
322322
'smart-poster', payload_message, "dummy_record_id")]);
323323

324-
const writer = new NDEFWriter();
324+
const writer = new NDEFReader();
325325
await writer.write(message);
326326
const pushed_message = mockNFC.pushedMessage();
327327

@@ -350,50 +350,50 @@
350350
}
351351
assert_array_equals(embedded_record_types.sort(), ['text', 'url'],
352352
'smart-poster record\'s contained record types');
353-
}, "NDEFWriter.write NDEFMessage containing smart-poster record.");
353+
}, "NDEFReader.write NDEFMessage containing smart-poster record.");
354354

355355
nfc_test(async (t, mockNFC) => {
356-
const writer = new NDEFWriter();
356+
const writer = new NDEFReader();
357357
await writer.write(test_text_data);
358358
assertNDEFMessagesEqual(test_text_data, mockNFC.pushedMessage());
359-
}, "Test that NDEFWriter.write succeeds when message is DOMString.");
359+
}, "Test that NDEFReader.write succeeds when message is DOMString.");
360360

361361
nfc_test(async (t, mockNFC) => {
362-
const writer = new NDEFWriter();
362+
const writer = new NDEFReader();
363363
await writer.write(test_buffer_data);
364364
assertNDEFMessagesEqual(test_buffer_data, mockNFC.pushedMessage());
365-
}, "Test that NDEFWriter.write succeeds when message is ArrayBuffer.");
365+
}, "Test that NDEFReader.write succeeds when message is ArrayBuffer.");
366366

367367
nfc_test(async (t, mockNFC) => {
368368
let buffer_view = new Uint8Array(test_buffer_data, 2, 5);
369-
const writer = new NDEFWriter();
369+
const writer = new NDEFReader();
370370
await writer.write(buffer_view);
371371
assertNDEFMessagesEqual(buffer_view, mockNFC.pushedMessage());
372-
}, "Test that NDEFWriter.write succeeds when message is ArrayBufferView.");
372+
}, "Test that NDEFReader.write succeeds when message is ArrayBufferView.");
373373

374374
nfc_test(async (t, mockNFC) => {
375-
const writer = new NDEFWriter();
375+
const writer = new NDEFReader();
376376
await writer.write(createMessage([createRecord('empty')]));
377377
const receivedMessage = mockNFC.pushedMessage();
378378
assert_equals(receivedMessage.data.length, 1);
379379
assert_equals(receivedMessage.data[0].recordType, 'empty', 'recordType');
380-
}, "NDEFWriter.write with 'empty' record should succeed.");
380+
}, "NDEFReader.write with 'empty' record should succeed.");
381381

382382
nfc_test(async (t, mockNFC) => {
383-
const writer = new NDEFWriter();
383+
const writer = new NDEFReader();
384384
await writer.write(test_text_data);
385385
assertNDEFWriteOptionsEqual({overwrite: true}, mockNFC.writeOptions());
386386
}, "Check that default NDEFWriteOptions values are correctly set.");
387387

388388
nfc_test(async (t, mockNFC) => {
389-
const writer = new NDEFWriter();
389+
const writer = new NDEFReader();
390390
await writer.write(test_text_data, {overwrite: false});
391391
assertNDEFWriteOptionsEqual({overwrite: false}, mockNFC.writeOptions());
392392
}, "Check that provided NDEFWriteOptions values are correctly converted.");
393393

394394
nfc_test(async (t, mockNFC) => {
395-
const writer1 = new NDEFWriter();
396-
const writer2 = new NDEFWriter();
395+
const writer1 = new NDEFReader();
396+
const writer2 = new NDEFReader();
397397

398398
const p1 = writer1.write(test_text_data, {overwrite: false});
399399
const p2 = writer2.write(test_url_data, {overwrite: true});
@@ -414,10 +414,10 @@
414414
resolve();
415415
});
416416
});
417-
}, "NDEFWriter.write should replace all previously configured write operations.");
417+
}, "NDEFReader.write should replace all previously configured write operations.");
418418

419419
nfc_test(async (t, mockNFC) => {
420-
const writer = new NDEFWriter();
420+
const writer = new NDEFReader();
421421
await writer.write({ records: [{ recordType: "mime", data: test_buffer_data }] });
422422
assertNDEFMessagesEqual(test_buffer_data, mockNFC.pushedMessage());
423423
}, "Test that mediaType should be set to 'application/octet-stream' if \
@@ -428,7 +428,7 @@
428428
// Make sure the push will be pending in the mock.
429429
mockNFC.setPendingPushCompleted(false);
430430

431-
const writer = new NDEFWriter();
431+
const writer = new NDEFReader();
432432
const promise = writer.write(test_text_data);
433433

434434
// Just to make sure the write() request has already reached to the mock.
@@ -437,37 +437,37 @@
437437

438438
mockNFC.simulateNonNDEFTagDiscovered();
439439
await promise_rejects_dom(t, 'NotSupportedError', promise);
440-
}, "NDEFWriter.write should fail when the NFC device coming up does not expose \
440+
}, "NDEFReader.write should fail when the NFC device coming up does not expose \
441441
NDEF technology.");
442442

443443
nfc_test(async (t, mockNFC) => {
444-
const writer = new NDEFWriter();
444+
const writer = new NDEFReader();
445445
await writer.write(test_text_data, {overwrite: false});
446446
assertNDEFMessagesEqual(test_text_data, mockNFC.pushedMessage());
447-
}, "NDEFWriter.write should succeed to write data to an unformatted NFC device \
447+
}, "NDEFReader.write should succeed to write data to an unformatted NFC device \
448448
when the NDEFWriteOptions.overwrite is false.");
449449

450450
nfc_test(async (t, mockNFC) => {
451-
const writer = new NDEFWriter();
451+
const writer = new NDEFReader();
452452
await writer.write(test_buffer_data);
453453
assertNDEFMessagesEqual(test_buffer_data, mockNFC.pushedMessage());
454454
await writer.write(test_text_data, {overwrite: true});
455455
assertNDEFMessagesEqual(test_text_data, mockNFC.pushedMessage());
456-
}, "NDEFWriter.write should succeed to overwrite the existing data \
456+
}, "NDEFReader.write should succeed to overwrite the existing data \
457457
when the NDEFWriteOptions.overwrite is true.");
458458

459459
nfc_test(async (t, mockNFC) => {
460-
const writer = new NDEFWriter();
460+
const writer = new NDEFReader();
461461
const p = writer.write(test_text_data, {overwrite: false});
462462
mockNFC.setIsFormattedTag(true);
463463
await promise_rejects_dom(t, 'NotAllowedError', p);
464-
}, "NDEFWriter.write should fail when there are NDEF records on the NFC device \
464+
}, "NDEFReader.write should fail when there are NDEF records on the NFC device \
465465
and NDEFWriteOptions.overwrite is false.");
466466

467467
nfc_test(async (t, mockNFC) => {
468-
const writer = new NDEFWriter();
468+
const writer = new NDEFReader();
469469
mockNFC.simulateDataTransferFails();
470470
await promise_rejects_dom(t, 'NetworkError', writer.write(test_text_data));
471-
}, "NDEFWriter.write should fail with NetworkError when NFC data transfer fails.");
471+
}, "NDEFReader.write should fail with NetworkError when NFC data transfer fails.");
472472

473473
</script>

web-nfc/idlharness.https.window.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ idl_test(
2121
['html', 'dom', 'WebIDL'],
2222
idl_array => {
2323
idl_array.add_objects({
24-
NDEFWriter: ['new NDEFWriter();'],
2524
NDEFReader: ['new NDEFReader();'],
2625
NDEFRecord: [`new NDEFRecord(${JSON.stringify(record)});`],
2726
NDEFMessage: [`new NDEFMessage(${JSON.stringify(message)});`],

web-nfc/nfc_insecure_context.html

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@ <h2>Note</h2>
1515

1616
"use strict";
1717

18-
test(t => {
19-
assert_false(isSecureContext);
20-
assert_false('NDEFWriter' in window);
21-
}, 'NDEFWriter requires a secure context');
22-
2318
test(t => {
2419
assert_false(isSecureContext);
2520
assert_false('NDEFReader' in window);

0 commit comments

Comments
 (0)