Revision 5ffa5051c36c670be1a38000de442b002920ac12 authored by Joe Downing on 22 March 2018, 07:35:35 UTC, committed by Blink WPT Bot on 22 March 2018, 07:45:48 UTC
This change moves the KeyboardLock API methods to a 'keyboard'
namespace on the Navigator object.  We are doing this work now as
there has been a request for additional keyboard functionality that
would also be placed on the new keyboard object and we wanted to
move the KeyboardLock methods there for consistency before we launch.

KeyboardLock API Spec is here:
https://w3c.github.io/keyboard-lock/#API

Old calling pattern:
Navigator.keyboardLock();
Navigator.keyboardUnlock();

New calling pattern:
Navigator.keyboard.lock();
Navigator.keyboard.unlock();

Note: The main logic in the KeyboardLock.cpp class and tests is the
same as it was, however the file changed enough that git does not
recognize it as a file move.

BUG=680809

Change-Id: I234b2ab12d5ecd44c894ed5103863fd96fd548d4
Reviewed-on: https://chromium-review.googlesource.com/969656
Reviewed-by: Philip Jägenstedt <foolip@chromium.org>
Reviewed-by: Gary Kacmarcik <garykac@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Daniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544996}
1 parent 1a8c195
Raw File
createcredential-badargs-authnrselection.https.html
<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAuthn navigator.credentials.create() authenticator selection Tests</title>
<link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org">
<link rel="help" href="https://w3c.github.io/webauthn/#iface-credential">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src=helpers.js></script>
<body></body>
<script>
standardSetup(function() {
    "use strict";

    var defaultAuthnrSel = {
        authenticatorAttachment: "cross-platform",
        requireResidentKey: false,
        userVerification: "preferred"
    };
    // attachment
    var authnrSelAttachPlatform = cloneObject(defaultAuthnrSel);
    authnrSelAttachPlatform.authenticatorAttachment = "platform";
    var authnrSelBadAttachEmptyStr = cloneObject(defaultAuthnrSel);
    authnrSelBadAttachEmptyStr.authenticatorAttachment = "";
    var authnrSelBadAttachEmptyObj = cloneObject(defaultAuthnrSel);
    authnrSelBadAttachEmptyObj.authenticatorAttachment = {};
    var authnrSelBadAttachNull = cloneObject(defaultAuthnrSel);
    authnrSelBadAttachNull.authenticatorAttachment = null;
    // resident key
    var authnrSelRkTrue = cloneObject(defaultAuthnrSel);
    authnrSelRkTrue.requireResidentKey = true;
    var authnrSelRkBadString = cloneObject(defaultAuthnrSel);
    authnrSelRkBadString.requireResidentKey = "foo";
    // user verification
    var authnrSelUvRequired = cloneObject(defaultAuthnrSel);
    authnrSelUvRequired.userVerification = "required";
    var authnrSelBadUvEmptyStr = cloneObject(defaultAuthnrSel);
    authnrSelBadUvEmptyStr.userVerification = "";
    var authnrSelBadUvEmptyObj = cloneObject(defaultAuthnrSel);
    authnrSelBadUvEmptyObj.userVerification = {};
    var authnrSelBadUvStr = cloneObject(defaultAuthnrSel);
    authnrSelBadUvStr.userVerification = "requiredshirtshoestshirt";
    var authnrSelBadUvNull = cloneObject(defaultAuthnrSel);
    authnrSelBadUvNull.userVerification = null;

    // authenticatorSelection bad values
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", []).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection is empty array", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", null).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection is null", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", "").runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection is empty string", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", "none").runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection is string", new TypeError());

    // authenticatorSelection bad attachment values
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadAttachEmptyStr).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment is empty string", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadAttachEmptyObj).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment is empty object", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadAttachNull).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment is null", new TypeError());
    // XXX: assumes authnr is behaving like most U2F authnrs; really depends on the authnr or mock configuration
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelAttachPlatform).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment platform", "NotAllowedError");

    // authenticatorSelection bad requireResidentKey values
   // XXX: assumes authnr is behaving like most U2F authnrs; really depends on the authnr or mock configuration
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelRkTrue).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection residentKey true", "NotAllowedError");
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelRkBadString).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection residentKey is string", new TypeError());
    // TODO: not sure if rk is "boolean" or "truthy"; add test cases if it should only accept boolean values

    // authenticatorSelection bad userVerification values
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadUvEmptyStr).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification empty string", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadUvEmptyObj).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification empty object", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadUvStr).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification bad value", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadUvNull).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification null", new TypeError());
    // XXX: assumes this is a mock authenticator the properly reports that it is not doing userVerfication
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelUvRequired).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification required", "NotAllowedError");
});

/* JSHINT */
/* globals standardSetup, CreateCredentialsTest, cloneObject */
</script>
back to top