# Copyright 2014 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("//third_party/protobuf/proto_library.gni")

static_library("crx_file") {
  sources = [
    "crx_file.h",
    "crx_verifier.cc",
    "crx_verifier.h",
    "id_util.cc",
    "id_util.h",
  ]

  deps = [
    "//base",
    "//crypto",
  ]

  public_deps = [
    ":crx3_proto",
  ]
}

static_library("crx_creator") {
  sources = [
    "crx_creator.cc",
    "crx_creator.h",
  ]

  deps = [
    ":crx_file",
    "//base",
    "//crypto",
  ]

  public_deps = [
    ":crx3_proto",
  ]
}

bundle_data("unit_tests_bundle_data") {
  visibility = [ ":unit_tests" ]
  testonly = true
  sources = [
    "//components/test/data/crx_file/sample.zip",
    "//components/test/data/crx_file/unsigned.crx3",
    "//components/test/data/crx_file/valid.crx2",
    "//components/test/data/crx_file/valid_no_publisher.crx3",
    "//components/test/data/crx_file/valid_publisher.crx3",
    "//components/test/data/crx_file/valid_test_publisher.crx3",
  ]
  outputs = [
    "{{bundle_resources_dir}}/" +
        "{{source_root_relative_dir}}/{{source_file_part}}",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "crx_creator_unittest.cc",
    "crx_verifier_unittest.cc",
    "id_util_unittest.cc",
  ]

  deps = [
    ":crx_creator",
    ":crx_file",
    ":unit_tests_bundle_data",
    "//base",
    "//crypto",
    "//testing/gtest",
  ]
}

proto_library("crx3_proto") {
  sources = [
    "crx3.proto",
  ]
}
