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

# Nothing outside //chrome/chrome_cleaner can depend on these targets.
visibility = [ "//chrome/chrome_cleaner/*" ]

source_set("http_status_codes") {
  sources = [ "http_status_codes.h" ]
}

source_set("http") {
  sources = [
    "error_utils.cc",
    "error_utils.h",
    "http_agent.h",
    "http_agent_factory.cc",
    "http_agent_factory.h",
    "http_agent_impl.cc",
    "http_agent_impl.h",
    "http_response.h",
    "internet_helpers.cc",
    "internet_helpers.h",
    "user_agent.cc",
    "user_agent.h",
  ]

  libs = [ "Winhttp.lib" ]

  deps = [
    "//base",
    "//net/traffic_annotation",
  ]
}

source_set("unittest_sources") {
  testonly = true

  sources = [
    "error_utils_unittest.cc",
    "internet_helpers_unittest.cc",
    "internet_unittest_helpers.cc",
    "internet_unittest_helpers.h",
    "user_agent_unittest.cc",
  ]

  deps = [
    ":http",
    "//base",
    "//base/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

source_set("mock_http_agent_factory") {
  testonly = true

  sources = [
    "mock_http_agent_factory.cc",
    "mock_http_agent_factory.h",
  ]

  deps = [
    ":http",
    ":http_status_codes",
    "//base",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
