# Copyright 2017 The Chromium Authors. All rights reserved.
# 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("utility") {
  sources = [
    "fingerprint_parser.cc",
    "fingerprint_parser.h",
    "payment_manifest_parser.cc",
    "payment_manifest_parser.h",
  ]
  deps = [
    "//base",
    "//components/payments/content:content_common",
    "//components/payments/core",
    "//content/public/common",
    "//net",
    "//services/data_decoder/public/cpp",
    "//url",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "fingerprint_parser_unittest.cc",
    "payment_manifest_parser_unittest.cc",
  ]
  deps = [
    ":utility",
    "//base",
    "//components/payments/core",
    "//skia",
    "//testing/gtest",
    "//url",
  ]
}

fuzzer_test("payment_method_manifest_fuzzer") {
  sources = [
    "payment_method_manifest_parser_fuzzer.cc",
  ]
  deps = [
    ":utility",
    "//base",
    "//base:i18n",
    "//components/payments/core",
    "//skia",
    "//url",
  ]
  dict = "payment_manifest_json.dict"
  seed_corpus = "payment_method_manifest_fuzzer_corpus"
}

fuzzer_test("payment_web_app_manifest_fuzzer") {
  sources = [
    "payment_web_app_manifest_parser_fuzzer.cc",
  ]
  deps = [
    ":utility",
    "//base",
    "//components/payments/content:content_common",
    "//components/payments/core",
    "//skia",
  ]
  dict = "payment_manifest_json.dict"
  seed_corpus = "payment_web_app_manifest_fuzzer_corpus"
}

fuzzer_test("fingerprint_fuzzer") {
  sources = [
    "fingerprint_parser_fuzzer.cc",
  ]
  deps = [
    ":utility",
    "//base",
    "//components/payments/core",
  ]
  dict = "fingerprint_fuzzer.dict"
  seed_corpus = "fingerprint_fuzzer_corpus"
}
