# Copyright 2014 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/ui.gni")
import("//chrome/common/features.gni")
import("//ppapi/features/features.gni")
import("//printing/features/features.gni")
import("//services/catalog/public/tools/catalog.gni")
import("//services/service_manager/public/service_manifest.gni")
import("//tools/grit/grit_rule.gni")

# This target is for dependency tracking for the command ID header.
source_set("command_ids") {
  sources = [
    "chrome_command_ids.h",
  ]
}

# Shared by //chrome/browser and //chrome/app/mash. Not in //chrome/common
# because it isn't shared with processes like renderer, utility, etc.
source_set("shutdown_signal_handlers") {
  sources = [
    "shutdown_signal_handlers_posix.cc",
    "shutdown_signal_handlers_posix.h",
  ]
  deps = [
    "//base",
  ]
}

# On Windows, links chrome_dll.rc. On other platforms, does nothing so you can
# unconditionally depend on it.
source_set("chrome_dll_resources") {
  # This source is added unconditionally for include checking on non-Windows
  # platforms.
  sources = [
    "chrome_dll_resource.h",
  ]
  if (is_win) {
    sources += [ "chrome_dll.rc" ]
    if (enable_basic_printing) {
      # The resource compiler can only handle macro functions up to 31 chars
      # which the buildflag system produces for this. Make a define so we can
      # toggle off of the enable-basic-printing flag in the .rc file.
      defines = [ "ENABLE_BASIC_PRINTING_FOR_RC" ]
    }
    deps = [
      "//printing/features",
    ]
  }
}

if (is_android) {
  import("//build/config/android/rules.gni")
  android_generated_java_resources = [
    "java/res/values-am/generated_resources.xml",
    "java/res/values-ar/generated_resources.xml",
    "java/res/values-bg/generated_resources.xml",
    "java/res/values-ca/generated_resources.xml",
    "java/res/values-cs/generated_resources.xml",
    "java/res/values-da/generated_resources.xml",
    "java/res/values-de/generated_resources.xml",
    "java/res/values-el/generated_resources.xml",
    "java/res/values-en-rGB/generated_resources.xml",
    "java/res/values-es-rUS/generated_resources.xml",
    "java/res/values-es/generated_resources.xml",
    "java/res/values-fa/generated_resources.xml",
    "java/res/values-fi/generated_resources.xml",
    "java/res/values-fr/generated_resources.xml",
    "java/res/values-hi/generated_resources.xml",
    "java/res/values-hr/generated_resources.xml",
    "java/res/values-hu/generated_resources.xml",
    "java/res/values-in/generated_resources.xml",
    "java/res/values-it/generated_resources.xml",
    "java/res/values-iw/generated_resources.xml",
    "java/res/values-ja/generated_resources.xml",
    "java/res/values-ko/generated_resources.xml",
    "java/res/values-lt/generated_resources.xml",
    "java/res/values-lv/generated_resources.xml",
    "java/res/values-nb/generated_resources.xml",
    "java/res/values-nl/generated_resources.xml",
    "java/res/values-pl/generated_resources.xml",
    "java/res/values-pt-rBR/generated_resources.xml",
    "java/res/values-pt-rPT/generated_resources.xml",
    "java/res/values-ro/generated_resources.xml",
    "java/res/values-ru/generated_resources.xml",
    "java/res/values-sk/generated_resources.xml",
    "java/res/values-sl/generated_resources.xml",
    "java/res/values-sr/generated_resources.xml",
    "java/res/values-sv/generated_resources.xml",
    "java/res/values-sw/generated_resources.xml",
    "java/res/values-th/generated_resources.xml",
    "java/res/values-tl/generated_resources.xml",
    "java/res/values-tr/generated_resources.xml",
    "java/res/values-uk/generated_resources.xml",
    "java/res/values-vi/generated_resources.xml",
    "java/res/values-zh-rCN/generated_resources.xml",
    "java/res/values-zh-rTW/generated_resources.xml",
    "java/res/values/generated_resources.xml",
  ]
}

