Skip to content

Commit b677d0b

Browse files
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 Because kWebNfcNdefReaderScan and kWebNfcNdefWriterWrite are now used in idl extended attributes, their usages may be higher now as they were fired after user granted permission. Bug: 1131141 Change-Id: I8cc2ce053e5bb43c0fa5b299bdaf5cb5317bf859
1 parent 93b6866 commit b677d0b

7 files changed

+170
-212
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@
99
<script>
1010

1111
nfc_test(async (t, mockNFC) => {
12-
const reader = new NDEFReader();
13-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
12+
const ndef = new NDEFReader();
13+
const ndefWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
1414
const promise = new Promise((resolve, reject) => {
15-
readerWatcher.wait_for("reading").then(event => {
15+
ndefWatcher.wait_for("reading").then(event => {
1616
if (document.hidden) reject();
1717
else resolve();
1818
});
1919
});
20-
await reader.scan();
20+
await ndef.scan();
2121
await promise;
2222
}, "Test NDEFReader.onreading is not fired when document is hidden");
2323

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/NDEFReader_scan.https.html

Lines changed: 60 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -21,104 +21,104 @@
2121
];
2222

2323
function waitSyntaxErrorPromise(t, scan_options) {
24-
const reader = new NDEFReader();
25-
return promise_rejects_dom(t, 'SyntaxError', reader.scan(scan_options));
24+
const ndef = new NDEFReader();
25+
return promise_rejects_dom(t, 'SyntaxError', ndef.scan(scan_options));
2626
}
2727

2828
nfc_test(async t => {
29-
const reader = new NDEFReader();
29+
const ndef = new NDEFReader();
3030
const promises = [];
3131
invalid_signals.forEach(invalid_signal => {
3232
promises.push(promise_rejects_js(t, TypeError,
33-
reader.scan({ signal: invalid_signal })));
33+
ndef.scan({ signal: invalid_signal })));
3434
});
3535
await Promise.all(promises);
3636
}, "Test that NDEFReader.scan rejects if signal is not an AbortSignal.");
3737

3838
nfc_test(async t => {
3939
await test_driver.set_permission({ name: 'nfc' }, 'denied', false);
40-
const reader = new NDEFReader();
41-
await promise_rejects_dom(t, 'NotAllowedError', reader.scan());
40+
const ndef = new NDEFReader();
41+
await promise_rejects_dom(t, 'NotAllowedError', ndef.scan());
4242
}, "NDEFReader.scan should fail if user permission is not granted.");
4343

4444
// We do not provide NFC mock here to simulate that there has no available
4545
// implementation for NFC Mojo interface.
4646
nfc_test(async (t, mockNFC) => {
4747
mockNFC.simulateClosedPipe();
48-
const reader = new NDEFReader();
49-
await promise_rejects_dom(t, 'NotSupportedError', reader.scan());
50-
}, "NDEFReader.scan should faild if no implementation for NFC Mojo interface.");
48+
const ndef = new NDEFReader();
49+
await promise_rejects_dom(t, 'NotSupportedError', ndef.scan());
50+
}, "NDEFReader.scan should fail if no implementation for NFC Mojo interface.");
5151

5252
nfc_test(async (t, mockNFC) => {
5353
mockNFC.setHWStatus(NFCHWStatus.DISABLED);
54-
const reader = new NDEFReader();
55-
await promise_rejects_dom(t, 'NotReadableError', reader.scan());
54+
const ndef = new NDEFReader();
55+
await promise_rejects_dom(t, 'NotReadableError', ndef.scan());
5656
}, "NDEFReader.scan should fail if NFC HW is disabled.");
5757

5858
nfc_test(async (t, mockNFC) => {
5959
mockNFC.setHWStatus(NFCHWStatus.NOT_SUPPORTED);
60-
const reader = new NDEFReader();
61-
await promise_rejects_dom(t, 'NotSupportedError', reader.scan());
60+
const ndef = new NDEFReader();
61+
await promise_rejects_dom(t, 'NotSupportedError', ndef.scan());
6262
}, "NDEFReader.scan should fail if NFC HW is not supported.");
6363

