# 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("//mojo/public/mojo.gni")
import("//mojo/public/tools/bindings/mojom.gni")

# We don't support building in the component build since mojo apps are
# inherently components.
assert(!is_component_build)

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

if (!use_prebuilt_mojo_shell) {
  executable("mojo_shell") {
    sources = [
      "desktop/mojo_main.cc",
    ]

    deps = [
      ":init",
      ":lib",
      "//base",
      "//build/config/sanitizers:deps",
      "//mojo/common",
      "//mojo/environment:chromium",
    ]
  }
}  # !use_prebuilt_mojo_shell

executable("mojo_launcher") {
  sources = [
    "launcher_main.cc",
  ]

  deps = [
    ":external_application_registrar_bindings",
    ":external_application_registrar_connection",
    ":init",
    ":in_process_dynamic_service_runner",
    "//base",
    "//build/config/sanitizers:deps",
    "//mojo/common",
    "//mojo/edk/system",
    "//mojo/environment:chromium",
    "//url",
  ]
}

source_set("init") {
  sources = [
    "init.cc",
    "init.h",
  ]

  deps = [
    "//base",
  ]
}

source_set("in_process_dynamic_service_runner") {
  sources = [
    "dynamic_service_runner.cc",
    "dynamic_service_runner.h",
    "in_process_dynamic_service_runner.cc",
    "in_process_dynamic_service_runner.h",
  ]

  deps = [
    "//base",
    "//mojo/gles2",
    "//mojo/public/cpp/system",
  ]

  # This target has to include the public thunk headers, which generally
  # shouldn't be included without picking an implementation. We are providing
  # the implementation but the thunk header target cannot declare that we are
  # permitted to include it since it's in the public SDK and we are not.
  # Suppress include checking so we can still check the rest of the targets in
  # this file.
  check_includes = false
}

source_set("lib") {
  sources = [
    "app_child_process.cc",
    "app_child_process.h",
    "app_child_process_host.cc",
    "app_child_process_host.h",
    "child_process.cc",
    "child_process.h",
    "child_process_host.cc",
    "child_process_host.h",
    "context.cc",
    "context.h",
    "data_pipe_peek.cc",
    "data_pipe_peek.h",
    "dynamic_application_loader.cc",
    "dynamic_application_loader.h",
    "external_application_listener.h",
    "external_application_listener_posix.cc",
    "external_application_listener_win.cc",
    "filename_util.cc",
    "filename_util.h",
    "incoming_connection_listener_posix.cc",
    "incoming_connection_listener_posix.h",
    "mojo_url_resolver.cc",
    "mojo_url_resolver.h",
    "out_of_process_dynamic_service_runner.cc",
    "out_of_process_dynamic_service_runner.h",
    "switches.cc",
    "switches.h",
    "task_runners.cc",
    "task_runners.h",
    "test_child_process.cc",
    "test_child_process.h",
    "ui_application_loader_android.cc",
    "ui_application_loader_android.h",
  ]

  deps = [
    ":app_child_process_bindings",
    ":external_application_registrar_bindings",
    ":init",
    ":in_process_dynamic_service_runner",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//base:base_static",
    "//mojo/application",
    "//mojo/application_manager",
    "//mojo/common",
    "//mojo/common:tracing_impl",
    "//mojo/edk/system",
    "//mojo/public/cpp/bindings",
    "//mojo/public/interfaces/application",
    "//mojo/services/public/interfaces/network",
    "//mojo/shell/domain_socket",
    "//mojo/spy",
    "//services/tracing:bindings",
    "//url",
  ]

  if (is_win) {
    deps -= [ "//mojo/shell/domain_socket" ]
  }

  if (is_android) {
    sources += [
      "android/android_handler.h",
      "android/android_handler.cc",
      "android/android_handler_loader.h",
      "android/android_handler_loader.cc",
      "network_application_loader.cc",
      "network_application_loader.h",
    ]

    deps += [
      ":jni_headers",
      ":run_android_application_function",
      "//mojo/application:content_handler",
      "//mojo/services/network:lib",
      "//services/gles2",
      "//services/native_viewport:lib",
    ]
  }

  # This target includes some files behind #ifdef OS... guards. Since gn is not
  # smart enough to understand preprocess includes, it does complains about
  # these includes when not using the build files for that OS. Suppress checking
  # so we can enable checking for the rest of the targets in this file.
  # TODO: Might be better to split the files with OS-specific includes out to a
  # separate source_set so we can leave checking on for the rest of the target.
  check_includes = false
}

