# Copyright 2019 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/features.gni")
import("//build/config/locales.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/ui.gni")
import("//build/config/win/console_app.gni")
import("//build/config/win/manifest.gni")
import("//gpu/vulkan/features.gni")
import("//media/media_options.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//tools/grit/grit_rule.gni")
import("//tools/grit/repack.gni")
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
if (is_android) {
  import("//build/config/android/config.gni")
} else if (is_mac) {
  import("//build/config/mac/rules.gni")
  import("//build/mac/tweak_info_plist.gni")
  import("//content/public/app/mac_helpers.gni")
  import("//third_party/icu/config.gni")
  import("//ui/gl/features.gni")
  import("//v8/gni/v8.gni")
}

source_set("android_descriptors") {
  sources = [
    "browser/android_descriptors.h",
  ]
  public_deps = [
    "//content/public/common:content_descriptors",
  ]
}

if (is_android) {
  grit("generate_components_strings") {
    source = "../components/components_strings.grd"

    # components_strings contains strings from all components. WebLayer
    # will never display most of them, so we try to limit the included
    # strings.
    whitelist = rebase_path("grit_strings_whitelist.txt", root_build_dir)
    inputs = [
      "//weblayer/grit_strings_whitelist.txt",
    ]
    grit_flags = [
      "-w",
      whitelist,
    ]
    outputs = [
      "grit/components_strings.h",
      "java/res/values-am/components_strings.xml",
      "java/res/values-ar/components_strings.xml",
      "java/res/values-bg/components_strings.xml",
      "java/res/values-bn/components_strings.xml",
      "java/res/values-ca/components_strings.xml",
      "java/res/values-cs/components_strings.xml",
      "java/res/values-da/components_strings.xml",
      "java/res/values-de/components_strings.xml",
      "java/res/values-el/components_strings.xml",
      "java/res/values-en-rGB/components_strings.xml",
      "java/res/values-es/components_strings.xml",
      "java/res/values-es-rUS/components_strings.xml",
      "java/res/values-et/components_strings.xml",
      "java/res/values-fa/components_strings.xml",
      "java/res/values-fi/components_strings.xml",
      "java/res/values-fr/components_strings.xml",
      "java/res/values-gu/components_strings.xml",
      "java/res/values-hi/components_strings.xml",
      "java/res/values-hr/components_strings.xml",
      "java/res/values-hu/components_strings.xml",
      "java/res/values-in/components_strings.xml",
      "java/res/values-it/components_strings.xml",
      "java/res/values-iw/components_strings.xml",
      "java/res/values-ja/components_strings.xml",
      "java/res/values-kn/components_strings.xml",
      "java/res/values-ko/components_strings.xml",
      "java/res/values-lt/components_strings.xml",
      "java/res/values-lv/components_strings.xml",
      "java/res/values-ml/components_strings.xml",
      "java/res/values-mr/components_strings.xml",
      "java/res/values-ms/components_strings.xml",
      "java/res/values-nb/components_strings.xml",
      "java/res/values-nl/components_strings.xml",
      "java/res/values-pl/components_strings.xml",
      "java/res/values-pt-rBR/components_strings.xml",
      "java/res/values-pt-rPT/components_strings.xml",
      "java/res/values-ro/components_strings.xml",
      "java/res/values-ru/components_strings.xml",
      "java/res/values-sk/components_strings.xml",
      "java/res/values-sl/components_strings.xml",
      "java/res/values-sr/components_strings.xml",
      "java/res/values-sv/components_strings.xml",
      "java/res/values-sw/components_strings.xml",
      "java/res/values-ta/components_strings.xml",
      "java/res/values-te/components_strings.xml",
      "java/res/values-th/components_strings.xml",
      "java/res/values-tl/components_strings.xml",
      "java/res/values-tr/components_strings.xml",
      "java/res/values-uk/components_strings.xml",
      "java/res/values-vi/components_strings.xml",
      "java/res/values-zh-rCN/components_strings.xml",
      "java/res/values-zh-rTW/components_strings.xml",
      "java/res/values/components_strings.xml",
    ]
    foreach(_locale, locales_with_fake_bidi) {
      outputs += [ "components_strings_${_locale}.pak" ]
    }
  }

  repack("weblayer_locales") {
    sources = [
      "${root_gen_dir}/weblayer/components_strings_en-US.pak",
    ]
    deps = [
      ":generate_components_strings",
    ]
    output = "$root_out_dir/weblayer/locales/en-US.pak"
  }

  android_assets("locale_pak_assets") {
    disable_compression = true
    renaming_sources = [ "$root_out_dir/weblayer/locales/en-US.pak" ]
    renaming_destinations = [ "stored-locales/weblayer/en-US.pak" ]
    treat_as_locale_paks = true
    deps = [
      ":weblayer_locales",
    ]
  }
}