grit("generated_resources") {
  source = "generated_resources.grd"
  defines = chrome_grit_defines
  output_dir = "$root_gen_dir/chrome"
  outputs = [
    "grit/generated_resources.h",
    "generated_resources_am.pak",
    "generated_resources_ar.pak",
    "generated_resources_bg.pak",
    "generated_resources_bn.pak",
    "generated_resources_ca.pak",
    "generated_resources_cs.pak",
    "generated_resources_da.pak",
    "generated_resources_de.pak",
    "generated_resources_el.pak",
    "generated_resources_en-GB.pak",
    "generated_resources_en-US.pak",
    "generated_resources_es.pak",
    "generated_resources_es-419.pak",
    "generated_resources_et.pak",
    "generated_resources_fa.pak",
    "generated_resources_fake-bidi.pak",
    "generated_resources_fi.pak",
    "generated_resources_fil.pak",
    "generated_resources_fr.pak",
    "generated_resources_gu.pak",
    "generated_resources_he.pak",
    "generated_resources_hi.pak",
    "generated_resources_hr.pak",
    "generated_resources_hu.pak",
    "generated_resources_id.pak",
    "generated_resources_it.pak",
    "generated_resources_ja.pak",
    "generated_resources_kn.pak",
    "generated_resources_ko.pak",
    "generated_resources_lt.pak",
    "generated_resources_lv.pak",
    "generated_resources_ml.pak",
    "generated_resources_mr.pak",
    "generated_resources_ms.pak",
    "generated_resources_nl.pak",
    "generated_resources_nb.pak",
    "generated_resources_pl.pak",
    "generated_resources_pt-BR.pak",
    "generated_resources_pt-PT.pak",
    "generated_resources_ro.pak",
    "generated_resources_ru.pak",
    "generated_resources_sk.pak",
    "generated_resources_sl.pak",
    "generated_resources_sr.pak",
    "generated_resources_sv.pak",
    "generated_resources_sw.pak",
    "generated_resources_ta.pak",
    "generated_resources_te.pak",
    "generated_resources_th.pak",
    "generated_resources_tr.pak",
    "generated_resources_uk.pak",
    "generated_resources_vi.pak",
    "generated_resources_zh-CN.pak",
    "generated_resources_zh-TW.pak",
  ]

  if (is_android) {
    outputs += android_generated_java_resources
  }
}

if (is_android) {
  java_strings_grd_prebuilt("java_strings_grd") {
    grit_output_dir = "$root_gen_dir/chrome/java/res"
    generated_files =
        rebase_path(android_generated_java_resources, "java/res", ".")
    deps = [
      ":generated_resources",
    ]
  }
}

grit("google_chrome_strings") {
  source = "google_chrome_strings.grd"
  defines = chrome_grit_defines
  output_dir = "$root_gen_dir/chrome"
  outputs = [
    "grit/google_chrome_strings.h",
    "google_chrome_strings_am.pak",
    "google_chrome_strings_ar.pak",
    "google_chrome_strings_bg.pak",
    "google_chrome_strings_bn.pak",
    "google_chrome_strings_ca.pak",
    "google_chrome_strings_cs.pak",
    "google_chrome_strings_da.pak",
    "google_chrome_strings_de.pak",
    "google_chrome_strings_el.pak",
    "google_chrome_strings_en-GB.pak",
    "google_chrome_strings_en-US.pak",
    "google_chrome_strings_es.pak",
    "google_chrome_strings_es-419.pak",
    "google_chrome_strings_et.pak",
    "google_chrome_strings_fa.pak",
    "google_chrome_strings_fi.pak",
    "google_chrome_strings_fil.pak",
    "google_chrome_strings_fr.pak",
    "google_chrome_strings_gu.pak",
    "google_chrome_strings_he.pak",
    "google_chrome_strings_hi.pak",
    "google_chrome_strings_hr.pak",
    "google_chrome_strings_hu.pak",
    "google_chrome_strings_id.pak",
    "google_chrome_strings_it.pak",
    "google_chrome_strings_ja.pak",
    "google_chrome_strings_kn.pak",
    "google_chrome_strings_ko.pak",
    "google_chrome_strings_lt.pak",
    "google_chrome_strings_lv.pak",
    "google_chrome_strings_ml.pak",
    "google_chrome_strings_mr.pak",
    "google_chrome_strings_ms.pak",
    "google_chrome_strings_nl.pak",
    "google_chrome_strings_nb.pak",
    "google_chrome_strings_pl.pak",
    "google_chrome_strings_pt-BR.pak",
    "google_chrome_strings_pt-PT.pak",
    "google_chrome_strings_ro.pak",
    "google_chrome_strings_ru.pak",
    "google_chrome_strings_sk.pak",
    "google_chrome_strings_sl.pak",
    "google_chrome_strings_sr.pak",
    "google_chrome_strings_sv.pak",
    "google_chrome_strings_sw.pak",
    "google_chrome_strings_ta.pak",
    "google_chrome_strings_te.pak",
    "google_chrome_strings_th.pak",
    "google_chrome_strings_tr.pak",
    "google_chrome_strings_uk.pak",
    "google_chrome_strings_vi.pak",
    "google_chrome_strings_zh-CN.pak",
    "google_chrome_strings_zh-TW.pak",
    "google_chrome_strings_fake-bidi.pak",
  ]
}

