chromium/components/update_client/BUILD.gn

# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/buildflag_header.gni")
import("//net/features.gni")
import("//testing/libfuzzer/fuzzer_test.gni")

source_set("network_impl") {
  sources = [
    "net/network_chromium.h",
    "net/network_impl.cc",
    "net/network_impl.h",
  ]

  deps = [
    ":update_client",
    "//base",
    "//net",
    "//services/network/public/cpp",
    "//url",
  ]
}

source_set("in_process_unzipper") {
  sources = [
    "unzip/in_process_unzipper.cc",
    "unzip/in_process_unzipper.h",
  ]
  deps = [
    ":update_client",
    "//base",
    "//third_party/zlib/google:zip",
  ]
}

source_set("in_process_patcher") {
  sources = [
    "patch/in_process_patcher.cc",
    "patch/in_process_patcher.h",
  ]
  deps = [
    ":update_client",
    "//base",
    "//third_party/puffin:libpuffpatch",
  ]
  include_dirs = [ "//third_party/puffin/src/include" ]
}

source_set("unzip_impl") {
  sources = [
    "unzip/unzip_impl.cc",
    "unzip/unzip_impl.h",
  ]
  deps = [
    ":update_client",
    "//components/services/unzip/public/cpp",
  ]
}

source_set("patch_impl") {
  sources = [
    "patch/patch_impl.cc",
    "patch/patch_impl.h",
  ]
  deps = [
    ":update_client",
    "//build:chromeos_buildflags",
    "//components/services/patch/public/cpp",
    "//components/services/patch/public/mojom",
    "//mojo/public/cpp/bindings",
  ]
}

group("common_impl") {
  public_deps = [
    ":network_impl",
    ":patch_impl",
    ":unzip_impl",
  ]
}

static_library("update_client") {
  include_dirs = [ "//third_party/puffin/src/include" ]
  sources = [
    "action_runner.cc",
    "action_runner.h",
    "activity_data_service.h",
    "cancellation.cc",
    "cancellation.h",
    "command_line_config_policy.cc",
    "command_line_config_policy.h",
    "component.cc",
    "component.h",
    "configurator.h",
    "crx_cache.cc",
    "crx_cache.h",
    "crx_downloader.cc",
    "crx_downloader.h",
    "crx_downloader_factory.cc",
    "crx_downloader_factory.h",
    "crx_update_item.h",
    "network.cc",
    "network.h",
    "op_download.cc",
    "op_download.h",
    "op_install.cc",
    "op_install.h",
    "op_puffin.cc",
    "op_puffin.h",
    "patcher.h",
    "persisted_data.cc",
    "persisted_data.h",
    "ping_manager.cc",
    "ping_manager.h",
    "protocol_definition.cc",
    "protocol_definition.h",
    "protocol_handler.cc",
    "protocol_handler.h",
    "protocol_parser.cc",
    "protocol_parser.h",
    "protocol_parser_json.cc",
    "protocol_parser_json.h",
    "protocol_serializer.cc",
    "protocol_serializer.h",
    "protocol_serializer_json.cc",
    "protocol_serializer_json.h",
    "request_sender.cc",
    "request_sender.h",
    "task.h",
    "task_check_for_update.cc",
    "task_check_for_update.h",
    "task_send_ping.cc",
    "task_send_ping.h",
    "task_traits.h",
    "task_update.cc",
    "task_update.h",
    "unpacker.cc",
    "unpacker.h",
    "unzipper.h",
    "update_checker.cc",
    "update_checker.h",
    "update_client.cc",
    "update_client.h",
    "update_client_errors.h",
    "update_client_internal.h",
    "update_client_metrics.cc",
    "update_client_metrics.h",
    "update_engine.cc",
    "update_engine.h",
    "update_query_params.cc",
    "update_query_params.h",
    "update_query_params_delegate.cc",
    "update_query_params_delegate.h",
    "url_fetcher_downloader.cc",
    "url_fetcher_downloader.h",
    "utils.cc",
    "utils.h",
  ]

  deps = [
    "//base",
    "//build:branding_buildflags",
    "//build:chromeos_buildflags",
    "//components/client_update_protocol",
    "//components/crx_file",
    "//components/prefs",
    "//components/version_info",
    "//crypto",
    "//third_party/zlib/google:compression_utils",
    "//url",
  ]

  if (is_mac) {
    sources += [
      "background_downloader_mac.h",
      "background_downloader_mac.mm",
    ]
    frameworks = [ "Foundation.framework" ]
    deps += [ ":background_downloader_delegate" ]
  }

  if (is_win) {
    sources += [
      "background_downloader_win.cc",
      "background_downloader_win.h",
    ]
  }
}

if (is_mac) {
  # The background downloader delegate is implemented as a component to avoid
  # duplicate symbol warnings at runtime in component builds:
  # http://crbug.com/361129285.
  component("background_downloader_delegate") {
    sources = [
      "background_downloader_mac_delegate.h",
      "background_downloader_mac_delegate.mm",
      "update_client_errors.h",
    ]
    frameworks = [ "Foundation.framework" ]
    deps = [
      "//base",
      "//url",
    ]
    defines = [ "IS_BACKGROUND_DOWNLOADER_DELEGATE_IMPL" ]
  }
}

