xref: /aosp_15_r20/external/cronet/components/cronet/android/BUILD.gn (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1# Copyright 2015 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import("//build/android/resource_sizes.gni")
6import("//build/buildflag_header.gni")
7import("//build/config/android/config.gni")
8import("//build/config/android/rules.gni")
9import("//build/config/cronet/config.gni")
10import("//build/config/zip.gni")
11import("//build/util/lastchange.gni")
12import("//build/util/process_version.gni")
13import("//chrome/version.gni")
14import("//components/cronet/native/include/headers.gni")
15import("//components/grpc_support/include/headers.gni")
16import("//testing/test.gni")
17import("//third_party/jni_zero/jni_zero.gni")
18import("//third_party/netty4/netty4.gni")
19import("//third_party/protobuf/proto_library.gni")
20import("//tools/binary_size/sizes.gni")
21import("//url/features.gni")
22
23_templates_dir = "$target_gen_dir/templates"
24_gn_path = "//buildtools/linux64/gn"
25
26assert(!is_component_build)
27assert(is_cronet_build)
28
29generate_jni("cronet_jni_headers") {
30  sources = [
31    "java/src/org/chromium/net/impl/CronetBidirectionalStream.java",
32    "java/src/org/chromium/net/impl/CronetLibraryLoader.java",
33    "java/src/org/chromium/net/impl/CronetUploadDataStream.java",
34    "java/src/org/chromium/net/impl/CronetUrlRequest.java",
35    "java/src/org/chromium/net/impl/CronetUrlRequestContext.java",
36  ]
37}
38
39generate_jni_registration("cronet_jni_registration") {
40  java_targets = [ ":cronet_impl_native_java" ]
41  manual_jni_registration = true
42
43  # JNI generated is used for test and non-test apks.
44  include_testonly = true
45
46  _subdir = rebase_path(target_gen_dir, root_gen_dir)
47  cpp_codegen_output =
48      "$jni_headers_dir/$_subdir/cronet_jni_registration_generated.h"
49}
50
51android_library("cronet_jni_registration_java") {
52  srcjar_deps = [ ":cronet_jni_registration" ]
53}
54
55java_cpp_enum("rtt_throughput_values_java") {
56  sources = [ "//net/nqe/network_quality.h" ]
57}
58
59java_cpp_enum("net_request_priority_java") {
60  sources = [ "//net/base/request_priority.h" ]
61}
62
63java_cpp_enum("net_idempotency_java") {
64  sources = [ "//net/base/idempotency.h" ]
65}
66
67java_cpp_enum("network_quality_observation_source_java") {
68  sources = [ "//net/nqe/network_quality_observation_source.h" ]
69}
70
71java_cpp_enum("url_request_error_java") {
72  sources = [ "url_request_error.h" ]
73}
74
75java_cpp_enum("http_cache_type_java") {
76  sources = [ "//components/cronet/url_request_context_config.h" ]
77}
78
79java_cpp_template("load_states_list") {
80  sources = [ "java/src/org/chromium/net/impl/LoadState.template" ]
81  inputs = [ "//net/base/load_states_list.h" ]
82}
83
84_api_level = read_file("api_version.txt", "value")
85
86_generated_api_version_java = "$_templates_dir/org/chromium/net/ApiVersion.java"
87
88process_version("api_version") {
89  process_only = true
90  template_file = "api/src/org/chromium/net/ApiVersion.template"
91  sources = [
92    "//chrome/VERSION",
93    lastchange_file,
94  ]
95  extra_args = [
96    "-e",
97    "API_LEVEL=$_api_level",
98  ]
99  output = _generated_api_version_java
100}
101
102_generated_impl_version_java =
103    "$_templates_dir/org/chromium/net/impl/ImplVersion.java"
104
105process_version("impl_version") {
106  process_only = true
107  template_file = "java/src/org/chromium/net/impl/ImplVersion.template"
108  sources = [
109    "//chrome/VERSION",
110    lastchange_file,
111  ]
112  extra_args = [
113    "-e",
114    "API_LEVEL=$_api_level",
115  ]
116  output = _generated_impl_version_java
117}
118
119_cronet_version_header_include_dir = "$target_gen_dir/cronet_version_header"
120
121proto_library("base_feature_overrides_proto") {
122  sources = [ "proto/base_feature_overrides.proto" ]
123}
124
125proto_java_library("base_feature_overrides_java_proto") {
126  proto_path = "."
127  sources = [ "proto/base_feature_overrides.proto" ]
128}
129
130proto_java_library("flags_java_proto") {
131  proto_path = "."
132  sources = [ "proto/flags.proto" ]
133}
134
135proto_library("request_context_config_proto") {
136  sources = [ "proto/request_context_config.proto" ]
137}
138
139proto_java_library("request_context_config_java_proto") {
140  proto_path = "."
141  sources = [ "proto/request_context_config.proto" ]
142}
143
144static_library("cronet_base_feature") {
145  sources = [
146    "cronet_base_feature.cc",
147    "cronet_base_feature.h",
148  ]
149  deps = [
150    ":base_feature_overrides_proto",
151    "//base",
152  ]
153}
154
155static_library("cronet_base_feature_unittest") {
156  testonly = true
157  sources = [ "cronet_base_feature_unittest.cc" ]
158  deps = [
159    ":base_feature_overrides_proto",
160    ":cronet_base_feature",
161    "//base/test:test_support",
162    "//testing/gtest",
163  ]
164}
165
166source_set("cronet_static") {
167  deps = [
168    ":base_feature_overrides_proto",
169    ":cronet_base_feature",
170    ":cronet_jni_headers",
171    ":cronet_jni_registration",
172    ":request_context_config_proto",
173    "//base",
174    "//components/cronet:cronet_common",
175    "//components/cronet:cronet_version_header",
176    "//components/cronet:metrics_util",
177    "//components/prefs",
178    "//net",
179    "//third_party/zlib:zlib",
180    "//url",
181    "//url:buildflags",
182  ]
183  if (!is_cronet_for_aosp_build) {
184    deps += [ "//components/cronet/native:cronet_native_impl" ]
185  }
186  sources = [
187    "//components/cronet/android/cronet_bidirectional_stream_adapter.cc",
188    "//components/cronet/android/cronet_bidirectional_stream_adapter.h",
189    "//components/cronet/android/cronet_context_adapter.cc",
190    "//components/cronet/android/cronet_context_adapter.h",
191    "//components/cronet/android/cronet_library_loader.cc",
192    "//components/cronet/android/cronet_library_loader.h",
193    "//components/cronet/android/cronet_upload_data_stream_adapter.cc",
194    "//components/cronet/android/cronet_upload_data_stream_adapter.h",
195    "//components/cronet/android/cronet_url_request_adapter.cc",
196    "//components/cronet/android/cronet_url_request_adapter.h",
197    "//components/cronet/android/io_buffer_with_byte_buffer.cc",
198    "//components/cronet/android/io_buffer_with_byte_buffer.h",
199    "//components/cronet/android/url_request_error.cc",
200    "//components/cronet/android/url_request_error.h",
201  ]
202
203  include_dirs = [ _cronet_version_header_include_dir ]
204
205  cflags = [
206    "-DLOGGING=1",
207    "-Wno-sign-promo",
208  ]
209
210  libs = [
211    "android",
212    "log",
213  ]
214
215  if (!use_platform_icu_alternatives) {
216    deps += [ "//base:i18n" ]
217  }
218}
219
220config("hide_all_but_jni_onload_and_cronet") {
221  ldflags = [ "-Wl,--version-script=" +
222              rebase_path("android_only_jni_onload_and_cronet_exports.lst",
223                          root_out_dir) ]
224}
225
226_cronet_shared_lib_name = "cronet.$chrome_version_full"
227
228shared_library("cronet") {
229  output_name = _cronet_shared_lib_name
230  sources = [ "cronet_jni.cc" ]
231  deps = [
232    ":cronet_static",
233    "//base",
234    "//net:net",
235  ]
236  configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
237  configs += [ ":hide_all_but_jni_onload_and_cronet" ]
238}
239
240sizes_test("cronet_sizes") {
241  data_deps = [ ":cronet" ]
242  data = [ "${root_out_dir}/lib${_cronet_shared_lib_name}.so" ]
243  executable_args = [
244    "--platform",
245    "android-cronet",
246  ]
247}
248
249cronet_shared_java_deps_to_package = [ ":cronet_stats_log_java" ]
250
251# Common Cronet code that is used in Cronet API *and* implementations.
252#
253# Note that this target should not be used to ship classes that define the
254# Cronet API/impl boundary, because API and impl code can end up linking against
255# separate copies of these classes at runtime (e.g. if Cronet is loaded from
256# Google Play Services), making it impossible for references to these classes to
257# cross the boundary. These classes should be shipped in `cronet_api_java`
258# instead.
259android_library("cronet_shared_java") {
260  sources = [
261    "java/src/org/chromium/net/impl/CronetLogger.java",
262    "java/src/org/chromium/net/impl/CronetLoggerFactory.java",
263    "java/src/org/chromium/net/impl/CronetManifest.java",
264    "java/src/org/chromium/net/impl/NoOpLogger.java",
265    "java/src/org/chromium/net/telemetry/CronetLoggerImpl.java",
266    "java/src/org/chromium/net/telemetry/ExperimentalOptions.java",
267    "java/src/org/chromium/net/telemetry/Hash.java",
268    "java/src/org/chromium/net/telemetry/OptionalBoolean.java",
269    "java/src/org/chromium/net/telemetry/RateLimiter.java",
270    "java/src/org/chromium/net/telemetry/SizeBuckets.java",
271  ]
272
273  # Adding deps here won't include those deps in the cronet_shared_java.jar.
274  # Please add to cronet_shared_java_deps_to_package instead.
275  deps = [ "//third_party/androidx:androidx_annotation_annotation_java" ] +
276         cronet_shared_java_deps_to_package
277
278  proguard_configs =
279      [ "//components/cronet/android/cronet_shared_proguard.cfg" ]
280}
281
282# cronet_api_java.jar defines Cronet API.
283#
284# Note that, in some cases (specifically, the case where Cronet is loaded from
285# Google Play Services), the API classes are not bundled with the
286# implementation, and at runtime the impl classes may end up deriving from API
287# classes that are from a different build/version. This means you have to pay
288# attention to backward/forward Java ABI compatibility concerns. If you don't
289# want your class to be part of the Cronet API/impl boundary, ship your class in
290# `cronet_shared_java` instead.
291android_library("cronet_api_java") {
292  sources = [
293    "api/src/org/chromium/net/BidirectionalStream.java",
294    "api/src/org/chromium/net/CallbackException.java",
295    "api/src/org/chromium/net/ConnectionMigrationOptions.java",
296    "api/src/org/chromium/net/CronetEngine.java",
297    "api/src/org/chromium/net/CronetException.java",
298    "api/src/org/chromium/net/CronetProvider.java",
299    "api/src/org/chromium/net/DnsOptions.java",
300    "api/src/org/chromium/net/ExperimentalBidirectionalStream.java",
301    "api/src/org/chromium/net/ExperimentalCronetEngine.java",
302    "api/src/org/chromium/net/ExperimentalOptionsTranslatingCronetEngineBuilder.java",
303    "api/src/org/chromium/net/ExperimentalUrlRequest.java",
304    "api/src/org/chromium/net/ICronetEngineBuilder.java",
305    "api/src/org/chromium/net/InlineExecutionProhibitedException.java",
306    "api/src/org/chromium/net/NetworkException.java",
307    "api/src/org/chromium/net/NetworkQualityRttListener.java",
308    "api/src/org/chromium/net/NetworkQualityThroughputListener.java",
309    "api/src/org/chromium/net/QuicException.java",
310    "api/src/org/chromium/net/QuicOptions.java",
311    "api/src/org/chromium/net/RequestFinishedInfo.java",
312    "api/src/org/chromium/net/UploadDataProvider.java",
313    "api/src/org/chromium/net/UploadDataSink.java",
314    "api/src/org/chromium/net/UrlRequest.java",
315    "api/src/org/chromium/net/UrlResponseInfo.java",
316    _generated_api_version_java,
317  ]
318
319  deps = [
320    ":api_version",
321    ":cronet_shared_java",
322    "//third_party/androidx:androidx_annotation_annotation_experimental_java",
323    "//third_party/androidx:androidx_annotation_annotation_java",
324  ]
325}
326
327android_library("cronet_api_helpers_java") {
328  sources = [
329    # This API file is a special case because it depends on methods that exists
330    # within the ApiHelper package.
331    "api/src/org/chromium/net/UploadDataProviders.java",
332    "api/src/org/chromium/net/apihelpers/ByteArrayCronetCallback.java",
333    "api/src/org/chromium/net/apihelpers/ContentTypeParametersParser.java",
334    "api/src/org/chromium/net/apihelpers/CronetRequestCompletionListener.java",
335    "api/src/org/chromium/net/apihelpers/CronetResponse.java",
336    "api/src/org/chromium/net/apihelpers/ImplicitFlowControlCallback.java",
337    "api/src/org/chromium/net/apihelpers/InMemoryTransformCronetCallback.java",
338    "api/src/org/chromium/net/apihelpers/JsonCronetCallback.java",
339    "api/src/org/chromium/net/apihelpers/RedirectHandler.java",
340    "api/src/org/chromium/net/apihelpers/RedirectHandlers.java",
341    "api/src/org/chromium/net/apihelpers/StringCronetCallback.java",
342    "api/src/org/chromium/net/apihelpers/UploadDataProviders.java",
343    "api/src/org/chromium/net/apihelpers/UrlRequestCallbacks.java",
344  ]
345  deps = [
346    ":cronet_api_java",
347    "//third_party/androidx:androidx_annotation_annotation_java",
348  ]
349}
350
351# CronetStatsLog uses `android.util.StatsLog` which is not in the public SDK,
352# hence this separate target pointed at the system SDK.
353android_library("cronet_stats_log_java") {
354  sources = [ "java/src/org/chromium/net/telemetry/CronetStatsLog.java" ]
355  alternative_android_sdk_dep =
356      "//third_party/android_sdk:public_framework_system_java"
357  deps = [ "//third_party/androidx:androidx_annotation_annotation_java" ]
358}
359
360cronet_impl_common_java_srcjar_deps = [
361  ":http_cache_type_java",
362  ":load_states_list",
363  ":rtt_throughput_values_java",
364  "//net:effective_connection_type_java",
365]
366
367cronet_impl_common_java_deps_to_package =
368    [ "//net/android:net_thread_stats_uid_java" ]
369
370# cronet_impl_common_java.jar - common Cronet code that is shared
371# by all Cronet engine implementations.
372android_library("cronet_impl_common_java") {
373  sources = [
374    "java/src/org/chromium/net/impl/CallbackExceptionImpl.java",
375    "java/src/org/chromium/net/impl/CronetEngineBase.java",
376    "java/src/org/chromium/net/impl/CronetEngineBuilderImpl.java",
377    "java/src/org/chromium/net/impl/CronetExceptionImpl.java",
378    "java/src/org/chromium/net/impl/NetworkExceptionImpl.java",
379    "java/src/org/chromium/net/impl/Preconditions.java",
380    "java/src/org/chromium/net/impl/QuicExceptionImpl.java",
381    "java/src/org/chromium/net/impl/RefCountDelegate.java",
382    "java/src/org/chromium/net/impl/RequestFinishedInfoImpl.java",
383    "java/src/org/chromium/net/impl/UrlRequestBase.java",
384    "java/src/org/chromium/net/impl/UrlRequestBuilderImpl.java",
385    "java/src/org/chromium/net/impl/UrlResponseInfoImpl.java",
386    "java/src/org/chromium/net/impl/UserAgent.java",
387    "java/src/org/chromium/net/impl/VersionSafeCallbacks.java",
388    _generated_impl_version_java,
389  ]
390
391  # Adding deps here won't include those deps in the cronet_impl_common_java.jar.
392  # Please add to cronet_impl_common_java_deps_to_package instead.
393  deps = [
394    ":cronet_api_java",
395    ":cronet_shared_java",
396    ":impl_version",
397    "//third_party/androidx:androidx_annotation_annotation_java",
398  ]
399  deps += cronet_impl_common_java_deps_to_package
400
401  srcjar_deps = cronet_impl_common_java_srcjar_deps
402  proguard_configs = [ "cronet_impl_common_proguard.cfg" ]
403}
404
405# cronet_impl_java_util_java.jar - Classes shared between Java Cronet implementations.
406android_library("cronet_impl_java_util_java") {
407  sources = [
408    "java/src/org/chromium/net/impl/JavaUploadDataSinkBase.java",
409    "java/src/org/chromium/net/impl/JavaUrlRequestUtils.java",
410  ]
411
412  deps = [
413    ":cronet_api_java",
414    ":cronet_impl_common_java",
415    "//third_party/androidx:androidx_annotation_annotation_java",
416  ]
417}
418
419# cronet_impl_platform_java.jar - Java platform based implementation of the Cronet engine.
420android_library("cronet_impl_platform_java") {
421  sources = [
422    "java/src/org/chromium/net/impl/InputStreamChannel.java",
423    "java/src/org/chromium/net/impl/JavaCronetEngine.java",
424    "java/src/org/chromium/net/impl/JavaCronetEngineBuilderImpl.java",
425    "java/src/org/chromium/net/impl/JavaCronetProvider.java",
426    "java/src/org/chromium/net/impl/JavaUrlRequest.java",
427  ]
428
429  deps = [
430    ":cronet_api_java",
431    ":cronet_impl_common_java",
432    ":cronet_impl_java_util_java",
433    ":cronet_shared_java",
434    "//net/android:net_thread_stats_uid_java",
435    "//third_party/android_deps:com_google_code_findbugs_jsr305_java",
436    "//third_party/androidx:androidx_annotation_annotation_java",
437  ]
438}
439
440# cronet_impl_fake_java.jar - Fake implementation of Cronet.
441android_library("cronet_impl_fake_java") {
442  sources = [
443    "fake/java/org/chromium/net/test/FakeCronetController.java",
444    "fake/java/org/chromium/net/test/FakeCronetEngine.java",
445    "fake/java/org/chromium/net/test/FakeCronetProvider.java",
446    "fake/java/org/chromium/net/test/FakeRequestFinishedInfo.java",
447    "fake/java/org/chromium/net/test/FakeUrlRequest.java",
448    "fake/java/org/chromium/net/test/FakeUrlResponse.java",
449    "fake/java/org/chromium/net/test/ResponseMatcher.java",
450    "fake/java/org/chromium/net/test/UrlResponseMatcher.java",
451  ]
452
453  deps = [
454    ":cronet_api_java",
455    ":cronet_impl_common_java",
456    ":cronet_impl_java_util_java",
457    ":cronet_shared_java",
458    "//third_party/androidx:androidx_annotation_annotation_java",
459  ]
460}
461
462android_library("cronet_urlconnection_impl_java") {
463  sources = [
464    "java/src/org/chromium/net/urlconnection/CronetBufferedOutputStream.java",
465    "java/src/org/chromium/net/urlconnection/CronetChunkedOutputStream.java",
466    "java/src/org/chromium/net/urlconnection/CronetFixedModeOutputStream.java",
467    "java/src/org/chromium/net/urlconnection/CronetHttpURLConnection.java",
468    "java/src/org/chromium/net/urlconnection/CronetHttpURLStreamHandler.java",
469    "java/src/org/chromium/net/urlconnection/CronetInputStream.java",
470    "java/src/org/chromium/net/urlconnection/CronetOutputStream.java",
471    "java/src/org/chromium/net/urlconnection/CronetURLStreamHandlerFactory.java",
472    "java/src/org/chromium/net/urlconnection/MessageLoop.java",
473  ]
474  deps = [
475    ":cronet_api_java",
476    "//third_party/androidx:androidx_annotation_annotation_java",
477  ]
478}
479
480cronet_impl_native_java_srcjar_deps = [
481  ":net_idempotency_java",
482  ":net_request_priority_java",
483  ":network_quality_observation_source_java",
484  ":url_request_error_java",
485]
486
487cronet_impl_native_java_deps_to_package = [
488  ":cronet_urlconnection_impl_java",
489  ":base_feature_overrides_java_proto",
490  ":flags_java_proto",
491  ":request_context_config_java_proto",
492  "//base:base_java",
493  "//third_party/jni_zero:jni_zero_java",
494  "//build/android:build_java",
495  "//net/android:net_java",
496  "//url:url_java",
497]
498
499# cronet_impl_native_java.jar - native implementation of the Cronet engine.
500android_library("cronet_impl_native_java") {
501  sources = [
502    "java/src/org/chromium/net/httpflags/BaseFeature.java",
503    "java/src/org/chromium/net/httpflags/HttpFlagsLoader.java",
504    "java/src/org/chromium/net/httpflags/ResolvedFlags.java",
505    "java/src/org/chromium/net/impl/BidirectionalStreamBuilderImpl.java",
506    "java/src/org/chromium/net/impl/BidirectionalStreamNetworkException.java",
507    "java/src/org/chromium/net/impl/CronetBidirectionalStream.java",
508    "java/src/org/chromium/net/impl/CronetLibraryLoader.java",
509    "java/src/org/chromium/net/impl/CronetMetrics.java",
510    "java/src/org/chromium/net/impl/CronetUploadDataStream.java",
511    "java/src/org/chromium/net/impl/CronetUrlRequest.java",
512    "java/src/org/chromium/net/impl/CronetUrlRequestContext.java",
513    "java/src/org/chromium/net/impl/NativeCronetEngineBuilderImpl.java",
514    "java/src/org/chromium/net/impl/NativeCronetEngineBuilderWithLibraryLoaderImpl.java",
515    "java/src/org/chromium/net/impl/NativeCronetProvider.java",
516  ]
517
518  # Adding deps here won't include those deps in the cronet_impl_native_java.jar.
519  # Please add to cronet_impl_native_java_deps_to_package instead.
520  deps = [
521    ":cronet_api_java",
522    ":cronet_impl_common_java",
523    ":cronet_shared_java",
524    "//build/android:build_java",
525    "//third_party/android_deps:com_google_code_findbugs_jsr305_java",
526    "//third_party/android_deps:protobuf_lite_runtime_java",
527    "//third_party/androidx:androidx_annotation_annotation_java",
528    "//third_party/jni_zero:jni_zero_java",
529  ]
530  deps += cronet_impl_native_java_deps_to_package
531
532  srcjar_deps = cronet_impl_native_java_srcjar_deps
533  srcjar_deps += [ ":cronet_jni_headers" ]
534  proguard_configs =
535      [ "//components/cronet/android/cronet_impl_native_proguard.cfg" ]
536}
537
538# httpengine_native_provider_java.jar - native implementation of Cronet engine
539# loaded from AOSP (only for Android U onwards)
540android_library("httpengine_native_provider_java") {
541  sources = [
542    "java/src/org/chromium/net/impl/AndroidBidirectionalStreamBuilderWrapper.java",
543    "java/src/org/chromium/net/impl/AndroidBidirectionalStreamCallbackWrapper.java",
544    "java/src/org/chromium/net/impl/AndroidBidirectionalStreamWrapper.java",
545    "java/src/org/chromium/net/impl/AndroidCallbackExceptionWrapper.java",
546    "java/src/org/chromium/net/impl/AndroidHeaderBlockWrapper.java",
547    "java/src/org/chromium/net/impl/AndroidHttpEngineBuilderWrapper.java",
548    "java/src/org/chromium/net/impl/AndroidHttpEngineWrapper.java",
549    "java/src/org/chromium/net/impl/AndroidHttpExceptionWrapper.java",
550    "java/src/org/chromium/net/impl/AndroidNetworkExceptionWrapper.java",
551    "java/src/org/chromium/net/impl/AndroidQuicExceptionWrapper.java",
552    "java/src/org/chromium/net/impl/AndroidUploadDataProviderWrapper.java",
553    "java/src/org/chromium/net/impl/AndroidUploadDataSinkWrapper.java",
554    "java/src/org/chromium/net/impl/AndroidUrlRequestBuilderWrapper.java",
555    "java/src/org/chromium/net/impl/AndroidUrlRequestCallbackWrapper.java",
556    "java/src/org/chromium/net/impl/AndroidUrlRequestStatusListenerWrapper.java",
557    "java/src/org/chromium/net/impl/AndroidUrlRequestWrapper.java",
558    "java/src/org/chromium/net/impl/AndroidUrlResponseInfoWrapper.java",
559    "java/src/org/chromium/net/impl/CronetExceptionTranslationUtils.java",
560    "java/src/org/chromium/net/impl/HttpEngineNativeProvider.java",
561  ]
562
563  deps = [
564    ":cronet_api_java",
565    ":cronet_impl_common_java",
566    ":cronet_shared_java",
567    "//build/android:build_java",
568    "//third_party/androidx:androidx_annotation_annotation_java",
569    "//third_party/androidx:androidx_core_core_java",
570    "//third_party/jni_zero:jni_zero_java",
571  ]
572}
573
574# Groups all Cronet code (API and impl) into a single Java dependency.
575java_group("cronet_all_java") {
576  deps = [
577    ":cronet_api_java",
578    ":cronet_impl_common_java",
579    ":cronet_impl_native_java",
580    ":cronet_impl_platform_java",
581    ":cronet_shared_java",
582    ":httpengine_native_provider_java",
583  ]
584}
585
586android_resources("cronet_sample_apk_resources") {
587  sources = [
588    "sample/res/drawable/ic_action_home.xml",
589    "sample/res/drawable/ic_flag.xml",
590    "sample/res/layout/main_activity.xml",
591    "sample/res/layout/main_fragment.xml",
592    "sample/res/layout/options_fragment.xml",
593    "sample/res/layout/toggle_view.xml",
594    "sample/res/values/colors.xml",
595    "sample/res/values/dimens.xml",
596    "sample/res/values/strings.xml",
597    "sample/res/values/styles.xml",
598  ]
599  android_manifest = "sample/AndroidManifest.xml"
600  deps = [
601    "//third_party/androidx:androidx_appcompat_appcompat_java",
602    "//third_party/androidx:androidx_appcompat_appcompat_resources_java",
603    "//third_party/androidx:androidx_drawerlayout_drawerlayout_java",
604    "//third_party/androidx:androidx_fragment_fragment_java",
605    "//third_party/androidx:androidx_interpolator_interpolator_java",
606    "//third_party/androidx:androidx_lifecycle_lifecycle_common_java",
607    "//third_party/androidx:androidx_vectordrawable_vectordrawable_animated_java",
608    "//third_party/androidx:androidx_vectordrawable_vectordrawable_java",
609  ]
610}
611
612android_library("cronet_sample_apk_java") {
613  sources = [
614    "sample/src/org/chromium/cronet_sample_apk/Action.java",
615    "sample/src/org/chromium/cronet_sample_apk/ActionData.java",
616    "sample/src/org/chromium/cronet_sample_apk/CronetSampleActivity.java",
617    "sample/src/org/chromium/cronet_sample_apk/CronetSampleApplication.java",
618    "sample/src/org/chromium/cronet_sample_apk/MainFragment.java",
619    "sample/src/org/chromium/cronet_sample_apk/Options.java",
620    "sample/src/org/chromium/cronet_sample_apk/OptionsFragment.java",
621    "sample/src/org/chromium/cronet_sample_apk/OptionsRecyclerViewAdapter.java",
622    "sample/src/org/chromium/cronet_sample_apk/SampleActivityViewModel.java",
623  ]
624
625  resources_package = "org.chromium.cronet_sample_apk"
626  deps = [
627    ":cronet_sample_apk_resources",
628    ":package_api_java",
629    ":package_impl_native_java",
630    "//third_party/androidx:androidx_annotation_annotation_experimental_java",
631    "//third_party/androidx:androidx_annotation_annotation_java",
632    "//third_party/androidx:androidx_appcompat_appcompat_java",
633    "//third_party/androidx:androidx_fragment_fragment_java",
634    "//third_party/androidx:androidx_lifecycle_lifecycle_viewmodel_java",
635    "//third_party/androidx:androidx_preference_preference_java",
636    "//third_party/androidx:androidx_recyclerview_recyclerview_java",
637  ]
638}
639
640android_apk("cronet_sample_apk") {
641  apk_name = "CronetSample"
642  android_manifest = "sample/AndroidManifest.xml"
643  shared_libraries = [ ":cronet" ]
644
645  deps = [
646    ":cronet_combine_proguard_flags",
647    ":cronet_sample_apk_java",
648    ":cronet_sample_apk_resources",
649    "//third_party/android_deps:protobuf_lite_runtime_java",
650  ]
651
652  # Cronet jars will include this, so don't duplicate.
653  generate_buildconfig_java = false
654
655  if (!is_java_debug) {
656    proguard_enabled = true
657    proguard_configs = [
658      "$target_gen_dir/cronet_impl_native_proguard.cfg",
659      "cronet_impl_common_proguard.cfg",
660      "cronet_shared_proguard.cfg",
661    ]
662  }
663}
664
665android_resource_sizes_test("resource_sizes_cronet_sample_apk") {
666  apk_name = "CronetSample"
667  data_deps = [ ":cronet_sample_apk" ]
668}
669
670# TODO(b/313416274): Change the output name to something else
671# that doesn't actually exist.
672action("cronet_combine_proguard_flags") {
673  script = "//components/cronet/tools/generate_proguard_file.py"
674
675  # This will combine all the proguard configs found through the
676  # transitive dependencies of those targets.
677  deps = [
678    ":cronet_jni_registration_java",
679    ":repackage_api",
680    ":repackage_native_impl",
681  ]
682
683  # TODO(b/313416274): Change the output name to something else
684  # that doesn't actually exist.
685  outputs = [ "$target_gen_dir/cronet_impl_native_proguard.cfg" ]
686  sources = []
687  depfile = "$target_out_dir/$target_name.d"
688  _build_config_deps = []
689  foreach(dep, deps) {
690    _dep_label = get_label_info(dep, "label_no_toolchain")
691    _build_config_deps += [ "$_dep_label$build_config_target_suffix" ]
692    _dep_gen_dir = get_label_info(dep, "target_gen_dir")
693    _dep_name = get_label_info(dep, "name")
694    sources += [ "$_dep_gen_dir/$_dep_name.build_config.json" ]
695  }
696  deps += _build_config_deps
697  args = [
698           "--output_file",
699           rebase_path(outputs[0], root_build_dir),
700           "--dep_file",
701           rebase_path(depfile, root_build_dir),
702         ] + rebase_path(sources, root_build_dir)
703}
704
705action("cronet_combined_proguard_flags_golden_test") {
706  script = "//components/cronet/tools/check_combined_proguard_file.py"
707  deps = [ ":cronet_combine_proguard_flags" ]
708  sources = [
709    "$target_gen_dir/cronet_impl_native_proguard.cfg",
710    "//components/cronet/android/cronet_combined_impl_native_proguard_golden.cfg",
711  ]
712  outputs = [ "$target_gen_dir/$target_name.stamp" ]
713  args = [
714    "--input_generated_file",
715    rebase_path(sources[0], root_build_dir),
716    "--input_golden_file",
717    rebase_path(sources[1], root_build_dir),
718    "--stamp",
719    rebase_path(outputs[0], root_build_dir),
720  ]
721}
722
723_package_dir = "$root_out_dir/cronet"
724
725# These package_* targets represent how Cronet is used in production code.
726# Using these targets is preferred to using the underlying targets like
727# :cronet_api_java or :cronet_all_java, as it better tests production
728# usage.
729android_java_prebuilt("package_shared_java") {
730  jar_path = "$_package_dir/cronet_shared_java.jar"
731  deps = [ ":repackage_shared" ]
732}
733
734android_java_prebuilt("package_api_java") {
735  jar_path = "$_package_dir/cronet_api.jar"
736  deps = [
737    ":package_shared_java",
738    ":repackage_api",
739  ]
740}
741
742android_java_prebuilt("package_impl_common_java") {
743  jar_path = "$_package_dir/cronet_impl_common_java.jar"
744  deps = [
745    ":package_api_java",
746    ":package_shared_java",
747    ":repackage_impl_common",
748  ]
749}
750
751java_prebuilt("package_impl_native_java") {
752  # This target is a java_prebuilt instead of a android_java_prebuilt so we
753  # don't filter out GEN_JNI which is part of jar_excluded_patterns in
754  # android_java_prebuilt.
755  jar_path = "$_package_dir/cronet_impl_native_java.jar"
756  supports_android = true
757  requires_android = true
758
759  # To avoid dual definition of classes some dependencies are added
760  # downstream (Maven deps, BUILD dependencies), and the bytecode check
761  # doesn't like that.
762  enable_bytecode_checks = false
763
764  deps = [
765    ":package_api_java",
766    ":package_impl_common_java",
767    ":package_shared_java",
768    ":repackage_native",
769    "//third_party/android_deps:com_google_code_findbugs_jsr305_java",
770    "//third_party/androidx:androidx_drawerlayout_drawerlayout_java",
771    "//third_party/androidx:androidx_interpolator_interpolator_java",
772  ]
773  jar_excluded_patterns = [ "androidx/*/R*" ]
774}
775
776android_java_prebuilt("package_impl_util_java") {
777  jar_path = "$_package_dir/cronet_impl_util_java.jar"
778  deps = [
779    ":package_api_java",
780    ":repackage_util",
781  ]
782}
783
784android_java_prebuilt("package_impl_platform_java") {
785  jar_path = "$_package_dir/cronet_impl_platform_java.jar"
786  deps = [
787    ":package_api_java",
788    ":package_impl_common_java",
789    ":package_shared_java",
790    ":repackage_platform",
791  ]
792}
793
794android_java_prebuilt("package_impl_fake_java") {
795  jar_path = "$_package_dir/cronet_impl_fake_java.jar"
796  deps = [
797    ":package_api_java",
798    ":package_impl_common_java",
799    ":package_shared_java",
800    ":repackage_fake",
801  ]
802}
803
804android_java_prebuilt("package_httpengine_native_provider_java") {
805  jar_path = "$_package_dir/httpengine_native_provider_java.jar"
806  deps = [
807    ":package_api_java",
808    ":repackage_httpengine_native_provider",
809  ]
810}
811
812template("jar_src") {
813  action_with_pydeps(target_name) {
814    _rebased_src_search_dirs =
815        rebase_path(invoker.src_search_dirs, root_build_dir)
816
817    script = "//components/cronet/tools/jar_src.py"
818    depfile = "$target_gen_dir/$target_name.d"
819    outputs = [ invoker.jar_path ]
820    args = [
821      "--src-search-dirs=${_rebased_src_search_dirs}",
822      "--jar-path",
823      rebase_path(invoker.jar_path, root_build_dir),
824      "--depfile",
825      rebase_path(depfile, root_build_dir),
826    ]
827
828    deps = []
829    if (defined(invoker.deps)) {
830      deps += invoker.deps
831    }
832
833    _excluded_patterns = []
834    if (defined(invoker.excluded_patterns)) {
835      _excluded_patterns = invoker.excluded_patterns
836    }
837    _src_jars = []
838
839    # Add src-jar files that are listed in "src_jars".
840    if (defined(invoker.src_jars)) {
841      _rebased_src_jars = rebase_path(invoker.src_jars, root_build_dir)
842      _src_jars += _rebased_src_jars
843    }
844
845    # Add src-jar files that are generated by dependencies in "srcjar_deps".
846    if (defined(invoker.srcjar_deps)) {
847      foreach(_srcjar_dep, invoker.srcjar_deps) {
848        _dep_gen_dir = get_label_info(_srcjar_dep, "target_gen_dir")
849        _dep_name = get_label_info(_srcjar_dep, "name")
850        _src_jars += rebase_path([ "$_dep_gen_dir/$_dep_name.srcjar" ])
851        deps += [ _srcjar_dep ]
852      }
853    }
854
855    # Create the list of all source files that are given in "src_files".
856    _src_files = []
857    if (defined(invoker.src_files)) {
858      _src_files += invoker.src_files
859    }
860
861    # Handle "source_deps".
862    _src_list_files = []
863    if (defined(invoker.source_deps)) {
864      foreach(_source_dep, invoker.source_deps) {
865        _dep_gen_dir = get_label_info(_source_dep, "target_gen_dir")
866        _dep_name = get_label_info(_source_dep, "name")
867        _src_list_files += rebase_path([ "$_dep_gen_dir/$_dep_name.sources" ])
868        deps += [ _source_dep ]
869      }
870    }
871    args += [ "--src-jar=${_src_jars}" ]
872    args += [ "--src-files=${_src_files}" ]
873    args += [ "--src-list-files=${_src_list_files}" ]
874    args += [ "--excluded-classes=$_excluded_patterns" ]
875
876    inputs = _src_jars
877    inputs += _src_files
878    inputs += _src_list_files
879  }
880}
881
882jar_src("jar_cronet_shared_source") {
883  src_search_dirs = [ "java/src" ]
884  source_deps = [ ":cronet_shared_java" ]
885  jar_path = "$_package_dir/cronet_shared-src.jar"
886}
887
888jar_src("jar_cronet_api_source") {
889  src_search_dirs = [
890    "api/src",
891    _templates_dir,
892  ]
893  source_deps = [ ":cronet_api_java" ]
894  jar_path = "$_package_dir/cronet_api-src.jar"
895}
896
897jar_src("jar_cronet_impl_common_java_source") {
898  src_search_dirs = [
899    "java/src",
900    _templates_dir,
901  ]
902  source_deps = [ ":cronet_impl_common_java" ]
903  srcjar_deps = cronet_impl_common_java_srcjar_deps
904  jar_path = "$_package_dir/cronet_impl_common_java-src.jar"
905}
906
907jar_src("jar_cronet_impl_platform_java_source") {
908  src_search_dirs = [ "java/src" ]
909  source_deps = [ ":cronet_impl_platform_java" ]
910  jar_path = "$_package_dir/cronet_impl_platform_java-src.jar"
911}
912
913jar_src("jar_cronet_impl_fake_java_source") {
914  src_search_dirs = [ "fake/java" ]
915  source_deps = [ ":cronet_impl_fake_java" ]
916  jar_path = "$_package_dir/cronet_impl_fake_java-src.jar"
917}
918
919jar_src("jar_cronet_impl_util_java_source") {
920  src_search_dirs = [ "java/src" ]
921  source_deps = [ ":cronet_impl_java_util_java" ]
922  jar_path = "$_package_dir/cronet_impl_util_java-src.jar"
923}
924
925jar_src("jar_httpengine_native_provider_java_source") {
926  src_search_dirs = [ "java/src" ]
927  source_deps = [ ":httpengine_native_provider_java" ]
928  jar_path = "$_package_dir/httpengine_native_provider_java-src.jar"
929}
930
931# List of patterns of .class files to exclude from the jar.
932_jar_excluded_patterns = [
933  # Excludes Android support libraries crbug.com/832770.
934  "android/*",
935  "androidx/*",
936  "*/library_loader/*.class",
937  "*/multidex/*.class",
938  "*/process_launcher/*.class",
939  "*/SysUtils*.class",
940  "org/chromium/base/Feature*.class",
941  "org/chromium/base/jank_tracker/*.class",
942  "org/chromium/base/memory/MemoryPurgeManager*.class",
943  "org/chromium/base/memory/MemoryPressureMonitor*.class",
944]
945
946# Excluded from repackage_jars, but not from jar_src().
947_build_jar_excluded_patterns = [ "org/chromium/build/NativeLibraries.class" ]
948
949# See crbug.com/1401015 for more info on why GEN_JNI is excluded by default
950template("repackage_jars") {
951  _excludes = []
952  if (defined(invoker.jar_excluded_patterns)) {
953    _excludes += invoker.jar_excluded_patterns
954  }
955  if (!defined(invoker.remove_gen_jni) || invoker.remove_gen_jni) {
956    _excludes += [ "*/*GEN_JNI.class" ]
957  }
958  dist_jar(target_name) {
959    requires_android = true
960    direct_deps_only = true
961    use_unprocessed_jars = true
962    no_build_hooks = true
963    jar_excluded_patterns = _excludes
964    forward_variables_from(invoker, "*", [ "jar_excluded_patterns" ])
965  }
966}
967
968repackage_jars("repackage_shared") {
969  output = "$_package_dir/cronet_shared_java.jar"
970  deps = cronet_shared_java_deps_to_package + [ ":cronet_shared_java" ]
971}
972
973repackage_jars("repackage_api") {
974  output = "$_package_dir/cronet_api.jar"
975  deps = [
976    ":cronet_api_helpers_java",
977    ":cronet_api_java",
978  ]
979}
980
981repackage_jars("repackage_platform") {
982  output = "$_package_dir/cronet_impl_platform_java.jar"
983  deps = [ ":cronet_impl_platform_java" ]
984}
985
986repackage_jars("repackage_fake") {
987  output = "$_package_dir/cronet_impl_fake_java.jar"
988  deps = [ ":cronet_impl_fake_java" ]
989}
990
991repackage_jars("repackage_util") {
992  output = "$_package_dir/cronet_impl_util_java.jar"
993  deps = [ ":cronet_impl_java_util_java" ]
994}
995
996repackage_jars("repackage_httpengine_native_provider") {
997  output = "$_package_dir/httpengine_native_provider_java.jar"
998  deps = [ ":httpengine_native_provider_java" ]
999}
1000
1001# See crbug.com/1005836 for more info on why repackage_native requires 2 extra
1002# targets. These 3 targets exist to ensure the correct version of GEN_JNI
1003# (a generated class containing native method definitions) is included.
1004repackage_jars("repackage_native") {
1005  output = "$_package_dir/cronet_impl_native_java.jar"
1006  deps = [
1007    ":cronet_jni_registration_java",
1008    ":repackage_native_java",
1009  ]
1010  remove_gen_jni = false
1011  jar_excluded_patterns = _jar_excluded_patterns + _build_jar_excluded_patterns
1012}
1013
1014_native_intermediate_jar_path = "$target_out_dir/repackage_native_impl.jar"
1015
1016# Do not depend on this target directly. Use :repackage_native.
1017repackage_jars("repackage_native_impl") {
1018  output = _native_intermediate_jar_path
1019  deps =
1020      cronet_impl_native_java_deps_to_package + [ ":cronet_impl_native_java" ]
1021  jar_excluded_patterns = _jar_excluded_patterns + _build_jar_excluded_patterns
1022}
1023
1024# Do not depend on this target directly. Use :repackage_native.
1025# This target exists to provide :repackage_native with a suitable target to
1026# depend on (since dist_aar only pulls in deps of type "java_library").
1027android_java_prebuilt("repackage_native_java") {
1028  jar_path = _native_intermediate_jar_path
1029
1030  # Since only the unprocessed jar is used, no need to complete the bytecode
1031  # processing step.
1032  enable_bytecode_checks = false
1033  deps = [ ":repackage_native_impl" ]
1034}
1035
1036repackage_jars("repackage_impl_common") {
1037  output = "$_package_dir/cronet_impl_common_java.jar"
1038  deps = cronet_impl_common_java_deps_to_package + [
1039           ":cronet_impl_common_java",
1040           ":cronet_impl_java_util_java",
1041         ]
1042}
1043
1044_cronet_shared_lib_file_name = "lib" + _cronet_shared_lib_name + ".so"
1045
1046instrumentation_test_apk("cronet_sample_test_apk") {
1047  apk_name = "CronetSampleTest"
1048  apk_under_test = ":cronet_sample_apk"
1049  android_manifest = "sample/javatests/AndroidManifest.xml"
1050  sources = [
1051    "sample/javatests/src/org/chromium/cronet_sample_apk/CronetSampleTest.java",
1052  ]
1053  deps = [
1054    ":cronet_sample_apk_java",
1055    ":package_impl_common_java",
1056    "//third_party/android_deps:com_googlecode_java_diff_utils_diffutils_java",
1057    "//third_party/android_deps:espresso_java",
1058    "//third_party/androidx:androidx_test_monitor_java",
1059    "//third_party/androidx:androidx_test_rules_java",
1060    "//third_party/androidx:androidx_test_runner_java",
1061    "//third_party/google-truth:google_truth_java",
1062    "//third_party/junit",
1063  ]
1064
1065  if (!is_java_debug) {
1066    proguard_enabled = true
1067    proguard_configs = [ "sample/javatests/proguard.cfg" ]
1068  }
1069}
1070
1071shared_library("cronet_tests") {
1072  testonly = true
1073  assert_no_deps = [ ":cronet_static" ]
1074  sources = [
1075    # While "cronet_tests" cannot depend on "cronet_static", and hence cannot
1076    # call any Cronet functions, it can access fields of Cronet objects, so add
1077    # Cronet header files to facilitate accessing these fields.
1078    "//components/cronet/android/cronet_context_adapter.h",
1079    "//components/cronet/android/cronet_url_request_adapter.h",
1080    "//components/cronet/cronet_url_request.h",
1081    "//components/cronet/url_request_context_config.h",
1082    "test/cronet_test_jni.cc",
1083    "test/cronet_test_util.cc",
1084    "test/cronet_test_util.h",
1085    "test/cronet_url_request_context_config_test.cc",
1086    "test/cronet_url_request_context_config_test.h",
1087    "test/cronet_url_request_test.cc",
1088    "test/experimental_options_test.cc",
1089    "test/mock_cert_verifier.cc",
1090    "test/mock_url_request_job_factory.cc",
1091    "test/native_test_server.cc",
1092    "test/quic_test_server.cc",
1093    "test/test_upload_data_stream_handler.cc",
1094    "test/test_upload_data_stream_handler.h",
1095    "test/url_request_intercepting_job_factory.cc",
1096    "test/url_request_intercepting_job_factory.h",
1097  ]
1098
1099  deps = [
1100    ":cronet_test_apk_jni",
1101    ":cronet_tests_jni_headers",
1102    "//base",
1103    "//base:i18n",
1104    "//base/test:test_support",
1105    "//components/cronet:cronet_common",
1106    "//components/cronet:cronet_version_header",
1107    "//components/cronet/testing:test_support",
1108    "//components/prefs",
1109    "//net",
1110    "//net:simple_quic_tools",
1111    "//net:test_support",
1112    "//third_party/icu",
1113  ]
1114
1115  include_dirs = [ _cronet_version_header_include_dir ]
1116
1117  configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
1118  configs += [ "//build/config/android:hide_all_but_jni" ]
1119}
1120
1121android_resources("cronet_test_apk_resources") {
1122  testonly = true
1123  sources = [
1124    # TODO(crbug.com/40283951): Modify quicroot.pem to become a build time copy of
1125    # net/data/ssl/certificates/cronet-quic-chain.pem.
1126    "test/res/raw/quicroot.pem",
1127    "test/res/values/cronet-test-rule-configuration.xml",
1128    "test/res/values/strings.xml",
1129    "test/res/xml/network_security_config.xml",
1130  ]
1131}
1132
1133generate_jni("cronet_test_apk_jni") {
1134  testonly = true
1135  sources = [
1136    "test/src/org/chromium/net/CronetTestUtil.java",
1137    "test/src/org/chromium/net/MockCertVerifier.java",
1138    "test/src/org/chromium/net/MockUrlRequestJobFactory.java",
1139    "test/src/org/chromium/net/NativeTestServer.java",
1140    "test/src/org/chromium/net/QuicTestServer.java",
1141    "test/src/org/chromium/net/TestUploadDataStreamHandler.java",
1142  ]
1143}
1144
1145android_library("cronet_test_apk_java") {
1146  testonly = true
1147
1148  srcjar_deps = [ ":cronet_test_apk_jni" ]
1149  sources = [
1150    "test/src/org/chromium/net/CronetTestApplication.java",
1151    "test/src/org/chromium/net/CronetTestUtil.java",
1152    "test/src/org/chromium/net/Http2TestHandler.java",
1153    "test/src/org/chromium/net/Http2TestServer.java",
1154    "test/src/org/chromium/net/MockCertVerifier.java",
1155    "test/src/org/chromium/net/MockUrlRequestJobFactory.java",
1156    "test/src/org/chromium/net/NativeTestServer.java",
1157    "test/src/org/chromium/net/QuicTestServer.java",
1158    "test/src/org/chromium/net/ReportingCollector.java",
1159    "test/src/org/chromium/net/TestFilesInstaller.java",
1160    "test/src/org/chromium/net/TestUploadDataStreamHandler.java",
1161    "test/src/org/chromium/net/truth/UrlResponseInfoSubject.java",
1162  ]
1163
1164  deps = [
1165    ":cronet_all_java",
1166    "//base:base_java",
1167    "//base:base_java_test_support",
1168    "//build/android:build_java",
1169    "//net/android:net_java_test_support",
1170    "//third_party/androidx:androidx_annotation_annotation_java",
1171    "//third_party/google-truth:google_truth_java",
1172    "//third_party/jni_zero:jni_zero_java",
1173    "//third_party/junit",
1174    "//third_party/netty4:netty_all_java",
1175  ]
1176}
1177
1178cronet_smoketests_platform_only_common_srcs = [
1179  "test/smoketests/src/org/chromium/net/smoke/ChromiumPlatformOnlyTestSupport.java",
1180  "test/smoketests/src/org/chromium/net/smoke/CronetSmokeTestRule.java",
1181  "test/smoketests/src/org/chromium/net/smoke/HttpTestServer.java",
1182  "test/smoketests/src/org/chromium/net/smoke/SmokeTestRequestCallback.java",
1183  "test/smoketests/src/org/chromium/net/smoke/TestSupport.java",
1184  "test/smoketests/src/org/chromium/net/smoke/CronetPlatformSmokeTestRule.java",
1185]
1186
1187cronet_smoketests_native_common_srcs = cronet_smoketests_platform_only_common_srcs + [
1188                                         "test/smoketests/src/org/chromium/net/smoke/ChromiumNativeTestSupport.java",
1189                                         "test/smoketests/src/org/chromium/net/smoke/NativeCronetTestRule.java",
1190                                       ]
1191
1192cronet_tests_androidx_common_srcs = [
1193  "//third_party/androidx:androidx_annotation_annotation_java",
1194  "//third_party/androidx:androidx_test_core_java",
1195  "//third_party/androidx:androidx_test_ext_junit_java",
1196  "//third_party/androidx:androidx_test_runner_java",
1197]
1198
1199# cronet_common_javatests.jar - Cronet Java test common files.
1200# TODO(crbug.com/40919033) - refactor to cronet_api only dependency
1201android_library("cronet_common_javatests") {
1202  testonly = true
1203  sources = [
1204    "test/javatests/src/org/chromium/net/ContextInterceptor.java",
1205    "test/javatests/src/org/chromium/net/CronetLoggerTestRule.java",
1206    "test/javatests/src/org/chromium/net/CronetTestRule.java",
1207    "test/javatests/src/org/chromium/net/TestRequestFinishedListener.java",
1208    "test/javatests/src/org/chromium/net/TestUploadDataProvider.java",
1209    "test/javatests/src/org/chromium/net/TestUrlRequestCallback.java",
1210    "test/javatests/src/org/chromium/net/httpflags/HttpFlagsInterceptor.java",
1211    "test/javatests/src/org/chromium/net/impl/CronetManifestInterceptor.java",
1212  ]
1213  deps = [
1214           ":cronet_all_java",
1215           ":cronet_test_apk_java",
1216           ":flags_java_proto",
1217           "//base:base_java",
1218           "//base:base_java_test_support",
1219           "//build/android:build_java",
1220           "//third_party/androidx:androidx_core_core_java",
1221           "//third_party/google-truth:google_truth_java",
1222           "//third_party/jni_zero:jni_zero_java",
1223           "//third_party/junit",
1224         ] + cronet_tests_androidx_common_srcs
1225}
1226
1227# cronet_fake_javatests.jar - Java tests for the fake implementation of Cronet.
1228android_library("cronet_fake_javatests") {
1229  testonly = true
1230  sources = [
1231    "fake/javatests/org/chromium/net/test/FakeCronetControllerTest.java",
1232    "fake/javatests/org/chromium/net/test/FakeCronetEngineTest.java",
1233    "fake/javatests/org/chromium/net/test/FakeCronetProviderTest.java",
1234    "fake/javatests/org/chromium/net/test/FakeUrlRequestTest.java",
1235    "fake/javatests/org/chromium/net/test/FakeUrlResponseTest.java",
1236    "fake/javatests/org/chromium/net/test/UrlResponseMatcherTest.java",
1237  ]
1238
1239  deps = [
1240           ":cronet_api_helpers_java",
1241           ":cronet_api_java",
1242           ":cronet_common_javatests",
1243           ":cronet_impl_common_java",
1244           ":cronet_impl_fake_java",
1245           ":cronet_impl_platform_java",
1246           ":cronet_shared_java",
1247           ":cronet_test_apk_java",
1248           "//base:base_java_test_support",
1249           "//third_party/android_deps:guava_android_java",
1250           "//third_party/google-truth:google_truth_java",
1251           "//third_party/junit",
1252         ] + cronet_tests_androidx_common_srcs
1253}
1254
1255cronet_javatests_deps_to_package = [
1256  ":cronet_common_javatests",
1257  ":cronet_test_apk_java",
1258  ":flags_java_proto",
1259  "//base:base_java",
1260  "//third_party/jni_zero:jni_zero_java",
1261  "//base:base_java_test_support",
1262
1263  "//net/android:embedded_test_server_aidl_java",
1264  "//net/android:net_java",
1265  "//net/android:net_java_test_support",
1266  "//url:url_java",
1267  "//third_party/androidx:androidx_annotation_annotation_experimental_java",
1268]
1269
1270if (!is_cronet_for_aosp_build) {
1271  # Don't bundle FakeCronetEngine or its tests for AOSP.
1272  cronet_javatests_deps_to_package += [ ":cronet_fake_javatests" ]
1273}
1274
1275generate_jni("cronet_tests_jni_headers") {
1276  testonly = true
1277  sources = [
1278    "test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java",
1279    "test/javatests/src/org/chromium/net/CronetUrlRequestTest.java",
1280    "test/javatests/src/org/chromium/net/ExperimentalOptionsTest.java",
1281  ]
1282}
1283
1284android_library("cronet_javatests") {
1285  testonly = true
1286
1287  srcjar_deps = [ ":cronet_tests_jni_headers" ]
1288  sources = [
1289    "test/javatests/src/org/chromium/net/BidirectionalStreamQuicTest.java",
1290    "test/javatests/src/org/chromium/net/BidirectionalStreamTest.java",
1291    "test/javatests/src/org/chromium/net/BrotliTest.java",
1292    "test/javatests/src/org/chromium/net/Criteria.java",
1293    "test/javatests/src/org/chromium/net/CronetEngineBuilderTest.java",
1294    "test/javatests/src/org/chromium/net/CronetOnboardingTest.java",
1295    "test/javatests/src/org/chromium/net/CronetStressTest.java",
1296    "test/javatests/src/org/chromium/net/CronetTestRuleTest.java",
1297    "test/javatests/src/org/chromium/net/CronetUploadTest.java",
1298    "test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java",
1299    "test/javatests/src/org/chromium/net/CronetUrlRequestHTTPSTest.java",
1300    "test/javatests/src/org/chromium/net/CronetUrlRequestTest.java",
1301    "test/javatests/src/org/chromium/net/DiskStorageTest.java",
1302    "test/javatests/src/org/chromium/net/ExperimentalOptionsTest.java",
1303    "test/javatests/src/org/chromium/net/ExperimentalOptionsTranslationTest.java",
1304    "test/javatests/src/org/chromium/net/ExperimentalOptionsTranslationTestUtil.java",
1305    "test/javatests/src/org/chromium/net/FileUtils.java",
1306    "test/javatests/src/org/chromium/net/GetStatusTest.java",
1307    "test/javatests/src/org/chromium/net/LogcatCapture.java",
1308    "test/javatests/src/org/chromium/net/MetricsTestUtil.java",
1309    "test/javatests/src/org/chromium/net/MockCertVerifierTest.java",
1310    "test/javatests/src/org/chromium/net/NQETest.java",
1311    "test/javatests/src/org/chromium/net/NetworkChangesTest.java",
1312    "test/javatests/src/org/chromium/net/NetworkErrorLoggingTest.java",
1313    "test/javatests/src/org/chromium/net/PkpTest.java",
1314    "test/javatests/src/org/chromium/net/QuicTest.java",
1315    "test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java",
1316    "test/javatests/src/org/chromium/net/TestBidirectionalStreamCallback.java",
1317    "test/javatests/src/org/chromium/net/TestDrivenDataProvider.java",
1318    "test/javatests/src/org/chromium/net/TestNetworkQualityRttListener.java",
1319    "test/javatests/src/org/chromium/net/TestNetworkQualityThroughputListener.java",
1320    "test/javatests/src/org/chromium/net/UrlResponseInfoTest.java",
1321    "test/javatests/src/org/chromium/net/apihelpers/ContentTypeParametersParserTest.java",
1322    "test/javatests/src/org/chromium/net/apihelpers/UploadDataProvidersTest.java",
1323    "test/javatests/src/org/chromium/net/httpflags/BaseFeatureTest.java",
1324    "test/javatests/src/org/chromium/net/httpflags/HttpFlagsLoaderTest.java",
1325    "test/javatests/src/org/chromium/net/httpflags/ResolvedFlagsTest.java",
1326    "test/javatests/src/org/chromium/net/impl/AndroidHttpEngineBuilderWrapperTest.java",
1327    "test/javatests/src/org/chromium/net/impl/CronetLoggerTest.java",
1328    "test/javatests/src/org/chromium/net/impl/CronetManifestTest.java",
1329    "test/javatests/src/org/chromium/net/telemetry/CronetLoggerImplTest.java",
1330    "test/javatests/src/org/chromium/net/telemetry/ExperimentalOptionsTest.java",
1331    "test/javatests/src/org/chromium/net/telemetry/HashTest.java",
1332    "test/javatests/src/org/chromium/net/telemetry/RateLimiterTest.java",
1333    "test/javatests/src/org/chromium/net/telemetry/SizeBucketsTest.java",
1334    "test/javatests/src/org/chromium/net/urlconnection/CronetBufferedOutputStreamTest.java",
1335    "test/javatests/src/org/chromium/net/urlconnection/CronetChunkedOutputStreamTest.java",
1336    "test/javatests/src/org/chromium/net/urlconnection/CronetFixedModeOutputStreamTest.java",
1337    "test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java",
1338    "test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLStreamHandlerTest.java",
1339    "test/javatests/src/org/chromium/net/urlconnection/CronetInputStreamTest.java",
1340    "test/javatests/src/org/chromium/net/urlconnection/CronetURLStreamHandlerFactoryTest.java",
1341    "test/javatests/src/org/chromium/net/urlconnection/MessageLoopTest.java",
1342    "test/javatests/src/org/chromium/net/urlconnection/QuicUploadTest.java",
1343    "test/javatests/src/org/chromium/net/urlconnection/TestUtil.java",
1344  ]
1345
1346  # Adding deps here won't include those deps in the cronet_tests_java.jar.
1347  # Please add to cronet_javatests_deps_to_package instead.
1348  deps = [
1349    ":cronet_all_java",
1350    ":cronet_api_helpers_java",
1351    ":cronet_urlconnection_impl_java",
1352    "//third_party/android_deps:guava_android_java",
1353    "//third_party/android_deps:protobuf_lite_runtime_java",
1354    "//third_party/androidx:androidx_annotation_annotation_java",
1355    "//third_party/androidx:androidx_test_core_java",
1356    "//third_party/androidx:androidx_test_ext_junit_java",
1357    "//third_party/androidx:androidx_test_runner_java",
1358    "//third_party/google-truth:google_truth_java",
1359    "//third_party/hamcrest:hamcrest_core_java",
1360    "//third_party/junit",
1361    "//third_party/mockito:mockito_java",
1362  ]
1363  deps += cronet_javatests_deps_to_package
1364  data = [ "//components/cronet/testing/test_server/data/" ]
1365}
1366
1367instrumentation_test_apk("cronet_test_instrumentation_apk") {
1368  # This is the only Cronet APK with lint enabled. This one was chosen because
1369  # it depends on basically all source files.
1370  enable_lint = true
1371  lint_baseline_file = "lint-baseline.xml"
1372  lint_suppressions_file = "lint-suppressions.xml"
1373
1374  lint_min_sdk_version = 21
1375
1376  apk_name = "CronetTestInstrumentation"
1377  android_manifest = "test/javatests/AndroidManifest.xml"
1378
1379  shared_libraries = [
1380    ":cronet",
1381    ":cronet_tests",
1382  ]
1383  loadable_modules = [ "$root_out_dir/libnetty-tcnative.so" ]
1384
1385  sources = cronet_smoketests_native_common_srcs + [
1386              "test/smoketests/src/org/chromium/net/smoke/Http2Test.java",
1387              "test/smoketests/src/org/chromium/net/smoke/QuicTest.java",
1388            ]
1389
1390  deps = [
1391           ":cronet_all_java",
1392           ":cronet_combine_proguard_flags",
1393           ":cronet_javatests",
1394           ":cronet_test_apk_java",
1395           ":cronet_test_apk_resources",
1396           "//base:base_java",
1397           "//base:base_java_test_support",
1398           "//build/android:build_java",
1399           "//net/android:net_java",
1400           "//net/android:net_java_test_support",
1401           "//third_party/android_sdk:android_test_mock_java",
1402           "//third_party/google-truth:google_truth_java",
1403           "//third_party/hamcrest:hamcrest_core_java",
1404           "//third_party/jni_zero:jni_zero_java",
1405           "//third_party/junit",
1406           "//third_party/netty-tcnative:netty-tcnative-so",
1407           "//third_party/netty4:netty_all_java",
1408         ] + cronet_tests_androidx_common_srcs
1409
1410  data_deps = [ "//net:test_support" ]
1411
1412  if (!is_java_debug) {
1413    proguard_enabled = true
1414
1415    proguard_configs = [
1416      "$target_gen_dir/cronet_impl_native_proguard.cfg",
1417      "cronet_shared_proguard.cfg",
1418      "cronet_impl_common_proguard.cfg",
1419      "cronet_impl_platform_proguard.cfg",
1420      "httpengine_native_provider_proguard.cfg",
1421      "test/proguard.cfg",
1422    ]
1423  }
1424  srcjar_deps = [
1425    ":cronet_jni_registration",
1426    ":cronet_tests_jni_registration",
1427  ]
1428}
1429
1430instrumentation_test_apk(
1431    "cronet_smoketests_platform_only_instrumentation_apk") {
1432  apk_name = "PlatformOnlyEngineSmokeTestInstrumentation"
1433  android_manifest = "test/javatests/AndroidManifest.xml"
1434
1435  sources = cronet_smoketests_platform_only_common_srcs + [
1436              "test/smoketests/src/org/chromium/net/smoke/PlatformOnlyEngineTest.java",
1437              "test/src/org/chromium/net/CronetTestApplication.java",
1438              "test/src/org/chromium/net/truth/UrlResponseInfoSubject.java",
1439            ]
1440
1441  deps = [
1442           ":cronet_api_java",
1443           ":cronet_impl_common_java",
1444           ":cronet_impl_platform_java",
1445           ":cronet_test_apk_resources",
1446           "//base:base_java_test_support",
1447           "//third_party/android_sdk:android_test_mock_java",
1448           "//third_party/google-truth:google_truth_java",
1449           "//third_party/junit",
1450           "//third_party/netty4:netty_all_java",
1451         ] + cronet_tests_androidx_common_srcs
1452
1453  if (!is_java_debug) {
1454    proguard_enabled = true
1455
1456    proguard_configs = [
1457      "cronet_impl_common_proguard.cfg",
1458      "cronet_impl_platform_proguard.cfg",
1459      "test/proguard.cfg",
1460    ]
1461  }
1462
1463  # There is no native in this apk. However, since we depend on //base, we
1464  # need something that provides a GEN_JNI, as //base uses GEN_JNI.
1465  srcjar_deps = [ ":cronet_jni_registration" ]
1466}
1467
1468instrumentation_test_apk(
1469    "cronet_smoketests_missing_native_library_instrumentation_apk") {
1470  apk_name = "MissingNativeLibrarySmokeTestInstrumentation"
1471  android_manifest = "test/javatests/AndroidManifest.xml"
1472
1473  sources = cronet_smoketests_native_common_srcs + [ "test/smoketests/src/org/chromium/net/smoke/MissingNativeLibraryTest.java" ]
1474  deps = [
1475           ":cronet_api_java",
1476           ":cronet_combine_proguard_flags",
1477           ":cronet_impl_common_java",
1478           ":cronet_impl_platform_java",
1479           ":cronet_shared_java",
1480           ":cronet_test_apk_java",
1481           ":cronet_test_apk_resources",
1482           "//base:base_java",
1483           "//base:base_java_test_support",
1484           "//build/android:build_java",
1485           "//third_party/android_sdk:android_test_mock_java",
1486           "//third_party/google-truth:google_truth_java",
1487           "//third_party/jni_zero:jni_zero_java",
1488           "//third_party/junit",
1489           "//third_party/netty4:netty_all_java",
1490         ] + cronet_tests_androidx_common_srcs
1491
1492  if (!is_java_debug) {
1493    proguard_enabled = true
1494    proguard_configs = [
1495      "$target_gen_dir/cronet_impl_native_proguard.cfg",
1496      "cronet_shared_proguard.cfg",
1497      "cronet_impl_common_proguard.cfg",
1498      "cronet_impl_platform_proguard.cfg",
1499      "test/proguard.cfg",
1500    ]
1501  }
1502
1503  # There is no native in this apk. However, since we depend on //base, we
1504  # need something that provides a GEN_JNI, as //base uses GEN_JNI.
1505  srcjar_deps = [ ":cronet_jni_registration" ]
1506}
1507
1508# The smoketests included in this test target are already included in
1509# cronet_test_instrumentation_apk, but they are proguarded here using
1510# the same proguard rules for which we release Cronet with. This is
1511# to ensure that any changes to the proguard does not break Cronet.
1512# Note: The proguard rules includes the test proguard configs as
1513# the build system automatically pulls in all transitive proguard
1514# configs that can be found through the dependency chain.
1515instrumentation_test_apk("cronet_smoketests_apk") {
1516  apk_name = "CronetSmokeTestInstrumentation"
1517  android_manifest = "test/javatests/AndroidManifest.xml"
1518  shared_libraries = [
1519    ":cronet",
1520    ":cronet_tests",
1521  ]
1522  loadable_modules = [ "$root_out_dir/libnetty-tcnative.so" ]
1523  sources = cronet_smoketests_native_common_srcs + [
1524              "test/smoketests/src/org/chromium/net/smoke/Http2Test.java",
1525              "test/smoketests/src/org/chromium/net/smoke/QuicTest.java",
1526            ]
1527  deps = [
1528           ":cronet_api_java",
1529
1530           # cronet_test_apk_java pulls all implementation of Cronet along with their proguard cfgs.
1531           ":cronet_test_apk_java",
1532           ":cronet_test_apk_resources",
1533           "//base:base_java",
1534           "//base:base_java_test_support",
1535           "//build/android:build_java",
1536           "//third_party/android_sdk:android_test_mock_java",
1537           "//third_party/google-truth:google_truth_java",
1538           "//third_party/junit",
1539           "//third_party/netty-tcnative:netty-tcnative-so",
1540           "//third_party/netty4:netty_all_java",
1541         ] + cronet_tests_androidx_common_srcs
1542
1543  proguard_enabled = true
1544  proguard_configs = [ "test/proguard.cfg" ]
1545  srcjar_deps = [
1546    ":cronet_jni_registration",
1547    ":cronet_tests_jni_registration",
1548  ]
1549}
1550
1551android_apk("cronet_perf_test_apk") {
1552  testonly = true
1553  apk_name = "CronetPerfTest"
1554  android_manifest = "test/javaperftests/AndroidManifest.xml"
1555  shared_libraries = [
1556    ":cronet",
1557    ":cronet_tests",
1558  ]
1559
1560  sources =
1561      [ "test/javaperftests/src/org/chromium/net/CronetPerfTestActivity.java" ]
1562
1563  deps = [
1564    ":cronet_all_java",
1565    ":cronet_combine_proguard_flags",
1566    ":cronet_javatests",
1567    ":cronet_test_apk_java",
1568    "//base:base_java",
1569    "//build/android:build_java",
1570    "//third_party/android_sdk:android_test_mock_java",
1571    "//third_party/jni_zero:jni_zero_java",
1572    "//third_party/junit",
1573  ]
1574
1575  if (!is_java_debug) {
1576    proguard_enabled = true
1577    proguard_configs = [
1578      "$target_gen_dir/cronet_impl_native_proguard.cfg",
1579      "cronet_shared_proguard.cfg",
1580      "cronet_impl_common_proguard.cfg",
1581      "httpengine_native_provider_proguard.cfg",
1582      "test/proguard.cfg",
1583      "//testing/android/proguard_for_test.flags",
1584      "//third_party/jni_zero/proguard_for_test.flags",
1585    ]
1586    enable_proguard_checks = false
1587  }
1588  srcjar_deps = [
1589    ":cronet_jni_registration",
1590    ":cronet_tests_jni_registration",
1591  ]
1592}
1593
1594test("cronet_unittests_android") {
1595  deps = [
1596    ":cronet_base_feature_unittest",
1597    ":cronet_impl_native_java",
1598    ":cronet_static",
1599    "//base",
1600    "//base/test:test_support",
1601    "//components/cronet:cronet_common_unittests",
1602    "//components/prefs:test_support",
1603    "//net",
1604    "//net:test_support",
1605    "//net/android:net_java",
1606    "//testing/gtest",
1607  ]
1608
1609  if (!is_cronet_for_aosp_build) {
1610    deps += [ "//components/cronet/native:cronet_native_unittests" ]
1611  }
1612
1613  sources = [ "../run_all_unittests.cc" ]
1614
1615  data = [ "//components/cronet/testing/test_server/data/" ]
1616
1617  if (is_android) {
1618    shard_timeout = 180
1619  }
1620}
1621
1622test("cronet_tests_android") {
1623  deps = [
1624    ":cronet_impl_native_java",
1625    ":cronet_static",
1626    "//base",
1627    "//base/test:test_support",
1628    "//components/prefs:test_support",
1629    "//net",
1630    "//net:test_support",
1631    "//net/android:net_java",
1632    "//testing/gtest",
1633  ]
1634
1635  if (!is_cronet_for_aosp_build) {
1636    deps += [ "//components/cronet/native/test:cronet_native_tests" ]
1637  }
1638
1639  allow_cleartext_traffic = true
1640
1641  sources = [ "../run_all_unittests.cc" ]
1642
1643  defines = [ "CRONET_TESTS_IMPLEMENTATION" ]
1644
1645  data = [ "//components/cronet/testing/test_server/data/" ]
1646
1647  if (is_android) {
1648    shard_timeout = 180
1649  }
1650}
1651
1652_test_package_dir = "$root_out_dir/cronet/test"
1653_tests_java_jars_without_jni_path =
1654    "$target_out_dir/cronet_tests_java_without_jni.jar"
1655_test_deps = cronet_javatests_deps_to_package + [
1656               ":cronet_javatests",
1657               "//third_party/netty4:netty_all_java",
1658             ]
1659
1660# First, generate an intermediate jar with the various source GEN_JNI classes
1661# removed to avoid conflicts...
1662repackage_jars("repackage_test_jars_without_jni") {
1663  output = _tests_java_jars_without_jni_path
1664  testonly = true
1665  deps = _test_deps
1666  remove_gen_jni = true
1667}
1668
1669# This target exists to provide :repackage_test_jars with a suitable target to
1670# depend on (since dist_aar only pulls in deps of type "java_library").
1671android_java_prebuilt("repackage_test_jars_without_jni_java") {
1672  jar_path = _tests_java_jars_without_jni_path
1673  testonly = true
1674
1675  # Since only the unprocessed jar is used, no need to complete the bytecode
1676  # processing step.
1677  enable_bytecode_checks = false
1678  deps = [ ":repackage_test_jars_without_jni" ]
1679}
1680
1681# ...then, generate the final, merged GEN_JNI class...
1682generate_jni_registration("cronet_tests_jni_registration") {
1683  java_targets = _test_deps
1684  manual_jni_registration = true
1685  testonly = true
1686  module_name = "cronet_tests"
1687  _subdir = rebase_path(target_gen_dir, root_gen_dir)
1688  cpp_codegen_output =
1689      "$jni_headers_dir/$_subdir/cronet_tests_jni_registration_generated.h"
1690}
1691android_library("cronet_tests_jni_registration_java") {
1692  srcjar_deps = [ ":cronet_tests_jni_registration" ]
1693  testonly = true
1694}
1695
1696# ...and finally, generate the test jar with the final GEN_JNI class.
1697repackage_jars("repackage_test_jars") {
1698  output = "$_test_package_dir/cronet_tests_java.jar"
1699  testonly = true
1700  deps = [
1701    ":cronet_tests_jni_registration_java",
1702    ":repackage_test_jars_without_jni_java",
1703  ]
1704  remove_gen_jni = false
1705}
1706
1707zip("jar_cronet_sample_source") {
1708  inputs = [
1709    "sample/AndroidManifest.xml",
1710    "sample/README",
1711    "sample/res/drawable/ic_action_home.xml",
1712    "sample/res/drawable/ic_flag.xml",
1713    "sample/res/layout/main_activity.xml",
1714    "sample/res/layout/main_fragment.xml",
1715    "sample/res/layout/options_fragment.xml",
1716    "sample/res/layout/toggle_view.xml",
1717    "sample/res/values/colors.xml",
1718    "sample/res/values/dimens.xml",
1719    "sample/res/values/strings.xml",
1720    "sample/res/values/styles.xml",
1721    "sample/src/org/chromium/cronet_sample_apk/Action.java",
1722    "sample/src/org/chromium/cronet_sample_apk/ActionData.java",
1723    "sample/src/org/chromium/cronet_sample_apk/CronetSampleActivity.java",
1724    "sample/src/org/chromium/cronet_sample_apk/CronetSampleApplication.java",
1725    "sample/src/org/chromium/cronet_sample_apk/MainFragment.java",
1726    "sample/src/org/chromium/cronet_sample_apk/Options.java",
1727    "sample/src/org/chromium/cronet_sample_apk/OptionsFragment.java",
1728    "sample/src/org/chromium/cronet_sample_apk/OptionsRecyclerViewAdapter.java",
1729    "sample/src/org/chromium/cronet_sample_apk/SampleActivityViewModel.java",
1730  ]
1731  output = "$_package_dir/cronet-sample-src.jar"
1732  base_dir = "sample"
1733}
1734
1735jar_src("jar_cronet_impl_native_java_source") {
1736  src_search_dirs = [
1737    "//base/android/java/src",
1738    "//base/test/android/javatests/src/stub",
1739    "//build/android/java/src",
1740    "//components/cronet/android/java/src",
1741    "//net/android/java/src",
1742    "//url/android/java/src",
1743    "//third_party/jni_zero/java/src",
1744  ]
1745  source_deps = [
1746    ":cronet_impl_native_java",
1747    "//base:base_java",
1748    "//build/android:build_java",
1749    "//net/android:net_java",
1750    "//third_party/jni_zero:jni_zero_java",
1751    "//url:url_java",
1752  ]
1753
1754  srcjar_deps = cronet_impl_native_java_srcjar_deps
1755  srcjar_deps += [
1756    ":cronet_jni_registration",
1757    "//base:base_android_java_enums_srcjar",
1758    "//net/android:net_android_java_enums_srcjar",
1759    "//net/android:net_errors_java",
1760  ]
1761  excluded_patterns = _jar_excluded_patterns
1762  jar_path = "$_package_dir/cronet_impl_native_java-src.jar"
1763}
1764
1765action("generate_licenses") {
1766  _license_path = "$_package_dir/LICENSE"
1767
1768  script = "//tools/licenses/licenses.py"
1769  outputs = [ _license_path ]
1770  args = [
1771    "license_file",
1772    rebase_path(_license_path, root_build_dir),
1773    "--gn-target",
1774    "//components/cronet/android:cronet_non_test_package",
1775    "--gn-out-dir",
1776    ".",
1777  ]
1778}
1779
1780action_with_pydeps("generate_javadoc") {
1781  script = "//components/cronet/tools/generate_javadoc.py"
1782  depfile = "$target_gen_dir/$target_name.d"
1783  _zip_file = "$target_gen_dir/$target_name.zip"
1784  outputs = [ _zip_file ]
1785  _src_jar = "$_package_dir/cronet_api-src.jar"
1786  _shared_jar = "$_package_dir/cronet_shared-src.jar"
1787
1788  _annotations_deps = [
1789    "//third_party/androidx:androidx_annotation_annotation_experimental_java__classes",
1790    "//third_party/androidx:androidx_annotation_annotation_jvm_java",
1791  ]
1792
1793  _build_config_deps = []
1794  _build_configs = []
1795
1796  foreach(dep, _annotations_deps) {
1797    _build_config_dep = "$dep$build_config_target_suffix"
1798    _build_config_deps += [ _build_config_dep ]
1799
1800    _build_config = get_label_info(dep, "target_gen_dir") + "/" +
1801                    get_label_info(dep, "name") + ".build_config.json"
1802
1803    _build_configs += [ _build_config ]
1804  }
1805
1806  deps = [
1807           ":jar_cronet_api_source",
1808           ":jar_cronet_shared_source",
1809         ] + _annotations_deps + _build_config_deps
1810
1811  inputs = [
1812             _src_jar,
1813             _shared_jar,
1814             android_sdk_jar,
1815           ] + _build_configs
1816
1817  _rebased_build_configs = []
1818  foreach(config, _build_configs) {
1819    _rebased_build_configs += [ rebase_path(config, root_build_dir) ]
1820  }
1821
1822  args = [
1823    "--output-dir",
1824    rebase_path(_package_dir, root_build_dir),
1825    "--input-dir",
1826    rebase_path("//components/cronet", root_build_dir),
1827    "--overview-file",
1828    rebase_path("$_package_dir/README.md.html", root_build_dir),
1829    "--readme-file",
1830    rebase_path("//components/cronet/README.md", root_build_dir),
1831    "--depfile",
1832    rebase_path(depfile, root_build_dir),
1833    "--zip-file",
1834    rebase_path(_zip_file, root_build_dir),
1835    "--android-sdk-jar",
1836    rebase_path(android_sdk_jar, root_build_dir),
1837    "--classpath-jars",
1838    rebase_path(_shared_jar, root_build_dir),
1839
1840    # JavaDoc is generated from Cronet's API source jar.
1841    "--input-src-jar",
1842    rebase_path(_src_jar, root_build_dir),
1843  ]
1844
1845  foreach(rebased_config, _rebased_build_configs) {
1846    args += [
1847      "--support-annotations-jars=@FileArg($rebased_config:deps_info:unprocessed_jar_path)",
1848      "--classpath-jars=@FileArg($rebased_config:deps_info:javac_full_classpath)",
1849    ]
1850  }
1851}
1852
1853copy("cronet_package_copy") {
1854  sources = [
1855    "$target_gen_dir/cronet_impl_native_proguard.cfg",
1856    "//AUTHORS",
1857    "//chrome/VERSION",
1858    "api_version.txt",
1859    "cronet_impl_common_proguard.cfg",
1860    "cronet_impl_fake_proguard.cfg",
1861    "cronet_impl_platform_proguard.cfg",
1862    "cronet_shared_proguard.cfg",
1863    "httpengine_native_provider_proguard.cfg",
1864  ]
1865  outputs = [ "$_package_dir/{{source_file_part}}" ]
1866
1867  deps = [
1868    ":cronet_api_java",
1869    ":cronet_combine_proguard_flags",
1870    ":cronet_impl_common_java",
1871    ":cronet_impl_fake_java",
1872    ":cronet_impl_platform_java",
1873    ":cronet_shared_java",
1874    ":httpengine_native_provider_java",
1875  ]
1876}
1877
1878copy("cronet_package_copy_native_headers") {
1879  sources = cronet_native_public_headers + grpc_public_headers
1880
1881  outputs = [ "$_package_dir/include/{{source_file_part}}" ]
1882}
1883
1884copy("cronet_package_copy_native_lib") {
1885  sources = [ "$root_out_dir/" + _cronet_shared_lib_file_name ]
1886  outputs = [ "$_package_dir/libs/${android_app_abi}/" +
1887              _cronet_shared_lib_file_name ]
1888  deps = [ ":cronet" ]
1889}
1890
1891copy("cronet_package_copy_native_lib_unstripped") {
1892  sources = [ "$root_out_dir/lib.unstripped/" + _cronet_shared_lib_file_name ]
1893  outputs = [ "$_package_dir/symbols/${android_app_abi}/" +
1894              _cronet_shared_lib_file_name ]
1895  deps = [ ":cronet" ]
1896}
1897
1898copy("cronet_package_copy_native_test_lib") {
1899  testonly = true
1900  sources = [
1901    "$root_out_dir/libcronet_tests.so",
1902    "$root_out_dir/libnetty-tcnative.so",
1903  ]
1904  outputs =
1905      [ "$_test_package_dir/libs/${android_app_abi}/{{source_file_part}}" ]
1906  deps = [
1907    ":cronet_tests",
1908    "//third_party/netty-tcnative:netty-tcnative-so",
1909  ]
1910}
1911
1912copy("cronet_package_copy_native_test_lib_unstripped") {
1913  testonly = true
1914  sources = [
1915    "$root_out_dir/lib.unstripped/libcronet_tests.so",
1916    "$root_out_dir/lib.unstripped/libnetty-tcnative.so",
1917  ]
1918  outputs =
1919      [ "$_test_package_dir/symbols/${android_app_abi}/{{source_file_part}}" ]
1920  deps = [
1921    ":cronet_tests",
1922    "//third_party/netty-tcnative:netty-tcnative-so",
1923  ]
1924}
1925
1926copy("cronet_package_copy_test_assets") {
1927  testonly = true
1928  sources = [ "//components/cronet/testing/test_server/data" ]
1929  outputs = [ "$_test_package_dir/assets/test" ]
1930}
1931
1932copy("cronet_package_copy_test_resources") {
1933  testonly = true
1934  sources = [ "//components/cronet/android/test/res" ]
1935  outputs = [ "$_test_package_dir/res" ]
1936}
1937
1938copy("cronet_package_copy_test_files") {
1939  testonly = true
1940  sources = [
1941    "//net/data/ssl/certificates/cronet-quic-chain.pem",
1942    "//net/data/ssl/certificates/cronet-quic-leaf-cert.key",
1943    "//net/data/ssl/certificates/cronet-quic-leaf-cert.key.pkcs8.pem",
1944    "//net/data/ssl/certificates/expired_cert.pem",
1945    "//net/data/ssl/certificates/quic-chain.pem",
1946    "//net/data/ssl/certificates/quic-leaf-cert.key",
1947    "//net/data/ssl/certificates/quic-leaf-cert.key.pkcs8.pem",
1948    "//net/data/ssl/certificates/root_ca_cert.pem",
1949  ]
1950  outputs = [ "$_test_package_dir/assets/test_files/net/data/ssl/certificates/{{source_file_part}}" ]
1951  deps = [
1952    # Not really dependent, but builds can fail if these two targets attempt
1953    # to create the "assets" subdirectory simultaneously.
1954    ":cronet_package_copy_test_assets",
1955  ]
1956}
1957
1958copy("cronet_package_copy_resources") {
1959  sources = [ "api/res/raw/keep_cronet_api.xml" ]
1960  outputs = [ "$_package_dir/res/raw/{{source_file_part}}" ]
1961}
1962
1963# Enforce that ARM Neon is not used when building for ARMv7
1964if (target_cpu == "arm" && arm_version == 7 && !arm_use_neon) {
1965  action("enforce_no_neon") {
1966    script = "//components/cronet/tools/check_no_neon.py"
1967    outputs = [ "$target_gen_dir/$target_name.stamp" ]
1968    args = [
1969      rebase_path("${android_tool_prefix}objdump", root_build_dir),
1970
1971      # libcronet.so may contain ARM Neon instructions from BoringSSL, but these
1972      # are only used after checking whether the CPU supports NEON at runtime,
1973      # so instead check base/ as it represents a large swath of code that only
1974      # contains Neon instructions when Neon is enabled by default.
1975      rebase_path("$root_out_dir/obj/base/base/*.o", root_build_dir),
1976      "--stamp",
1977      rebase_path(outputs[0], root_build_dir),
1978    ]
1979    deps = [ "//base:base" ]
1980  }
1981}
1982
1983# Enforce restrictions for API<->impl boundary.
1984action("api_static_checks") {
1985  script = "//components/cronet/tools/api_static_checks.py"
1986  outputs = [ "$target_gen_dir/$target_name.stamp" ]
1987  _api_jar = "$_package_dir/cronet_api.jar"
1988  _common_jar = "$_package_dir/cronet_impl_common_java.jar"
1989  _platform_jar = "$_package_dir/cronet_impl_platform_java.jar"
1990  _native_jar = "$_package_dir/cronet_impl_native_java.jar"
1991  args = [
1992    "--api_jar",
1993    rebase_path(_api_jar, root_build_dir),
1994    "--impl_jar",
1995    rebase_path(_common_jar, root_build_dir),
1996    "--impl_jar",
1997    rebase_path(_platform_jar, root_build_dir),
1998    "--impl_jar",
1999    rebase_path(_native_jar, root_build_dir),
2000    "--stamp",
2001    rebase_path(outputs[0], root_build_dir),
2002  ]
2003  deps = [
2004    ":repackage_api",
2005    ":repackage_impl_common",
2006    ":repackage_native",
2007    ":repackage_platform",
2008  ]
2009  inputs = [
2010    _api_jar,
2011    _common_jar,
2012    _platform_jar,
2013    _native_jar,
2014    "//components/cronet/tools/update_api.py",
2015  ]
2016  sources = [
2017    "//components/cronet/android/api.txt",
2018    "//components/cronet/android/api_version.txt",
2019  ]
2020}
2021
2022action("gn2bp_check") {
2023  script = "//components/cronet/gn2bp/validate_gn2bp.py"
2024  sources = [
2025    "$_gn_path",
2026    "//components/cronet/gn2bp/gen_android_bp.py",
2027    "//tools/mb/mb.py",
2028  ]
2029  outputs = [ "$target_gen_dir/$target_name.stamp" ]
2030  args = [
2031    "--stamp",
2032    rebase_path(outputs[0], root_build_dir),
2033  ]
2034}
2035
2036action("dependencies_checks") {
2037  script = "//components/cronet/tools/check_cronet_dependencies.py"
2038  inputs = [ "//components/cronet/android/dependencies.txt" ]
2039  sources = [ "$_gn_path" ]
2040  outputs = [ "$target_gen_dir/$target_name.stamp" ]
2041  deps = [
2042    ":cronet",
2043    ":cronet_api_helpers_java",
2044    ":cronet_api_java",
2045    ":cronet_impl_native_java",
2046  ]
2047  abs_deps = []
2048  foreach(dep, deps) {
2049    abs_deps += [ get_label_info(dep, "label_no_toolchain") ]
2050  }
2051  args = [
2052    "--old-dependencies",
2053    rebase_path(inputs[0], root_build_dir),
2054    "--stamp",
2055    rebase_path(outputs[0], root_build_dir),
2056    "--root-deps",
2057  ]
2058  foreach(abs_dep, abs_deps) {
2059    args += [ abs_dep ]
2060  }
2061}
2062
2063group("cronet_non_test_package") {
2064  # Target containing all of cronet's non-test targets.
2065  # Enforce building with ICU alternatives, crbug.com/611621.
2066  # Enforce that arm_use_neon==false when building for ARMv7 by
2067  # not including any deps in cronet_package target otherwise.
2068  if (use_platform_icu_alternatives &&
2069      (!(target_cpu == "arm" && arm_version == 7) || !arm_use_neon)) {
2070    deps = [
2071      ":cronet_package_copy",
2072      ":cronet_package_copy_native_headers",
2073      ":cronet_package_copy_native_lib",
2074      ":cronet_package_copy_native_lib_unstripped",
2075      ":cronet_package_copy_resources",
2076      ":jar_cronet_api_source",
2077      ":jar_cronet_impl_common_java_source",
2078      ":jar_cronet_impl_fake_java_source",
2079      ":jar_cronet_impl_native_java_source",
2080      ":jar_cronet_impl_platform_java_source",
2081      ":jar_cronet_sample_source",
2082      ":jar_cronet_shared_source",
2083      ":jar_httpengine_native_provider_java_source",
2084      ":repackage_api",
2085      ":repackage_fake",
2086      ":repackage_httpengine_native_provider",
2087      ":repackage_impl_common",
2088      ":repackage_native",
2089      ":repackage_platform",
2090      ":repackage_shared",
2091    ]
2092    if (current_cpu == "arm" && arm_version == 7) {
2093      deps += [ ":enforce_no_neon" ]
2094    }
2095  }
2096}
2097
2098group("cronet_test_package") {
2099  # Target containing all of cronet's test targets.
2100  testonly = true
2101
2102  # Don't build for MIPS where tests aren't run.
2103  if (current_cpu != "mipsel" && current_cpu != "mips64el") {
2104    deps = [
2105      ":api_static_checks",
2106      ":cronet_package_copy_native_test_lib",
2107      ":cronet_package_copy_native_test_lib_unstripped",
2108      ":cronet_package_copy_test_assets",
2109      ":cronet_package_copy_test_files",
2110      ":cronet_package_copy_test_resources",
2111      ":cronet_sizes",
2112      ":repackage_test_jars",
2113    ]
2114  }
2115}
2116
2117# Everything added here will be executed in the CQ.
2118group("cronet_package_android") {
2119  # Target containing all of cronet's targets both test and non-test ones.
2120  # Marked as testonly as it contains test-only targets too.
2121  testonly = true
2122  deps = [
2123    ":cronet_combined_proguard_flags_golden_test",
2124    ":cronet_non_test_package",
2125    ":cronet_test_package",
2126    ":dependencies_checks",
2127    ":generate_javadoc",
2128    ":generate_licenses",
2129  ]
2130}
2131
2132# Everything added here will be executed in the CI.
2133group("cronet_package_ci") {
2134  deps = [ ":gn2bp_check" ]
2135}
2136
2137group("cronet_android_mainline") {
2138  # Target for android mainline which removed unnecessary deps from
2139  # "cronet_package_android"
2140
2141  # Enforce building with ICU alternatives, crbug.com/611621.
2142  # Enforce that arm_use_neon==false when building for ARMv7 by
2143  # not including any deps in cronet_package target otherwise.
2144  if (use_platform_icu_alternatives &&
2145      (!(target_cpu == "arm" && arm_version == 7) || !arm_use_neon)) {
2146    deps = [
2147      ":cronet_package_copy_native_lib",
2148      ":jar_cronet_api_source",
2149      ":repackage_api",
2150      ":repackage_impl_common",
2151      ":repackage_native",
2152      ":repackage_shared",
2153    ]
2154    if (current_cpu == "arm" && arm_version == 7) {
2155      deps += [ ":enforce_no_neon" ]
2156    }
2157  }
2158}
2159