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

static_library("flags_ui") {
  sources = [
    "feature_entry.cc",
    "feature_entry.h",
    "feature_entry_macros.h",
    "flags_state.cc",
    "flags_state.h",
    "flags_storage.h",
    "flags_ui_constants.cc",
    "flags_ui_constants.h",
    "flags_ui_pref_names.cc",
    "flags_ui_pref_names.h",
    "pref_service_flags_storage.cc",
    "pref_service_flags_storage.h",
  ]

  deps = [
    ":switches",
    "//base",
    "//components/pref_registry",
    "//components/prefs",
    "//components/strings",
    "//components/variations",
    "//ui/base",
    "//url",
  ]
}

# This is a separate target so that the dependencies of
# //chrome/common can be kept minimal.
static_library("switches") {
  sources = [
    "flags_ui_switches.cc",
    "flags_ui_switches.h",
  ]
}

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

  deps = [
    ":flags_ui",
    ":switches",
    "//base",
    "//base/test:test_support",
    "//components/prefs:test_support",
    "//components/strings",
    "//components/variations",
    "//testing/gtest",
  ]
}
