# 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",
    "//net",
    "//services/network/public/cpp",
    "//url",
  ]

  if (is_chromeos) {
    deps += [ "//chromeos/network" ]
  }
}

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",
  ]
}