source_set("test_support") {
  testonly = true
  visibility = [
    ":unit_tests",
    "//chrome/test:test_support",
    "//components/component_updater:unit_tests",
  ]
  sources = [
    "net/url_loader_post_interceptor.cc",
    "net/url_loader_post_interceptor.h",
    "test_activity_data_service.cc",
    "test_activity_data_service.h",
    "test_configurator.cc",
    "test_configurator.h",
    "test_installer.cc",
    "test_installer.h",
    "test_utils.cc",
    "test_utils.h",
  ]

  public_deps = [ ":update_client" ]

  deps = [
    ":network_impl",
    ":patch_impl",
    ":unzip_impl",
    "//base",
    "//components/prefs",
    "//components/services/patch:in_process",
    "//components/services/unzip:in_process",
    "//mojo/public/cpp/bindings",
    "//net:test_support",
    "//services/network:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//url",
  ]
}

bundle_data("unit_tests_bundle_data") {
  visibility = [ ":unit_tests" ]
  testonly = true
  sources = [
    "//components/test/data/update_client/binary_input.bin",
    "//components/test/data/update_client/binary_output.bin",
    "//components/test/data/update_client/empty_file",
    "//components/test/data/update_client/gndmhdcefbhlchkhipcnnbkcmicncehk_22_314.crx3",
    "//components/test/data/update_client/ihfokbkgjpifnbbojhneepfflplebdkc_1.crx",
    "//components/test/data/update_client/ihfokbkgjpifnbbojhneepfflplebdkc_1to2.crx",
    "//components/test/data/update_client/ihfokbkgjpifnbbojhneepfflplebdkc_1to2.puff",
    "//components/test/data/update_client/ihfokbkgjpifnbbojhneepfflplebdkc_2.crx",
    "//components/test/data/update_client/jebgalgnebhfojomionfpkfelancnnkf.crx",
    "//components/test/data/update_client/puffin_patch_test/puffin_app_v1.crx3",
    "//components/test/data/update_client/puffin_patch_test/puffin_app_v1_to_v2.puff",
    "//components/test/data/update_client/puffin_patch_test/puffin_app_v2.crx3",
    "//components/test/data/update_client/puffin_patch_test/puffin_app_v2_to_v1.puff",
    "//components/test/data/update_client/runaction_test_win.crx3",
    "//components/test/data/update_client/updatecheck_reply_1.json",
    "//components/test/data/update_client/updatecheck_reply_4.json",
    "//components/test/data/update_client/updatecheck_reply_noupdate.json",
    "//components/test/data/update_client/updatecheck_reply_parse_error.json",
    "//components/test/data/update_client/updatecheck_reply_unknownapp.json",
  ]
  outputs = [ "{{bundle_resources_dir}}/" +
              "{{source_root_relative_dir}}/{{source_file_part}}" ]
}

bundle_data("recovery_component_tests_bundle_data") {
  visibility = [ "//chrome/test:unit_tests" ]
  testonly = true
  sources = [ "//components/test/data/update_client/ChromeRecovery.crx3" ]
  outputs = [ "{{bundle_resources_dir}}/" +
              "{{source_root_relative_dir}}/{{source_file_part}}" ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "cancellation_unittest.cc",
    "crx_cache_unittest.cc",
    "op_download_unittest.cc",
    "op_puffin_unittest.cc",
    "persisted_data_unittest.cc",
    "ping_manager_unittest.cc",
    "protocol_parser_json_unittest.cc",
    "protocol_serializer_json_unittest.cc",
    "protocol_serializer_unittest.cc",
    "request_sender_unittest.cc",
    "unpacker_unittest.cc",
    "update_checker_unittest.cc",
    "update_client_unittest.cc",
    "update_query_params_unittest.cc",
    "utils_unittest.cc",
  ]

  if (!disable_file_support) {
    sources += [ "crx_downloader_unittest.cc" ]

    if (is_win) {
      sources += [ "background_downloader_win_unittest.cc" ]
    }

    if (is_mac) {
      sources += [ "background_downloader_mac_unittest.cc" ]
    }
  }

  deps = [
    ":network_impl",
    ":patch_impl",
    ":test_support",
    ":unit_tests_bundle_data",
    ":unzip_impl",
    ":update_client",
    "//base",
    "//build:branding_buildflags",
    "//components/crx_file",
    "//components/prefs",
    "//components/prefs:test_support",
    "//components/services/patch:in_process",
    "//components/services/unzip:in_process",
    "//components/version_info",
    "//net:test_support",
    "//services/network:test_support",
    "//services/network/public/cpp",
    "//services/network/public/cpp:cpp_base",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/puffin:libpuffpatch",
    "//third_party/re2",
  ]

  data_deps = [ "//components/test/data/update_client/puffin_patch_test:puffin_patch_test_files" ]
}

fuzzer_test("update_client_protocol_serializer_fuzzer") {
  sources = [ "protocol_serializer_fuzzer.cc" ]
  deps = [
    ":update_client",
    "//base",
  ]
  seed_corpus = "fuzzer_corpuses/protocol_serializer/"
}

fuzzer_test("update_client_protocol_parser_fuzzer") {
  sources = [ "protocol_parser_fuzzer.cc" ]
  deps = [
    ":update_client",
    "//base",
  ]
  seed_corpus = "fuzzer_corpuses/protocol_parser/"
}