# 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("//build/config/crypto.gni")
import("//build/config/features.gni")

if (is_chromeos) {
  component("ownership") {
    sources = [
      "mock_owner_key_util.cc",
      "mock_owner_key_util.h",
      "owner_key_util.cc",
      "owner_key_util.h",
      "owner_key_util_impl.cc",
      "owner_key_util_impl.h",
      "owner_settings_service.cc",
      "owner_settings_service.h",
    ]

    defines = [ "OWNERSHIP_IMPLEMENTATION" ]

    deps = [
      "//base",
      "//components/keyed_service/core",
      "//components/policy:generated",
      "//components/policy/core/common",
      "//components/policy/proto",
      "//crypto",
    ]

    if (use_nss_certs) {
      public_deps = [
        "//crypto:platform",
      ]
    }
  }

  source_set("unit_tests") {
    testonly = true
    sources = [
      "owner_key_util_impl_unittest.cc",
    ]

    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

    deps = [
      ":ownership",
      "//base",
      "//testing/gtest",
    ]
  }
}
