# 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("//chrome/browser/media/router/features.gni")
import("//extensions/buildflags/buildflags.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")

static_library("router") {
  deps = [
    "//base",
    "//chrome:strings",
    "//chrome/common:constants",
    "//components/cast_channel",
    "//components/cast_channel",
    "//components/keyed_service/content",
    "//components/keyed_service/core",
    "//content/public/browser",
    "//content/public/common",
    "//crypto",
    "//net",
    "//net/traffic_annotation",
    "//services/network:network_service",
    "//services/network/public/mojom",
    "//third_party/icu",
    "//url",
  ]
  public_deps = [
    "//chrome/common/media_router:router",
    "//chrome/common/media_router/mojom:media_router",
  ]
  sources = [
    "issue_manager.cc",
    "issue_manager.h",
    "issues_observer.cc",
    "issues_observer.h",
    "media_router.h",
    "media_router_base.cc",
    "media_router_base.h",
    "media_router_dialog_controller.cc",
    "media_router_dialog_controller.h",
    "media_router_factory.cc",
    "media_router_factory.h",
    "media_router_metrics.cc",
    "media_router_metrics.h",
    "media_routes_observer.cc",
    "media_routes_observer.h",
    "media_sinks_observer.cc",
    "media_sinks_observer.h",
    "presentation/browser_presentation_connection_proxy.cc",
    "presentation/browser_presentation_connection_proxy.h",
    "presentation/local_presentation_manager.cc",
    "presentation/local_presentation_manager.h",
    "presentation/local_presentation_manager_factory.cc",
    "presentation/local_presentation_manager_factory.h",
    "presentation/presentation_media_sinks_observer.cc",
    "presentation/presentation_media_sinks_observer.h",
    "presentation/presentation_service_delegate_impl.cc",
    "presentation/presentation_service_delegate_impl.h",
    "presentation/presentation_service_delegate_observers.cc",
    "presentation/presentation_service_delegate_observers.h",
    "presentation/receiver_presentation_service_delegate_impl.cc",
    "presentation/receiver_presentation_service_delegate_impl.h",
    "presentation/web_contents_presentation_manager.cc",
    "presentation/web_contents_presentation_manager.h",
    "route_message_observer.cc",
    "route_message_observer.h",
    "route_message_util.cc",
    "route_message_util.h",
  ]

  if (enable_extensions) {
    deps += [
      "discovery",
      "//components/mirroring/mojom:host",
      "//components/mirroring/mojom:service",

      # We can't depend on //chrome/browser/ui due to introducing a cyclic
      # dependency, so we have to depend on this directly to fix include
      # resolution for browser.h, which is used in multiple extension-only
      # files.
      # TODO(crbug.com/1030821): Resolve circular dependencies
      "//components/signin/public/base:signin_buildflags",
      "//components/translate/content/common",
      "//mojo/public/cpp/bindings",
      "//ui/base:buildflags",
    ]

    sources += [
      "data_decoder_util.cc",
      "data_decoder_util.h",
      "event_page_request_manager.cc",
      "event_page_request_manager.h",
      "event_page_request_manager_factory.cc",
      "event_page_request_manager_factory.h",
      "mojo/media_route_provider_util_win.cc",
      "mojo/media_route_provider_util_win.h",
      "mojo/media_router_desktop.cc",
      "mojo/media_router_desktop.h",
      "mojo/media_router_mojo_impl.cc",
      "mojo/media_router_mojo_impl.h",
      "mojo/media_router_mojo_metrics.cc",
      "mojo/media_router_mojo_metrics.h",
      "mojo/media_sink_service_status.cc",
      "mojo/media_sink_service_status.h",
      "presentation/presentation_navigation_policy.cc",
      "presentation/presentation_navigation_policy.h",
      "providers/cast/activity_record.cc",
      "providers/cast/activity_record.h",
      "providers/cast/cast_activity_manager.cc",
      "providers/cast/cast_activity_manager.h",
      "providers/cast/cast_activity_record.cc",
      "providers/cast/cast_activity_record.h",
      "providers/cast/cast_app_availability_tracker.cc",
      "providers/cast/cast_app_availability_tracker.h",
      "providers/cast/cast_app_discovery_service.cc",
      "providers/cast/cast_app_discovery_service.h",
      "providers/cast/cast_internal_message_util.cc",
      "providers/cast/cast_internal_message_util.h",
      "providers/cast/cast_media_controller.cc",
      "providers/cast/cast_media_controller.h",
      "providers/cast/cast_media_route_provider.cc",
      "providers/cast/cast_media_route_provider.h",
      "providers/cast/cast_media_route_provider_metrics.cc",
      "providers/cast/cast_media_route_provider_metrics.h",
      "providers/cast/cast_session_client.cc",
      "providers/cast/cast_session_client.h",
      "providers/cast/cast_session_tracker.cc",
      "providers/cast/cast_session_tracker.h",
      "providers/cast/chrome_cast_message_handler.cc",
      "providers/cast/chrome_cast_message_handler.h",
      "providers/cast/dual_media_sink_service.cc",
      "providers/cast/dual_media_sink_service.h",
      "providers/cast/mirroring_activity_record.cc",
      "providers/cast/mirroring_activity_record.h",
      "providers/common/buffered_message_sender.cc",
      "providers/common/buffered_message_sender.h",
      "providers/dial/dial_activity_manager.cc",
      "providers/dial/dial_activity_manager.h",
      "providers/dial/dial_internal_message_util.cc",
      "providers/dial/dial_internal_message_util.h",
      "providers/dial/dial_media_route_provider.cc",
      "providers/dial/dial_media_route_provider.h",
      "providers/dial/dial_media_route_provider_metrics.cc",
      "providers/dial/dial_media_route_provider_metrics.h",
      "providers/extension/extension_media_route_provider_proxy.cc",
      "providers/extension/extension_media_route_provider_proxy.h",
      "providers/wired_display/wired_display_media_route_provider.cc",
      "providers/wired_display/wired_display_media_route_provider.h",
      "providers/wired_display/wired_display_presentation_receiver.h",
      "providers/wired_display/wired_display_presentation_receiver_factory.cc",
      "providers/wired_display/wired_display_presentation_receiver_factory.h",
    ]

    if (enable_openscreen) {
      sources += [
        "providers/openscreen/discovery/open_screen_listener.cc",
        "providers/openscreen/discovery/open_screen_listener.h",
        "providers/openscreen/network_service_async_packet_sender.cc",
        "providers/openscreen/network_service_async_packet_sender.h",
        "providers/openscreen/network_service_quic_packet_writer.cc",
        "providers/openscreen/network_service_quic_packet_writer.h",
      ]

      deps += [
        ":openscreen_platform_impl",
        "//third_party/openscreen/src/osp/public",
        "//third_party/openscreen/src/platform",
        "//third_party/openscreen/src/util",
      ]
    }
  }
}

