# 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 = [
    "hints_component_info.h",
    "hints_component_util.cc",
    "hints_component_util.h",
    "optimization_guide_constants.cc",
    "optimization_guide_constants.h",
    "optimization_guide_service.cc",
    "optimization_guide_service.h",
    "optimization_guide_service_observer.h",
    "url_pattern_with_wildcards.cc",
    "url_pattern_with_wildcards.h",
  ]

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

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

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

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