# Copyright 2015 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("//chromecast/chromecast.gni")
import("//media/media_options.gni")
import("//services/service_manager/public/service_manifest.gni")
import("//testing/test.gni")
import("//tools/grit/grit_rule.gni")

if (is_android) {
  import("//build/config/android/rules.gni")
}

cast_source_set("browser") {
  sources = [
    "application_media_capabilities.cc",
    "application_media_capabilities.h",
    "application_session_id_manager.cc",
    "application_session_id_manager.h",
    "bluetooth/cast_bluetooth_chooser.cc",
    "bluetooth/cast_bluetooth_chooser.h",
    "cast_browser_context.cc",
    "cast_browser_context.h",
    "cast_browser_main_parts.cc",
    "cast_browser_main_parts.h",
    "cast_browser_process.cc",
    "cast_browser_process.h",
    "cast_content_browser_client.cc",
    "cast_content_browser_client.h",
    "cast_content_gesture_handler.cc",
    "cast_content_gesture_handler.h",
    "cast_download_manager_delegate.cc",
    "cast_download_manager_delegate.h",
    "cast_feature_list_creator.cc",
    "cast_feature_list_creator.h",
    "cast_http_user_agent_settings.cc",
    "cast_http_user_agent_settings.h",
    "cast_media_blocker.cc",
    "cast_media_blocker.h",
    "cast_navigation_ui_data.cc",
    "cast_navigation_ui_data.h",
    "cast_net_log.cc",
    "cast_net_log.h",
    "cast_network_delegate.cc",
    "cast_network_delegate.h",
    "cast_network_request_interceptor.cc",
    "cast_network_request_interceptor.h",
    "cast_permission_manager.cc",
    "cast_permission_manager.h",
    "cast_quota_permission_context.cc",
    "cast_quota_permission_context.h",
    "cast_resource_dispatcher_host_delegate.cc",
    "cast_resource_dispatcher_host_delegate.h",
    "cast_session_id_map.cc",
    "cast_session_id_map.h",
    "cast_web_contents_impl.cc",
    "cast_web_contents_impl.h",
    "cast_web_contents_manager.cc",
    "cast_web_contents_manager.h",
    "cast_web_view_default.cc",
    "cast_web_view_default.h",
    "cast_web_view_factory.cc",
    "cast_web_view_factory.h",
    "default_navigation_throttle.cc",
    "default_navigation_throttle.h",
    "devtools/cast_devtools_manager_delegate.cc",
    "devtools/cast_devtools_manager_delegate.h",
    "devtools/remote_debugging_server.cc",
    "devtools/remote_debugging_server.h",
    "lru_renderer_cache.cc",
    "lru_renderer_cache.h",
    "media/media_caps_impl.cc",
    "media/media_caps_impl.h",
    "media/supported_codec_finder.cc",
    "media/supported_codec_finder.h",
    "metrics/cast_metrics_prefs.cc",
    "metrics/cast_metrics_prefs.h",
    "metrics/cast_metrics_service_client.cc",
    "metrics/cast_metrics_service_client.h",
    "metrics/cast_stability_metrics_provider.cc",
    "metrics/cast_stability_metrics_provider.h",
    "network_context_manager.cc",
    "network_context_manager.h",
    "pref_service_helper.cc",
    "pref_service_helper.h",
    "renderer_prelauncher.cc",
    "renderer_prelauncher.h",
    "service/cast_service_simple.cc",
    "service/cast_service_simple.h",
    "tts/tts_controller.h",
    "tts/tts_controller_impl.cc",
    "tts/tts_controller_impl.h",
    "tts/tts_platform.cc",
    "tts/tts_platform.h",
    "tts/tts_platform_stub.cc",
    "tts/tts_platform_stub.h",
    "url_request_context_factory.cc",
    "url_request_context_factory.h",
  ]

  if (chromecast_branding == "public") {
    sources += [
      "cast_browser_main_parts_simple.cc",
      "cast_content_browser_client_simple.cc",
      "cast_network_request_interceptor_simple.cc",
      "pref_service_helper_simple.cc",
    ]
  }

  public_deps = [
    ":public",
  ]

  deps = [
    "//base",
    "//base:i18n",
    "//cc",
    "//chromecast:chromecast_buildflags",
    "//chromecast/app:cast_crash_client",
    "//chromecast/app:chromecast_settings",
    "//chromecast/app:resources",
    "//chromecast/base",
    "//chromecast/base:cast_sys_info",
    "//chromecast/base:cast_version",
    "//chromecast/browser:resources",
    "//chromecast/browser/bluetooth/public/mojom",
    "//chromecast/common",
    "//chromecast/common/media",
    "//chromecast/common/mojom",
    "//chromecast/graphics",
    "//chromecast/media",
    "//chromecast/media:libcast_media",
    "//chromecast/media/base:video_plane_controller",
    "//chromecast/media/service",
    "//chromecast/net",
    "//chromecast/service",
    "//components/download/public/common:public",
    "//components/metrics",
    "//components/metrics:gpu",
    "//components/metrics:net",

    # TODO(gfhuang): Eliminate this dependency if ScreenInfoMetricsProvider
    # isn't needed. crbug.com/541577
    "//components/metrics:ui",
    "//components/network_hints/browser",
    "//components/network_session_configurator/common",
    "//components/prefs",
    "//components/proxy_config",
    "//components/viz/service",
    "//content",
    "//content/public/browser",
    "//content/public/common",
    "//content/public/common:service_names",
    "//content/public/utility",
    "//device/bluetooth",
    "//gpu",
    "//ipc",
    "//media",
    "//net",
    "//services/network:network_service",
    "//ui/base",
    "//ui/compositor",
    "//ui/display",
    "//ui/events",
    "//ui/events/devices",
    "//ui/gl",
  ]

  if (is_android) {
    sources += [
      "android/cast_content_window_android.cc",
      "android/cast_content_window_android.h",
      "android/cast_metrics_helper_android.cc",
    ]
    deps += [
      ":jni_headers",
      "//components/cdm/browser",
      "//components/embedder_support/android:view",
    ]
  } else {
    sources += [
      "cast_display_configurator.cc",
      "cast_display_configurator.h",
      "cast_touch_device_manager.cc",
      "cast_touch_device_manager.h",
    ]

    deps += [
      "//mojo/public/cpp/bindings",
      "//ui/aura",
    ]
  }

  if (is_linux) {
    sources += [
      "cast_memory_pressure_monitor.cc",
      "cast_memory_pressure_monitor.h",
      "memory_pressure_controller_impl.cc",
      "memory_pressure_controller_impl.h",
      "metrics/external_metrics.cc",
      "metrics/external_metrics.h",
    ]

    deps += [
      "//components/metrics:serialization",
      "//third_party/fontconfig",
    ]
  }

  if (use_aura) {
    sources += [
      "cast_content_window_aura.cc",
      "cast_content_window_aura.h",
    ]
  }

  if (!is_fuchsia) {
    # TODO(crbug.com/753619): Enable crash reporting on Fuchsia.
    deps += [
      "//components/crash/content/app",
      "//components/crash/content/browser",
    ]
  }

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  }

  if (enable_mojo_media) {
    deps += [
      "//media/mojo/interfaces:constants",
      "//media/mojo/services",
    ]
  }

  if (enable_chromecast_extensions) {
    sources += [
      "cast_extension_host.cc",
      "cast_extension_host.h",
      "cast_extension_message_filter.cc",
      "cast_extension_message_filter.h",
      "cast_web_view_extension.cc",
      "cast_web_view_extension.h",
      "extension_request_protocol_handler.cc",
      "extension_request_protocol_handler.h",
      "extensions/api/accessibility_private/accessibility_extension_api.cc",
      "extensions/api/accessibility_private/accessibility_extension_api.h",
      "extensions/api/automation_internal/automation_event_router.cc",
      "extensions/api/automation_internal/automation_event_router.h",
      "extensions/api/automation_internal/automation_internal_api.cc",
      "extensions/api/automation_internal/automation_internal_api.h",
      "extensions/api/bookmarks/bookmarks_api.cc",
      "extensions/api/bookmarks/bookmarks_api.h",
      "extensions/api/braille_display_private/braille_display_private_api.cc",
      "extensions/api/braille_display_private/braille_display_private_api.h",
      "extensions/api/history/history_api.cc",
      "extensions/api/history/history_api.h",
      "extensions/api/i18n/i18n_api.cc",
      "extensions/api/i18n/i18n_api.h",
      "extensions/api/identity/identity_api.cc",
      "extensions/api/identity/identity_api.h",
      "extensions/api/notifications/notifications_api.cc",
      "extensions/api/notifications/notifications_api.h",
      "extensions/api/settings_private/settings_private_api.cc",
      "extensions/api/settings_private/settings_private_api.h",
      "extensions/api/tabs/tabs_api.cc",
      "extensions/api/tabs/tabs_api.h",
      "extensions/api/tabs/tabs_constants.cc",
      "extensions/api/tabs/tabs_constants.h",
      "extensions/api/tts/tts_extension_api.cc",
      "extensions/api/tts/tts_extension_api.h",
      "extensions/api/tts/tts_extension_api_constants.cc",
      "extensions/api/tts/tts_extension_api_constants.h",
      "extensions/cast_display_info_provider.cc",
      "extensions/cast_display_info_provider.h",
      "extensions/cast_extension_host_delegate.cc",
      "extensions/cast_extension_host_delegate.h",
      "extensions/cast_extension_system.cc",
      "extensions/cast_extension_system.h",
      "extensions/cast_extension_system_factory.cc",
      "extensions/cast_extension_system_factory.h",
      "extensions/cast_extension_web_contents_observer.cc",
      "extensions/cast_extension_web_contents_observer.h",
      "extensions/cast_extensions_api_client.cc",
      "extensions/cast_extensions_api_client.h",
      "extensions/cast_extensions_browser_api_provider.cc",
      "extensions/cast_extensions_browser_api_provider.h",
      "extensions/cast_extensions_browser_client.cc",
      "extensions/cast_extensions_browser_client.h",
      "extensions/cast_prefs.cc",
      "extensions/cast_prefs.h",
      "extensions/stub_storage_monitor.cc",
    ]
    if (use_aura) {
      sources += [
        "accessibility/accessibility_manager.cc",
        "accessibility/accessibility_manager.h",
        "accessibility/accessibility_sound_player.h",
        "accessibility/accessibility_sound_proxy.cc",
        "accessibility/accessibility_sound_proxy.h",
        "accessibility/touch_exploration_controller.cc",
        "accessibility/touch_exploration_controller.h",
        "accessibility/touch_exploration_manager.cc",
        "accessibility/touch_exploration_manager.h",
        "cast_web_view_extension.h",
        "cast_web_view_extension.h",
        "ui/aura/accessibility/automation_manager_aura.cc",
        "ui/aura/accessibility/automation_manager_aura.h",
        "ui/aura/accessibility/ax_tree_source_aura.cc",
        "ui/aura/accessibility/ax_tree_source_aura.h",
      ]
    }

    deps += [
      "//chromecast/common/extensions_api:api",
      "//components/guest_view/browser",
      "//components/keyed_service/content",
      "//components/pref_registry",
      "//components/storage_monitor",
      "//components/user_prefs:user_prefs",
      "//components/version_info",
      "//components/zoom",
      "//extensions/browser",
      "//extensions/browser:core_api_provider",
      "//extensions/common",
      "//extensions/common/api",
      "//google_apis:google_apis",
      "//ui/events:gesture_detection",
      "//ui/views:views",
      "//ui/wm/public:public",
    ]
  }

  if (enable_cast_wayland_server) {
    sources += [
      "exo/wayland_server_controller.cc",
      "exo/wayland_server_controller.h",
      "exo/wm_helper_cast_shell.cc",
      "exo/wm_helper_cast_shell.h",
    ]
    deps += [
      "//components/exo",
      "//components/exo/wayland",
    ]
  }

  configs += [ "//media/audio:platform_config" ]
}

