Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Commit fb849ee

Browse files
beaufortfrancoismoz-wptsync-bot
authored andcommitted
Bug 1679943 [wpt PR 26094] - web-nfc: Merge NDEFWriter in NDEFReader, a=testonly
Automatic update from web-platform-tests 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 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2424208 Reviewed-by: Kentaro Hara <[email protected]> Reviewed-by: Reilly Grant <[email protected]> Reviewed-by: François Beaufort <[email protected]> Commit-Queue: François Beaufort <[email protected]> Cr-Commit-Position: refs/heads/master@{#832236} -- wpt-commits: 77f3f1533681dedef98a4c94c2abdb562d097002 wpt-pr: 26094
1 parent 94f0552 commit fb849ee

7 files changed

+207
-185
lines changed

testing/web-platform/tests/web-nfc/NDEFReader-document-hidden-manual.https.html renamed to testing/web-platform/tests/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

testing/web-platform/tests/web-nfc/NDEFWriter-document-hidden-manual.https.html renamed to testing/web-platform/tests/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

testing/web-platform/tests/web-nfc/NDEFReader_scan.https.html

Lines changed: 92 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -21,104 +21,136 @@
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

64+
nfc_test(async () => {
65+
await new Promise((resolve,reject) => {
66+
const iframe = document.createElement('iframe');
67+
iframe.srcdoc = `<script>
68+
window.onmessage = async (message) => {
69+
if (message.data === "Ready") {
70+
try {
71+
const ndef = new NDEFReader();
72+
await ndef.scan();
73+
parent.postMessage("Failure", "*");
74+
} catch (error) {
75+
if (error.name == "NotAllowedError") {
76+
parent.postMessage("Success", "*");
77+
} else {
78+
parent.postMessage("Failure", "*");
79+
}
80+
}
81+
}
82+
};
83+
<\/script>`;
84+
iframe.onload = () => iframe.contentWindow.postMessage('Ready', '*');
85+
document.body.appendChild(iframe);
86+
window.onmessage = message => {
87+
if (message.data == 'Success') {
88+
resolve();
89+
} else if (message.data == 'Failure') {
90+
reject();
91+
}
92+
}
93+
});
94+
}, 'Test that WebNFC API is not accessible from iframe context.');
95+
6496
nfc_test(async (t, mockNFC) => {
65-
const reader = new NDEFReader();
97+
const ndef = new NDEFReader();
6698
const controller = new AbortController();
67-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
68-
const promise = readerWatcher.wait_for("reading").then(event => {
99+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
100+
const promise = ndefWatcher.wait_for("reading").then(event => {
69101
assert_true(event instanceof NDEFReadingEvent);
70102
controller.abort();
71103
});
72-
await reader.scan({signal : controller.signal});
104+
await ndef.scan({signal : controller.signal});
73105

74106
mockNFC.setReadingMessage(createMessage([createTextRecord(test_text_data)]));
75107
await promise;
76108
}, "Test that nfc watch success if NFC HW is enabled.");
77109

78110
nfc_test(async (t, mockNFC) => {
79-
const reader = new NDEFReader();
111+
const ndef = new NDEFReader();
80112
const controller = new AbortController();
81-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
82-
const promise = readerWatcher.wait_for("reading").then(event => {
113+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
114+
const promise = ndefWatcher.wait_for("reading").then(event => {
83115
assert_true(event instanceof NDEFReadingEvent);
84116
controller.abort();
85117
});
86-
await reader.scan({signal : controller.signal});
118+
await ndef.scan({signal : controller.signal});
87119

88120
mockNFC.setReadingMessage(createMessage([createTextRecord(test_text_data)]));
89121
await promise;
90122
}, "Test that NDEFReader.scan matches any ids if NDEFScanOptions.id is undefined.");
91123

92124
nfc_test(async (t, mockNFC) => {
93-
const reader = new NDEFReader();
125+
const ndef = new NDEFReader();
94126
const controller = new AbortController();
95127
controller.abort();
96-
await promise_rejects_dom(t, 'AbortError', reader.scan({signal: controller.signal}));
128+
await promise_rejects_dom(t, 'AbortError', ndef.scan({signal: controller.signal}));
97129
}, "Test that NDEFReader.scan rejects if NDEFScanOptions.signal is already aborted.");
98130

99131
nfc_test(async (t, mockNFC) => {
100-
const reader = new NDEFReader();
132+
const ndef = new NDEFReader();
101133
const controller = new AbortController();
102-
const promise = reader.scan({signal: controller.signal});
134+
const promise = ndef.scan({signal: controller.signal});
103135
controller.abort();
104136
await promise_rejects_dom(t, 'AbortError', promise);
105137
}, "Test that NDEFReader.scan rejects if NDEFScanOptions.signal aborts right after \
106138
the scan invocation.");
107139

108140
nfc_test(async (t, mockNFC) => {
109-
const reader = new NDEFReader();
141+
const ndef = new NDEFReader();
110142
const controller = new AbortController();
111-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
143+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
112144
const message = createMessage([createTextRecord(test_text_data)]);
113-
const promise = readerWatcher.wait_for("reading").then(event => {
145+
const promise = ndefWatcher.wait_for("reading").then(event => {
114146
assert_true(event instanceof NDEFReadingEvent);
115147
});
116-
await reader.scan({signal : controller.signal});
148+
await ndef.scan({signal : controller.signal});
117149

118150
mockNFC.setReadingMessage(message);
119151
await promise;
120152

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

129161
nfc_test(async (t, mockNFC) => {
130-
const reader = new NDEFReader();
162+
const ndef = new NDEFReader();
131163
const controller = new AbortController();
132-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
133-
const promise = readerWatcher.wait_for("reading").then(event => {
164+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
165+
const promise = ndefWatcher.wait_for("reading").then(event => {
134166
controller.abort();
135167
assert_true(event instanceof NDEFReadingEvent);
136168

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

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

166198
nfc_test(async (t, mockNFC) => {
167-
const reader = new NDEFReader();
199+
const ndef = new NDEFReader();
168200
const controller = new AbortController();
169-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
170-
const promise = readerWatcher.wait_for("reading").then(event => {
201+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
202+
const promise = ndefWatcher.wait_for("reading").then(event => {
171203
controller.abort();
172204
assert_true(event instanceof NDEFReadingEvent);
173205

@@ -203,7 +235,7 @@
203235
assert_array_equals(embedded_record_types.sort(), ['text', 'url'],
204236
'smart-poster record\'s contained record types');
205237
});
206-
await reader.scan({signal : controller.signal});
238+
await ndef.scan({signal : controller.signal});
207239

208240
// A smart-poster record contains a uri record, text record.
209241
const uri_record = createUrlRecord(test_url_data);
@@ -218,41 +250,41 @@
218250
nfc_test(async (t, mockNFC) => {
219251
const promises = [];
220252

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

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

233265
mockNFC.simulateNonNDEFTagDiscovered();
234266
await Promise.all(promises);
235267
}, "Test that NDEFReader.onreadingerror should be fired if the NFC tag does not \
236268
expose NDEF technology.");
237269

238270
nfc_test(async (t, mockNFC) => {
239-
const reader = new NDEFReader();
271+
const ndef = new NDEFReader();
240272
const controller = new AbortController();
241-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
242-
const promise = readerWatcher.wait_for("reading").then(event => {
273+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
274+
const promise = ndefWatcher.wait_for("reading").then(event => {
243275
assert_equals(event.serialNumber, fake_tag_serial_number);
244276
assert_equals(event.message.records.length, 0);
245277
controller.abort();
246278
});
247-
await reader.scan({signal : controller.signal});
279+
await ndef.scan({signal : controller.signal});
248280

249281
mockNFC.setReadingMessage({ records: [] });
250282
await promise;
251283
}, "Test that NDEFReader.onreading should be fired on an unformatted NFC tag \
252284
with empty records array for NDEFMessage.");
253285

254286
nfc_test(async (t, mockNFC) => {
255-
const reader = new NDEFReader();
287+
const ndef = new NDEFReader();
256288
const controller = new AbortController();
257289
const message = createMessage([createTextRecord(test_text_data),
258290
createMimeRecordFromJson(test_json_data),
@@ -262,31 +294,31 @@
262294
createUrlRecord(test_url_data, true),
263295
createRecord('w3.org:xyz', test_buffer_data)],
264296
test_message_origin);
265-
const readerWatcher = new EventWatcher(t, reader, ["reading", "readingerror"]);
266-
const promise = readerWatcher.wait_for("reading").then(event => {
297+
const ndefWatcher = new EventWatcher(t, ndef, ["reading", "readingerror"]);
298+
const promise = ndefWatcher.wait_for("reading").then(event => {
267299
assert_equals(event.serialNumber, fake_tag_serial_number);
268300
assertWebNDEFMessagesEqual(event.message, new NDEFMessage(message));
269301
controller.abort();
270302
});
271-
await reader.scan({signal : controller.signal});
303+
await ndef.scan({signal : controller.signal});
272304

273305
mockNFC.setReadingMessage(message);
274306
await promise;
275307
}, "Test that reading message with multiple records should succeed.");
276308

277309
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());
310+
const ndef = new NDEFReader();
311+
const promise1 = ndef.scan();
312+
const promise2 = promise_rejects_dom(t, 'InvalidStateError', ndef.scan());
281313
await promise1;
282314
await promise2;
283315
}, "Test that NDEFReader.scan rejects if there is already an ongoing scan.");
284316

285317
nfc_test(async (t, mockNFC) => {
286-
const reader = new NDEFReader();
318+
const ndef = new NDEFReader();
287319
const controller = new AbortController();
288-
await reader.scan({signal : controller.signal});
320+
await ndef.scan({signal : controller.signal});
289321
controller.abort();
290-
await reader.scan();
322+
await ndef.scan();
291323
}, "Test that NDEFReader.scan can be started after the previous scan is aborted.");
292324
</script>

testing/web-platform/tests/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)