if (enable_openscreen) {
  source_set("openscreen_platform_impl") {
    sources = [
      "providers/openscreen/platform/chrome_task_runner.cc",
      "providers/openscreen/platform/chrome_task_runner.h",
      "providers/openscreen/platform/chrome_tls_client_connection.cc",
      "providers/openscreen/platform/chrome_tls_client_connection.h",
      "providers/openscreen/platform/chrome_tls_connection_factory.cc",
      "providers/openscreen/platform/chrome_tls_connection_factory.h",
      "providers/openscreen/platform/chrome_udp_socket.cc",
      "providers/openscreen/platform/chrome_udp_socket.h",
      "providers/openscreen/platform/logging.cc",
      "providers/openscreen/platform/mojo_data_pump.cc",
      "providers/openscreen/platform/mojo_data_pump.h",
      "providers/openscreen/platform/network_data_pump.h",
      "providers/openscreen/platform/network_util.cc",
      "providers/openscreen/platform/network_util.h",
      "providers/openscreen/platform/time.cc",
      "providers/openscreen/platform/trace_logging_platform.cc",
    ]

    public_configs =
        [ "//third_party/openscreen/src/build:openscreen_include_dirs" ]

    deps = [
      "//base",
      "//net/traffic_annotation",
      "//services/network:network_service",
      "//services/network/public/mojom",
    ]
  }
}

static_library("test_support") {
  testonly = true
  deps = [
    "//chrome/test:test_support",
    "//testing/gmock",
  ]
  public_deps = [
    ":router",
  ]
  sources = [
    "test/mock_media_router.cc",
    "test/mock_media_router.h",
    "test/mock_screen_availability_listener.cc",
    "test/mock_screen_availability_listener.h",
    "test/test_helper.cc",
    "test/test_helper.h",
  ]

  if (enable_extensions) {
    deps += [
      "discovery",
      "//chrome/common/media_router/mojom:media_router",
      "//chrome/common/media_router/mojom:media_router_test_interfaces",
      "//extensions/browser",
      "//extensions/common",
    ]
    sources += [
      "test/media_router_mojo_test.cc",
      "test/media_router_mojo_test.h",
      "test/mock_dns_sd_registry.cc",
      "test/mock_dns_sd_registry.h",
      "test/mock_mojo_media_router.cc",
      "test/mock_mojo_media_router.h",
      "test/noop_dual_media_sink_service.cc",
      "test/noop_dual_media_sink_service.h",
    ]
  }
}

