# 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.

component("user_manager") {
  sources = [
    "user_info.cc",
    "user_info.h",
    "user_info_impl.cc",
    "user_info_impl.h",
    "user_manager_export.h",
    "user_names.cc",
    "user_names.h",
    "user_type.h",
  ]

  public_deps = [
    "//base",
    "//components/account_id",
    "//ui/gfx",
  ]

  deps = [
    "//google_apis",
  ]

  defines = [ "USER_MANAGER_IMPLEMENTATION" ]

  if (is_chromeos) {
    sources += [
      "known_user.cc",
      "known_user.h",
      "remove_user_delegate.h",
      "scoped_user_manager.cc",
      "scoped_user_manager.h",
      "user.cc",
      "user.h",
      "user_image/user_image.cc",
      "user_image/user_image.h",
      "user_manager.cc",
      "user_manager.h",
      "user_manager_base.cc",
      "user_manager_base.h",
    ]

    deps += [
      "//components/prefs",
      "//skia",
      "//url",
    ]
  }
}

if (is_chromeos) {
  source_set("test_support") {
    testonly = true
    sources = [
      "fake_user_manager.cc",
      "fake_user_manager.h",
    ]

    public_deps = [
      ":user_manager",
      "//base",
      "//components/account_id",
    ]

    deps = [
      "//chromeos/constants",
    ]
  }

  source_set("unit_tests") {
    testonly = true
    sources = [
      "user_unittest.cc",
    ]
    deps = [
      ":user_manager",
      "//components/account_id",
      "//testing/gtest",
    ]
  }
}
