# 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/util/process_version.gni")
import("//remoting/build/config/remoting_build.gni")

group("all_tests") {
  testonly = true

  deps = [
    ":unit_tests",
  ]
}

group("all") {
  testonly = true

  deps = [
    ":host",
  ]
  if (enable_me2me_host) {
    deps += [ "//remoting/host:remoting_me2me_host" ]
  }

  if (is_chrome_branded) {
    deps += [ ":remoting_host_branded" ]
  }

  if (!is_chromeos && !is_android && !is_ios) {
    deps += [
      "//remoting/host:remoting_native_messaging_host",
      "//remoting/host:remoting_native_messaging_manifests",
      "//remoting/host:remoting_start_host",
      "//remoting/host/it2me:remote_assistance_host",
    ]
  }
}

process_version("remoting_version") {
  template_file = "//remoting/host/version.h.in"
  sources = [
    branding_path,
  ]
  output = "$target_gen_dir/version.h"
}

# This must be a static library instead of a source set because
# remoting_unittests requires that remoting_me2me_host.cc not be pulled in,
# which in turn depends on remoting_me2me_host_static which isn't part of that
# build.
#
# TODO fix this, successful builds should not depend on static libraries
# stripping code.
static_library("host") {
  sources = [
    "audio_capturer.cc",
    "audio_capturer.h",
    "audio_capturer_chromeos.cc",
    "audio_capturer_linux.cc",
    "audio_capturer_linux.h",
    "audio_capturer_mac.cc",
    "audio_capturer_win.cc",
    "audio_capturer_win.h",
    "audio_silence_detector.cc",
    "audio_silence_detector.h",
    "audio_volume_filter.cc",
    "audio_volume_filter.h",
    "backoff_timer.cc",
    "backoff_timer.h",
    "basic_desktop_environment.cc",
    "basic_desktop_environment.h",
    "branding.cc",
    "branding.h",
    "chromoting_host.cc",
    "chromoting_host.h",
    "chromoting_host_context.cc",
    "chromoting_host_context.h",
    "chromoting_messages.cc",
    "chromoting_messages.h",
    "chromoting_param_traits.cc",
    "chromoting_param_traits.h",
    "client_session.cc",
    "client_session.h",
    "client_session_control.h",
    "client_session_details.h",
    "clipboard.h",
    "clipboard_mac.mm",
    "clipboard_win.cc",
    "clipboard_x11.cc",
    "config_file_watcher.cc",
    "config_file_watcher.h",
    "config_watcher.h",
    "continue_window.cc",
    "continue_window.h",
    "continue_window_chromeos.cc",
    "continue_window_linux.cc",
    "continue_window_mac.mm",
    "continue_window_win.cc",
    "current_process_stats_agent.cc",
    "current_process_stats_agent.h",
    "curtain_mode.h",
    "curtain_mode_linux.cc",
    "curtain_mode_mac.cc",
    "curtain_mode_win.cc",
    "daemon_process.cc",
    "daemon_process.h",
    "daemon_process_win.cc",
    "desktop_capturer_proxy.cc",
    "desktop_capturer_proxy.h",
    "desktop_environment.h",
    "desktop_environment_options.cc",
    "desktop_environment_options.h",
    "desktop_process.cc",
    "desktop_process.h",
    "desktop_resizer.h",
    "desktop_resizer_mac.cc",
    "desktop_resizer_ozone.cc",
    "desktop_resizer_win.cc",
    "desktop_resizer_x11.cc",
    "desktop_session.cc",
    "desktop_session.h",
    "desktop_session_agent.cc",
    "desktop_session_agent.h",
    "desktop_session_connector.h",
    "desktop_session_proxy.cc",
    "desktop_session_proxy.h",
    "desktop_session_win.cc",
    "desktop_session_win.h",
    "disconnect_window_chromeos.cc",
    "disconnect_window_linux.cc",
    "disconnect_window_mac.h",
    "disconnect_window_mac.mm",
    "disconnect_window_win.cc",
    "dns_blackhole_checker.cc",
    "dns_blackhole_checker.h",
    "evaluate_capability.cc",
    "evaluate_capability.h",
    "file_proxy_wrapper.cc",
    "file_proxy_wrapper.h",
    "file_proxy_wrapper_linux.cc",
    "file_proxy_wrapper_mac.cc",
    "file_proxy_wrapper_win.cc",
    "file_transfer_message_handler.cc",
    "file_transfer_message_handler.h",
    "forward_process_stats_agent.cc",
    "forward_process_stats_agent.h",
    "gcd_rest_client.cc",
    "gcd_rest_client.h",
    "gcd_state_updater.cc",
    "gcd_state_updater.h",
    "heartbeat_sender.cc",
    "heartbeat_sender.h",
    "host_attributes.cc",
    "host_attributes.h",
    "host_change_notification_listener.cc",
    "host_change_notification_listener.h",
    "host_config.cc",
    "host_config.h",
    "host_details.cc",
    "host_details.h",
    "host_event_logger.h",
    "host_event_logger_win.cc",
    "host_exit_codes.cc",
    "host_exit_codes.h",
    "host_experiment_session_plugin.cc",
    "host_experiment_session_plugin.h",
    "host_export.h",
    "host_extension.h",
    "host_extension_session.h",
    "host_extension_session_manager.cc",
    "host_extension_session_manager.h",
    "host_power_save_blocker.cc",
    "host_power_save_blocker.h",
    "host_secret.cc",
    "host_secret.h",
    "host_status_logger.cc",
    "host_status_logger.h",
    "host_status_monitor.cc",
    "host_status_monitor.h",
    "host_status_observer.h",
    "host_window.cc",
    "host_window.h",
    "host_window_proxy.cc",
    "host_window_proxy.h",
    "input_injector.h",
    "input_injector_chromeos.cc",
    "input_injector_chromeos.h",
    "input_injector_mac.cc",
    "input_injector_win.cc",
    "input_injector_x11.cc",
    "ipc_audio_capturer.cc",
    "ipc_audio_capturer.h",
    "ipc_constants.cc",
    "ipc_constants.h",
    "ipc_desktop_environment.cc",
    "ipc_desktop_environment.h",
    "ipc_host_event_logger.cc",
    "ipc_host_event_logger.h",
    "ipc_input_injector.cc",
    "ipc_input_injector.h",
    "ipc_mouse_cursor_monitor.cc",
    "ipc_mouse_cursor_monitor.h",
    "ipc_screen_controls.cc",
    "ipc_screen_controls.h",
    "ipc_video_frame_capturer.cc",
    "ipc_video_frame_capturer.h",
    "it2me_desktop_environment.cc",
    "it2me_desktop_environment.h",
    "logging.h",
    "logging_linux.cc",
    "logging_mac.cc",
    "logging_win.cc",
    "me2me_desktop_environment.cc",
    "me2me_desktop_environment.h",
    "mouse_cursor_monitor_proxy.cc",
    "mouse_cursor_monitor_proxy.h",
    "mouse_shape_pump.cc",
    "mouse_shape_pump.h",
    "pairing_registry_delegate.cc",
    "pairing_registry_delegate.h",
    "pairing_registry_delegate_linux.cc",
    "pairing_registry_delegate_linux.h",
    "pairing_registry_delegate_mac.cc",
    "pairing_registry_delegate_win.cc",
    "pairing_registry_delegate_win.h",
    "pin_hash.cc",
    "pin_hash.h",
    "policy_watcher.cc",
    "policy_watcher.h",
    "process_stats_agent.h",
    "process_stats_sender.cc",
    "process_stats_sender.h",
    "register_support_host_request.cc",
    "register_support_host_request.h",
    "remote_input_filter.cc",
    "remote_input_filter.h",
    "resizing_host_observer.cc",
    "resizing_host_observer.h",
    "resources.h",
    "resources_linux.cc",
    "resources_mac.cc",
    "resources_win.cc",
    "sas_injector.h",
    "sas_injector_win.cc",
    "screen_controls.h",
    "screen_resolution.cc",
    "screen_resolution.h",
    "server_log_entry_host.cc",
    "server_log_entry_host.h",
    "shutdown_watchdog.cc",
    "shutdown_watchdog.h",
    "signaling_connector.cc",
    "signaling_connector.h",
    "single_window_desktop_environment.cc",
    "single_window_desktop_environment.h",
    "single_window_input_injector.h",
    "single_window_input_injector_linux.cc",
    "single_window_input_injector_mac.cc",
    "single_window_input_injector_win.cc",
    "switches.cc",
    "switches.h",
    "test_echo_extension.cc",
    "test_echo_extension.h",
    "test_echo_extension_session.cc",
    "test_echo_extension_session.h",
    "third_party_auth_config.cc",
    "third_party_auth_config.h",
    "token_validator_base.cc",
    "token_validator_base.h",
    "token_validator_factory_impl.cc",
    "token_validator_factory_impl.h",
    "touch_injector_win.cc",
    "touch_injector_win.h",
    "usage_stats_consent.h",
    "usage_stats_consent_mac.cc",
    "usage_stats_consent_win.cc",
    "username.cc",
    "username.h",
  ]

  libs = []

  configs += [
    "//build/config/compiler:wexit_time_destructors",
    "//remoting/build/config:version",
  ]

  defines = [ "WEBRTC_CHROMIUM_BUILD" ]

  deps = [
    "//base:i18n",
    "//components/policy/core/common",
    "//crypto",
    "//google_apis",
    "//media",
    "//remoting/base",
    "//remoting/base:authorization",
    "//remoting/host/input_monitor",
    "//remoting/host/security_key",
    "//remoting/protocol",
    "//remoting/resources",
    "//third_party/webrtc/modules/desktop_capture",

    # //remoting uses the power_save_blocker directly. See crbug.com/689423
    "//services/device/wake_lock/power_save_blocker",
    "//ui/base",
    "//ui/events:dom_keycode_converter",
    "//ui/events/platform",
  ]

  public_deps = [
    "//ipc",
  ]

  if (is_posix) {
    sources += [
      "host_event_logger_posix.cc",
      "posix/signal_handler.cc",
      "posix/signal_handler.h",
    ]
  }

  if (!is_ios) {
    deps += [ "//components/policy:generated" ]
  }

  if (is_linux && !is_chromeos) {
    public_deps += [ "//remoting/host/linux" ]
    libs += [ "pam" ]
  }

  if (use_x11) {
    configs += [
      "//build/config/linux:x11",
      "//build/config/linux:xrandr",
    ]
    deps += [ "//remoting/host/linux:x11" ]
    if (is_desktop_linux) {
      deps += [ "//build/config/linux/gtk" ]
    }
  } else {
    sources -= [
      "clipboard_x11.cc",
      "desktop_resizer_x11.cc",
      "input_injector_x11.cc",
    ]
  }

  if (!use_ozone) {
    sources -= [ "desktop_resizer_ozone.cc" ]
  }

  if (is_chromeos) {
    # TODO(GYP): crbug.com/481627. These should only be included
    # when enable_me2me_host is true.
    sources -= [
      "audio_capturer_linux.cc",
      "audio_capturer_linux.h",
      "continue_window_linux.cc",
      "curtain_mode_linux.cc",
      "disconnect_window_linux.cc",
      "me2me_desktop_environment.cc",
      "me2me_desktop_environment.h",
    ]
    deps += [
      "//ash",
      "//remoting/host/chromeos",
    ]

    if (use_ozone) {
      deps += [ "//ui/ozone" ]
      sources -= [ "desktop_resizer_ozone.cc" ]
    } else {
      sources -= [
        "clipboard_x11.cc",
        "desktop_resizer_x11.cc",
        "input_injector_chromeos.cc",
        "input_injector_chromeos.h",
      ]
    }
  }

  if (is_mac) {
    libs += [
      "Accelerate.framework",
      "Carbon.framework",
    ]

    deps += [
      ":remoting_version",
      "//third_party/google_toolbox_for_mac",
    ]
  }

  if (is_win) {
    deps += [
      # On Windows, we use //media/gpu/MediaFoundationVideoEncodeAcceleratorWin
      # to detect whether HW encoder is supported by the system.
      "//media",
      "//remoting/host/win",
      "//remoting/host/win:messages",
      "//remoting/host/win:remoting_lib_idl",
    ]

    public_deps += [ "//remoting/host/win" ]
  }
}

