# 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("captive_portal") {
  sources = [
    "captive_portal_detector.cc",
    "captive_portal_detector.h",
    "captive_portal_export.h",
    "captive_portal_metrics.cc",
    "captive_portal_metrics.h",
    "captive_portal_types.cc",
    "captive_portal_types.h",
  ]

  defines = [ "CAPTIVE_PORTAL_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//components/data_use_measurement/core",
    "//net",
    "//services/network/public/cpp",
    "//url",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "captive_portal_testing_utils.cc",
    "captive_portal_testing_utils.h",
  ]

  deps = [
    ":captive_portal",
    "//base",
    "//net:test_support",
    "//services/network:test_support",
    "//url",
  ]
}

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

  deps = [
    ":captive_portal",
    ":test_support",
    "//base",
    "//net:test_support",
    "//testing/gtest",
  ]
}
