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

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

group("shell") {
  testonly = true

  deps = [
    ":mojo_shell",
    ":tests",
  ]

  if (is_android) {
    deps += [
      ":mojo_shell_apk",
      ":mojo_shell_tests_apk",
    ]
  }
}

group("tests") {
  testonly = true
  deps = [
    ":mojo_shell_tests",
    "//shell/application_manager:mojo_application_manager_unittests",
  ]
}

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

if (!mojo_use_prebuilt_mojo_shell) {
  executable("mojo_shell") {
    sources = []

    deps = [
      ":lib",
      "//base",
      "//base/allocator",
      "//build/config/sanitizers:deps",
      "//mojo/common",
      "//mojo/environment:chromium",
    ]

    data_deps = [ ":mojo_shell_child" ]

    if (!is_android) {
      sources += [ "desktop/main.cc" ]
    } else {
      sources += [
        "android/library_loader.cc",
        "android/main.cc",
        "android/main.h",
      ]

      # On android, the executable is also the native library used by the apk.
      # It means dynamic symbols must be preserved and exported.
      ldflags = [ "-Wl,--export-dynamic" ]

      deps += [
        ":jni_headers",
        "//services/native_viewport:lib",
        "//shell/application_manager",
        "//ui/gl",
      ]
    }
  }

  executable("mojo_shell_child") {
    sources = [
      "child_main.cc",
    ]

    deps = [
      # TODO(vtl): Reduce these dependencies (probably mostly in :lib).
      ":child_controller_bindings",
      ":common_lib",
      "//base",
      "//base/allocator",
      "//build/config/sanitizers:deps",
      "//mojo/common",
      "//mojo/edk/system",
      "//mojo/environment:chromium",
    ]
  }
}  # !mojo_use_prebuilt_mojo_shell

# Files used both by mojo_shell and mojo_shell_child (and tests).
source_set("common_lib") {
  sources = [
    "init.cc",
    "init.h",
  ]

  deps = [
    "//base",
  ]

  public_deps = [
    ":native_application_support",
    ":switches",
  ]
}

# TODO(vtl): Split this target into parent/child/common libs.
source_set("lib") {
  sources = [
    "child_process_host.cc",
    "child_process_host.h",
    "command_line_util.cc",
    "command_line_util.h",
    "context.cc",
    "context.h",
    "filename_util.cc",
    "filename_util.h",
    "in_process_native_runner.cc",
    "in_process_native_runner.h",
    "out_of_process_native_runner.cc",
    "out_of_process_native_runner.h",
    "task_runners.cc",
    "task_runners.h",
    "tracer.cc",
    "tracer.h",
    "url_resolver.cc",
    "url_resolver.h",
  ]

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

  public_deps = [
    ":common_lib",
  ]

  if (is_android) {
    sources += [
      "android/android_handler.cc",
      "android/android_handler.h",
      "android/android_handler_loader.cc",
      "android/android_handler_loader.h",
      "android/background_application_loader.cc",
      "android/background_application_loader.h",
      "android/intent_receiver_manager_factory.cc",
      "android/intent_receiver_manager_factory.h",
      "android/intent_receiver_manager_impl.cc",
      "android/intent_receiver_manager_impl.h",
      "android/keyboard_impl.cc",
      "android/keyboard_impl.h",
      "android/native_viewport_application_loader.cc",
      "android/native_viewport_application_loader.h",
      "android/ui_application_loader_android.cc",
      "android/ui_application_loader_android.h",
    ]

    deps += [
      ":jni_headers",
      ":run_android_application_function",
      "//mojo/application:content_handler",
      "//mojo/services/content_handler/public/interfaces",
      "//mojo/services/gpu/public/interfaces",
      "//mojo/services/keyboard/public/interfaces",
      "//mojo/services/native_viewport/public/interfaces",
      "//services/android:bindings",
      "//services/gles2",
      "//services/native_viewport:lib",
    ]
  }
}

# This is a separate target mainly since it suppresses check_includes.
# TODO(vtl): Make it so that the suppression isn't needed.
source_set("native_application_support") {
  sources = [
    "native_application_support.cc",
    "native_application_support.h",
  ]

  public_deps = [
    "//mojo/public/cpp/bindings",
  ]

  deps = [
    "//base",
    "//mojo/gles2",
  ]

  # 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
}

# TODO(vtl): This should just be a part of :common_lib, but stuff in
# application_manager uses it. We should fix that.
source_set("switches") {
  sources = [
    "switches.cc",
    "switches.h",
  ]

  deps = [
    "//base",
  ]
}

