// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/webauthn/core/browser/webauthn_test_utils.h"

#include <array>

#include "third_party/blink/public/mojom/webauthn/authenticator.mojom.h"

namespace webauthn::test {

namespace {

const auto kValidRpTestCasesArray = std::to_array<OriginClaimedAuthorityPair>({
    {"http://localhost", "localhost",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://myawesomedomain", "myawesomedomain",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://foo.bar.google.com", "foo.bar.google.com",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://foo.bar.google.com", "bar.google.com",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://foo.bar.google.com", "google.com",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://earth.login.awesomecompany", "login.awesomecompany",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://google.com:1337", "google.com",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://google.com.", "google.com",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://google.com.", "google.com.",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://google.com..", "google.com..",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://.google.com", "google.com",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://..google.com", "google.com",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://.google.com", ".google.com",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://..google.com", ".google.com",
     blink::mojom::AuthenticatorStatus::SUCCESS},
    {"https://accounts.google.com", ".google.com",
     blink::mojom::AuthenticatorStatus::SUCCESS},
});

const auto kInvalidRpTestCasesArray = std::to_array<
    OriginClaimedAuthorityPair>({
    {"https://google.com", "com",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"http://google.com", "google.com",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"http://myawesomedomain", "myawesomedomain",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://google.com", "foo.bar.google.com",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"http://myawesomedomain", "randomdomain",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://myawesomedomain", "randomdomain",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://notgoogle.com", "google.com)",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://not-google.com", "google.com)",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://evil.appspot.com", "appspot.com",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://evil.co.uk", "co.uk",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://google.com", "google.com.",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://google.com", "google.com..",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://google.com", ".google.com",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://google.com..", "google.com",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://.com", "com.",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://.co.uk", "co.uk.",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://1.2.3", "1.2.3",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://1.2.3", "2.3", blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://127.0.0.1", "127.0.0.1",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://127.0.0.1", "27.0.0.1",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://127.0.0.1", ".0.0.1",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://127.0.0.1", "0.0.1",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://[::127.0.0.1]", "127.0.0.1",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://[::127.0.0.1]", "[127.0.0.1]",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://[::1]", "1", blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://[::1]", "1]", blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://[::1]", "::1", blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://[::1]", "[::1]",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://[1::1]", "::1",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://[1::1]", "::1]",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://[1::1]", "[::1]",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"http://google.com:443", "google.com",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"data:google.com", "google.com",
     blink::mojom::AuthenticatorStatus::OPAQUE_DOMAIN},
    {"data:text/html,google.com", "google.com",
     blink::mojom::AuthenticatorStatus::OPAQUE_DOMAIN},
    {"ws://google.com", "google.com",
     blink::mojom::AuthenticatorStatus::INVALID_PROTOCOL},
    {"gopher://google.com", "google.com",
     blink::mojom::AuthenticatorStatus::OPAQUE_DOMAIN},
    {"ftp://google.com", "google.com",
     blink::mojom::AuthenticatorStatus::INVALID_PROTOCOL},
    {"file:///google.com", "google.com",
     blink::mojom::AuthenticatorStatus::INVALID_PROTOCOL},
    {"wss://google.com", "google.com",
     blink::mojom::AuthenticatorStatus::INVALID_PROTOCOL},
    {"data:,", "", blink::mojom::AuthenticatorStatus::OPAQUE_DOMAIN},
    {"https://google.com", "",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"ws:///google.com", "",
     blink::mojom::AuthenticatorStatus::INVALID_PROTOCOL},
    {"wss:///google.com", "",
     blink::mojom::AuthenticatorStatus::INVALID_PROTOCOL},
    {"gopher://google.com", "",
     blink::mojom::AuthenticatorStatus::OPAQUE_DOMAIN},
    {"ftp://google.com", "",
     blink::mojom::AuthenticatorStatus::INVALID_PROTOCOL},
    {"file:///google.com", "",
     blink::mojom::AuthenticatorStatus::INVALID_PROTOCOL},
    {"https://login.awesomecompany", "awesomecompany",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://example.com", "https://com/",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://example.com", "https://com/foo",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://example.com", "https://foo.com/",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://example.com", "http://example.com",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"http://example.com", "https://example.com",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://127.0.0.1", "https://127.0.0.1",
     blink::mojom::AuthenticatorStatus::INVALID_DOMAIN},
    {"https://www.notgoogle.com",
     "https://www.gstatic.com/securitykey/origins.json",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://www.google.com",
     "https://www.gstatic.com/securitykey/origins.json#x",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://www.google.com",
     "https://www.gstatic.com/securitykey/origins.json2",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://www.google.com", "https://gstatic.com/securitykey/origins.json",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://ggoogle.com", "https://www.gstatic.com/securitykey/origi",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
    {"https://com", "https://www.gstatic.com/securitykey/origins.json",
     blink::mojom::AuthenticatorStatus::BAD_RELYING_PARTY_ID},
});

}  // namespace

base::span<const OriginClaimedAuthorityPair> GetValidRpTestCases() {
  return kValidRpTestCasesArray;
}

base::span<const OriginClaimedAuthorityPair> GetInvalidRpTestCases() {
  return kInvalidRpTestCasesArray;
}

}  // namespace webauthn::test
