# Copyright 2017 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("optimization_guide") {
  sources = [
    "optimization_guide_constants.cc",
    "optimization_guide_constants.h",
    "optimization_guide_service.cc",
    "optimization_guide_service.h",
    "optimization_guide_service_observer.h",
  ]

  deps = [
    "//base",
    "//components/optimization_guide/proto:optimization_guide_proto",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "test_component_creator.cc",
    "test_component_creator.h",
  ]
  deps = [
    ":optimization_guide",
    "//base",
    "//components/optimization_guide/proto:optimization_guide_proto",
    "//testing/gtest",
  ]
}

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

  deps = [
    ":optimization_guide",
    "//base",
    "//base/test:test_support",
    "//components/optimization_guide/proto:optimization_guide_proto",
    "//testing/gtest",
  ]
}
