Commit 194e854d authored by Wanming Lin's avatar Wanming Lin Committed by Commit Bot

[webnfc] Set permissions in WPT tests

Thanks to the new set_permission method on test_runner, this CL
makes sure the nfc WPT tests with first granted permission and
adds tests for nfc permission status.

Bug: 520391
Change-Id: I50d114c1ac70d97a51fa0ce770c82f012d64f4e6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2094735
Commit-Queue: Leon Han <leon.han@intel.com>
Reviewed-by: default avatarLeon Han <leon.han@intel.com>
Cr-Commit-Position: refs/heads/master@{#748514}
parent 7f81408a
......@@ -398,15 +398,12 @@ var WebNFCTest = (() => {
Object.freeze(this); // Makes it immutable.
}
initialize() {
async initialize() {
if (testInternal.initialized)
throw new Error('Call reset() before initialize().');
if (window.testRunner) {
// Grant nfc permissions for Chromium testrunner.
window.testRunner.setPermission('nfc', 'granted',
location.origin, location.origin);
}
// Grant nfc permissions for Chromium testdriver.
await test_driver.set_permission({ name: 'nfc' }, 'granted', false);
if (testInternal.mockNFC == null) {
testInternal.mockNFC = new MockNFC();
......
......@@ -16,11 +16,6 @@ nfc_test(async (t, mockNFC) => {
if (document.hidden) reject();
resolve();
});
if (window.testRunner) {
// Grant nfc permissions for Chromium testrunner.
window.testRunner.setPermission('nfc', 'granted',
location.origin, location.origin);
}
await reader.scan();
await promise;
}, "Test NDEFReader.onreading is not fired when document is hidden");
......
......@@ -25,7 +25,7 @@ function waitSyntaxErrorPromise(t, scan_options) {
return promise_rejects_dom(t, 'SyntaxError', reader.scan(scan_options));
}
promise_test(async t => {
nfc_test(async t => {
const reader = new NDEFReader();
const promises = [];
invalid_signals.forEach(invalid_signal => {
......@@ -35,12 +35,8 @@ promise_test(async t => {
await Promise.all(promises);
}, "Test that NDEFReader.scan rejects if signal is not an AbortSignal.");
promise_test(async t => {
if (window.testRunner) {
// Deny nfc permissions for Chromium testrunner.
window.testRunner.setPermission('nfc', 'denied',
location.origin, location.origin);
}
nfc_test(async t => {
await test_driver.set_permission({ name: 'nfc' }, 'denied', false);
const reader = new NDEFReader();
await promise_rejects_dom(t, 'NotAllowedError', reader.scan());
}, "NDEFReader.scan should fail if user permission is not granted.");
......@@ -49,10 +45,6 @@ promise_test(async t => {
// implementation for NFC Mojo interface.
nfc_test(async (t, mockNFC) => {
mockNFC.simulateClosedPipe();
if (window.testRunner) {
window.testRunner.setPermission('nfc', 'granted',
location.origin, location.origin);
}
const reader = new NDEFReader();
const readerWatcher = new EventWatcher(t, reader, ["reading", "error"]);
const promise = readerWatcher.wait_for("error").then(event => {
......
......@@ -123,7 +123,7 @@ const invalid_signals = [
self
];
promise_test(async t => {
nfc_test(async t => {
const writer = new NDEFWriter();
const promises = [];
invalid_type_messages.forEach(message => {
......@@ -133,7 +133,7 @@ promise_test(async t => {
await Promise.all(promises);
}, "Test that promise is rejected with TypeError if NDEFMessageSource is invalid.");
promise_test(async t => {
nfc_test(async t => {
const writer = new NDEFWriter();
const promises = [];
invalid_syntax_messages.forEach(message => {
......@@ -144,12 +144,8 @@ promise_test(async t => {
}, "Test that promise is rejected with SyntaxError if NDEFMessageSource contains\
invalid records.");
promise_test(async t => {
if (window.testRunner) {
// Deny nfc permissions for Chromium testrunner.
window.testRunner.setPermission('nfc', 'denied',
location.origin, location.origin);
}
nfc_test(async t => {
await test_driver.set_permission({ name: 'nfc' }, 'denied', false);
const writer = new NDEFWriter();
await promise_rejects_dom(t, 'NotAllowedError', writer.write(test_text_data));
}, 'NDEFWriter.write should fail if user permission is not granted.');
......@@ -158,11 +154,6 @@ promise_test(async t => {
// implementation for NFC Mojo interface.
nfc_test(async (t, mockNFC) => {
mockNFC.simulateClosedPipe();
if (window.testRunner) {
// Deny nfc permissions for Chromium testrunner.
window.testRunner.setPermission('nfc', 'granted',
location.origin, location.origin);
}
const writer = new NDEFWriter();
await promise_rejects_dom(t, 'NotSupportedError', writer.write(test_text_data));
}, 'NDEFWriter.write should fail if no implementation for NFC Mojo interface is available.');
......@@ -187,7 +178,7 @@ nfc_test(async (t, mockNFC) => {
assert_true(callback_called, 'timeout should have caused the abort');
}, "NDEFWriter.write should fail if abort write request before write happends.");
promise_test(async t => {
nfc_test(async t => {
const writer = new NDEFWriter();
const controller = new AbortController();
assert_false(controller.signal.aborted);
......@@ -197,7 +188,7 @@ promise_test(async t => {
writer.write(test_text_data, { signal: controller.signal }));
}, "NDEFWriter.write should fail if signal's aborted flag is set.");
promise_test(async t => {
nfc_test(async t => {
const writer = new NDEFWriter();
const promises = [];
invalid_signals.forEach(invalid_signal => {
......@@ -234,15 +225,10 @@ nfc_test(async (t, mockNFC) => {
await promise_rejects_dom(t, 'NotSupportedError', writer.write(test_text_data));
}, "NDEFWriter.write should fail when NFC HW is not supported.");
promise_test(async () => {
nfc_test(async () => {
await new Promise((resolve,reject) => {
const iframe = document.createElement('iframe');
iframe.srcdoc = `<script>
if (window.testRunner) {
// Grant nfc permissions for Chromium testrunner.
window.testRunner.setPermission('nfc', 'granted',
location.origin, location.origin);
}
window.onmessage = message => {
if (message.data === "Ready") {
const onSuccess = () => {
......
<!DOCTYPE html>
<meta charset=utf-8>
<title>Web NFC: permission</title>
<link rel="help" href="https://w3c.github.io/web-nfc/"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script>
"use strict";
promise_test(async t => {
await test_driver.set_permission({ name: 'nfc' }, 'denied', false);
const status = await navigator.permissions.query({ name:'nfc' });
assert_class_string(status, "PermissionStatus");
assert_equals(status.state, "denied");
}, "Deny nfc permission should work.");
promise_test(async t => {
await test_driver.set_permission({ name: 'nfc' }, 'granted', false);
const status = await navigator.permissions.query({ name: 'nfc' });
assert_class_string(status, "PermissionStatus");
assert_equals(status.state, "granted");
}, "Grant nfc permission should work.");
</script>
......@@ -18,6 +18,8 @@ let loadChromiumResources = Promise.resolve().then(() => {
[
'/gen/layout_test_data/mojo/public/js/mojo_bindings.js',
'/gen/services/device/public/mojom/nfc.mojom.js',
'/resources/testdriver.js',
'/resources/testdriver-vendor.js',
'/resources/chromium/nfc-mock.js',
].forEach(path => {
let script = document.createElement('script');
......
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