# Lightweight target for Cast interfaces that wrap //content/public/browser.
# This target should only include interfaces which are required for unit tests.
cast_source_set("public") {
  sources = [
    "cast_content_window.cc",
    "cast_content_window.h",
    "cast_web_contents.h",
    "cast_web_view.cc",
    "cast_web_view.h",
  ]

  # Need to expose this so that internal public_configs are propagated.
  public_deps = [
    "//content/public/browser",
  ]

  deps = [
    "//base",
    "//chromecast/graphics",
    "//content",
    "//ui/events",
    "//url",
  ]
}

# This target generates an "overlay" interface spec, allowing the Cast build to
# declare specific behavior and requirements for the "content_browser" service.
# This is accomplished by generating a JSON file, which is packed into
# cast_shell.pak, and loaded at runtime. This can be used to host additional
# interfaces in "content_browser".
#
# NOTE: Do not add packaged_services here! packaged_services should instead be
# added to "cast_content_packaged_services_manifest_overlay" below or
# its internal counterpart. Please see that target for more details.
service_manifest("cast_content_browser_manifest_overlay") {
  source = "cast_content_browser_manifest_overlay.json"

  if (chromecast_branding != "public") {
    overlays = [ "//chromecast/internal/shell/browser:cast_content_browser_internal_manifest_overlay" ]
  }
}