6464
nfc_test(async (t, mockNFC) => {
65-
const reader = new NDEFReader();
65+
const ndef = new NDEFReader();
6666
const controller = new AbortController();
67-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
68-
const promise = readerWatcher.wait_for("reading").then(event => {
67+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
68+
const promise = ndefWatcher.wait_for("reading").then(event => {
6969
assert_true(event instanceof NDEFReadingEvent);
7070
controller.abort();
7171
});
72-
await reader.scan({signal : controller.signal});
72+
await ndef.scan({signal : controller.signal});
7373

7474
mockNFC.setReadingMessage(createMessage([createTextRecord(test_text_data)]));
7575
await promise;
7676
}, "Test that nfc watch success if NFC HW is enabled.");
7777

7878
nfc_test(async (t, mockNFC) => {
79-
const reader = new NDEFReader();
79+
const ndef = new NDEFReader();
8080
const controller = new AbortController();
81-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
82-
const promise = readerWatcher.wait_for("reading").then(event => {
81+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
82+
const promise = ndefWatcher.wait_for("reading").then(event => {
8383
assert_true(event instanceof NDEFReadingEvent);
8484
controller.abort();
8585
});
86-
await reader.scan({signal : controller.signal});
86+
await ndef.scan({signal : controller.signal});
8787

8888
mockNFC.setReadingMessage(createMessage([createTextRecord(test_text_data)]));
8989
await promise;
9090
}, "Test that NDEFReader.scan matches any ids if NDEFScanOptions.id is undefined.");
9191

9292
nfc_test(async (t, mockNFC) => {
93-
const reader = new NDEFReader();
93+
const ndef = new NDEFReader();
9494
const controller = new AbortController();
9595
controller.abort();
96-
await promise_rejects_dom(t, 'AbortError', reader.scan({signal: controller.signal}));
96+
await promise_rejects_dom(t, 'AbortError', ndef.scan({signal: controller.signal}));
9797
}, "Test that NDEFReader.scan rejects if NDEFScanOptions.signal is already aborted.");
9898

9999
nfc_test(async (t, mockNFC) => {
100-
const reader = new NDEFReader();
100+
const ndef = new NDEFReader();
101101
const controller = new AbortController();
102-
const promise = reader.scan({signal: controller.signal});
102+
const promise = ndef.scan({signal: controller.signal});
103103
controller.abort();
104104
await promise_rejects_dom(t, 'AbortError', promise);
105105
}, "Test that NDEFReader.scan rejects if NDEFScanOptions.signal aborts right after \
106106
the scan invocation.");
107107

108108
nfc_test(async (t, mockNFC) => {
109-
const reader = new NDEFReader();
109+
const ndef = new NDEFReader();
110110
const controller = new AbortController();
111-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
111+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
112112
const message = createMessage([createTextRecord(test_text_data)]);
113-
const promise = readerWatcher.wait_for("reading").then(event => {
113+
const promise = ndefWatcher.wait_for("reading").then(event => {
114114
assert_true(event instanceof NDEFReadingEvent);
115115
});
116-
await reader.scan({signal : controller.signal});
116+
await ndef.scan({signal : controller.signal});
117117

118118
mockNFC.setReadingMessage(message);
119119
await promise;
120120

121-
reader.onreading = t.unreached_func("reading event should not be fired.");
121+
ndef.onreading = t.unreached_func("reading event should not be fired.");
122122
mockNFC.setReadingMessage(message);
123123
controller.abort();
124124
await new Promise((resolve, reject) => {
@@ -127,10 +127,10 @@
127127
}, "Test that NDEFReader can not get any reading events once the signal aborts.");
128128

129129
nfc_test(async (t, mockNFC) => {
130-
const reader = new NDEFReader();
130+
const ndef = new NDEFReader();
131131
const controller = new AbortController();
132-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
133-
const promise = readerWatcher.wait_for("reading").then(event => {
132+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
133+
const promise = ndefWatcher.wait_for("reading").then(event => {
134134
controller.abort();
135135
assert_true(event instanceof NDEFReadingEvent);
136136

@@ -151,7 +151,7 @@
151151
assert_equals(decoder.decode(event.message.records[0].toRecords()[0].toRecords()[0].data),
152152
test_text_data, 'data has the same content with the original dictionary');
153153
});
154-
await reader.scan({signal : controller.signal});
154+
await ndef.scan({signal : controller.signal});
155155

156156
// An external type record --contains-> a local type record --contains-> a text record.
157157
const messageContainText = createMessage([createTextRecord(test_text_data)]);
@@ -164,10 +164,10 @@
164164
}, "NDEFRecord.toRecords returns its embedded records correctly.");
165165

166166
nfc_test(async (t, mockNFC) => {
167-
const reader = new NDEFReader();
167+
const ndef = new NDEFReader();
168168
const controller = new AbortController();
169-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
170-
const promise = readerWatcher.wait_for("reading").then(event => {
169+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
170+
const promise = ndefWatcher.wait_for("reading").then(event => {
171171
controller.abort();
172172
assert_true(event instanceof NDEFReadingEvent);
173173

@@ -203,7 +203,7 @@
203203
assert_array_equals(embedded_record_types.sort(), ['text', 'url'],
204204
'smart-poster record\'s contained record types');
205205
});
206-
await reader.scan({signal : controller.signal});
206+
await ndef.scan({signal : controller.signal});
207207

208208
// A smart-poster record contains a uri record, text record.
209209
const uri_record = createUrlRecord(test_url_data);
@@ -218,41 +218,41 @@
218218
nfc_test(async (t, mockNFC) => {
219219
const promises = [];
220220

221-
const reader1 = new NDEFReader();
222-
const readerWatcher1 = new EventWatcher(t, reader1, ["reading", "readingerror"]);
223-
const promise1 = readerWatcher1.wait_for("readingerror");
221+
const ndef1 = new NDEFReader();
222+
const ndefWatcher1 = new EventWatcher(t, ndef1, ["reading", "readingerror"]);
223+
const promise1 = ndefWatcher1.wait_for("readingerror");
224224
promises.push(promise1);
225-
await reader1.scan();
225+
await ndef1.scan();
226226

227-
const reader2 = new NDEFReader();
228-
const readerWatcher2 = new EventWatcher(t, reader2, ["reading", "readingerror"]);
229-
const promise2 = readerWatcher2.wait_for("readingerror");
227+
const ndef2 = new NDEFReader();
228+
const ndefWatcher2 = new EventWatcher(t, ndef2, ["reading", "readingerror"]);
229+
const promise2 = ndefWatcher2.wait_for("readingerror");
230230
promises.push(promise2);
231-
await reader2.scan();
231+
await ndef2.scan();
232232

233233
mockNFC.simulateNonNDEFTagDiscovered();
234234
await Promise.all(promises);
235235
}, "Test that NDEFReader.onreadingerror should be fired if the NFC tag does not \
236236
expose NDEF technology.");
237237

238238
nfc_test(async (t, mockNFC) => {
239-
const reader = new NDEFReader();
239+
const ndef = new NDEFReader();
240240
const controller = new AbortController();
241-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
242-
const promise = readerWatcher.wait_for("reading").then(event => {
241+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
242+
const promise = ndefWatcher.wait_for("reading").then(event => {
243243
assert_equals(event.serialNumber, fake_tag_serial_number);
244244
assert_equals(event.message.records.length, 0);
245245
controller.abort();
246246
});
247-
await reader.scan({signal : controller.signal});
247+
await ndef.scan({signal : controller.signal});
248248

249249
mockNFC.setReadingMessage({ records: [] });
250250
await promise;
251251
}, "Test that NDEFReader.onreading should be fired on an unformatted NFC tag \
252252
with empty records array for NDEFMessage.");
253253

254254
nfc_test(async (t, mockNFC) => {
255-
const reader = new NDEFReader();
255+
const ndef = new NDEFReader();
256256
const controller = new AbortController();
257257
const message = createMessage([createTextRecord(test_text_data),
258258
createMimeRecordFromJson(test_json_data),
@@ -262,31 +262,31 @@
262262
createUrlRecord(test_url_data, true),
263263
createRecord('w3.org:xyz', test_buffer_data)],
264264
test_message_origin);
265-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
266-
const promise = readerWatcher.wait_for("reading").then(event => {
265+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
266+
const promise = ndefWatcher.wait_for("reading").then(event => {
267267
assert_equals(event.serialNumber, fake_tag_serial_number);
268268
assertWebNDEFMessagesEqual(event.message, new NDEFMessage(message));
269269
controller.abort();
270270
});
271-
await reader.scan({signal : controller.signal});
271+
await ndef.scan({signal : controller.signal});
272272

273273
mockNFC.setReadingMessage(message);
274274
await promise;
275275
}, "Test that reading message with multiple records should succeed.");
276276

277277
nfc_test(async (t, mockNFC) => {
278-
const reader = new NDEFReader();
279-
const promise1 = reader.scan();
280-
const promise2 = promise_rejects_dom(t, 'InvalidStateError', reader.scan());
278+
const ndef = new NDEFReader();
279+
const promise1 = ndef.scan();
280+
const promise2 = promise_rejects_dom(t, 'InvalidStateError', ndef.scan());
281281
await promise1;
282282
await promise2;
283283
}, "Test that NDEFReader.scan rejects if there is already an ongoing scan.");
284284

285285
nfc_test(async (t, mockNFC) => {
286-
const reader = new NDEFReader();
286+
const ndef = new NDEFReader();
287287
const controller = new AbortController();
288-
await reader.scan({signal : controller.signal});
288+
await ndef.scan({signal : controller.signal});
289289
controller.abort();
290-
await reader.scan();
290+
await ndef.scan();
291291
}, "Test that NDEFReader.scan can be started after the previous scan is aborted.");
292292
</script>

web-nfc/NDEFReader_scan_iframe.https.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<!DOCTYPE html>
22
<meta charset=utf-8>
3-
<title>NDEFWriter.scan with an focused iframe</title>
3+
<title>NDEFReader.scan with an focused iframe</title>
44
<link rel="help" href="https://w3c.github.io/web-nfc/"/>
55
<script src="/resources/testharness.js"></script>
66
<script src="/resources/testharnessreport.js"></script>
@@ -9,15 +9,15 @@
99
<script>
1010

1111
nfc_test(async (t, mockNFC) => {
12-
const reader = new NDEFReader();
12+
const ndef = new NDEFReader();
1313
const controller = new AbortController();
14-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
14+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
1515

16-
const promise = readerWatcher.wait_for("reading").then(event => {
16+
const promise = ndefWatcher.wait_for("reading").then(event => {
1717
assert_true(event instanceof NDEFReadingEvent);
1818
controller.abort();
1919
});
20-
await reader.scan({ signal: controller.signal });
20+
await ndef.scan({ signal: controller.signal });
2121

2222
const iframe = document.createElement('iframe');
2323
iframe.src = 'resources/support-iframe.html';
@@ -37,7 +37,7 @@
3737

3838
// Remove iframe from main document.
3939
iframe.parentNode.removeChild(iframe);
40-
}, 'Test that NDEFWriter.scan is not suspended if iframe gains focus.');
40+
}, 'Test that NDEFReader.scan is not suspended if iframe gains focus.');
4141

4242
</script>
4343
</body>

0 commit comments

Comments
 (0)