# 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/buildflag_header.gni")
import("//build/config/ui.gni")
import("//chromecast/chromecast.gni")
import("//media/media_options.gni")
import("//testing/test.gni")
import("//tools/grit/grit_rule.gni")

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

buildflag_header("browser_buildflags") {
  header = "browser_buildflags.h"
  flags = [ "ENABLE_CAST_AUDIO_MANAGER_MIXER=$enable_cast_audio_manager_mixer" ]
}

cast_source_set("prefs") {
  sources = [
    "pref_service_helper.cc",
    "pref_service_helper.h",
  ]

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

  deps = [
    "//base",
    "//chromecast:chromecast_buildflags",
    "//chromecast/base",
    "//components/cdm/browser",
    "//components/prefs",
  ]
}

cast_source_set("feature_list") {
  sources = [
    "cast_feature_list_creator.cc",
    "cast_feature_list_creator.h",
  ]
  deps = [
    ":prefs",
    "//base",
    "//chromecast/base",
    "//chromecast/browser/metrics",
    "//components/prefs",
    "//components/proxy_config",
  ]
}

cast_source_set("browser") {
  sources = [
    "application_media_capabilities.cc",
    "application_media_capabilities.h",
    "application_media_info_manager.cc",
    "application_media_info_manager.h",
    "bluetooth/cast_bluetooth_chooser.cc",
    "bluetooth/cast_bluetooth_chooser.h",
    "cast_browser_context.cc",
    "cast_browser_context.h",
    "cast_browser_interface_binders.cc",
    "cast_browser_interface_binders.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_browser_client_receiver_bindings.cc",
    "cast_content_gesture_handler.cc",
    "cast_content_gesture_handler.h",
    "cast_download_manager_delegate.cc",
    "cast_download_manager_delegate.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_network_contexts.cc",
    "cast_network_contexts.h",
    "cast_overlay_manifests.cc",
    "cast_overlay_manifests.h",
    "cast_permission_manager.cc",
    "cast_permission_manager.h",
    "cast_quota_permission_context.cc",
    "cast_quota_permission_context.h",
    "cast_renderer_block_data.cc",
    "cast_renderer_block_data.h",
    "cast_session_id_map.cc",
    "cast_session_id_map.h",
    "cast_system_memory_pressure_evaluator_adjuster.cc",
    "cast_system_memory_pressure_evaluator_adjuster.h",
    "cast_web_contents_impl.cc",
    "cast_web_contents_impl.h",
    "cast_web_service.cc",
    "cast_web_service.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",
    "general_audience_browsing_navigation_throttle.cc",
    "general_audience_browsing_navigation_throttle.h",
    "general_audience_browsing_service.cc",
    "general_audience_browsing_service.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",
    "queryable_data_host_cast.cc",
    "queryable_data_host_cast.h",
    "renderer_prelauncher.cc",
    "renderer_prelauncher.h",
    "service/cast_service_simple.cc",
    "service/cast_service_simple.h",
    "service_connector.cc",
    "service_connector.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",
  ]

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

  public_deps = [
    ":feature_list",
    ":prefs",
    ":public",
    "//chromecast/browser/metrics",
    "//chromecast/metrics",
    "//components/media_control/mojom",
  ]

  deps = [
    ":browser_buildflags",
    "//base",
    "//base:i18n",
    "//base/util/memory_pressure",
    "//cc",
    "//chromecast:chromecast_buildflags",
    "//chromecast/activity",
    "//chromecast/app:cast_crash_client",
    "//chromecast/app:chromecast_settings",
    "//chromecast/app:resources",
    "//chromecast/base",
    "//chromecast/base:cast_sys_info_util",
    "//chromecast/base:cast_version",
    "//chromecast/browser/bluetooth/public/mojom",
    "//chromecast/browser/general_audience_browsing/mojom",
    "//chromecast/common",
    "//chromecast/common:queryable_data",
    "//chromecast/common/media",
    "//chromecast/common/mojom",
    "//chromecast/graphics",
    "//chromecast/media",
    "//chromecast/media:libcast_media",
    "//chromecast/media/base:media_codec_support",
    "//chromecast/media/base:video_plane_controller",
    "//chromecast/media/service",
    "//chromecast/media/service/mojom",
    "//chromecast/net",
    "//chromecast/net:connectivity_checker",
    "//chromecast/service",
    "//components/cdm/browser",
    "//components/download/public/common:public",
    "//components/media_control/browser",
    "//components/metrics",
    "//components/metrics:gpu",
    "//components/metrics:net",
    "//components/variations/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/policy/core/browser",
    "//components/prefs",
    "//components/proxy_config",
    "//components/safe_search_api",
    "//components/safe_search_api:safe_search_client",
    "//components/viz/service",
    "//content/public/browser",
    "//content/public/common",
    "//content/public/common:service_names",
    "//device/bluetooth",
    "//gpu",
    "//ipc",
    "//media",
    "//media/mojo/services",
    "//net",
    "//services/media_session/public/mojom",
    "//services/network/public/mojom",
    "//services/service_manager/public/cpp",
    "//third_party/blink/public/common:headers",
    "//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",
      "android/cast_web_service_android.cc",
    ]
    deps += [
      ":jni_headers",
      "//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_system_memory_pressure_evaluator.cc",
      "cast_system_memory_pressure_evaluator.h",
      "memory_pressure_controller_impl.cc",
      "memory_pressure_controller_impl.h",
    ]

    deps += [ "//third_party/fontconfig" ]
  }

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

    deps += [
      "//chromecast/ui:media_control_ui",
      "//ui/views:views",
    ]

    if (!is_fuchsia) {
      sources += [
        "devtools/cast_ui_devtools.cc",
        "devtools/cast_ui_devtools.h",
      ]

      deps += [
        "//components/ui_devtools",
        "//components/ui_devtools/views",
      ]
    }
  }

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

    # TODO(crbug.com/933142): Fuchsia needs its own methods to bridge with heap
    # profiling service
    deps += [
      "//components/heap_profiling/multi_process",
      "//components/services/heap_profiling",
      "//components/services/heap_profiling/public/cpp",
      "//components/services/heap_profiling/public/mojom",
    ]
  }

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

  if (enable_external_mojo_services) {
    deps += [ "//chromecast/external_mojo/broker_service" ]
  }

  if (enable_chromecast_extensions) {
    sources += [
      "cast_extension_host.cc",
      "cast_extension_host.h",
      "cast_extension_message_filter.cc",
      "cast_extension_message_filter.h",
      "cast_extension_url_loader_factory.cc",
      "cast_extension_url_loader_factory.h",
      "extension_page.cc",
      "extension_page.h",
      "extensions/api/accessibility_private/accessibility_extension_api.cc",
      "extensions/api/accessibility_private/accessibility_extension_api.h",
      "extensions/api/automation_internal/chromecast_automation_internal_api_delegate.cc",
      "extensions/api/automation_internal/chromecast_automation_internal_api_delegate.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/command_line_private/command_line_private_api.cc",
      "extensions/api/command_line_private/command_line_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/login_state/login_state.cc",
      "extensions/api/login_state/login_state.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_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_kiosk_delegate.cc",
      "extensions/cast_kiosk_delegate.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",
        "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 (is_linux && use_ozone) {
    sources += [
      "exo/cast_wm_helper.cc",
      "exo/cast_wm_helper.h",
      "exo/wayland_server_controller.cc",
      "exo/wayland_server_controller.h",
      "webview/cast_app_controller.cc",
      "webview/cast_app_controller.h",
      "webview/cast_app_rpc_instance.cc",
      "webview/cast_app_rpc_instance.h",
      "webview/js_channel_service.cc",
      "webview/js_channel_service.h",
      "webview/platform_views_grpc_service.cc",
      "webview/platform_views_grpc_service.h",
      "webview/platform_views_rpc_instance.cc",
      "webview/platform_views_rpc_instance.h",
      "webview/web_content_controller.cc",
      "webview/web_content_controller.h",
      "webview/webview_controller.cc",
      "webview/webview_controller.h",
      "webview/webview_navigation_throttle.cc",
      "webview/webview_navigation_throttle.h",
      "webview/webview_rpc_instance.cc",
      "webview/webview_rpc_instance.h",
      "webview/webview_window_manager.cc",
      "webview/webview_window_manager.h",
    ]
    configs += [ "//third_party/grpc:grpc_config" ]
    deps += [
      ":web_contents_provider",
      "//chromecast/browser/webview/proto",
      "//components/exo",
      "//components/exo/wayland",
      "//content/public/browser",
      "//services/viz/privileged/mojom/compositing",
      "//ui/display/manager",
    ]
  }

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

  if (chromecast_branding != "public") {
    deps += [
      "//chromecast/internal/shell/browser:cast_content_browser_internal_manifest_overlay",
      "//chromecast/internal/shell/browser:cast_content_packaged_services_internal_manifest_overlay",
    ]

    defines = [ "USE_INTERNAL_OVERLAY_MANIFESTS=1" ]
  }
}

