fixup! Upload upstream chromium 85.0.4183.93
[platform/framework/web/chromium-efl.git] / android_webview / BUILD.gn
1 # Copyright 2015 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
5 import("//android_webview/system_webview_apk_tmpl.gni")
6 import("//android_webview/system_webview_bundle.gni")
7 import("//android_webview/variables.gni")
8 import("//android_webview/webview_repack_locales.gni")
9 import("//build/android/resource_sizes.gni")
10 import("//build/config/android/config.gni")
11 import("//build/config/android/rules.gni")
12 import("//build/config/locales.gni")
13 import("//chrome/android/chrome_common_shared_library.gni")
14 import("//chrome/android/chrome_public_apk_tmpl.gni")
15 import("//chrome/android/trichrome.gni")
16 import("//components/spellcheck/spellcheck_build_features.gni")
17 import("//tools/grit/repack.gni")
18 import("//tools/resources/generate_resource_whitelist.gni")
19 import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
20 import("//weblayer/variables.gni")
21
22 if (enable_resource_whitelist_generation) {
23   system_webview_pak_whitelist =
24       "$target_gen_dir/system_webview_pak_whitelist.txt"
25 }
26
27 # Having //clank present causes different flags because of how play services
28 # is wired up.
29 # The channel is required because manifest entries vary based on channel.
30 _verify_android_configuration =
31     !is_java_debug && !enable_chrome_android_internal &&
32     android_channel == "stable"
33
34 template("standalone_system_webview_apk_tmpl") {
35   system_webview_apk_or_module_tmpl(target_name) {
36     forward_variables_from(invoker, "*")
37     android_manifest = system_webview_android_manifest
38     android_manifest_dep =
39         "//android_webview/nonembedded:system_webview_manifest"
40     deps = upstream_only_webview_deps
41     min_sdk_version = 21
42   }
43 }
44
45 # Standalone WebView APK.
46 standalone_system_webview_apk_tmpl("system_webview_apk") {
47   apk_name = "SystemWebView"
48 }
49
50 # This version of the WebView APK doesn't include WebLayer java and resources.
51 # It's used to define the whitelist of resources to be pulled out of language
52 # splits. See |shared_resources_allowlist_target|.
53 standalone_system_webview_apk_tmpl("system_webview_no_weblayer_apk") {
54   exclude_weblayer_java = true
55   apk_name = "SystemWebViewNoWebLayer"
56 }
57
58 if (enable_webview_bundles) {
59   standalone_system_webview_apk_tmpl("system_webview_base_bundle_module") {
60     target_type = "android_app_bundle_module"
61     is_base_module = true
62
63     if (_verify_android_configuration) {
64       expected_android_manifest =
65           "expectations/system_webview_bundle.AndroidManifest.expected"
66     }
67   }
68
69   system_webview_bundle("system_webview_bundle") {
70     base_module_target = ":system_webview_base_bundle_module"
71     bundle_name = "SystemWebView"
72     min_sdk_version = 21
73     compress_shared_libraries = true
74   }
75
76   if (is_official_build) {
77     # Used for binary size monitoring.
78     create_app_bundle_minimal_apks("system_webview_minimal_apks") {
79       deps = [ ":system_webview_bundle" ]
80       bundle_path = "$root_build_dir/apks/SystemWebView.aab"
81     }
82
83     android_resource_sizes_test("resource_sizes_system_webview_bundle") {
84       file_path = "$root_build_dir/apks/SystemWebView.minimal.apks"
85       data_deps = [ ":system_webview_minimal_apks" ]
86     }
87   }
88 }
89
90 if (android_64bit_target_cpu) {
91   # These targets builds a 32-bit only Webview on a 64-bit config, analogous
92   # to what's built on a 32-bit config. This lets all Webviews build on a
93   # single configuration.
94   standalone_system_webview_apk_tmpl("system_webview_32_apk") {
95     apk_name = "SystemWebView32"
96     include_64_bit_webview = false
97   }
98
99   if (enable_webview_bundles) {
100     standalone_system_webview_apk_tmpl("system_webview_32_base_bundle_module") {
101       target_type = "android_app_bundle_module"
102       include_64_bit_webview = false
103       is_base_module = true
104     }
105
106     system_webview_bundle("system_webview_32_bundle") {
107       base_module_target = ":system_webview_32_base_bundle_module"
108       bundle_name = "SystemWebView32"
109       include_64_bit_webview = false
110       min_sdk_version = 21
111       compress_shared_libraries = true
112     }
113   }
114 }
115
116 # Trichrome WebView APK.
117 template("trichrome_webview_tmpl") {
118   system_webview_apk_or_module_tmpl(target_name) {
119     forward_variables_from(invoker, "*")
120     android_manifest = trichrome_webview_android_manifest
121     android_manifest_dep =
122         "//android_webview/nonembedded:trichrome_webview_manifest"
123     min_sdk_version = 29
124
125     deps = upstream_only_webview_deps
126     use_trichrome_library = true
127
128     if (android_64bit_target_cpu) {
129       is_64_bit_browser = false
130       include_64_bit_webview = true
131     }
132     static_library_provider = "//chrome/android:trichrome_library_apk"
133   }
134 }
135
136 trichrome_webview_tmpl("trichrome_webview_apk") {
137   apk_name = "TrichromeWebView"
138   uncompress_dex = true
139   if (!is_java_debug) {
140     static_library_synchronized_proguard = trichrome_synchronized_proguard
141   }
142 }
143
144 if (enable_webview_bundles) {
145   trichrome_webview_tmpl("trichrome_webview_base_bundle_module") {
146     target_type = "android_app_bundle_module"
147     is_base_module = true
148
149     if (_verify_android_configuration) {
150       expected_android_manifest =
151           "expectations/trichrome_webview_bundle.AndroidManifest.expected"
152     }
153   }
154
155   system_webview_bundle("trichrome_webview_bundle") {
156     base_module_target = ":trichrome_webview_base_bundle_module"
157     bundle_name = "TrichromeWebView"
158     uncompress_dex = true
159     min_sdk_version = 29
160     static_library_provider = "//chrome/android:trichrome_library_apk"
161   }
162
163   if (is_official_build) {
164     # Used for binary size monitoring.
165     create_app_bundle_minimal_apks("trichrome_webview_minimal_apks") {
166       deps = [ ":trichrome_webview_bundle" ]
167       bundle_path = "$root_build_dir/apks/TrichromeWebView.aab"
168     }
169
170     android_resource_sizes_test("resource_sizes_trichrome_webview_bundle") {
171       file_path = "$root_build_dir/apks/TrichromeWebView.minimal.apks"
172       data_deps = [ ":trichrome_webview_minimal_apks" ]
173     }
174   }
175 }
176
177 # Trichrome WebView APK for a 64-bit Chrome.
178 if (android_64bit_target_cpu) {
179   template("trichrome_webview_64_32_tmpl") {
180     system_webview_apk_or_module_tmpl(target_name) {
181       forward_variables_from(invoker, "*")
182       android_manifest = trichrome_webview_64_32_android_manifest
183       android_manifest_dep =
184           "//android_webview/nonembedded:trichrome_webview_64_32_manifest"
185       use_trichrome_library = true
186       is_64_bit_browser = true
187       include_32_bit_webview = true
188
189       min_sdk_version = 29
190
191       deps = upstream_only_webview_deps
192       static_library_provider = "//chrome/android:trichrome_library_64_32_apk"
193     }
194   }
195
196   trichrome_webview_64_32_tmpl("trichrome_webview_64_32_apk") {
197     apk_name = "TrichromeWebView6432"
198     uncompress_dex = true
199   }
200
201   if (enable_webview_bundles) {
202     trichrome_webview_64_32_tmpl("trichrome_webview_64_32_base_bundle_module") {
203       target_type = "android_app_bundle_module"
204       is_base_module = true
205     }
206
207     system_webview_bundle("trichrome_webview_64_32_bundle") {
208       base_module_target = ":trichrome_webview_64_32_base_bundle_module"
209       bundle_name = "TrichromeWebView6432"
210       uncompress_dex = true
211       min_sdk_version = 29
212       static_library_provider = "//chrome/android:trichrome_library_64_32_apk"
213     }
214   }
215
216   template("trichrome_webview_32_tmpl") {
217     system_webview_apk_or_module_tmpl(target_name) {
218       forward_variables_from(invoker, "*")
219       android_manifest = trichrome_webview_32_android_manifest
220       android_manifest_dep =
221           "//android_webview/nonembedded:trichrome_webview_32_manifest"
222       use_trichrome_library = true
223       is_64_bit_browser = false
224       include_64_bit_webview = false
225
226       min_sdk_version = 29
227
228       deps = upstream_only_webview_deps
229       static_library_provider = "//chrome/android:trichrome_library_32_apk"
230     }
231   }
232
233   trichrome_webview_32_tmpl("trichrome_webview_32_apk") {
234     apk_name = "TrichromeWebView32"
235     uncompress_dex = true
236   }
237
238   if (enable_webview_bundles) {
239     trichrome_webview_32_tmpl("trichrome_webview_32_base_bundle_module") {
240       target_type = "android_app_bundle_module"
241       is_base_module = true
242     }
243
244     system_webview_bundle("trichrome_webview_32_bundle") {
245       base_module_target = ":trichrome_webview_32_base_bundle_module"
246       bundle_name = "TrichromeWebView32"
247       uncompress_dex = true
248       min_sdk_version = 29
249       static_library_provider = "//chrome/android:trichrome_library_32_apk"
250     }
251   }
252 }
253
254 # The shared library used by standalone WebView.
255 template("libwebviewchromium_tmpl") {
256   shared_library(target_name) {
257     forward_variables_from(invoker, "*")
258     deps = [
259       "//android_webview/lib",
260       "//android_webview/lib:webview_entry_point",
261       "//android_webview/nonembedded",
262       "//third_party/blink/public:blink",
263     ]
264     configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
265     configs += [ "//build/config/android:hide_all_but_jni" ]
266   }
267 }
268
269 libwebviewchromium_tmpl("libwebviewchromium") {
270 }
271
272 # This template is used to define WebView's alternate-ABI libraries, which are
273 # used by Monochrome and Trichrome on 64-bit devices which support both 32 and
274 # 64-bit ABIs. WebView's browser process must use the same ABI as the embedding
275 # app (renderer processes used the ABI defined in the WebView APK manifest),
276 # which requires us to have two copies of the library available, one for each
277 # ABI.  The primary library is the one shared with Chrome, and the alternate is
278 # a WebView-specific library defined here for whichever ABI isn't used by
279 # Chrome.
280 #
281 # Note that this library only includes code needed for the embedded usecase,
282 # as all non-embedded code uses the primary library.
283 template("webview_alternate_library") {
284   chrome_common_shared_library(target_name) {
285     forward_variables_from(invoker, "*")
286     deps = [
287       "//android_webview/lib",
288       "//android_webview/lib:webview_entry_point",
289     ]
290     is_webview = true
291   }
292 }
293
294 if (defined(android_secondary_abi_toolchain)) {
295   # Note here that on a given system, the webview-only library needs the same
296   # library name as the browser library, since the system webview factory will
297   # differentiate only by ABI.
298   if (current_toolchain == android_secondary_abi_toolchain) {
299     # This target is the 32-bit WebView library that pairs with a 64-bit
300     # browser. It is suffixed with _64 because its name must match the 64-bit
301     # browser library.
302     webview_alternate_library("monochrome_64") {
303     }
304   } else {
305     # Inverse of above, for the original 32-bit case.
306     webview_alternate_library("monochrome") {
307     }
308   }
309 } else {
310   # 32-bit WebView library used in 32-bit only builds of 64/32 targets.
311   webview_alternate_library("monochrome_64") {
312   }
313 }
314
315 java_group("android_webview_no_weblayer_java") {
316   deps = [
317     ":browser_java",
318
319     # This includes AwResource, which may be called via JNI. We're including it
320     # here because there's currently no good way to enforce that it gets included
321     # when it's depended on via JNI.
322     ":common_java",
323     "//android_webview/glue:glue_java",
324     "//android_webview/nonembedded:nonembedded_java",
325     "//android_webview/support_library:support_lib_glue_java",
326   ]
327 }
328
329 # Contains all Java dependencies used by WebView.
330 java_group("android_webview_java") {
331   deps = [ ":android_webview_no_weblayer_java" ]
332
333   if (webview_includes_weblayer) {
334     deps += [ "//weblayer/browser/java" ]
335   }
336 }
337
338 # An empty group included in //BUILD.gn to make this and other WebView build
339 # files reachable by GN.
340 group("empty_group") {
341 }
342
343 generate_jni("common_jni_headers") {
344   sources = [
345     "java/src/org/chromium/android_webview/common/AwResource.java",
346     "java/src/org/chromium/android_webview/common/crash/AwCrashReporterClient.java",
347   ]
348 }
349
350 generate_jni("browser_jni_headers") {
351   sources = [
352     "java/src/org/chromium/android_webview/AndroidProtocolHandler.java",
353     "java/src/org/chromium/android_webview/AwAutofillClient.java",
354     "java/src/org/chromium/android_webview/AwBrowserContext.java",
355     "java/src/org/chromium/android_webview/AwBrowserProcess.java",
356     "java/src/org/chromium/android_webview/AwContents.java",
357     "java/src/org/chromium/android_webview/AwContentsBackgroundThreadClient.java",
358     "java/src/org/chromium/android_webview/AwContentsClientBridge.java",
359     "java/src/org/chromium/android_webview/AwContentsIoThreadClient.java",
360     "java/src/org/chromium/android_webview/AwContentsLifecycleNotifier.java",
361     "java/src/org/chromium/android_webview/AwContentsStatics.java",
362     "java/src/org/chromium/android_webview/AwCookieManager.java",
363     "java/src/org/chromium/android_webview/AwDebug.java",
364     "java/src/org/chromium/android_webview/AwDevToolsServer.java",
365     "java/src/org/chromium/android_webview/AwFeatureList.java",
366     "java/src/org/chromium/android_webview/AwFormDatabase.java",
367     "java/src/org/chromium/android_webview/AwHttpAuthHandler.java",
368     "java/src/org/chromium/android_webview/AwPacProcessor.java",
369     "java/src/org/chromium/android_webview/AwPdfExporter.java",
370     "java/src/org/chromium/android_webview/AwProxyController.java",
371     "java/src/org/chromium/android_webview/AwQuotaManagerBridge.java",
372     "java/src/org/chromium/android_webview/AwRenderProcess.java",
373     "java/src/org/chromium/android_webview/AwSettings.java",
374     "java/src/org/chromium/android_webview/AwTracingController.java",
375     "java/src/org/chromium/android_webview/AwWebContentsDelegate.java",
376     "java/src/org/chromium/android_webview/AwWebResourceInterceptResponse.java",
377     "java/src/org/chromium/android_webview/AwWebResourceResponse.java",
378     "java/src/org/chromium/android_webview/InputStreamUtil.java",
379     "java/src/org/chromium/android_webview/JsReplyProxy.java",
380     "java/src/org/chromium/android_webview/PopupTouchHandleDrawable.java",
381     "java/src/org/chromium/android_webview/VariationsSeedLoader.java",
382     "java/src/org/chromium/android_webview/WebMessageListenerHolder.java",
383     "java/src/org/chromium/android_webview/WebMessageListenerInfo.java",
384     "java/src/org/chromium/android_webview/gfx/AwDrawFnImpl.java",
385     "java/src/org/chromium/android_webview/gfx/AwGLFunctor.java",
386     "java/src/org/chromium/android_webview/gfx/AwPicture.java",
387     "java/src/org/chromium/android_webview/gfx/JavaBrowserViewRendererHelper.java",
388     "java/src/org/chromium/android_webview/gfx/RootBeginFrameSourceWebView.java",
389     "java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java",
390     "java/src/org/chromium/android_webview/permission/AwPermissionRequest.java",
391     "java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConfigHelper.java",
392   ]
393
394   deps = [ ":cancellation_signal_android_jar_jni_headers" ]
395 }
396
397 generate_jar_jni("cancellation_signal_android_jar_jni_headers") {
398   classes = [ "android/os/CancellationSignal.class" ]
399 }
400
401 android_library("browser_java") {
402   sources = [
403     "java/src/org/chromium/android_webview/AndroidProtocolHandler.java",
404     "java/src/org/chromium/android_webview/AwActionModeCallback.java",
405     "java/src/org/chromium/android_webview/AwAutofillClient.java",
406     "java/src/org/chromium/android_webview/AwBrowserContext.java",
407     "java/src/org/chromium/android_webview/AwBrowserProcess.java",
408     "java/src/org/chromium/android_webview/AwConsoleMessage.java",
409     "java/src/org/chromium/android_webview/AwContents.java",
410     "java/src/org/chromium/android_webview/AwContentsBackgroundThreadClient.java",
411     "java/src/org/chromium/android_webview/AwContentsClient.java",
412     "java/src/org/chromium/android_webview/AwContentsClientBridge.java",
413     "java/src/org/chromium/android_webview/AwContentsClientCallbackHelper.java",
414     "java/src/org/chromium/android_webview/AwContentsIoThreadClient.java",
415     "java/src/org/chromium/android_webview/AwContentsLifecycleNotifier.java",
416     "java/src/org/chromium/android_webview/AwContentsStatics.java",
417     "java/src/org/chromium/android_webview/AwCookieManager.java",
418     "java/src/org/chromium/android_webview/AwDataDirLock.java",
419     "java/src/org/chromium/android_webview/AwDebug.java",
420     "java/src/org/chromium/android_webview/AwDevToolsServer.java",
421     "java/src/org/chromium/android_webview/AwFeatureList.java",
422     "java/src/org/chromium/android_webview/AwFormDatabase.java",
423     "java/src/org/chromium/android_webview/AwGeolocationPermissions.java",
424     "java/src/org/chromium/android_webview/AwHistogramRecorder.java",
425     "java/src/org/chromium/android_webview/AwHttpAuthHandler.java",
426     "java/src/org/chromium/android_webview/AwLayoutSizer.java",
427     "java/src/org/chromium/android_webview/AwNetworkChangeNotifierRegistrationPolicy.java",
428     "java/src/org/chromium/android_webview/AwPacProcessor.java",
429     "java/src/org/chromium/android_webview/AwPdfExporter.java",
430     "java/src/org/chromium/android_webview/AwPrintDocumentAdapter.java",
431     "java/src/org/chromium/android_webview/AwProxyController.java",
432     "java/src/org/chromium/android_webview/AwQuotaManagerBridge.java",
433     "java/src/org/chromium/android_webview/AwRenderProcess.java",
434     "java/src/org/chromium/android_webview/AwRenderProcessGoneDetail.java",
435     "java/src/org/chromium/android_webview/AwScrollOffsetManager.java",
436     "java/src/org/chromium/android_webview/AwServiceWorkerClient.java",
437     "java/src/org/chromium/android_webview/AwServiceWorkerController.java",
438     "java/src/org/chromium/android_webview/AwServiceWorkerSettings.java",
439     "java/src/org/chromium/android_webview/AwSettings.java",
440     "java/src/org/chromium/android_webview/AwSupportLibIsomorphic.java",
441     "java/src/org/chromium/android_webview/AwThreadUtils.java",
442     "java/src/org/chromium/android_webview/AwTracingController.java",
443     "java/src/org/chromium/android_webview/AwViewAndroidDelegate.java",
444     "java/src/org/chromium/android_webview/AwViewMethods.java",
445     "java/src/org/chromium/android_webview/AwWebContentsDelegate.java",
446     "java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java",
447     "java/src/org/chromium/android_webview/AwWebContentsObserver.java",
448     "java/src/org/chromium/android_webview/AwWebResourceInterceptResponse.java",
449     "java/src/org/chromium/android_webview/AwWebResourceResponse.java",
450     "java/src/org/chromium/android_webview/AwZoomControls.java",
451     "java/src/org/chromium/android_webview/CleanupReference.java",
452     "java/src/org/chromium/android_webview/ClientCertLookupTable.java",
453     "java/src/org/chromium/android_webview/DefaultVideoPosterRequestHandler.java",
454     "java/src/org/chromium/android_webview/ErrorCodeConversionHelper.java",
455     "java/src/org/chromium/android_webview/FindAddress.java",
456     "java/src/org/chromium/android_webview/FullScreenView.java",
457     "java/src/org/chromium/android_webview/HttpAuthDatabase.java",
458     "java/src/org/chromium/android_webview/InputStreamUtil.java",
459     "java/src/org/chromium/android_webview/JsPromptResultReceiver.java",
460     "java/src/org/chromium/android_webview/JsReplyProxy.java",
461     "java/src/org/chromium/android_webview/JsResultHandler.java",
462     "java/src/org/chromium/android_webview/JsResultReceiver.java",
463     "java/src/org/chromium/android_webview/NullAwViewMethods.java",
464     "java/src/org/chromium/android_webview/OverScrollGlow.java",
465     "java/src/org/chromium/android_webview/PopupTouchHandleDrawable.java",
466     "java/src/org/chromium/android_webview/ScriptReference.java",
467     "java/src/org/chromium/android_webview/ScrollAccessibilityHelper.java",
468     "java/src/org/chromium/android_webview/SslUtil.java",
469     "java/src/org/chromium/android_webview/VariationsSeedLoader.java",
470     "java/src/org/chromium/android_webview/ViewPositionObserver.java",
471     "java/src/org/chromium/android_webview/WebMessageListener.java",
472     "java/src/org/chromium/android_webview/WebMessageListenerHolder.java",
473     "java/src/org/chromium/android_webview/WebMessageListenerInfo.java",
474     "java/src/org/chromium/android_webview/WebViewChromiumRunQueue.java",
475     "java/src/org/chromium/android_webview/gfx/AwDrawFnImpl.java",
476     "java/src/org/chromium/android_webview/gfx/AwFunctor.java",
477     "java/src/org/chromium/android_webview/gfx/AwGLFunctor.java",
478     "java/src/org/chromium/android_webview/gfx/AwPicture.java",
479     "java/src/org/chromium/android_webview/gfx/JavaBrowserViewRendererHelper.java",
480     "java/src/org/chromium/android_webview/gfx/RootBeginFrameSourceWebView.java",
481     "java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java",
482     "java/src/org/chromium/android_webview/metrics/AwNonembeddedUmaReplayer.java",
483     "java/src/org/chromium/android_webview/permission/AwGeolocationCallback.java",
484     "java/src/org/chromium/android_webview/permission/AwPermissionRequest.java",
485     "java/src/org/chromium/android_webview/policy/AwPolicyProvider.java",
486     "java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConfigHelper.java",
487     "java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConversionHelper.java",
488     "java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingResponse.java",
489   ]
490   deps = [
491     ":common_aidl_java",
492     ":common_crash_java",
493     ":common_java",
494     ":common_platform_services_java",
495     ":common_variations_java",
496     ":resources",
497     "//android_webview/nonembedded:system_webview_manifest",
498     "//android_webview/proto:metrics_bridge_records_proto_java",
499     "//base:base_java",
500     "//base:jni_java",
501     "//components/autofill/android:autofill_java",
502     "//components/autofill/android/provider:java",
503     "//components/background_task_scheduler:background_task_scheduler_task_ids_java",
504     "//components/content_capture/android:java",
505     "//components/crash/android:handler_java",
506     "//components/crash/android:java",
507     "//components/embedder_support/android:util_java",
508     "//components/embedder_support/android:web_contents_delegate_java",
509     "//components/embedder_support/android/metrics:java",
510     "//components/minidump_uploader:minidump_uploader_java",
511     "//components/navigation_interception/android:navigation_interception_java",
512     "//components/policy/android:policy_java",
513     "//components/safe_browsing/android:safe_browsing_java",
514     "//components/variations:load_seed_result_enum_java",
515     "//components/variations/android:variations_java",
516     "//components/version_info/android:version_constants_java",
517     "//components/viz/common:common_java",
518     "//components/viz/service:service_java",
519     "//content/public/android:content_java",
520     "//device/gamepad:java",
521     "//mojo/public/java:system_java",
522     "//mojo/public/java/system:system_impl_java",
523     "//net/android:net_java",
524     "//services/network/public/mojom:mojom_java",
525     "//third_party/android_deps:androidx_annotation_annotation_java",
526     "//third_party/android_deps:com_google_protobuf_protobuf_javalite_java",
527     "//third_party/blink/public:blink_headers_java",
528     "//ui/android:ui_java",
529     "//url:gurl_java",
530   ]
531   annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
532
533   if (enable_spellcheck) {
534     deps += [ "//components/spellcheck/browser/android:java" ]
535   }
536
537   srcjar_deps = [
538     "//android_webview/browser:browser_enums",
539     "//components/safe_browsing/core/db:sb_threat_values",
540   ]
541 }
542
543 android_library("common_variations_java") {
544   sources = [
545     "java/src/org/chromium/android_webview/common/variations/VariationsServiceMetricsHelper.java",
546     "java/src/org/chromium/android_webview/common/variations/VariationsUtils.java",
547   ]
548   deps = [
549     "//android_webview/proto:aw_variations_seed_proto_java",
550     "//base:base_java",
551     "//components/variations/android:variations_java",
552     "//third_party/android_deps:com_google_protobuf_protobuf_javalite_java",
553   ]
554 }
555
556 # Separate target to allow for a dependency on GmsCore without pulling in all of
557 # android_webview_java. It compiles the abstract class; implementations are
558 # compiled separately.
559 android_library("common_platform_services_java") {
560   sources = [
561     "java/src/org/chromium/android_webview/common/PlatformServiceBridge.java",
562     "java/src/org/chromium/android_webview/common/PlatformServiceBridgeImpl.java",
563   ]
564
565   deps = [
566     "//base:base_java",
567     "//components/embedder_support/android/metrics:java",
568     "//third_party/android_deps:androidx_annotation_annotation_java",
569   ]
570
571   # The appropriate .class file will be loaded via a dependency to a library
572   # like :platform_service_bridge_upstream_implementation_java below. We only include the
573   # .java file because other files in the target depend on it.
574   jar_excluded_patterns = [ "*/PlatformServiceBridgeImpl.class" ]
575 }
576
577 # This target compiles the implementation of PlatformServiceBridge for AOSP targets.
578 android_library("platform_service_bridge_upstream_implementation_java") {
579   sources = [ "java/src/org/chromium/android_webview/common/PlatformServiceBridgeImpl.java" ]
580   deps = [ ":common_platform_services_java" ]
581 }
582
583 android_library("common_crash_java") {
584   sources = [
585     "java/src/org/chromium/android_webview/common/crash/AwCrashReporterClient.java",
586     "java/src/org/chromium/android_webview/common/crash/CrashInfo.java",
587     "java/src/org/chromium/android_webview/common/crash/CrashUploadUtil.java",
588     "java/src/org/chromium/android_webview/common/crash/SystemWideCrashDirectories.java",
589   ]
590
591   deps = [
592     ":common_java",
593     "//base:base_java",
594     "//base:jni_java",
595     "//components/background_task_scheduler:background_task_scheduler_task_ids_java",
596     "//components/minidump_uploader:minidump_uploader_java",
597   ]
598   annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
599 }
600
601 android_library("common_java") {
602   sources = [
603     "java/src/org/chromium/android_webview/common/AwFeatures.java",
604     "java/src/org/chromium/android_webview/common/AwResource.java",
605     "java/src/org/chromium/android_webview/common/AwSwitches.java",
606     "java/src/org/chromium/android_webview/common/CommandLineUtil.java",
607     "java/src/org/chromium/android_webview/common/DeveloperModeUtils.java",
608     "java/src/org/chromium/android_webview/common/Flag.java",
609     "java/src/org/chromium/android_webview/common/FlagOverrideHelper.java",
610     "java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java",
611     "java/src/org/chromium/android_webview/common/services/ServiceNames.java",
612   ]
613   deps = [
614     "//base:base_java",
615     "//components/metrics:metrics_java",
616     "//third_party/android_deps:androidx_annotation_annotation_java",
617   ]
618 }
619
620 android_aidl("common_aidl") {
621   import_include = [ "java/src" ]
622   sources = [
623     "java/src/org/chromium/android_webview/common/services/ICrashReceiverService.aidl",
624     "java/src/org/chromium/android_webview/common/services/IDeveloperUiService.aidl",
625     "java/src/org/chromium/android_webview/common/services/IMetricsBridgeService.aidl",
626     "java/src/org/chromium/android_webview/common/services/IVariationsSeedServer.aidl",
627     "java/src/org/chromium/android_webview/common/services/IVariationsSeedServerCallback.aidl",
628   ]
629 }
630
631 android_library("common_aidl_java") {
632   srcjar_deps = [ ":common_aidl" ]
633 }
634
635 # Generate ProductConfig.java so that android_webview_product_config_java's
636 # compile step works.
637 generate_product_config_srcjar("webview_product_config") {
638   java_package = webview_product_config_java_package
639 }
640
641 # ProductConfig.java is excluded from the generated .jar
642 # (via. jar_excluded_patterns) and the final version is inserted at the APK
643 # level - with the list of pak locales populated by looking at the assets that
644 # are listed in the final APK's .build_config.
645 android_library("android_webview_product_config_java") {
646   sources = [ "java/src/org/chromium/android_webview/AwLocaleConfig.java" ]
647   srcjar_deps = [ ":webview_product_config" ]
648   jar_excluded_patterns = [ "*/ProductConfig.class" ]
649 }
650
651 if (enable_resource_whitelist_generation) {
652   libwebviewchromium_tmpl("system_webview_pak_whitelist_inputs") {
653     ldflags = [ "--collect-inputs-only" ]
654   }
655   generate_resource_whitelist("system_webview_pak_whitelist") {
656     deps = [ ":system_webview_pak_whitelist_inputs" ]
657     inputs = [ "$root_out_dir/lib.unstripped/libsystem_webview_pak_whitelist_inputs$shlib_extension" ]
658     output = system_webview_pak_whitelist
659   }
660 }
661
662 webview_repack_locales("repack_locales") {
663   input_locales = locales
664   output_locales = locales
665
666   if (enable_resource_whitelist_generation) {
667     repack_whitelist = system_webview_pak_whitelist
668     deps = [ ":system_webview_pak_whitelist" ]
669   }
670 }
671
672 android_assets("locale_pak_assets") {
673   disable_compression = true
674   renaming_sources = []
675   renaming_destinations = []
676   foreach(_locale, locales) {
677     renaming_sources += [ "$root_out_dir/android_webview/locales/$_locale.pak" ]
678     renaming_destinations += [ "stored-locales/$_locale.pak" ]
679   }
680   treat_as_locale_paks = true
681   deps = [ ":repack_locales" ]
682 }
683
684 repack("repack_pack") {
685   sources = [
686     "$root_gen_dir/content/content_resources.pak",
687     "$root_gen_dir/net/net_resources.pak",
688     "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak",
689     "$target_gen_dir/aw_resources.pak",
690     "$target_gen_dir/components_resources.pak",
691     "$target_gen_dir/mojo_bindings_resources.pak",
692     "$target_gen_dir/webui_resources.pak",
693   ]
694   deps = [
695     ":generate_aw_resources",
696     ":generate_components_resources",
697     ":generate_mojo_resources",
698     ":generate_webui_resources",
699     "//content:content_resources",
700     "//net:net_resources",
701     "//third_party/blink/public:resources",
702   ]
703   output = "$target_gen_dir/resources.pak"
704
705   if (enable_resource_whitelist_generation) {
706     repack_whitelist = system_webview_pak_whitelist
707     deps += [ ":system_webview_pak_whitelist" ]
708   }
709
710   if (webview_includes_weblayer) {
711     sources += [ "$root_gen_dir/weblayer/weblayer_resources.pak" ]
712     deps += [ "//weblayer:resources" ]
713   }
714 }
715
716 repack("repack_100_percent") {
717   sources = [
718     "$root_gen_dir/content/app/resources/content_resources_100_percent.pak",
719     "$root_gen_dir/third_party/blink/public/resources/blink_scaled_resources_100_percent.pak",
720     "$root_gen_dir/ui/resources/ui_resources_100_percent.pak",
721   ]
722   deps = [
723     "//content/app/resources",
724     "//third_party/blink/public:scaled_resources_100_percent",
725     "//ui/resources",
726   ]
727   output = "$target_gen_dir/chrome_100_percent.pak"
728
729   if (enable_resource_whitelist_generation) {
730     repack_whitelist = system_webview_pak_whitelist
731     deps += [ ":system_webview_pak_whitelist" ]
732   }
733   if (webview_includes_weblayer) {
734     sources += [ "$target_gen_dir/components_resources_100_percent.pak" ]
735     deps += [ ":generate_components_scaled_resources" ]
736   }
737 }
738
739 android_assets("pak_file_assets") {
740   sources = [
741     "$target_gen_dir/chrome_100_percent.pak",
742     "$target_gen_dir/resources.pak",
743   ]
744   deps = [
745     ":repack_100_percent",
746     ":repack_pack",
747   ]
748   disable_compression = true
749 }
750
751 if (android_64bit_target_cpu) {
752   android_assets("v8_snapshot_secondary_abi_assets") {
753     _secondary_abi_out_dir =
754         get_label_info("//v8($android_secondary_abi_toolchain)", "root_out_dir")
755     assert(android_64bit_target_cpu,
756            "32-bit targets shouldn't have secondary abi")
757     arch_suffix = "32"
758     if (use_v8_context_snapshot) {
759       renaming_sources = [ "$_secondary_abi_out_dir/v8_context_snapshot.bin" ]
760       renaming_destinations = [ "v8_context_snapshot_$arch_suffix.bin" ]
761     } else {
762       renaming_sources = [ "$_secondary_abi_out_dir/snapshot_blob.bin" ]
763       renaming_destinations = [ "snapshot_blob_$arch_suffix.bin" ]
764     }
765     disable_compression = true
766     deps = [
767       "//tools/v8_context_snapshot($android_secondary_abi_toolchain)",
768       "//v8($android_secondary_abi_toolchain)",
769     ]
770   }
771 }
772
773 android_assets("webview_primary_abi_assets") {
774   if (use_v8_context_snapshot) {
775     deps = [ "//tools/v8_context_snapshot:v8_context_snapshot_assets" ]
776   } else {
777     deps = [ "//v8:v8_external_startup_data_assets" ]
778   }
779 }
780
781 android_assets("monochrome_webview_primary_abi_assets") {
782   deps = [ "//third_party/icu:icu_assets" ]
783   if (use_v8_context_snapshot) {
784     deps += [ "//tools/v8_context_snapshot:v8_context_snapshot_assets" ]
785   } else {
786     deps += [ "//v8:v8_external_startup_data_assets" ]
787   }
788 }
789
790 if (android_64bit_target_cpu) {
791   android_assets("webview_secondary_abi_assets") {
792     deps = [ ":v8_snapshot_secondary_abi_assets" ]
793   }
794
795   android_assets("monochrome_webview_secondary_abi_assets") {
796     deps = [ "//third_party/icu:icu_assets" ]
797     deps += [ ":v8_snapshot_secondary_abi_assets" ]
798   }
799 }
800
801 android_assets("weblayer_webview_assets") {
802   deps = [
803     ":webview_primary_abi_assets",
804     "//third_party/icu:icu_assets",
805   ]
806   if (android_64bit_target_cpu) {
807     deps += [ ":webview_secondary_abi_assets" ]
808   }
809 }
810
811 android_assets("stub_assets") {
812   renaming_sources = [ "$root_gen_dir/components/resources/about_credits.html" ]
813   renaming_destinations = [ "webview_licenses.notice" ]
814   deps = [ "//components/resources:about_credits" ]
815 }
816
817 android_resources("resources") {
818   sources = [
819     "java/res/drawable-hdpi/ic_play_circle_outline_black_48dp.png",
820     "java/res/drawable-mdpi/ic_play_circle_outline_black_48dp.png",
821     "java/res/drawable-xhdpi/ic_play_circle_outline_black_48dp.png",
822     "java/res/drawable-xxhdpi/ic_play_circle_outline_black_48dp.png",
823     "java/res/drawable-xxxhdpi/ic_play_circle_outline_black_48dp.png",
824   ]
825   custom_package = "org.chromium.android_webview"
826   deps = [ ":strings_grd" ]
827 }
828
829 grit("generate_aw_resources") {
830   source = "ui/aw_resources.grd"
831   outputs = [
832     "grit/aw_resources.h",
833     "aw_resources.pak",
834   ]
835 }
836
837 grit("generate_aw_strings") {
838   source = "ui/aw_strings.grd"
839   outputs = [ "grit/aw_strings.h" ]
840   foreach(_locale, locales) {
841     outputs += [ "aw_strings_${_locale}.pak" ]
842   }
843 }
844
845 grit("generate_webui_resources") {
846   source = "../ui/webui/resources/webui_resources.grd"
847
848   # webui/resources has way too many resources. The allowlist is trim this down
849   # to a reasonable size
850   _allowlist = "ui/grit_resources_allowlist.txt"
851   inputs = [ _allowlist ]
852   grit_flags = [
853     "-w",
854     rebase_path(_allowlist, root_build_dir),
855     "-E",
856     "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
857   ]
858   outputs = [
859     "grit/webui_resources.h",
860     "grit/webui_resources_map.cc",
861     "grit/webui_resources_map.h",
862     "webui_resources.pak",
863   ]
864   deps = [
865     "//ui/webui/resources/js:modulize",
866     "//ui/webui/resources/js/cr:modulize",
867     "//ui/webui/resources/js/cr/ui:modulize",
868   ]
869 }
870
871 grit("generate_mojo_resources") {
872   source = "../mojo/public/js/mojo_bindings_resources.grd"
873
874   # See :generate_webui_resources for an explanation of the allowlist
875   _allowlist = "ui/grit_resources_allowlist.txt"
876   inputs = [ _allowlist ]
877   grit_flags = [
878     "-w",
879     rebase_path(_allowlist, root_build_dir),
880     "-E",
881     "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
882   ]
883   outputs = [
884     "grit/mojo_bindings_resources.h",
885     "grit/mojo_bindings_resources_map.cc",
886     "grit/mojo_bindings_resources_map.h",
887     "mojo_bindings_resources.pak",
888   ]
889   deps = [
890     "//mojo/public/js:bindings_lite",
891     "//mojo/public/mojom/base:base_js",
892   ]
893 }
894
895 action("concatenate_resources_allowlists") {
896   script = "//mojo/public/tools/bindings/concatenate-files.py"
897   inputs = [ "//android_webview/ui/grit_resources_allowlist.txt" ]
898
899   if (webview_includes_weblayer) {
900     inputs += [ "//weblayer/grit_resources_allowlist.txt" ]
901   }
902
903   outputs = [ "$target_gen_dir/grit_resources_allowlist.txt" ]
904   args =
905       rebase_path(inputs, root_build_dir) + rebase_path(outputs, root_build_dir)
906 }
907
908 grit("generate_components_resources") {
909   # Note that dev_ui_components_resources.grd is Chrome-only, so excluded.
910   source = "../components/resources/components_resources.grd"
911
912   use_brotli = true
913
914   # See :generate_webui_resources for an explanation of the allowlist
915   _allowlist = rebase_path("$target_gen_dir/grit_resources_allowlist.txt",
916                            root_build_dir)
917   _about_credits_file = get_label_info("//components/resources",
918                                        "target_gen_dir") + "/about_credits.html"
919
920   grit_flags = [
921     "-w",
922     _allowlist,
923     "-E",
924     "about_credits_file=" + rebase_path(_about_credits_file, root_build_dir),
925     "-E",
926     "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
927   ]
928   outputs = [
929     "grit/components_resources.h",
930     "components_resources.pak",
931   ]
932
933   deps = [
934     ":concatenate_resources_allowlists",
935     "//components/resources:about_credits",
936     "//components/resources/ssl/ssl_error_assistant:make_ssl_error_assistant_protobuf",
937   ]
938 }
939
940 grit("generate_components_scaled_resources") {
941   source = "../components/resources/components_scaled_resources.grd"
942
943   # See :generate_webui_resources for an explanation of the allowlist
944   _allowlist = rebase_path("$target_gen_dir/grit_resources_allowlist.txt",
945                            root_build_dir)
946
947   grit_flags = [
948     "-w",
949     _allowlist,
950   ]
951   outputs = [
952     "grit/components_scaled_resources.h",
953     "grit/components_scaled_resources_map.cc",
954     "grit/components_scaled_resources_map.h",
955     "components_resources_100_percent.pak",
956     "components_resources_200_percent.pak",
957     "components_resources_300_percent.pak",
958   ]
959
960   deps = [ ":concatenate_resources_allowlists" ]
961 }
962
963 grit("generate_components_strings") {
964   source = "../components/components_strings.grd"
965
966   # components_strings contains strings from all components. WebView
967   # will never display most of them, so we try to limit the included
968   # strings. This allowlist trims about 50% more than the compile-based
969   # allowlist generated by :system_webview_pak_whitelist.
970   _allowlist = rebase_path("ui/grit_strings_allowlist.txt", root_build_dir)
971   inputs = [ "//android_webview/ui/grit_strings_allowlist.txt" ]
972   grit_flags = [
973     "-w",
974     _allowlist,
975   ]
976   outputs =
977       [
978         "grit/components_strings.h",
979         "java/res/values/components_strings.xml",
980       ] +
981       process_file_template(
982           android_bundle_locales_as_resources,
983           [ "java/res/values-{{source_name_part}}/components_strings.xml" ]) +
984       process_file_template(locales_with_fake_bidi,
985                             [ "components_strings_{{source_name_part}}.pak" ])
986 }
987
988 java_strings_grd("strings_grd") {
989   grd_file = "java/strings/android_webview_strings.grd"
990   outputs = [ "values/android_webview_strings.xml" ] +
991             process_file_template(
992                 android_bundle_locales_as_resources,
993                 [ "values-{{source_name_part}}/android_webview_strings.xml" ])
994 }