source_set("unittests") {
  testonly = true

  sources = [
    "issue_manager_unittest.cc",
    "media_router_base_unittest.cc",
    "media_router_dialog_controller_unittest.cc",
    "media_router_factory_unittest.cc",
    "media_router_metrics_unittest.cc",
    "media_sinks_observer_unittest.cc",
    "presentation/browser_presentation_connection_proxy_unittest.cc",
    "presentation/local_presentation_manager_factory_unittest.cc",
    "presentation/local_presentation_manager_unittest.cc",
    "presentation/presentation_media_sinks_observer_unittest.cc",
    "presentation/presentation_service_delegate_impl_unittest.cc",
  ]

  if (!is_android) {
    sources += [
      # In-browser discovery is not used by Android for now.
      "discovery/dial/device_description_fetcher_unittest.cc",
      "discovery/dial/device_description_service_unittest.cc",
      "discovery/dial/dial_app_discovery_service_unittest.cc",
      "discovery/dial/dial_device_data_unittest.cc",
      "discovery/dial/dial_media_sink_service_impl_unittest.cc",
      "discovery/dial/dial_registry_unittest.cc",
      "discovery/dial/dial_service_unittest.cc",
      "discovery/dial/dial_url_fetcher_unittest.cc",
      "discovery/dial/safe_dial_app_info_parser_unittest.cc",
      "discovery/dial/safe_dial_device_description_parser_unittest.cc",
      "discovery/discovery_network_list_unittest.cc",
      "discovery/discovery_network_monitor_metric_observer_unittest.cc",
      "discovery/discovery_network_monitor_unittest.cc",
      "discovery/mdns/cast_media_sink_service_impl_unittest.cc",
      "discovery/mdns/cast_media_sink_service_unittest.cc",
      "discovery/mdns/dns_sd_registry_unittest.cc",
      "discovery/media_sink_discovery_metrics_unittest.cc",
      "event_page_request_manager_unittest.cc",
      "media_router_feature_unittest.cc",
      "mojo/media_router_desktop_unittest.cc",
      "mojo/media_router_mojo_impl_unittest.cc",
      "mojo/media_router_mojo_metrics_unittest.cc",
      "mojo/media_sink_service_status_unittest.cc",
      "providers/cast/cast_activity_manager_unittest.cc",
      "providers/cast/cast_activity_record_unittest.cc",
      "providers/cast/cast_app_availability_tracker_unittest.cc",
      "providers/cast/cast_app_discovery_service_unittest.cc",
      "providers/cast/cast_internal_message_util_unittest.cc",
      "providers/cast/cast_media_controller_unittest.cc",
      "providers/cast/cast_media_route_provider_metrics_unittest.cc",
      "providers/cast/cast_media_route_provider_unittest.cc",
      "providers/cast/cast_session_client_unittest.cc",
      "providers/cast/cast_session_tracker_unittest.cc",
      "providers/cast/dual_media_sink_service_unittest.cc",
      "providers/cast/mirroring_activity_record_unittest.cc",
      "providers/cast/mock_cast_activity_record.cc",
      "providers/cast/mock_cast_activity_record.h",
      "providers/cast/test_util.cc",
      "providers/cast/test_util.h",
      "providers/dial/dial_activity_manager_unittest.cc",
      "providers/dial/dial_internal_message_util_unittest.cc",
      "providers/dial/dial_media_route_provider_unittest.cc",
      "providers/extension/extension_media_route_provider_proxy_unittest.cc",
      "providers/wired_display/wired_display_media_route_provider_unittest.cc",
    ]
  }

  if (enable_openscreen) {
    include_dirs = [ "//third_party/openscreen/src" ]

    sources += [
      "providers/openscreen/discovery/open_screen_listener_unittest.cc",
      "providers/openscreen/network_service_quic_packet_writer_unittest.cc",
      "providers/openscreen/platform/chrome_tls_client_connection_unittest.cc",
      "providers/openscreen/platform/chrome_tls_connection_factory_unittest.cc",
      "providers/openscreen/platform/mojo_data_pump_unittest.cc",
    ]
  }

  deps = [
    ":router",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

if (enable_openscreen) {
  test("openscreen_unittests") {
    include_dirs = [ "//third_party/openscreen/src" ]

    deps = [
      ":openscreen_platform_impl",
      "//base/test:test_support",
      "//chrome/browser",
      "//chrome/test:test_support",
      "//testing/gmock",
      "//third_party/openscreen/src:openscreen_unittests_all",
    ]
  }
}

fuzzer_test("dial_internal_message_fuzzer") {
  sources = [
    "providers/dial/dial_internal_message_fuzzer.cc",
  ]
  deps = [
    ":router",
    "//base",
    "//base/test:test_support",
    "//chrome/browser",
    "//chrome/test:test_support",
    "//components/mirroring/mojom:service",
    "//components/translate/content/common",
  ]
  dict = "providers/dial/fuzzer_data/dial_internal_message_fuzzer.dict"
  seed_corpus = "providers/dial/fuzzer_data/corpus/"
}