grit("chromium_strings") {
  source = "chromium_strings.grd"
  defines = chrome_grit_defines
  output_dir = "$root_gen_dir/chrome"
  outputs = [
    "grit/chromium_strings.h",
    "chromium_strings_am.pak",
    "chromium_strings_ar.pak",
    "chromium_strings_bg.pak",
    "chromium_strings_bn.pak",
    "chromium_strings_ca.pak",
    "chromium_strings_cs.pak",
    "chromium_strings_da.pak",
    "chromium_strings_de.pak",
    "chromium_strings_el.pak",
    "chromium_strings_en-GB.pak",
    "chromium_strings_en-US.pak",
    "chromium_strings_es.pak",
    "chromium_strings_es-419.pak",
    "chromium_strings_et.pak",
    "chromium_strings_fa.pak",
    "chromium_strings_fake-bidi.pak",
    "chromium_strings_fi.pak",
    "chromium_strings_fil.pak",
    "chromium_strings_fr.pak",
    "chromium_strings_gu.pak",
    "chromium_strings_he.pak",
    "chromium_strings_hi.pak",
    "chromium_strings_hr.pak",
    "chromium_strings_hu.pak",
    "chromium_strings_id.pak",
    "chromium_strings_it.pak",
    "chromium_strings_ja.pak",
    "chromium_strings_kn.pak",
    "chromium_strings_ko.pak",
    "chromium_strings_lt.pak",
    "chromium_strings_lv.pak",
    "chromium_strings_ml.pak",
    "chromium_strings_mr.pak",
    "chromium_strings_ms.pak",
    "chromium_strings_nl.pak",
    "chromium_strings_nb.pak",
    "chromium_strings_pl.pak",
    "chromium_strings_pt-BR.pak",
    "chromium_strings_pt-PT.pak",
    "chromium_strings_ro.pak",
    "chromium_strings_ru.pak",
    "chromium_strings_sk.pak",
    "chromium_strings_sl.pak",
    "chromium_strings_sr.pak",
    "chromium_strings_sv.pak",
    "chromium_strings_sw.pak",
    "chromium_strings_ta.pak",
    "chromium_strings_te.pak",
    "chromium_strings_th.pak",
    "chromium_strings_tr.pak",
    "chromium_strings_uk.pak",
    "chromium_strings_vi.pak",
    "chromium_strings_zh-CN.pak",
    "chromium_strings_zh-TW.pak",
  ]
}

static_library("test_support") {
  testonly = true
  visibility = [ "//chrome/test:test_support" ]

  sources = [
    "chrome_main_delegate.cc",
    "chrome_main_delegate.h",
  ]

  deps = [
    "//base",
    "//chrome/browser",
    "//chrome/browser/policy:path_parser",
    "//chrome/child",
    "//chrome/common",
    "//chrome/gpu",
    "//chrome/renderer",
    "//chrome/utility",
    "//components/crash/content/app",
    "//components/crash/content/app:lib",
    "//components/startup_metric_utils/browser:lib",
    "//content/public/app:both",
    "//content/public/common",
    "//pdf",
    "//ppapi/features",
    "//printing/features",
    "//ui/base",
  ]

  if (is_mac) {
    sources += [ "chrome_main_mac.mm" ]

    deps += [ "//chrome:chrome_framework" ]
  }

  if (is_win) {
    deps += [
      "//chrome:chrome_initial",
      "//chrome/install_static:install_static_util",
      "//sandbox/win:sandbox",
    ]
  }

  if (is_chromeos) {
    deps += [
      "//chrome/browser/chromeos",
      "//components/metrics/leak_detector:leak_detector",
    ]
  }

  if (enable_plugins && enable_nacl) {
    deps += [
      "//components/nacl/browser",
      "//components/nacl/renderer/plugin:nacl_trusted_plugin",
    ]
  }
}

chrome_packaged_services = [
  ":chrome_manifest",
  "//chrome/browser:preferences_manifest",
  "//services/image_decoder:manifest",
]

service_manifest("chrome_manifest") {
  source = "chrome_manifest.json"
}

service_manifest("chrome_content_packaged_services_manifest_overlay_for_mash") {
  source =
      "//chrome/browser/chrome_content_packaged_services_manifest_overlay.json"
  packaged_services = chrome_packaged_services
}

