1# Copyright 2019 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.
4import("//components/captive_portal/core/features.gni")
5
6import("//build/config/features.gni")
7import("//build/config/locales.gni")
8import("//build/config/sanitizers/sanitizers.gni")
9import("//build/config/ui.gni")
10import("//build/config/win/console_app.gni")
11import("//build/config/win/manifest.gni")
12import("//components/spellcheck/spellcheck_build_features.gni")
13import("//gpu/vulkan/features.gni")
14import("//media/media_options.gni")
15import("//mojo/public/tools/bindings/mojom.gni")
16import("//tools/grit/grit_rule.gni")
17import("//tools/grit/repack.gni")
18import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
19if (is_android) {
20  import("//build/config/android/config.gni")
21  import("//build/config/android/rules.gni")
22} else if (is_mac) {
23  import("//build/config/mac/rules.gni")
24  import("//build/mac/tweak_info_plist.gni")
25  import("//content/public/app/mac_helpers.gni")
26  import("//third_party/icu/config.gni")
27  import("//ui/gl/features.gni")
28  import("//v8/gni/v8.gni")
29}
30
31source_set("android_descriptors") {
32  sources = [ "browser/android_descriptors.h" ]
33  public_deps = [ "//content/public/common:content_descriptors" ]
34}
35
36if (is_android) {
37  weblayer_components_strings_java_resources =
38      [ "java/res/values/components_strings.xml" ] +
39      process_file_template(
40          android_bundle_locales_as_resources,
41          [ "java/res/values-{{source_name_part}}/components_strings.xml" ])
42
43  grit("generate_components_strings") {
44    source = "../components/components_strings.grd"
45
46    # components_strings contains strings from all components. WebLayer
47    # will never display most of them, so we try to limit the included
48    # strings.
49    whitelist = rebase_path("grit_strings_whitelist.txt", root_build_dir)
50    inputs = [ "//weblayer/grit_strings_whitelist.txt" ]
51    grit_flags = [
52      "-w",
53      whitelist,
54    ]
55    outputs =
56        weblayer_components_strings_java_resources +
57        [ "grit/components_strings.h" ] +
58        process_file_template(locales_with_fake_bidi,
59                              [ "components_strings_{{source_name_part}}.pak" ])
60  }
61
62  repack_locales("weblayer_locales") {
63    input_locales = locales
64    output_locales = locales
65    source_patterns = [ "${root_gen_dir}/weblayer/components_strings_" ]
66    deps = [ ":generate_components_strings" ]
67    output_dir = "$root_out_dir/weblayer/locales"
68  }
69
70  android_assets("locale_pak_assets") {
71    disable_compression = true
72    renaming_sources = [ "$root_out_dir/weblayer/locales/en-US.pak" ]
73    renaming_destinations = [ "stored-locales/weblayer/en-US.pak" ]
74    treat_as_locale_paks = true
75    deps = [ ":weblayer_locales" ]
76  }
77
78  android_assets("bundle_locale_pak_assets") {
79    disable_compression = true
80    renaming_sources = []
81    renaming_destinations = []
82    foreach(_locale, locales) {
83      renaming_sources += [ "$root_out_dir/weblayer/locales/$_locale.pak" ]
84      renaming_destinations += [ "locales/$_locale.pak" ]
85    }
86    treat_as_locale_paks = true
87    deps = [ ":weblayer_locales" ]
88  }
89
90  java_strings_grd_prebuilt("components_java_strings") {
91    grit_output_dir = "$root_gen_dir/weblayer/java/res"
92    generated_files =
93        rebase_path(weblayer_components_strings_java_resources, "java/res", ".")
94    deps = [ ":generate_components_strings" ]
95  }
96}
97
98source_set("weblayer_lib_base") {
99  sources = [
100    "app/content_main_delegate_impl.cc",
101    "app/content_main_delegate_impl.h",
102    "app/main.cc",
103    "browser/autofill_client_impl.cc",
104    "browser/autofill_client_impl.h",
105    "browser/browser_context_impl.cc",
106    "browser/browser_context_impl.h",
107    "browser/browser_impl.cc",
108    "browser/browser_impl.h",
109    "browser/browser_main_parts_impl.cc",
110    "browser/browser_main_parts_impl.h",
111    "browser/browser_process.cc",
112    "browser/browser_process.h",
113    "browser/content_browser_client_impl.cc",
114    "browser/content_browser_client_impl.h",
115    "browser/controls_visibility_reason.h",
116    "browser/cookie_manager_impl.cc",
117    "browser/cookie_manager_impl.h",
118    "browser/cookie_settings_factory.cc",
119    "browser/cookie_settings_factory.h",
120    "browser/download_impl.cc",
121    "browser/download_impl.h",
122    "browser/download_manager_delegate_impl.cc",
123    "browser/download_manager_delegate_impl.h",
124    "browser/feature_list_creator.cc",
125    "browser/feature_list_creator.h",
126    "browser/file_select_helper.cc",
127    "browser/file_select_helper.h",
128    "browser/host_content_settings_map_factory.cc",
129    "browser/host_content_settings_map_factory.h",
130    "browser/i18n_util.cc",
131    "browser/i18n_util.h",
132    "browser/isolated_world_ids.h",
133    "browser/javascript_tab_modal_dialog_manager_delegate_android.cc",
134    "browser/javascript_tab_modal_dialog_manager_delegate_android.h",
135    "browser/navigation_controller_impl.cc",
136    "browser/navigation_controller_impl.h",
137    "browser/navigation_impl.cc",
138    "browser/navigation_impl.h",
139    "browser/permissions/geolocation_permission_context_delegate.cc",
140    "browser/permissions/geolocation_permission_context_delegate.h",
141    "browser/permissions/permission_decision_auto_blocker_factory.cc",
142    "browser/permissions/permission_decision_auto_blocker_factory.h",
143    "browser/permissions/permission_manager_factory.cc",
144    "browser/permissions/permission_manager_factory.h",
145    "browser/permissions/weblayer_permissions_client.cc",
146    "browser/permissions/weblayer_permissions_client.h",
147    "browser/persistence/browser_persistence_common.cc",
148    "browser/persistence/browser_persistence_common.h",
149    "browser/persistence/browser_persister.cc",
150    "browser/persistence/browser_persister.h",
151    "browser/persistence/minimal_browser_persister.cc",
152    "browser/persistence/minimal_browser_persister.h",
153    "browser/profile_impl.cc",
154    "browser/profile_impl.h",
155    "browser/ssl_error_controller_client.cc",
156    "browser/ssl_error_controller_client.h",
157    "browser/stateful_ssl_host_state_delegate_factory.cc",
158    "browser/stateful_ssl_host_state_delegate_factory.h",
159    "browser/system_network_context_manager.cc",
160    "browser/system_network_context_manager.h",
161    "browser/tab_impl.cc",
162    "browser/tab_impl.h",
163    "browser/url_bar/autocomplete_scheme_classifier_impl.cc",
164    "browser/url_bar/autocomplete_scheme_classifier_impl.h",
165    "browser/url_bar/url_bar_controller_impl.cc",
166    "browser/url_bar/url_bar_controller_impl.h",
167    "browser/web_contents_view_delegate_impl.cc",
168    "browser/web_contents_view_delegate_impl.h",
169    "browser/weblayer_browser_interface_binders.cc",
170    "browser/weblayer_browser_interface_binders.h",
171    "browser/weblayer_content_browser_overlay_manifest.cc",
172    "browser/weblayer_content_browser_overlay_manifest.h",
173    "browser/weblayer_field_trials.h",
174    "browser/weblayer_security_blocking_page_factory.cc",
175    "browser/weblayer_security_blocking_page_factory.h",
176    "browser/weblayer_variations_service_client.cc",
177    "browser/weblayer_variations_service_client.h",
178    "browser/webui/web_ui_controller_factory.cc",
179    "browser/webui/web_ui_controller_factory.h",
180    "browser/webui/weblayer_internals_ui.cc",
181    "browser/webui/weblayer_internals_ui.h",
182    "common/content_client_impl.cc",
183    "common/content_client_impl.h",
184    "common/features.cc",
185    "common/features.h",
186    "common/weblayer_paths.cc",
187    "common/weblayer_paths.h",
188    "public/browser.cc",
189    "public/browser.h",
190    "public/browser_observer.h",
191    "public/common/switches.cc",
192    "public/common/switches.h",
193    "public/cookie_manager.h",
194    "public/download.h",
195    "public/download_delegate.h",
196    "public/error_page_delegate.h",
197    "public/fullscreen_delegate.h",
198    "public/main.h",
199    "public/navigation.h",
200    "public/navigation_controller.h",
201    "public/navigation_observer.h",
202    "public/new_tab_delegate.h",
203    "public/profile.h",
204    "public/tab.h",
205    "public/tab_observer.h",
206    "public/url_bar_controller.h",
207    "renderer/content_renderer_client_impl.cc",
208    "renderer/content_renderer_client_impl.h",
209    "renderer/error_page_helper.cc",
210    "renderer/error_page_helper.h",
211    "renderer/weblayer_render_frame_observer.cc",
212    "renderer/weblayer_render_frame_observer.h",
213    "utility/content_utility_client_impl.cc",
214    "utility/content_utility_client_impl.h",
215  ]
216
217  configs += [
218    "//build/config:precompiled_headers",
219
220    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
221    "//build/config/compiler:no_size_t_to_int_warning",
222  ]
223
224  public_deps = [ ":android_descriptors" ]
225  deps = [
226    "//base",
227    "//base:base_static",
228    "//base/third_party/dynamic_annotations",
229    "//cc",
230    "//components/autofill/content/browser",
231    "//components/autofill/content/renderer",
232    "//components/autofill/core/browser",
233    "//components/base32",
234    "//components/captive_portal/core:buildflags",
235    "//components/cdm/renderer",
236    "//components/content_settings/core/browser",
237    "//components/crash/content/browser",
238    "//components/crash/core/app",
239    "//components/crash/core/common",
240    "//components/embedder_support",
241    "//components/error_page/common",
242    "//components/find_in_page",
243    "//components/keyed_service/content",
244    "//components/metrics",
245    "//components/network_time",
246    "//components/omnibox/browser",
247    "//components/permissions",
248    "//components/policy/core/browser",
249    "//components/pref_registry:pref_registry",
250    "//components/prefs",
251    "//components/safe_browsing/core:features",
252    "//components/security_interstitials/content:security_interstitial_page",
253    "//components/security_interstitials/content/renderer:security_interstitial_page_controller",
254    "//components/security_interstitials/core",
255    "//components/security_state/content",
256    "//components/sessions",
257    "//components/spellcheck:buildflags",
258    "//components/ssl_errors",
259    "//components/startup_metric_utils/browser",
260    "//components/user_prefs",
261    "//components/variations",
262    "//components/variations/net",
263    "//components/variations/service",
264    "//components/version_info",
265    "//components/web_cache/browser",
266    "//content:content_resources",
267    "//content:dev_ui_content_resources",
268    "//content/app/resources",
269    "//content/public/app:both",
270    "//content/public/browser",
271    "//content/public/child",
272    "//content/public/common",
273    "//content/public/common:service_names",
274    "//content/public/renderer",
275    "//content/public/utility",
276    "//gpu/config",
277    "//net",
278    "//net:net_resources",
279    "//sandbox",
280    "//services/network/public/mojom",
281    "//services/preferences/tracked",
282    "//services/service_manager/embedder:embedder_result_codes",
283    "//skia",
284    "//third_party/blink/public/common",
285    "//third_party/blink/public/strings",
286    "//third_party/icu",
287    "//ui/base",
288    "//ui/base/clipboard",
289    "//ui/base/ime/init",
290    "//ui/display",
291    "//ui/events:events_base",
292    "//ui/gfx",
293    "//ui/gfx/geometry",
294    "//ui/gfx/ipc",
295    "//ui/gfx/ipc/geometry",
296    "//ui/gfx/ipc/skia",
297    "//ui/gl",
298    "//ui/platform_window",
299    "//ui/shell_dialogs",
300    "//ui/webui",
301    "//url",
302    "//v8",
303    "//weblayer:resources",
304    "//weblayer/browser/webui:mojo_bindings",
305  ]
306
307  if (enable_captive_portal_detection) {
308    sources += [
309      "browser/captive_portal_service_factory.cc",
310      "browser/captive_portal_service_factory.h",
311    ]
312    deps += [ "//components/captive_portal/content" ]
313  }
314
315  if (use_browser_spellchecker) {
316    deps += [
317      "//components/spellcheck/browser",
318      "//components/spellcheck/renderer",
319    ]
320  }
321
322  if (is_android) {
323    sources += [
324      "app/jni_onload.cc",
325      "app/jni_onload.h",
326      "browser/android/exception_filter.cc",
327      "browser/android/exception_filter.h",
328      "browser/android/metrics/uma_utils.cc",
329      "browser/android/metrics/uma_utils.h",
330      "browser/android/metrics/weblayer_metrics_service_client.cc",
331      "browser/android/metrics/weblayer_metrics_service_client.h",
332      "browser/android/permission_request_utils.cc",
333      "browser/android/permission_request_utils.h",
334      "browser/android/resource_mapper.cc",
335      "browser/android/resource_mapper.h",
336      "browser/content_view_render_view.cc",
337      "browser/content_view_render_view.h",
338      "browser/devtools_manager_delegate_android.cc",
339      "browser/devtools_manager_delegate_android.h",
340      "browser/devtools_server_android.cc",
341      "browser/devtools_server_android.h",
342      "browser/download_callback_proxy.cc",
343      "browser/download_callback_proxy.h",
344      "browser/error_page_callback_proxy.cc",
345      "browser/error_page_callback_proxy.h",
346      "browser/fullscreen_callback_proxy.cc",
347      "browser/fullscreen_callback_proxy.h",
348      "browser/intercept_navigation_delegate_impl.cc",
349      "browser/new_tab_callback_proxy.cc",
350      "browser/new_tab_callback_proxy.h",
351      "browser/tab_callback_proxy.cc",
352      "browser/tab_callback_proxy.h",
353      "browser/top_controls_container_view.cc",
354      "browser/top_controls_container_view.h",
355      "browser/weblayer_impl_android.cc",
356      "common/crash_reporter/crash_keys.cc",
357      "common/crash_reporter/crash_keys.h",
358      "common/crash_reporter/crash_reporter_client.cc",
359      "common/crash_reporter/crash_reporter_client.h",
360      "renderer/url_loader_throttle_provider.cc",
361      "renderer/url_loader_throttle_provider.h",
362    ]
363    deps += [
364      "//android_webview:generate_aw_resources",
365      "//android_webview:generate_aw_strings",
366      "//components/android_system_error_page",
367      "//components/autofill/android:provider",
368      "//components/cdm/browser",
369      "//components/crash/android:crash_android",
370      "//components/crash/android:crashpad_main",
371      "//components/embedder_support/android:context_menu",
372      "//components/embedder_support/android:util",
373      "//components/embedder_support/android:web_contents_delegate",
374      "//components/embedder_support/android/metrics",
375      "//components/external_intents/android",
376      "//components/javascript_dialogs",
377      "//components/location/android:settings",
378      "//components/metrics",
379      "//components/minidump_uploader",
380      "//components/navigation_interception",
381      "//components/permissions/android:native",
382      "//components/resources:android_resources",
383      "//components/safe_browsing/content/common:interfaces",
384      "//components/safe_browsing/content/renderer:throttles",
385      "//components/safe_browsing/core/common",
386      "//components/version_info/android:channel_getter",
387      "//services/resource_coordinator/public/cpp/memory_instrumentation:browser",
388      "//ui/android",
389      "//weblayer/browser/java:jni",
390      "//weblayer/browser/safe_browsing:safe_browsing",
391    ]
392  } else {
393    deps += [ "//ui/views/controls/webview" ]
394  }
395
396  if (enable_vulkan) {
397    deps += [ "//gpu/vulkan/init" ]
398  }
399  if (mojo_media_host == "browser") {
400    deps += [ "//media/mojo/services" ]
401  }
402
403  if (is_win) {
404    deps += [ "//content:sandbox_helper_win" ]
405    if (win_console_app) {
406      defines = [ "WIN_CONSOLE_APP" ]
407    }
408  }
409
410  if (is_linux) {
411    deps += [
412      "//build/config/freetype",
413      "//third_party/fontconfig",
414    ]
415  }
416
417  if (toolkit_views) {
418    deps += [ "//ui/views" ]
419  }
420
421  if (use_aura) {
422    deps += [
423      "//ui/aura",
424      "//ui/events",
425      "//ui/strings",
426      "//ui/wm",
427    ]
428  }
429}
430
431if (is_android) {
432  # Lib used in standalone WebView which allows manual JNI registration.
433  static_library("weblayer_lib_webview") {
434    public_deps = [ ":weblayer_lib_base" ]
435    deps = [
436      "//base",
437      "//weblayer/browser/java:jni",
438      "//weblayer/browser/java:weblayer_jni_registration",
439    ]
440    sources = [
441      "$target_gen_dir/browser/java/weblayer_jni_registration.h",
442      "browser/web_view_compatibility_helper_impl.cc",
443      "browser/web_view_compatibility_helper_impl.h",
444    ]
445    defines = [ "WEBLAYER_MANUAL_JNI_REGISTRATION" ]
446
447    # Explicit dependency required for JNI registration to be able to
448    # find the native side functions.
449    if (is_component_build) {
450      deps += [
451        "//device/gamepad",
452        "//media/midi",
453        "//ui/events/devices",
454      ]
455    }
456  }
457
458  # Lib used in Monochrome which does not support manual JNI registration.
459  # Separate from the standalone WebView version to reduce APK size.
460  static_library("weblayer_lib") {
461    public_deps = [ ":weblayer_lib_base" ]
462    deps = [ "//weblayer/browser/java:jni" ]
463    sources = [
464      "browser/web_view_compatibility_helper_impl.cc",
465      "browser/web_view_compatibility_helper_impl.h",
466    ]
467  }
468} else {
469  source_set("weblayer_lib") {
470    public_deps = [ ":weblayer_lib_base" ]
471  }
472}
473
474grit("resources") {
475  source = "weblayer_resources.grd"
476
477  outputs = [
478    "grit/weblayer_resources.h",
479    "weblayer_resources.pak",
480  ]
481  grit_flags = [
482    "-E",
483    "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
484  ]
485  deps = [ "//weblayer/browser/webui:mojo_bindings_js" ]
486}
487
488# TODO(jam): move weblayer_shell_resources_grit and copy_shell_resources here in
489# a way that's shareable?
490
491if (is_android) {
492  shared_library("libweblayer") {
493    sources = [ "app/entry_point.cc" ]
494    deps = [
495      ":weblayer_lib_webview",
496      "//base",
497      "//content/public/app:both",
498    ]
499    configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
500    configs += [ "//build/config/android:hide_all_but_jni" ]
501  }
502}
503