blob: ca2a223497492de5f835c126aa35bed1fb856def [file] [log] [blame]
# 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.
import("//build/config/jumbo.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//third_party/libprotobuf-mutator/fuzzable_proto_library.gni")
if (is_android) {
import("//build/config/android/config.gni")
}
# TODO(crbug.com/1006430): Fix password reuse detection not fully functional on
# Android.
password_reuse_detection_support = !is_ios
password_reuse_warning_support = !is_android && !is_ios
password_on_focus_ping_support = !is_ios
config("password_reuse_detection_config") {
defines = []
if (password_reuse_detection_support) {
defines += [ "SYNC_PASSWORD_REUSE_DETECTION_ENABLED" ]
}
if (password_reuse_warning_support) {
defines += [ "SYNC_PASSWORD_REUSE_WARNING_ENABLED" ]
}
if (password_on_focus_ping_support) {
defines += [ "ON_FOCUS_PING_ENABLED" ]
}
}
jumbo_static_library("browser") {
sources = [
"android_affiliation/affiliated_match_helper.cc",
"android_affiliation/affiliated_match_helper.h",
"android_affiliation/affiliation_backend.cc",
"android_affiliation/affiliation_backend.h",
"android_affiliation/affiliation_database.cc",
"android_affiliation/affiliation_database.h",
"android_affiliation/affiliation_fetch_throttler.cc",
"android_affiliation/affiliation_fetch_throttler.h",
"android_affiliation/affiliation_fetch_throttler_delegate.h",
"android_affiliation/affiliation_fetcher.cc",
"android_affiliation/affiliation_fetcher.h",
"android_affiliation/affiliation_fetcher_delegate.h",
"android_affiliation/affiliation_service.cc",
"android_affiliation/affiliation_service.h",
"android_affiliation/facet_manager.cc",
"android_affiliation/facet_manager.h",
"android_affiliation/facet_manager_host.h",
"android_affiliation/lookup_affiliation_response_parser.cc",
"android_affiliation/lookup_affiliation_response_parser.h",
"android_affiliation/test_affiliation_fetcher_factory.h",
"blacklisted_credentials_cleaner.cc",
"blacklisted_credentials_cleaner.h",
"browser_save_password_progress_logger.cc",
"browser_save_password_progress_logger.h",
"credential_cache.cc",
"credential_cache.h",
"credential_manager_impl.cc",
"credential_manager_impl.h",
"credential_manager_logger.cc",
"credential_manager_logger.h",
"credential_manager_password_form_manager.cc",
"credential_manager_password_form_manager.h",
"credential_manager_pending_prevent_silent_access_task.cc",
"credential_manager_pending_prevent_silent_access_task.h",
"credential_manager_pending_request_task.cc",
"credential_manager_pending_request_task.h",
"credentials_cleaner.cc",
"credentials_cleaner.h",
"credentials_cleaner_runner.cc",
"credentials_cleaner_runner.h",
"credentials_filter.h",
"export/csv_writer.cc",
"export/csv_writer.h",
"export/password_csv_writer.cc",
"export/password_csv_writer.h",
"export/password_manager_exporter.cc",
"export/password_manager_exporter.h",
"field_info_table.cc",
"field_info_table.h",
"form_fetcher.h",
"form_fetcher_impl.cc",
"form_fetcher_impl.h",
"form_saver.h",
"form_saver_impl.cc",
"form_saver_impl.h",
"form_submission_observer.h",
"generation/password_requirements_spec_fetcher.h",
"generation/password_requirements_spec_fetcher_impl.cc",
"generation/password_requirements_spec_fetcher_impl.h",
"generation/password_requirements_spec_printer.cc",
"generation/password_requirements_spec_printer.h",
"http_auth_manager.h",
"http_auth_manager_impl.cc",
"http_auth_manager_impl.h",
"http_auth_observer.h",
"http_password_store_migrator.cc",
"http_password_store_migrator.h",
"import/csv_reader.cc",
"import/csv_reader.h",
"import/password_csv_reader.cc",
"import/password_csv_reader.h",
"import/password_importer.cc",
"import/password_importer.h",
"leak_detection_delegate.cc",
"leak_detection_delegate.h",
"leak_detection_delegate_helper.cc",
"leak_detection_delegate_helper.h",
"leak_detection_dialog_utils.cc",
"leak_detection_dialog_utils.h",
"leaked_credentials_table.cc",
"leaked_credentials_table.h",
"login_database.cc",
"login_database.h",
"login_database_ios.cc",
"login_database_mac.cc",
"login_database_win.cc",
"manage_passwords_referrer.h",
"multi_store_form_fetcher.cc",
"multi_store_form_fetcher.h",
"origin_credential_store.cc",
"origin_credential_store.h",
"password_autofill_manager.cc",
"password_autofill_manager.h",
"password_bubble_experiment.cc",
"password_bubble_experiment.h",
"password_feature_manager.h",
"password_feature_manager_impl.cc",
"password_feature_manager_impl.h",
"password_form_filling.cc",
"password_form_filling.h",
"password_form_manager.cc",
"password_form_manager.h",
"password_form_manager_for_ui.h",
"password_form_metrics_recorder.cc",
"password_form_metrics_recorder.h",
"password_form_user_action.h",
"password_generation_frame_helper.cc",
"password_generation_frame_helper.h",
"password_generation_state.cc",
"password_generation_state.h",
"password_leak_history_consumer.cc",
"password_leak_history_consumer.h",
"password_list_sorter.cc",
"password_list_sorter.h",
"password_manager.cc",
"password_manager.h",
"password_manager_client.cc",
"password_manager_client.h",
"password_manager_client_helper.cc",
"password_manager_client_helper.h",
"password_manager_constants.cc",
"password_manager_constants.h",
"password_manager_driver.h",
"password_manager_metrics_recorder.cc",
"password_manager_metrics_recorder.h",
"password_manager_metrics_util.cc",
"password_manager_metrics_util.h",
"password_manager_onboarding.cc",
"password_manager_onboarding.h",
"password_manager_util.cc",
"password_manager_util.h",
"password_requirements_service.cc",
"password_requirements_service.h",
"password_store.cc",
"password_store.h",
"password_store_change.cc",
"password_store_change.h",
"password_store_consumer.cc",
"password_store_consumer.h",
"password_store_default.cc",
"password_store_default.h",
"password_store_factory_util.cc",
"password_store_factory_util.h",
"password_store_sync.cc",
"password_store_sync.h",
"password_sync_util.cc",
"password_sync_util.h",
"password_ui_utils.cc",
"password_ui_utils.h",
"possible_username_data.cc",
"possible_username_data.h",
"psl_matching_helper.cc",
"psl_matching_helper.h",
"site_affiliation/asset_link_data.cc",
"site_affiliation/asset_link_data.h",
"sql_table_builder.cc",
"sql_table_builder.h",
"statistics_table.cc",
"statistics_table.h",
"store_metrics_reporter.cc",
"store_metrics_reporter.h",
"sync/password_data_type_controller.cc",
"sync/password_data_type_controller.h",
"sync/password_model_type_controller.cc",
"sync/password_model_type_controller.h",
"sync/password_model_worker.cc",
"sync/password_model_worker.h",
"sync/password_sync_bridge.cc",
"sync/password_sync_bridge.h",
"sync/password_syncable_service.cc",
"sync/password_syncable_service.h",
"sync_credentials_filter.cc",
"sync_credentials_filter.h",
"ui/credential_provider_interface.h",
"ui/export_flow.h",
"ui/export_progress_status.h",
"ui/import_flow.h",
"votes_uploader.cc",
"votes_uploader.h",
]
all_dependent_configs = [ ":password_reuse_detection_config" ]
if (password_reuse_detection_support) {
sources += [
"password_reuse_detection_manager.cc",
"password_reuse_detection_manager.h",
"password_reuse_detector.cc",
"password_reuse_detector.h",
"password_reuse_detector_consumer.cc",
"password_reuse_detector_consumer.h",
"password_store_signin_notifier.cc",
"password_store_signin_notifier.h",
]
}
public_deps = [
"//base",
"//components/safe_browsing:buildflags",
"//components/sync",
]
deps = [
":affiliation",
":csv",
":hash_password_manager",
":password_generator",
":password_hash_data",
":proto",
"//base",
"//base:i18n",
"//components/autofill/core/browser",
"//components/autofill/core/browser/proto",
"//components/autofill/core/common",
"//components/autofill/core/common/mojom:mojo_types",
"//components/favicon/core",
"//components/keyed_service/core",
"//components/os_crypt",
"//components/password_manager/core/browser/form_parsing",
"//components/password_manager/core/browser/leak_detection:leak_detection",
"//components/password_manager/core/browser/leak_detection:leak_detection_interface_headers",
"//components/password_manager/core/common",
"//components/pref_registry",
"//components/prefs",
"//components/security_state/core",
"//components/signin/public/identity_manager",
"//components/strings",
"//components/strings:components_strings",
"//components/sync",
"//components/sync_preferences",
"//components/url_formatter",
"//components/variations",
"//components/webdata/common",
"//google_apis",
"//net",
"//services/metrics/public/cpp:metrics_cpp",
"//services/metrics/public/cpp:ukm_builders",
"//services/network/public/cpp",
"//sql",
"//third_party/protobuf:protobuf_lite",
"//third_party/re2",
"//ui/base",
"//ui/gfx",
"//ui/gfx/range",
"//url",
]
if (!is_ios) {
sources += [
"hsts_query.cc",
"hsts_query.h",
"http_credentials_cleaner.cc",
"http_credentials_cleaner.h",
]
deps += [ "//components/safe_browsing/common:safe_browsing_prefs" ]
}
if ((is_posix && !is_mac && !is_ios) || is_fuchsia) {
sources += [ "login_database_posix.cc" ]
}
if (is_mac && !is_ios) {
sources += [
"password_recovery_util_mac.cc",
"password_recovery_util_mac.h",
]
}
# TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
}
# TODO(crbug.com/974822): Ideally, all of the "import/" subdirectory would be
# in a separate BUILD.gn file inside that subdirectory. However, this requires
# the big "browser" target here to be split in multiple sub-targets to avoid
# circular dependencies. For now, at least the files from "import" which can be
# separated are made so, to limit the growth of this technical debt.
static_library("csv") {
sources = [
"import/csv_field_parser.cc",
"import/csv_field_parser.h",
"import/csv_password.cc",
"import/csv_password.h",
"import/csv_password_iterator.cc",
"import/csv_password_iterator.h",
]
deps = [
":affiliation",
"//base",
"//components/autofill/core/common",
"//url",
]
}
source_set("csv_unittests") {
testonly = true
sources = [
"import/csv_field_parser_unittest.cc",
"import/csv_password_iterator_unittest.cc",
"import/csv_password_unittest.cc",
]
deps = [
":csv",
"//base",
"//testing/gmock",
"//testing/gtest",
]
}
static_library("password_generator") {
sources = [
"generation/password_generator.cc",
"generation/password_generator.h",
]
public_deps = [
"//components/autofill/core/browser/proto",
]
deps = [
"//base",
]
}
if (is_android) {
java_cpp_enum("password_manager_java_enums_srcjar") {
sources = [
"manage_passwords_referrer.h",
"password_manager_metrics_util.h",
]
}
}
fuzzable_proto_library("proto") {
sources = [
"android_affiliation/affiliation_api.proto",
]
}
jumbo_static_library("password_hash_data") {
sources = [
"password_hash_data.cc",
"password_hash_data.h",
]
deps = [
"//base",
"//crypto",
"//google_apis",
]
}
static_library("hash_password_manager") {
sources = [
"hash_password_manager.cc",
"hash_password_manager.h",
]
deps = [
":password_hash_data",
"//base:base",
"//components/os_crypt",
"//components/password_manager/core/common",
"//components/prefs",
]
}
jumbo_static_library("test_support") {
testonly = true
sources = [
"android_affiliation/fake_affiliation_api.cc",
"android_affiliation/fake_affiliation_api.h",
"android_affiliation/fake_affiliation_fetcher.cc",
"android_affiliation/fake_affiliation_fetcher.h",
"android_affiliation/mock_affiliated_match_helper.cc",
"android_affiliation/mock_affiliated_match_helper.h",
"android_affiliation/mock_affiliation_consumer.cc",
"android_affiliation/mock_affiliation_consumer.h",
"fake_form_fetcher.cc",
"fake_form_fetcher.h",
"mock_password_feature_manager.cc",
"mock_password_feature_manager.h",
"mock_password_form_manager_for_ui.cc",
"mock_password_form_manager_for_ui.h",
"mock_password_store.cc",
"mock_password_store.h",
"password_manager_test_utils.cc",
"password_manager_test_utils.h",
"stub_credentials_filter.cc",
"stub_credentials_filter.h",
"stub_form_saver.cc",
"stub_form_saver.h",
"stub_password_manager_client.cc",
"stub_password_manager_client.h",
"stub_password_manager_driver.cc",
"stub_password_manager_driver.h",
"test_password_store.cc",
"test_password_store.h",
]
public_deps = [
":browser",
":hash_password_manager",
"//components/autofill/core/browser:test_support",
"//components/safe_browsing:buildflags",
"//components/ukm",
"//services/network/public/cpp",
"//testing/gmock",
"//url:url",
]
deps = [
":affiliation",
"//base",
"//components/autofill/core/common",
"//net:net",
"//testing/gtest",
]
}
bundle_data("unit_tests_bundle_data") {
visibility = [ ":unit_tests" ]
testonly = true
sources = [
"//components/test/data/password_manager/affiliation_db_v1.sql",
"//components/test/data/password_manager/affiliation_db_v2.sql",
"//components/test/data/password_manager/login_db_v1.sql",
"//components/test/data/password_manager/login_db_v10.sql",
"//components/test/data/password_manager/login_db_v11.sql",
"//components/test/data/password_manager/login_db_v12.sql",
"//components/test/data/password_manager/login_db_v13.sql",
"//components/test/data/password_manager/login_db_v14.sql",
"//components/test/data/password_manager/login_db_v15.sql",
"//components/test/data/password_manager/login_db_v16.sql",
"//components/test/data/password_manager/login_db_v17.sql",
"//components/test/data/password_manager/login_db_v18.sql",
"//components/test/data/password_manager/login_db_v19.sql",
"//components/test/data/password_manager/login_db_v1_broken.sql",
"//components/test/data/password_manager/login_db_v2.sql",
"//components/test/data/password_manager/login_db_v20.sql",
"//components/test/data/password_manager/login_db_v21.sql",
"//components/test/data/password_manager/login_db_v22.sql",
"//components/test/data/password_manager/login_db_v23.sql",
"//components/test/data/password_manager/login_db_v24.sql",
"//components/test/data/password_manager/login_db_v25.sql",
"//components/test/data/password_manager/login_db_v2_broken.sql",
"//components/test/data/password_manager/login_db_v3.sql",
"//components/test/data/password_manager/login_db_v3_broken.sql",
"//components/test/data/password_manager/login_db_v4.sql",
"//components/test/data/password_manager/login_db_v5.sql",
"//components/test/data/password_manager/login_db_v6.sql",
"//components/test/data/password_manager/login_db_v7.sql",
"//components/test/data/password_manager/login_db_v8.sql",
"//components/test/data/password_manager/login_db_v9.sql",
"//components/test/data/password_manager/login_db_v9_without_use_additional_auth_field.sql",
]
outputs = [
"{{bundle_resources_dir}}/" +
"{{source_root_relative_dir}}/{{source_file_part}}",
]
}
source_set("unit_tests") {
testonly = true
sources = [
"android_affiliation/affiliated_match_helper_unittest.cc",
"android_affiliation/affiliation_backend_unittest.cc",
"android_affiliation/affiliation_database_unittest.cc",
"android_affiliation/affiliation_fetch_throttler_unittest.cc",
"android_affiliation/affiliation_fetcher_unittest.cc",
"android_affiliation/affiliation_service_unittest.cc",
"android_affiliation/facet_manager_unittest.cc",
"blacklisted_credentials_cleaner_unittest.cc",
"browser_save_password_progress_logger_unittest.cc",
"credential_cache_unittest.cc",
"credential_manager_impl_unittest.cc",
"credential_manager_logger_unittest.cc",
"credential_manager_password_form_manager_unittest.cc",
"credentials_cleaner_runner_unittest.cc",
"credentials_cleaner_unittest.cc",
"export/csv_writer_unittest.cc",
"export/password_csv_writer_unittest.cc",
"export/password_manager_exporter_unittest.cc",
"field_info_table_unittest.cc",
"form_fetcher_impl_unittest.cc",
"form_saver_impl_unittest.cc",
"generation/password_generator_unittest.cc",
"generation/password_requirements_spec_fetcher_unittest.cc",
"http_auth_manager_unittest.cc",
"http_password_store_migrator_unittest.cc",
"import/csv_reader_unittest.cc",
"import/password_csv_reader_unittest.cc",
"import/password_importer_unittest.cc",
"leak_detection_delegate_helper_unittest.cc",
"leak_detection_delegate_unittest.cc",
"leak_detection_dialog_utils_unittest.cc",
"leaked_credentials_table_unittest.cc",
"login_database_unittest.cc",
"multi_store_form_fetcher_unittest.cc",
"origin_credential_store_unittest.cc",
"password_autofill_manager_unittest.cc",
"password_bubble_experiment_unittest.cc",
"password_form_filling_unittest.cc",
"password_form_manager_unittest.cc",
"password_form_metrics_recorder_unittest.cc",
"password_generation_frame_helper_unittest.cc",
"password_generation_state_unittest.cc",
"password_hash_data_unittest.cc",
"password_list_sorter_unittest.cc",
"password_manager_metrics_recorder_unittest.cc",
"password_manager_onboarding_unittest.cc",
"password_manager_unittest.cc",
"password_manager_util_unittest.cc",
"password_requirements_service_unittest.cc",
"password_store_default_unittest.cc",
"password_store_origin_unittest.h",
"password_store_unittest.cc",
"password_sync_util_unittest.cc",
"password_ui_utils_unittest.cc",
"possible_username_data_unittest.cc",
"psl_matching_helper_unittest.cc",
"site_affiliation/asset_link_data_unittest.cc",
"sql_table_builder_unittest.cc",
"statistics_table_unittest.cc",
"store_metrics_reporter_unittest.cc",
"sync/password_sync_bridge_unittest.cc",
"sync/password_syncable_service_unittest.cc",
"sync_credentials_filter_unittest.cc",
"sync_username_test_base.cc",
"sync_username_test_base.h",
"vote_uploads_test_matchers.h",
"votes_uploader_unittest.cc",
]
if (is_mac) {
sources -= [ "password_store_default_unittest.cc" ]
}
if (is_ios) {
sources += [ "login_database_ios_unittest.cc" ]
} else {
sources += [
"hsts_query_unittest.cc",
"http_credentials_cleaner_unittest.cc",
]
}
if (password_reuse_detection_support) {
sources += [
"password_reuse_detection_manager_unittest.cc",
"password_reuse_detector_unittest.cc",
]
}
if (is_win || is_mac || is_linux || is_chromeos) {
sources += [ "hash_password_manager_unittest.cc" ]
}
deps = [
":affiliation",
":affiliation_unittests",
":csv_unittests",
":hash_password_manager",
":password_generator",
":password_hash_data",
":test_support",
":unit_tests_bundle_data",
"//base/test:test_support",
"//components/autofill/core/browser:test_support",
"//components/autofill/core/browser/proto",
"//components/autofill/core/common",
"//components/favicon/core/test:test_support",
"//components/os_crypt",
"//components/os_crypt:test_support",
"//components/password_manager/core/browser:proto",
"//components/password_manager/core/browser/form_parsing:unit_tests",
"//components/password_manager/core/browser/form_parsing/fuzzer:unit_tests",
"//components/password_manager/core/browser/leak_detection",
"//components/password_manager/core/browser/leak_detection:leak_detection_interface_headers",
"//components/password_manager/core/browser/leak_detection:unit_tests",
"//components/password_manager/core/common",
"//components/prefs:test_support",
"//components/security_state/core",
"//components/signin/public/identity_manager:test_support",
"//components/strings",
"//components/sync:test_support",
"//components/sync_preferences:test_support",
"//components/ukm:test_support",
"//components/url_formatter",
"//components/variations",
"//google_apis:google_apis",
"//net:test_support",
"//services/metrics/public/cpp:ukm_builders",
"//services/network:network_service",
"//services/network:test_support",
"//services/network/public/cpp",
"//sql:test_support",
"//testing/gmock",
"//testing/gtest",
"//third_party/sqlite",
"//ui/base",
"//ui/gfx:test_support",
"//url",
]
if (password_reuse_detection_support) {
deps += [
"//components/safe_browsing:features",
"//components/safe_browsing/common:safe_browsing_prefs",
]
}
}
fuzzer_test("csv_reader_fuzzer") {
sources = [
"import/password_csv_reader_fuzzer.cc",
]
deps = [
":browser",
"//base:i18n",
"//components/autofill/core/common:common",
]
seed_corpus = "import/password_csv_reader_corpus"
dict = "import/password_csv_reader_fuzzer.dict"
}
if (use_libfuzzer) {
fuzzer_test("lookup_affiliation_response_parser_fuzzer") {
sources = [
"android_affiliation/lookup_affiliation_response_parser_fuzzer.cc",
]
deps = [
":browser",
":proto",
"//base:base",
"//base:i18n",
"//third_party/libprotobuf-mutator",
]
}
fuzzer_test("password_generator_proto_fuzzer") {
sources = [
"generation/password_generator_proto_fuzzer.cc",
]
deps = [
":password_generator",
"//components/autofill/core/browser/proto",
"//third_party/libprotobuf-mutator",
]
}
}
# TODO(crbug.com/974822): Ideally, all of the "android_affiliation/"
# subdirectory would be in a separate BUILD.gn file inside that subdirectory.
# However, this requires the big "browser" target here to be split in multiple
# sub-targets to avoid circular dependencies. For now, at least the files from
# "android_affiliation" which can be easily separated are made so, to limit the
# growth of this technical debt.
static_library("affiliation") {
sources = [
"android_affiliation/affiliation_utils.cc",
"android_affiliation/affiliation_utils.h",
]
deps = [
"//base",
"//components/url_formatter",
"//components/variations",
"//net",
"//url",
]
}
source_set("affiliation_unittests") {
testonly = true
sources = [
"android_affiliation/affiliation_utils_unittest.cc",
]
deps = [
":affiliation",
"//base",
"//components/autofill/core/common",
"//components/variations",
"//testing/gmock",
"//testing/gtest",
"//url",
]
}