# This target generates an "overlay" interface spec, allowing the Cast build to
# declare specific behavior and requirements for the "content_renderer" service.
# This is accomplished by generating a JSON file, which is packed into
# cast_shell.pak, and loaded at runtime. This can be used to host additional
# interfaces in "content_renderer".
service_manifest("cast_content_renderer_manifest_overlay") {
  source = "cast_content_renderer_manifest_overlay.json"

  if (chromecast_branding != "public") {
    overlays = [ "//chromecast/internal/shell/browser:cast_content_renderer_internal_manifest_overlay" ]
  }
}

# This target is for packaged services that will run in the main (browser)
# process. To host an embedded service, add the service's manifest target to the
# list of "packaged_services" in this target, like so:
#
#   package_services += [ "//path/to/foo/service:foo_manifest" ]
#
# You must also register the "foo" service with the content client. See
# CastContentBrowserClient::RegisterInProcessServices() for details.
#
# NOTE: If your service's manifest is in chromecast/internal, do not add it
# here! Instead, add the service to the internal counterpart, which is
# referenced below.
service_manifest("cast_content_packaged_services_manifest_overlay") {
  source = "cast_content_packaged_services_manifest_overlay.json"

  packaged_services = [ "//media/mojo/services:media_manifest" ]

  if (chromecast_branding != "public") {
    overlays = [ "//chromecast/internal/shell/browser:cast_content_packaged_services_internal_manifest_overlay" ]
  }
}