# 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.cc",
    "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 = [
    "//chromecast/common/mojom",
    "//content/public/browser",
  ]

  deps = [
    "//base",
    "//chromecast/graphics",
    "//chromecast/ui:back_gesture_router",
    "//chromecast/ui/mojom",
    "//content/public/common",
    "//ui/events",
    "//url",
  ]
}

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

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

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

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

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  deps = [
    ":test_support",
    "//base",
    "//chromecast:chromecast_buildflags",
    "//chromecast/base",
    "//chromecast/base:chromecast_switches",
    "//chromecast/base/metrics",
    "//components/keyed_service/content",
    "//components/prefs",
    "//content/public/browser",
    "//content/test:test_support",
    "//media:test_support",
    "//net:test_support",
  ]

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

cast_source_set("unittests") {
  testonly = true

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

  deps = [
    ":browser",
    "//base",
    "//base/test:test_support",
    "//chromecast/base",
    "//content/public/browser",
    "//content/test:test_support",
    "//net:test_support",
    "//services/network:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/base",
    "//ui/base: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) {
      sources += [ "android/apk/src/org/chromium/chromecast/shell/CastSysInfoAndroidThings.java" ]
    }
  }

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

cast_source_set("web_contents_provider") {
  sources = [ "webview/web_contents_provider.h" ]

  deps = [ "//content/public/browser" ]
}
