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

import("//testing/libfuzzer/fuzzer_test.gni")

static_library("web_package") {
  sources = [
    "input_reader.cc",
    "input_reader.h",
    "signed_web_bundles/attribute_map_parser.cc",
    "signed_web_bundles/attribute_map_parser.h",
    "signed_web_bundles/constants.h",
    "signed_web_bundles/identity_validator.cc",
    "signed_web_bundles/identity_validator.h",
    "signed_web_bundles/integrity_block_parser.cc",
    "signed_web_bundles/integrity_block_parser.h",
    "signed_web_bundles/signature_entry_parser.cc",
    "signed_web_bundles/signature_entry_parser.h",
    "signed_web_bundles/signed_web_bundle_id.cc",
    "signed_web_bundles/signed_web_bundle_id.h",
    "signed_web_bundles/signed_web_bundle_integrity_block.cc",
    "signed_web_bundles/signed_web_bundle_integrity_block.h",
    "signed_web_bundles/signed_web_bundle_signature_stack.cc",
    "signed_web_bundles/signed_web_bundle_signature_stack.h",
    "signed_web_bundles/signed_web_bundle_signature_stack_entry.cc",
    "signed_web_bundles/signed_web_bundle_signature_stack_entry.h",
    "signed_web_bundles/signed_web_bundle_signature_verifier.cc",
    "signed_web_bundles/signed_web_bundle_signature_verifier.h",
    "signed_web_bundles/signed_web_bundle_utils.cc",
    "signed_web_bundles/signed_web_bundle_utils.h",
    "signed_web_bundles/types.h",
    "web_bundle_builder.cc",
    "web_bundle_builder.h",
    "web_bundle_parser.cc",
    "web_bundle_parser.h",
    "web_bundle_parser_factory.cc",
    "web_bundle_parser_factory.h",
    "web_bundle_utils.cc",
    "web_bundle_utils.h",
  ]

  deps = [
    "//base",
    "//components/base32",
    "//components/cbor",
    "//mojo/public/cpp/bindings",
    "//net",
    "//services/network/public/mojom",
  ]

  public_deps = [
    "//components/web_package:mojom_mapped_types",
    "//components/web_package/mojom",
  ]
}

source_set("mojom_mapped_types") {
  visibility = [ "./*" ]

  sources = [
    "signed_web_bundles/ecdsa_p256_public_key.cc",
    "signed_web_bundles/ecdsa_p256_public_key.h",
    "signed_web_bundles/ecdsa_p256_sha256_signature.cc",
    "signed_web_bundles/ecdsa_p256_sha256_signature.h",
    "signed_web_bundles/ed25519_public_key.cc",
    "signed_web_bundles/ed25519_public_key.h",
    "signed_web_bundles/ed25519_signature.cc",
    "signed_web_bundles/ed25519_signature.h",
    "signed_web_bundles/integrity_block_attributes.cc",
    "signed_web_bundles/integrity_block_attributes.h",
  ]

  deps = [
    "//base",
    "//crypto",
    "//mojo/public/cpp/bindings",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "mojom/web_bundle_parser_mojom_traits_unittest.cc",
    "signed_web_bundles/ecdsa_p256_public_key_unittest.cc",
    "signed_web_bundles/ed25519_public_key_unittest.cc",
    "signed_web_bundles/ed25519_signature_unittest.cc",
    "signed_web_bundles/signed_web_bundle_id_unittest.cc",
    "signed_web_bundles/signed_web_bundle_integrity_block_unittest.cc",
    "signed_web_bundles/signed_web_bundle_signature_stack_entry_unittest.cc",
    "signed_web_bundles/signed_web_bundle_signature_stack_unittest.cc",
    "signed_web_bundles/signed_web_bundle_signature_verifier_unittest.cc",
    "signed_web_bundles/signed_web_bundle_utils_unittest.cc",
    "web_bundle_builder_unittest.cc",
    "web_bundle_parser_factory_unittest.cc",
    "web_bundle_parser_unittest.cc",
    "web_bundle_utils_unittest.cc",
  ]
  deps = [
    ":web_package",
    "//base/test:test_support",
    "//components/cbor",
    "//components/web_package/test_support",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/test_support:test_utils",
    "//testing/gtest",
  ]

  if (is_ios) {
    deps += [ "//components/test:web_package_test_bundle_data" ]
  }

  # TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
  # enable the diagnostic by removing this line.
  configs += [ "//build/config/compiler:no_exit_time_destructors" ]
}

fuzzer_test("web_bundle_parser_fuzzer") {
  sources = [ "web_bundle_parser_fuzzer.cc" ]
  deps = [
    ":web_package",
    "//base",
    "//mojo/core/embedder",
  ]
  seed_corpus = "//components/test/data/web_package"
}
