1# Copyright 2018 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import("//components/safe_browsing/buildflags.gni")
6
7if (is_android) {
8  import("//build/config/android/config.gni")
9  import("//build/config/android/rules.gni")
10}
11
12source_set("internal") {
13  visibility = [
14    ":for_tests",
15    "//components/download/public/common:public",
16  ]
17
18  configs += [
19    "//components/download/public/common:components_download_implementation",
20  ]
21
22  sources = [
23    "all_download_event_notifier.cc",
24    "base_file.cc",
25    "base_file_win.cc",
26    "download_create_info.cc",
27    "download_db_cache.cc",
28    "download_db_cache.h",
29    "download_file_factory.cc",
30    "download_file_impl.cc",
31    "download_interrupt_reasons_impl.cc",
32    "download_interrupt_reasons_utils.cc",
33    "download_item_impl.cc",
34    "download_item_impl_delegate.cc",
35    "download_job.cc",
36    "download_job_factory.cc",
37    "download_job_impl.cc",
38    "download_job_impl.h",
39    "download_path_reservation_tracker.cc",
40    "download_response_handler.cc",
41    "download_stats.cc",
42    "download_task_runner.cc",
43    "download_ukm_helper.cc",
44    "download_utils.cc",
45    "download_worker.cc",
46    "download_worker.h",
47    "in_progress_download_manager.cc",
48    "parallel_download_job.cc",
49    "parallel_download_job.h",
50    "parallel_download_utils.cc",
51    "parallel_download_utils.h",
52    "rate_estimator.cc",
53    "resource_downloader.cc",
54    "resource_downloader.h",
55    "save_package_download_job.cc",
56    "save_package_download_job.h",
57    "simple_download_manager.cc",
58    "simple_download_manager_coordinator.cc",
59    "stream_handle_input_stream.cc",
60    "url_download_handler_factory.cc",
61    "url_download_request_handle.cc",
62    "url_loader_factory_provider.cc",
63  ]
64
65  public_deps = [
66    "//components/services/quarantine/public/mojom",
67    "//mojo/public/cpp/bindings",
68    "//services/network/public/mojom",
69  ]
70
71  deps = [
72    "//base",
73    "//components/download/database",
74    "//components/download/public/common:interfaces",
75    "//components/download/quarantine",
76    "//components/filename_generation",
77    "//components/leveldb_proto",
78    "//components/safe_browsing:buildflags",
79    "//mojo/public/c/system",
80    "//net",
81    "//services/device/public/mojom:mojom",
82    "//services/metrics/public/cpp:ukm_builders",
83    "//services/network/public/cpp",
84    "//services/service_manager/public/cpp:cpp",
85  ]
86
87  # TODO(crbug/1056278): Enable this on Fuchsia
88  if (safe_browsing_mode > 0 && !is_fuchsia) {
89    deps += [ "//components/safe_browsing/core:file_type_policies" ]
90  }
91
92  if (is_win) {
93    deps += [ "//components/services/quarantine/public/cpp:features" ]
94  }
95
96  if (is_android) {
97    sources += [
98      "android/download_collection_bridge.cc",
99      "android/download_collection_bridge.h",
100    ]
101
102    deps += [ ":jni_headers" ]
103  }
104
105  if (is_posix || is_fuchsia) {
106    sources += [ "base_file_posix.cc" ]
107  }
108}
109
110if (is_android) {
111  android_library("internal_java") {
112    sources = [
113      "android/java/src/org/chromium/components/download/DownloadCollectionBridge.java",
114      "android/java/src/org/chromium/components/download/DownloadDelegate.java",
115    ]
116
117    deps = [
118      "//base:base_java",
119      "//base:jni_java",
120      "//third_party/android_provider:android_provider_java",
121    ]
122    annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
123  }
124
125  generate_jni("jni_headers") {
126    visibility = [ ":*" ]
127    sources = [ "android/java/src/org/chromium/components/download/DownloadCollectionBridge.java" ]
128  }
129}
130
131# tests need to access both public and internal sources. So in the component
132# build case, we exclude the internal dependency as it is included in the
133# test_support target under public.
134group("for_tests") {
135  visibility = [ ":unit_tests" ]
136  if (!is_component_build) {
137    public_deps = [ ":internal" ]
138  }
139}
140
141source_set("unit_tests") {
142  testonly = true
143
144  if (is_component_build) {
145    check_includes = false
146  }
147
148  sources = [
149    "all_download_event_notifier_unittest.cc",
150    "base_file_unittest.cc",
151    "base_file_win_unittest.cc",
152    "download_db_cache_unittest.cc",
153    "download_file_unittest.cc",
154    "download_item_impl_unittest.cc",
155    "download_path_reservation_tracker_unittest.cc",
156    "download_stats_unittest.cc",
157    "download_ukm_helper_unittest.cc",
158    "parallel_download_job_unittest.cc",
159    "parallel_download_utils_unittest.cc",
160    "rate_estimator_unittest.cc",
161  ]
162
163  deps = [
164    ":for_tests",
165    "//base/test:test_support",
166    "//components/download/database",
167    "//components/download/public/common:test_support",
168    "//components/leveldb_proto",
169    "//components/leveldb_proto:test_support",
170    "//components/ukm:test_support",
171    "//crypto",
172    "//net",
173    "//services/metrics/public/cpp:ukm_builders",
174    "//testing/gmock",
175    "//testing/gtest",
176  ]
177}
178