static_library("test_support") {
  testonly = true

  sources = [
    "fake_desktop_environment.cc",
    "fake_desktop_environment.h",
    "fake_host_extension.cc",
    "fake_host_extension.h",
    "fake_mouse_cursor_monitor.cc",
    "fake_mouse_cursor_monitor.h",
    "host_mock_objects.cc",
    "host_mock_objects.h",
  ]

  configs += [ "//remoting/build/config:version" ]

  deps = [
    "//remoting/proto",
    "//testing/gmock",
    "//testing/gtest",
  ]
  public_deps = [
    ":host",
    "//remoting/base:test_support",
    "//third_party/libjingle_xmpp",
    "//third_party/protobuf:protobuf_lite",
    "//third_party/webrtc/modules/desktop_capture",
    "//third_party/webrtc_overrides:init_webrtc",
  ]
}

# The host portions of the remoting unit tests.
source_set("unit_tests") {
  testonly = true

  sources = [
    "audio_silence_detector_unittest.cc",
    "audio_volume_filter_unittest.cc",
    "backoff_timer_unittest.cc",
    "chromoting_host_context_unittest.cc",
    "chromoting_host_unittest.cc",
    "client_session_unittest.cc",
    "config_file_watcher_unittest.cc",
    "daemon_process_unittest.cc",
    "desktop_process_unittest.cc",
    "desktop_session_agent_unittest.cc",
    "file_proxy_wrapper_linux_unittest.cc",
    "file_transfer_message_handler_unittest.cc",
    "gcd_rest_client_unittest.cc",
    "gcd_state_updater_unittest.cc",
    "heartbeat_sender_unittest.cc",
    "host_attributes_unittest.cc",
    "host_change_notification_listener_unittest.cc",
    "host_config_unittest.cc",
    "host_experiment_session_plugin_unittest.cc",
    "host_extension_session_manager_unittest.cc",
    "host_power_save_blocker_unittest.cc",
    "host_status_logger_unittest.cc",
    "input_monitor/local_input_monitor_unittest.cc",
    "ipc_desktop_environment_unittest.cc",
    "it2me/it2me_confirmation_dialog_proxy_unittest.cc",
    "it2me/it2me_host_unittest.cc",
    "it2me/it2me_native_messaging_host_unittest.cc",
    "mouse_cursor_monitor_proxy_unittest.cc",
    "mouse_shape_pump_unittest.cc",
    "native_messaging/native_messaging_reader_unittest.cc",
    "native_messaging/native_messaging_writer_unittest.cc",
    "pairing_registry_delegate_linux_unittest.cc",
    "pairing_registry_delegate_win_unittest.cc",
    "pin_hash_unittest.cc",
    "policy_watcher_unittest.cc",
    "process_stats_sender_unittest.cc",
    "register_support_host_request_unittest.cc",
    "remote_input_filter_unittest.cc",
    "resizing_host_observer_unittest.cc",
    "resources_unittest.cc",
    "screen_resolution_unittest.cc",
    "server_log_entry_host_unittest.cc",
    "setup/me2me_native_messaging_host_unittest.cc",
    "setup/pin_validator_unittest.cc",
    "third_party_auth_config_unittest.cc",
    "token_validator_base_unittest.cc",
    "token_validator_factory_impl_unittest.cc",
    "touch_injector_win_unittest.cc",
  ]

  if (use_ozone || is_chromeos) {
    sources -= [ "input_monitor/local_input_monitor_unittest.cc" ]
  }

  configs += [ "//remoting/build/config:version" ]

  deps = [
    ":host",
    ":test_support",
    "//remoting/host/it2me:common",
    "//remoting/host/native_messaging",
    "//remoting/host/security_key:unit_tests",
    "//remoting/host/setup",
    "//remoting/proto",
    "//remoting/resources",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (is_linux && !is_chromeos) {
    deps += [ "//remoting/host/linux:unit_tests" ]
  }

  if (is_chromeos) {
    deps += [
      "//remoting/host/chromeos:unit_tests",
      "//remoting/host/linux",  # for AudioPipeReader
    ]
  }

  if (is_win) {
    deps += [ "//remoting/host/win:unit_tests" ]
  }

  if (!is_ios) {
    deps += [ "//components/policy/core/browser:test_support" ]
  }

  if (enable_me2me_host) {
    sources += [ "evaluate_capability_unittest.cc" ]
    data_deps = [
      "//remoting/test:capability_test_stub",
    ]
  }
}

group("remoting_host_branded") {
  testonly = true
  deps = []
  if (enable_remoting_host) {
    deps += [ ":remoting_host_installation" ]
  }
  if (enable_me2me_host) {
    deps += [ "//remoting/host:remoting_me2me_host_archive" ]
  }
}

if (enable_remoting_host) {
  group("remoting_host_installation") {
    deps = []
    if (is_win) {
      deps += [ "//remoting/host/installer/win:remoting_host_installation" ]
    }
  }
}

if (enable_remoting_host) {
  executable("remoting_start_host") {
    sources = [
      "setup/start_host_entry_point.cc",
    ]

    deps = [
      "//third_party/libjingle_xmpp",
      "//third_party/webrtc_overrides:init_webrtc",
    ]

    configs += [ "//build/config/compiler:wexit_time_destructors" ]

    if (is_win) {
      defines = host_predefines +
                [ "REMOTING_HOST_BINARY=BINARY_REMOTING_START_HOST" ]

      deps += [
        "//build/win:default_exe_manifest",
        "//remoting/host/win:remoting_core",
        "//remoting/host/win:remoting_windows_resources",
      ]
    } else {
      sources += [
        "setup/host_starter.cc",
        "setup/host_starter.h",
        "setup/start_host_main.cc",
        "setup/start_host_main.h",
      ]

      deps += [
        "//google_apis",
        "//mojo/core/embedder",
        "//net",
        "//remoting/host/setup",
      ]
    }
  }

  action_foreach("remoting_native_messaging_manifests") {
    if (is_mac) {
      me2me_host_path = "/Library/PrivilegedHelperTools/$me2me_host_bundle_name/Contents/MacOS/$native_messaging_host_bundle_name/Contents/MacOS/native_messaging_host"
      it2me_host_path = "/Library/PrivilegedHelperTools/$me2me_host_bundle_name/Contents/MacOS/$remote_assistance_host_bundle_name/Contents/MacOS/remote_assistance_host"
    } else if (is_win) {
      me2me_host_path = "remoting_native_messaging_host.exe"
      it2me_host_path = "remote_assistance_host.exe"
    } else {
      me2me_host_path =
          "/opt/google/chrome-remote-desktop/native-messaging-host"
      it2me_host_path =
          "/opt/google/chrome-remote-desktop/remote-assistance-host"
    }

    script = "../tools/build/remoting_localize.py"

    sources = [
      "it2me/com.google.chrome.remote_assistance-firefox.json.jinja2",
      "it2me/com.google.chrome.remote_assistance.json.jinja2",
      "setup/com.google.chrome.remote_desktop-firefox.json.jinja2",
      "setup/com.google.chrome.remote_desktop.json.jinja2",
    ]

    inputs = [
      branding_path,
    ]

    outputs = [
      "$root_build_dir/remoting/{{source_name_part}}",
    ]

    args = [
      "--define",
      "ME2ME_HOST_PATH=$me2me_host_path",
      "--define",
      "IT2ME_HOST_PATH=$it2me_host_path",
      "--variables",
      rebase_path(branding_path, root_build_dir),
      "--template",
      "{{source}}",
      "--output",
      "remoting/{{source_name_part}}",
      "en",
    ]
  }

  action_foreach("remoting_infoplist_strings") {
    sources = [
      "installer/mac/uninstaller/remoting_uninstaller-InfoPlist.strings.jinja2",
      "it2me/remote_assistance_host-InfoPlist.strings.jinja2",
      "remoting_me2me_host-InfoPlist.strings.jinja2",
      "setup/native_messaging_host-InfoPlist.strings.jinja2",
    ]

    script = "//remoting/tools/build/remoting_localize.py"
    args = [
             "--locale_dir",
             rebase_path(webapp_locale_dir, root_build_dir),
             "--variables",
             rebase_path(branding_path, root_build_dir),
             "--template",
             "{{source}}",
             "--locale_output",
             rebase_path(
                 "$root_gen_dir/remoting/host/{{source_name_part}}/@{json_suffix}.lproj/InfoPlist.strings",
                 root_build_dir),
           ] + remoting_locales_with_underscores

    outputs = []
    foreach(locale, remoting_locales_with_underscores) {
      outputs += [ "$root_gen_dir/remoting/host/{{source_name_part}}/$locale.lproj/InfoPlist.strings" ]
    }

    deps = [
      "//remoting/resources",
      "//remoting/resources:strings",
    ]
  }
}

if (enable_me2me_host) {
  static_library("remoting_me2me_host_static") {
    sources = [
      "remoting_me2me_host.cc",
    ]
    defines = []

    configs += [
      "//remoting/build/config:version",
      "//remoting/build/config:remoting_me2me_host",
    ]

    deps = [
      "//base",
      "//base:i18n",
      "//components/policy/core/common",
      "//ipc",
      "//mojo/core/embedder",
      "//net",
      "//remoting/base",
      "//remoting/host",
      "//remoting/proto",
      "//third_party/libjingle_xmpp",
      "//third_party/webrtc/modules/desktop_capture",
      "//third_party/webrtc_overrides:init_webrtc",
    ]

    if (is_posix) {
      sources += [
        "pam_authorization_factory_posix.cc",
        "pam_authorization_factory_posix.h",
      ]
    }

    if (!is_ios) {
      deps += [ "//components/policy:generated" ]
    }

    if (is_desktop_linux) {
      deps += [ "//build/config/linux/gtk" ]
    }
    if ((is_linux && !is_chromeos) || is_mac) {
      libs = [ "pam" ]
    }

    if (is_mac && is_official_build) {
      sources += [ "internal/internal_mac-inl.h" ]
    }
  }

  if (is_win) {
    group("remoting_me2me_host") {
      deps = [
        "//remoting/host/win:remoting_me2me_host",
      ]
    }
    group("remoting_native_messaging_host") {
      deps = [
        "//remoting/host/win:remoting_native_messaging_host",
      ]
    }
  } else {
    source_set("main") {
      sources = [
        "host_main.cc",
        "host_main.h",
      ]
      deps = [
        "//base:debugging_buildflags",
      ]
    }
    if (is_mac) {
      group("remoting_me2me_host") {
        deps = [
          "//remoting/host/mac:remoting_me2me_host",
        ]
      }
    } else {
      target("executable", "remoting_me2me_host") {
        configs += [ "//remoting/build/config:version" ]

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

        deps = [
          ":remoting_me2me_host_static",
          "//remoting/base:breakpad",
          "//remoting/host/installer:credits",
          "//remoting/resources",
        ]
      }
    }

    if (is_mac) {
      group("remoting_native_messaging_host") {
        deps = [
          "//remoting/host/mac:remoting_native_messaging_host",
        ]
      }
    } else {
      group("remoting_native_messaging_host") {
        deps = [
          "//remoting/host/linux:remoting_native_messaging_host",
        ]
      }
    }
  }
  if (is_chrome_branded && enable_me2me_host && is_linux && !is_chromeos) {
    group("remoting_me2me_host_archive") {
      deps = [
        "//remoting/host/installer/linux:remoting_me2me_host_archive",
      ]
    }
  } else if (is_win) {
    group("remoting_me2me_host_archive") {
      deps = [
        "//remoting/host/installer/win:remoting_me2me_host_archive",
      ]
    }
  } else if (is_mac) {
    group("remoting_me2me_host_archive") {
      deps = [
        "//remoting/host/installer/mac:remoting_me2me_host_archive",
      ]
    }
  } else {
    group("remoting_me2me_host_archive") {
    }
  }
}