if (is_android) {
  generate_jni("jni_headers") {
    sources = [
      "android/apk/src/org/chromium/mojo/shell/AndroidHandler.java",
      "android/apk/src/org/chromium/mojo/shell/Bootstrap.java",
      "android/apk/src/org/chromium/mojo/shell/IntentReceiverRegistry.java",
      "android/apk/src/org/chromium/mojo/shell/Keyboard.java",
      "android/apk/src/org/chromium/mojo/shell/ShellMain.java",
      "android/tests/src/org/chromium/mojo/shell/ShellTestBase.java",
    ]
    jni_package = "mojo/shell"
  }

  android_library("bootstrap_java") {
    java_files = [ "android/apk/src/org/chromium/mojo/shell/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",
      ":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",
    ]

    deps = [
      "//base",
    ]
  }

  android_library("java") {
    java_files = [
      "android/apk/src/org/chromium/mojo/shell/AndroidHandler.java",
      "android/apk/src/org/chromium/mojo/shell/IntentReceiverService.java",
      "android/apk/src/org/chromium/mojo/shell/FileHelper.java",
      "android/apk/src/org/chromium/mojo/shell/IntentReceiverRegistry.java",
      "android/apk/src/org/chromium/mojo/shell/Keyboard.java",
      "android/apk/src/org/chromium/mojo/shell/MojoShellActivity.java",
      "android/apk/src/org/chromium/mojo/shell/MojoShellApplication.java",
      "android/apk/src/org/chromium/mojo/shell/ShellMain.java",
    ]

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

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

  mojo_shell_assets_dir = "$root_build_dir/mojo_shell_assets"
  mojo_shell_test_assets_dir = "$root_build_dir/mojo_shell_test_assets"

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

  copy("copy_mojo_shell") {
    sources = [
      "$root_out_dir/exe.stripped/mojo_shell",
    ]
    outputs = [
      "$root_out_dir/lib.stripped/libmojo_shell.so",
    ]
  }

  copy_ex("copy_mojo_shell_test_assets") {
    clear_dir = true
    dest = mojo_shell_test_assets_dir
    sources = [
      "$root_out_dir/test_app.mojo",
      "$root_out_dir/test_request_tracker_app.mojo",
    ]
  }

  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",
      ":copy_mojo_shell_assets",
      ":java",
      ":resources",
      "//base:base_java",
      "//services/native_viewport:native_viewport_java",
      "//third_party/android_tools:google_play_services_default_resources",
    ]
  }

  android_library("mojo_shell_tests_java") {
    java_files =
        [ "android/tests/src/org/chromium/mojo/shell/ShellTestBase.java" ]

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

mojom("child_controller_bindings") {
  sources = [
    "child_controller.mojom",
  ]

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

test("mojo_shell_tests") {
  sources = [
    "child_process_host_unittest.cc",
    "command_line_util_unittest.cc",
    "context_unittest.cc",
    "data_pipe_peek_unittest.cc",
    "in_process_native_runner_unittest.cc",
    "native_runner_unittest.cc",
    "shell_test_base.cc",
    "shell_test_base.h",
    "shell_test_base_android.cc",
    "shell_test_base_unittest.cc",
    "shell_test_main.cc",
    "url_resolver_unittest.cc",
  ]

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

  data_deps = [
    ":mojo_shell_child",
    "//services/test_service:test_app",
    "//services/test_service:test_request_tracker_app",
  ]

  if (is_android) {
    sources += [ "android/background_application_loader_unittest.cc" ]

    deps += [ ":jni_headers" ]

    apk_deps = [
      ":copy_mojo_shell_test_assets",
      ":mojo_shell_tests_java",
    ]

    apk_asset_location = mojo_shell_test_assets_dir
  }
}

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

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

embed_file("embed_pingable") {
  source = "$root_build_dir/pingable_app.mojo"
  namespace = "shell::test"
  variable = "kPingable"
  testonly = true

  deps = [
    "//shell/test:pingable_app",
  ]
}

mojo_native_application("apptests") {
  output_name = "shell_apptests"

  testonly = true

  sources = [
    "shell_apptest.cc",
  ]

  deps = [
    "//base",
    "//mojo/application",
    "//mojo/application:test_support",
    "//mojo/common:common",
    "//mojo/public/cpp/bindings:callback",
    "//mojo/public/cpp/environment",
    "//mojo/public/cpp/system:system",
    "//mojo/services/http_server/public/cpp",
    "//mojo/services/http_server/public/interfaces",
    "//mojo/services/network/public/interfaces",
    "//shell/test:bindings",
    ":embed_pingable",
  ]

  data_deps = [ "//services/http_server:http_server($default_toolchain)" ]
}
