Commit b82e3bac authored by Rijubrata Bhaumik's avatar Rijubrata Bhaumik Committed by Commit Bot

[webnfc] Remove ignoreRead from NDEFWriteOptions.

Origin Trial feedback was that webNFC is better without ignoreRead.

Spec changes:
PR: https://github.com/w3c/web-nfc/issues/579
https://github.com/w3c/web-nfc/commit/00509fc2df1fa63a0456034afb04eb16d03ca4cd

Bug: 520391
Change-Id: I9ed23c65f20f028e4cc6621dc7e8eb29a1abb262
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2401021Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Reviewed-by: default avatarRijubrata Bhaumik <rijubrata.bhaumik@intel.com>
Reviewed-by: default avatarKenneth R Christiansen <kenneth.r.christiansen@intel.com>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Arnaud Mandy <arnaud.mandy@intel.com>
Cr-Commit-Position: refs/heads/master@{#805753}
parent 45322cd1
......@@ -533,11 +533,6 @@ public class NfcImpl implements Nfc {
private void processPendingWatchOperations() {
if (mTagHandler == null || mClient == null || mWatchers.size() == 0) return;
// Skip reading if there is a pending push operation and ignoreRead flag is set.
if (mPendingPushOperation != null && mPendingPushOperation.ndefWriteOptions.ignoreRead) {
return;
}
if (mTagHandler.isTagOutOfRange()) {
mTagHandler = null;
return;
......
......@@ -1736,7 +1736,6 @@ public class NFCTest {
*/
private NdefWriteOptions createNdefWriteOptions() {
NdefWriteOptions pushOptions = new NdefWriteOptions();
pushOptions.ignoreRead = false;
pushOptions.overwrite = true;
return pushOptions;
}
......
......@@ -97,14 +97,9 @@ struct NDEFMessage {
};
struct NDEFWriteOptions {
// Only the case of |ignore_read| being |true| matters: while this push
// operation is pending, even a NFC tag comes in proximity range, do not read
// it for all active watchers.
bool ignore_read;
// Only the case of |overwrite| being |false| matters: the push operation will
// read the NFC tag regardless of |ignore_read| to determine if it has NDEF
// records on it, and if yes, do not execute write.
// read the NFC tag to determine if it has NDEF records on it, and if yes, do
// not execute write.
bool overwrite;
};
......
......@@ -5,7 +5,6 @@
// https://w3c.github.io/web-nfc/#the-ndefwriteoptions-dictionary
dictionary NDEFWriteOptions {
boolean ignoreRead = true;
boolean overwrite = true;
AbortSignal? signal;
};
......@@ -57,9 +57,8 @@ TypeConverter<NDEFWriteOptionsPtr, const blink::NDEFWriteOptions*>::Convert(
const blink::NDEFWriteOptions* write_options) {
// https://w3c.github.io/web-nfc/#the-ndefwriteoptions-dictionary
// Default values for NDEFWriteOptions dictionary are:
// ignoreRead = true, overwrite = true
// overwrite = true
NDEFWriteOptionsPtr write_options_ptr = NDEFWriteOptions::New();
write_options_ptr->ignore_read = write_options->ignoreRead();
write_options_ptr->overwrite = write_options->overwrite();
return write_options_ptr;
......
......@@ -94,10 +94,10 @@ function compareNDEFRecords(providedRecord, receivedRecord) {
// Compares NDEFWriteOptions structures that were provided to API and
// received by the mock mojo service.
function assertNDEFWriteOptionsEqual(provided, received) {
if (provided.ignoreRead !== undefined)
assert_equals(provided.ignoreRead, !!received.ignoreRead);
if (provided.overwrite !== undefined)
assert_equals(provided.overwrite, !!received.overwrite);
else
assert_equals(!!received.ignore_read, true);
assert_equals(!!received.overwrite, true);
}
// Compares NDEFReaderOptions structures that were provided to API and
......@@ -319,8 +319,9 @@ var WebNFCTest = (() => {
this.reading_messages_.push(message);
// Ignores reading if NFC operation is suspended.
if(this.operations_suspended_) return;
// Ignores reading if NDEFWriteOptions.ignoreRead is true.
if (this.pending_write_options_ && this.pending_write_options_.ignoreRead)
// when overwrite is false, the write algorithm will read the NFC tag
// to determine if it has NDEF records on it.
if (this.pending_write_options_ && this.pending_write_options_.overwrite)
return;
// Triggers onWatch if the new message matches existing watchers.
for (let watcher of this.watchers_) {
......
......@@ -382,57 +382,21 @@ nfc_test(async (t, mockNFC) => {
nfc_test(async (t, mockNFC) => {
const writer = new NDEFWriter();
await writer.write(test_text_data);
assertNDEFWriteOptionsEqual(createNDEFWriteOptions(true),
mockNFC.writeOptions());
assertNDEFWriteOptionsEqual({overwrite: true}, mockNFC.writeOptions());
}, "Check that default NDEFWriteOptions values are correctly set.");
nfc_test(async (t, mockNFC) => {
const writer = new NDEFWriter();
let ndefWriteOptions = createNDEFWriteOptions(false);
await writer.write(test_text_data, ndefWriteOptions);
assertNDEFWriteOptionsEqual(ndefWriteOptions, mockNFC.writeOptions());
await writer.write(test_text_data, {overwrite: false});
assertNDEFWriteOptionsEqual({overwrite: false}, mockNFC.writeOptions());
}, "Check that provided NDEFWriteOptions values are correctly converted.");
nfc_test(async (t, mockNFC) => {
const reader = new NDEFReader();
const message = createMessage([createTextRecord(test_text_data)]);
const controller = new AbortController();
const readerWatcher = new EventWatcher(t, reader, ["reading", "error"]);
await reader.scan({ signal: controller.signal });
const writer = new NDEFWriter();
await writer.write(test_text_data, { ignoreRead: false });
assertNDEFMessagesEqual(test_text_data, mockNFC.pushedMessage());
mockNFC.setReadingMessage(message);
await readerWatcher.wait_for("reading").then(event => {
controller.abort();
assertWebNDEFMessagesEqual(event.message, new NDEFMessage(message));
});
}, "NDEFWriter.write should read data when ignoreRead is false.");
nfc_test(async (t, mockNFC) => {
const reader = new NDEFReader();
const message = createMessage([createTextRecord(test_text_data)]);
// Ignore reading if NDEFWriteOptions.ignoreRead is true
reader.onreading = t.unreached_func("reading event should not be fired.");
await reader.scan();
const writer = new NDEFWriter();
await writer.write(test_text_data, { ignoreRead: true });
mockNFC.setReadingMessage(message);
assertNDEFMessagesEqual(test_text_data, mockNFC.pushedMessage());
}, "NDEFWriter.write should ignore reading data when ignoreRead is true.");
nfc_test(async (t, mockNFC) => {
const writer1 = new NDEFWriter();
const writer2 = new NDEFWriter();
const ndefWriteOptions1 = createNDEFWriteOptions( false);
const ndefWriteOptions2 = createNDEFWriteOptions(true);
const p1 = writer1.write(test_text_data, ndefWriteOptions1);
const p2 = writer2.write(test_url_data, ndefWriteOptions2);
const p1 = writer1.write(test_text_data, {overwrite: false});
const p2 = writer2.write(test_url_data, {overwrite: true});
await new Promise((resolve, reject) => {
// Make first push pending
......@@ -445,7 +409,7 @@ nfc_test(async (t, mockNFC) => {
});
p2.then(() => {
assertNDEFMessagesEqual(test_url_data, mockNFC.pushedMessage());
assertNDEFWriteOptionsEqual(ndefWriteOptions2, mockNFC.writeOptions());
assertNDEFWriteOptionsEqual( {overwrite: true}, mockNFC.writeOptions());
assert_equals(err, "AbortError", "the pending push should be aborted");
resolve();
});
......@@ -478,7 +442,7 @@ NDEF technology.");
nfc_test(async (t, mockNFC) => {
const writer = new NDEFWriter();
await writer.write(test_text_data, { overwrite: false });
await writer.write(test_text_data, {overwrite: false});
assertNDEFMessagesEqual(test_text_data, mockNFC.pushedMessage());
}, "NDEFWriter.write should succeed to write data to an unformatted NFC device \
when the NDEFWriteOptions.overwrite is false.");
......@@ -487,14 +451,14 @@ nfc_test(async (t, mockNFC) => {
const writer = new NDEFWriter();
await writer.write(test_buffer_data);
assertNDEFMessagesEqual(test_buffer_data, mockNFC.pushedMessage());
await writer.write(test_text_data, { overwrite: true });
await writer.write(test_text_data, {overwrite: true});
assertNDEFMessagesEqual(test_text_data, mockNFC.pushedMessage());
}, "NDEFWriter.write should succeed to overwrite the existing data \
when the NDEFWriteOptions.overwrite is true.");
nfc_test(async (t, mockNFC) => {
const writer = new NDEFWriter();
const p = writer.write(test_text_data, { overwrite: false });
const p = writer.write(test_text_data, {overwrite: false});
mockNFC.setIsFormattedTag(true);
await promise_rejects_dom(t, 'NotAllowedError', p);
}, "NDEFWriter.write should fail when there are NDEF records on the NFC device \
......
......@@ -149,10 +149,6 @@ function createUrlRecord(url, isAbsUrl) {
return createRecord('url', url, test_record_id);
}
function createNDEFWriteOptions(ignoreRead) {
return {ignoreRead};
}
// Compares NDEFMessageSource that was provided to the API
// (e.g. NDEFWriter.write), and NDEFMessage that was received by the
// mock NFC service.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment