# 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/"
}