grit("resources") {
  visibility = [
    ":browser",
    "//chromecast:cast_shell_pak",
  ]
  source = "cast_browser_resources.grd"
  output_dir = "$root_gen_dir/chromecast/browser"
  outputs = [
    "grit/cast_browser_resources.h",
    "cast_browser_resources.pak",
  ]

  deps = [
    ":cast_content_browser_manifest_overlay",
    ":cast_content_packaged_services_manifest_overlay",
    ":cast_content_renderer_manifest_overlay",
  ]
}

cast_source_set("test_support") {
  testonly = true
  sources = [
    "test/cast_browser_test.cc",
    "test/cast_browser_test.h",
  ]

  public_deps = [
    ":browser",
    "//content/test:test_support",
  ]

  deps = [
    "//base",
    "//chromecast/base",
    "//components/prefs:test_support",
    "//content/public/browser",
    "//content/public/common",
    "//testing/gtest",
  ]
}

cast_source_set("browsertests") {
  testonly = true
  sources = [
    "cast_content_gesture_handler_test.cc",
    "cast_media_blocker_browsertest.cc",
    "renderer_prelauncher_test.cc",
    "test/cast_features_browsertest.cc",
    "test/cast_navigation_browsertest.cc",
  ]

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  deps = [
    ":test_support",
    "//chromecast:chromecast_buildflags",
    "//chromecast/base",
    "//chromecast/base:chromecast_switches",
    "//chromecast/base/metrics",
    "//components/prefs",
    "//media:test_support",
  ]

  data = [
    "//media/test/data/",
  ]
}

cast_source_set("unittests") {
  testonly = true

  sources = [
    "bluetooth/cast_bluetooth_chooser_unittest.cc",
    "cast_media_blocker_unittest.cc",
    "cast_network_delegate_unittest.cc",
    "cast_session_id_map_unittest.cc",
    "devtools/cast_devtools_manager_delegate_unittest.cc",
    "lru_renderer_cache_test.cc",
    "network_context_manager_unittest.cc",
  ]

  deps = [
    ":browser",
    "//base",
    "//chromecast/base",
    "//content/public/browser",
    "//content/test:test_support",
    "//net:test_support",
    "//services/network:test_support",
    "//ui/events/devices:devices",
    "//ui/gl:test_support",
  ]

  if (!is_android) {
    sources += [ "cast_touch_device_manager_unittest.cc" ]
  }

  if (enable_chromecast_extensions && use_aura) {
    sources += [ "accessibility/touch_exploration_controller_unittest.cc" ]
    deps += [
      "//ui/aura:test_support",
      "//ui/events:test_support",
    ]
  }
}

if (is_android) {
  generate_jni("jni_headers") {
    sources = [
      "android/apk/src/org/chromium/chromecast/shell/CastContentWindowAndroid.java",
      "android/apk/src/org/chromium/chromecast/shell/CastCrashHandler.java",
      "android/apk/src/org/chromium/chromecast/shell/CastMetricsHelper.java",
      "android/apk/src/org/chromium/chromecast/shell/CastSysInfoAndroid.java",
    ]

    if (is_android_things_non_public && !build_for_android_things_n) {
      sources += [ "android/apk/src/org/chromium/chromecast/shell/CastSysInfoAndroidThings.java" ]
    }

    jni_package = "chromecast"
  }

  java_cpp_enum("java_enums") {
    sources = [
      "cast_content_window.h",
    ]
  }
}