jumbo_static_library("weblayer_lib") {
  sources = [
    "app/content_main_delegate_impl.cc",
    "app/content_main_delegate_impl.h",
    "app/main.cc",
    "browser/browser_main_parts_impl.cc",
    "browser/browser_main_parts_impl.h",
    "browser/content_browser_client_impl.cc",
    "browser/content_browser_client_impl.h",
    "browser/file_select_helper.cc",
    "browser/file_select_helper.h",
    "browser/i18n_util.cc",
    "browser/i18n_util.h",
    "browser/isolated_world_ids.h",
    "browser/navigation_controller_impl.cc",
    "browser/navigation_controller_impl.h",
    "browser/navigation_impl.cc",
    "browser/navigation_impl.h",
    "browser/profile_impl.cc",
    "browser/profile_impl.h",
    "browser/ssl_error_controller_client.cc",
    "browser/ssl_error_controller_client.h",
    "browser/ssl_error_handler.cc",
    "browser/ssl_error_handler.h",
    "browser/ssl_host_state_delegate_impl.cc",
    "browser/ssl_host_state_delegate_impl.h",
    "browser/tab_impl.cc",
    "browser/tab_impl.h",
    "browser/weblayer_content_browser_overlay_manifest.cc",
    "browser/weblayer_content_browser_overlay_manifest.h",
    "browser/webui/web_ui_controller_factory.cc",
    "browser/webui/web_ui_controller_factory.h",
    "browser/webui/weblayer_internals_ui.cc",
    "browser/webui/weblayer_internals_ui.h",
    "common/content_client_impl.cc",
    "common/content_client_impl.h",
    "common/features.cc",
    "common/features.h",
    "common/weblayer_paths.cc",
    "common/weblayer_paths.h",
    "public/common/switches.cc",
    "public/common/switches.h",
    "public/download_delegate.h",
    "public/error_page_delegate.h",
    "public/fullscreen_delegate.h",
    "public/main.h",
    "public/navigation.h",
    "public/navigation_controller.h",
    "public/navigation_observer.h",
    "public/new_tab_delegate.h",
    "public/profile.h",
    "public/tab.h",
    "public/tab_observer.h",
    "renderer/content_renderer_client_impl.cc",
    "renderer/content_renderer_client_impl.h",
    "renderer/ssl_error_helper.cc",
    "renderer/ssl_error_helper.h",
    "utility/content_utility_client_impl.cc",
    "utility/content_utility_client_impl.h",
  ]

  if (is_android) {
    # TODO(timvolodine): move this to safe_browsing/
    sources += [
      "browser/android/metrics/uma_utils.cc",
      "browser/android/metrics/uma_utils.h",
      "browser/devtools_manager_delegate_android.cc",
      "browser/devtools_manager_delegate_android.h",
      "browser/devtools_server_android.cc",
      "browser/devtools_server_android.h",
      "browser/safe_browsing/safe_browsing_service.cc",
      "browser/safe_browsing/safe_browsing_service.h",
      "browser/safe_browsing/safe_browsing_ui_manager.cc",
      "browser/safe_browsing/safe_browsing_ui_manager.h",
      "browser/safe_browsing/url_checker_delegate_impl.cc",
      "browser/safe_browsing/url_checker_delegate_impl.h",
      "browser/weblayer_impl_android.cc",
      "renderer/url_loader_throttle_provider.cc",
      "renderer/url_loader_throttle_provider.h",
    ]
  }

  configs += [
    "//build/config:precompiled_headers",

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
  ]

  public_deps = [
    ":android_descriptors",
  ]
  deps = [
    "//base",
    "//base:base_static",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//components/crash/content/app",
    "//components/crash/content/browser",
    "//components/prefs",
    "//components/security_interstitials/content:security_interstitial_page",
    "//components/security_interstitials/content/renderer:security_interstitial_page_controller",
    "//components/security_interstitials/core",
    "//components/startup_metric_utils/browser:lib",
    "//components/user_prefs",
    "//components/version_info",
    "//components/web_cache/browser",
    "//content:resources",
    "//content/app/resources",
    "//content/public/app:both",
    "//content/public/browser",
    "//content/public/child",
    "//content/public/common",
    "//content/public/common:service_names",
    "//content/public/renderer",
    "//content/public/utility",
    "//net",
    "//net:net_resources",
    "//sandbox",
    "//services/network/public/mojom",
    "//services/service_manager/embedder:embedder_result_codes",
    "//skia",
    "//third_party/blink/public/common",
    "//third_party/blink/public/strings",
    "//third_party/icu",
    "//ui/base",
    "//ui/base/clipboard",
    "//ui/base/ime/init",
    "//ui/display",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gfx/ipc",
    "//ui/gfx/ipc/geometry",
    "//ui/gfx/ipc/skia",
    "//ui/gl",
    "//ui/platform_window",
    "//ui/shell_dialogs",
    "//ui/webui",
    "//url",
    "//v8",
    "//weblayer:resources",
    "//weblayer/browser/webui:mojo_bindings",
  ]

  if (is_android) {
    sources += [
      "common/crash_reporter/crash_keys.cc",
      "common/crash_reporter/crash_keys.h",
      "common/crash_reporter/crash_reporter_client.cc",
      "common/crash_reporter/crash_reporter_client.h",
    ]
    deps += [
      "//android_webview:generate_aw_resources",
      "//android_webview:generate_aw_strings",
      "//components/crash/android:crashpad_main",
      "//components/metrics",
      "//components/minidump_uploader",
      "//components/safe_browsing",
      "//components/safe_browsing/android:remote_database_manager",
      "//components/safe_browsing/android:safe_browsing_api_handler",
      "//components/safe_browsing/browser",
      "//components/safe_browsing/browser:network_context",
      "//components/safe_browsing/common",
      "//components/safe_browsing/db:database_manager",
      "//components/safe_browsing/renderer:throttles",
      "//components/version_info/android:channel_getter",
    ]
  }

  if (enable_vulkan) {
    deps += [ "//gpu/vulkan/init" ]
  }
  if (mojo_media_host == "browser") {
    deps += [
      "//media/mojo/mojom:constants",
      "//media/mojo/services",
    ]
  }

  if (is_win) {
    deps += [ "//content:sandbox_helper_win" ]
    if (win_console_app) {
      defines = [ "WIN_CONSOLE_APP" ]
    }
  }

  if (is_linux) {
    deps += [
      "//build/config/freetype",
      "//third_party/fontconfig",
    ]
  }

  if (is_android) {
    deps += [
      "//components/embedder_support/android:web_contents_delegate",
      "//components/version_info",
      "//ui/android",
      "//weblayer/browser/java:jni",
    ]
    sources += [
      "app/jni_onload.cc",
      "app/jni_onload.h",
      "browser/content_view_render_view.cc",
      "browser/content_view_render_view.h",
      "browser/download_callback_proxy.cc",
      "browser/download_callback_proxy.h",
      "browser/error_page_callback_proxy.cc",
      "browser/error_page_callback_proxy.h",
      "browser/fullscreen_callback_proxy.cc",
      "browser/fullscreen_callback_proxy.h",
      "browser/new_tab_callback_proxy.cc",
      "browser/new_tab_callback_proxy.h",
      "browser/tab_callback_proxy.cc",
      "browser/tab_callback_proxy.h",
      "browser/top_controls_container_view.cc",
      "browser/top_controls_container_view.h",
    ]
  }
  if (!is_android) {
    deps += [ "//ui/views/controls/webview" ]
  }

  if (toolkit_views) {
    deps += [ "//ui/views" ]
  }

  if (use_aura) {
    deps += [
      "//ui/aura",
      "//ui/events",
      "//ui/strings",
      "//ui/wm",
    ]
  }
}

grit("resources") {
  source = "weblayer_resources.grd"

  source_is_generated = true

  outputs = [
    "grit/weblayer_resources.h",
    "weblayer_resources.pak",
  ]
  grit_flags = [
    "-E",
    "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
  ]
  deps = [
    "//weblayer/browser/webui:mojo_bindings_js",
  ]
}

# TODO(jam): move weblayer_shell_resources_grit and copy_shell_resources here in
# a way that's shareable?

if (is_android) {
  shared_library("libweblayer") {
    sources = [
      "app/entry_point.cc",
    ]
    deps = [
      ":weblayer_lib",
      "//base",
      "//content/public/app:both",
    ]
    configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
    configs += [ "//build/config/android:hide_all_but_jni" ]
  }
}
