# 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",
  ]
  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",
  ]
}