service_manifest("chrome_content_packaged_services_manifest_overlay") {
  source =
      "//chrome/browser/chrome_content_packaged_services_manifest_overlay.json"
  packaged_services = chrome_packaged_services
  if (is_chromeos) {
    packaged_services += [ "//ash/mus:manifest" ]
  }
}

service_manifest("chrome_content_browser_manifest_overlay") {
  source = "//chrome/browser/chrome_content_browser_manifest_overlay.json"
  packaged_services = [ "//services/preferences:manifest" ]
}

service_manifest("chrome_content_gpu_manifest_overlay") {
  source = "//chrome/browser/chrome_content_gpu_manifest_overlay.json"
}

service_manifest("chrome_content_plugin_manifest_overlay") {
  source = "//chrome/browser/chrome_content_plugin_manifest_overlay.json"
}

service_manifest("chrome_content_renderer_manifest_overlay") {
  source = "//chrome/browser/chrome_content_renderer_manifest_overlay.json"
}

service_manifest("chrome_content_utility_manifest_overlay") {
  source = "//chrome/browser/chrome_content_utility_manifest_overlay.json"
}

group("chrome_content_manifest_overlays") {
  deps = [
    ":chrome_content_browser_manifest_overlay",
    ":chrome_content_gpu_manifest_overlay",
    ":chrome_content_packaged_services_manifest_overlay",
    ":chrome_content_plugin_manifest_overlay",
    ":chrome_content_renderer_manifest_overlay",
    ":chrome_content_utility_manifest_overlay",
  ]

  if (enable_package_mash_services) {
    deps += [ ":chrome_content_packaged_services_manifest_overlay_for_mash" ]
  }
}

if (use_aura) {
  # NOTE: These rules generate compiled versions of the content service
  # manifests with Chrome's overlays applied. These are only used at run-time,
  # and only when running Chrome inside the Mash environment. In production
  # Chrome, the content manifests and Chrome's overlays are baked into browser
  # resources and merged at runtime.

  service_manifest("chrome_content_packaged_services_manifest") {
    source_manifest = "//content/public/app:packaged_services_manifest"
    overlays = [ ":chrome_content_packaged_services_manifest_overlay" ]
  }

  service_manifest("chrome_content_packaged_services_manifest_for_mash") {
    source_manifest = "//content/public/app:packaged_services_manifest"
    overlays = [ ":chrome_content_packaged_services_manifest_overlay_for_mash" ]
  }

  service_manifest("chrome_content_browser_manifest") {
    source_manifest = "//content/public/app:browser_manifest"
    overlays = [ ":chrome_content_browser_manifest_overlay" ]
  }

  service_manifest("chrome_content_gpu_manifest") {
    source_manifest = "//content/public/app:gpu_manifest"
    overlays = [ ":chrome_content_gpu_manifest_overlay" ]
  }

  service_manifest("chrome_content_plugin_manifest") {
    source_manifest = "//content/public/app:plugin_manifest"
    overlays = [ ":chrome_content_plugin_manifest_overlay" ]
  }

  service_manifest("chrome_content_renderer_manifest") {
    source_manifest = "//content/public/app:renderer_manifest"
    overlays = [ ":chrome_content_renderer_manifest_overlay" ]
  }

  service_manifest("chrome_content_utility_manifest") {
    source_manifest = "//content/public/app:utility_manifest"
    overlays = [ ":chrome_content_utility_manifest_overlay" ]
  }

  group("service_manifests") {
    deps = [
      ":chrome_content_browser_manifest",
      ":chrome_content_gpu_manifest",
      ":chrome_content_plugin_manifest",
      ":chrome_content_renderer_manifest",
      ":chrome_content_utility_manifest",
    ]

    if (enable_package_mash_services) {
      deps += [ ":chrome_content_packaged_services_manifest_for_mash" ]
    }
  }

  chrome_embedded_services = [
    ":chrome_content_browser_manifest",
    ":chrome_content_gpu_manifest",
    ":chrome_content_plugin_manifest",
    ":chrome_content_renderer_manifest",
    ":chrome_content_utility_manifest",
  ]

  if (enable_package_mash_services) {
    catalog("catalog_for_mash") {
      embedded_services =
          chrome_embedded_services +
          [ ":chrome_content_packaged_services_manifest_for_mash" ]
    }
  }

  catalog("catalog") {
    embedded_services = chrome_embedded_services +
                        [ ":chrome_content_packaged_services_manifest" ]
  }
}