if (is_android) {
  generate_jni("jni_headers") {
    sources = [
      "android/apk/src/org/chromium/mojo_shell_apk/AndroidHandler.java",
      "android/apk/src/org/chromium/mojo_shell_apk/Bootstrap.java",
      "android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java",
    ]
    jni_package = "mojo"
  }

  android_library("bootstrap_java") {
    java_files =
        [ "android/apk/src/org/chromium/mojo_shell_apk/Bootstrap.java" ]

    deps = [
      "//base:base_java",
    ]

    dex_path = "$target_out_dir/bootstrap_java.dex.jar"
  }

  shared_library("bootstrap") {
    sources = [
      "android/bootstrap.cc",
    ]
    deps = [
      ":jni_headers",
      ":lib",
      ":run_android_application_function",
      "//base",
    ]
  }

  # Shared header between the bootstrap and the main shell .so.
  source_set("run_android_application_function") {
    sources = [
      "android/run_android_application_function.h",
    ]
  }

  android_library("java") {
    java_files = [
      "android/apk/src/org/chromium/mojo_shell_apk/AndroidHandler.java",
      "android/apk/src/org/chromium/mojo_shell_apk/FileHelper.java",
      "android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java",
      "android/apk/src/org/chromium/mojo_shell_apk/MojoShellActivity.java",
      "android/apk/src/org/chromium/mojo_shell_apk/MojoShellApplication.java",
    ]

    deps = [
      "//base:base_java",
      "//net/android:net_java",
    ]
  }

  android_resources("resources") {
    resource_dirs = [ "android/apk/res" ]
    custom_package = "org.chromium.mojo_shell_apk"
  }

  shared_library("libmojo_shell") {
    sources = [
      "android/library_loader.cc",
      "android/mojo_main.cc",
      "android/mojo_main.h",
    ]
    deps = [
      ":jni_headers",
      ":lib",
      "//mojo/application_manager",
      "//net",
      "//services/native_viewport:lib",
      "//ui/gl",
    ]
  }

  mojo_shell_assets_dir = "$root_build_dir/mojo_shell_assets"

  copy_ex("copy_mojo_shell_assets") {
    clear_dir = true
    dest = mojo_shell_assets_dir
    sources = [
      "$root_out_dir/lib.stripped/libbootstrap.so",
      "$root_out_dir/obj/mojo/shell/bootstrap_java.dex.jar",
    ]
  }

  android_apk("mojo_shell_apk") {
    apk_name = "MojoShell"

    android_manifest = "android/apk/AndroidManifest.xml"

    native_libs = [ "libmojo_shell.so" ]

    asset_location = mojo_shell_assets_dir

    deps = [
      ":copy_mojo_shell_assets",
      ":java",
      ":libmojo_shell",
      ":resources",
      "//services/native_viewport:native_viewport_java",
    ]
  }
}

mojom("app_child_process_bindings") {
  sources = [
    "app_child_process.mojom",
  ]
}

mojom("external_application_registrar_bindings") {
  sources = [
    "external_application_registrar.mojom",
  ]

  deps = [
    "//mojo/public/interfaces/application",
  ]
}

source_set("external_application_registrar_connection") {
  sources = [
    "external_application_registrar_connection.cc",
    "external_application_registrar_connection.h",
  ]

  deps = [
    ":external_application_registrar_bindings",
    "//base",
    "//mojo/common",
    "//mojo/edk/system",
    "//mojo/public/cpp/bindings",
    "//mojo/public/interfaces/application",
    "//mojo/shell/domain_socket",
    "//url",
  ]

  if (is_win) {
    deps -= [ "//mojo/shell/domain_socket" ]
  }
}

# GYP version: mojo/mojo.gyp:mojo_shell_tests
test("mojo_shell_tests") {
  sources = [
    "child_process_host_unittest.cc",
    "data_pipe_peek_unittest.cc",
    "dynamic_application_loader_unittest.cc",
    "in_process_dynamic_service_runner_unittest.cc",
    "mojo_url_resolver_unittest.cc",
    "shell_test_base.cc",
    "shell_test_base.h",
    "shell_test_base_unittest.cc",
    "shell_test_main.cc",
  ]

  deps = [
    ":in_process_dynamic_service_runner",
    ":lib",
    "//base",
    "//base:i18n",
    "//base/test:test_support",
    "//testing/gtest",
    "//net:test_support",
    "//url",
    "//mojo/application_manager",
    "//mojo/common",
    "//mojo/edk/system",
    "//mojo/environment:chromium",
    "//mojo/public/cpp/bindings",
    "//services/test_service:bindings",
  ]

  datadeps = [
    "//services/test_service:test_app",
    "//services/test_service:test_request_tracker_app",
  ]

  if (is_android) {
    deps += [
      # TODO(GYP):
      #'../testing/android/native_test.gyp:native_test_native_code',
    ]
  }
}

# GYP version: mojo/mojo.gyp:mojo_shell_test_support
source_set("test_support") {
  sources = [
    "shell_test_helper.cc",
    "shell_test_helper.h",
  ]

  deps = [
    ":init",
    ":lib",
    "//base",
    "//mojo/application_manager",
    "//mojo/edk/system",
  ]
}

test("external_application_unittests") {
  sources = [
    "incoming_connection_listener_unittest.cc",
    "external_application_listener_unittest.cc",
    "external_application_test_main.cc",
  ]

  deps = [
    ":lib",
    ":external_application_registrar_connection",
    ":external_application_registrar_bindings",
    "//base",
    "//base/test:test_support",
    "//testing/gtest",
    "//url",
    "//mojo/application",
    "//mojo/application_manager",
    "//mojo/common",
    "//mojo/edk/system",
    "//mojo/environment:chromium",
    "//mojo/shell/domain_socket",
    "//mojo/shell/domain_socket:tests",
  ]

  if (is_win) {
    sources -= [
      "incoming_connection_listener_unittest.cc",
      "external_application_listener_unittest.cc",
    ]

    deps -= [
      ":lib",
      ":external_application_registrar_connection",
      ":external_application_registrar_bindings",
      "//mojo/shell/domain_socket",
      "//mojo/shell/domain_socket:tests",
    ]
  }
}
