# 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/features.gni")
import("//build/config/ui.gni")
import("//build/util/lastchange.gni")
import("//build/util/process_version.gni")
import("//components/nacl/features.gni")
import("//extensions/buildflags/buildflags.gni")
import("//testing/test.gni")
import("//tools/grit/grit_rule.gni")
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")

if (is_linux) {
  import("//build/linux/extract_symbols.gni")
}

assert(enable_extensions)

grit("resources") {
  source = "app_shell_resources.grd"
  outputs = [
    "grit/app_shell_resources.h",
    "app_shell_resources.pak",
  ]
}

source_set("app_shell_lib") {
  # TODO(jamescook): investigate and get rid of test dependencies. This library
  # is testonly because it depends on testonly libraries, namely
  # //content/shell:content_shell_lib. See http://crbug.com/438283
  testonly = true
  deps = [
    ":resources",
    ":version_header",
    "//apps",
    "//base",
    "//components/feedback",
    "//components/guest_view/browser",
    "//components/guest_view/renderer",
    "//components/keep_alive_registry",
    "//components/keyed_service/content:content",
    "//components/nacl/common:buildflags",
    "//components/network_session_configurator/common",
    "//components/pref_registry",
    "//components/prefs",
    "//components/sessions",
    "//components/storage_monitor",
    "//components/update_client",
    "//components/user_prefs",
    "//components/version_info",
    "//content",
    "//content/shell:content_shell_lib",
    "//device/bluetooth",
    "//extensions:extensions_resources",
    "//extensions:shell_and_test_pak",
    "//extensions/browser",
    "//extensions/browser:core_api_provider",
    "//extensions/browser/kiosk",
    "//extensions/common",
    "//extensions/common:core_api_provider",
    "//extensions/common/api",
    "//extensions/renderer",
    "//extensions/shell/browser/system_logs",
    "//extensions/shell/common/api",
    "//extensions/shell/common/api:extensions_features",
    "//third_party/blink/public:blink",
    "//ui/base",
    "//ui/base/ime/init",
  ]

  # TODO(michaelpg): remove Mac support and always use aura.
  if (use_aura) {
    deps += [
      "//ui/aura",
      "//ui/views",
    ]

    if (use_x11) {
      deps += [ "//ui/events/devices/x11" ]
    }
  }

  sources = [
    "app/shell_main_delegate.cc",
    "app/shell_main_delegate.h",
    "app/shell_main_delegate_mac.mm",
    "browser/api/feedback_private/shell_feedback_private_delegate.cc",
    "browser/api/feedback_private/shell_feedback_private_delegate.h",
    "browser/api/identity/identity_api.cc",
    "browser/api/identity/identity_api.h",
    "browser/api/runtime/shell_runtime_api_delegate.cc",
    "browser/api/runtime/shell_runtime_api_delegate.h",
    "browser/default_shell_browser_main_delegate.cc",
    "browser/default_shell_browser_main_delegate.h",
    "browser/delegates/shell_kiosk_delegate.cc",
    "browser/delegates/shell_kiosk_delegate.h",
    "browser/desktop_controller.cc",
    "browser/desktop_controller.h",
    "browser/shell_app_delegate.cc",
    "browser/shell_app_delegate.h",
    "browser/shell_app_view_guest_delegate.cc",
    "browser/shell_app_view_guest_delegate.h",
    "browser/shell_app_window_client.cc",
    "browser/shell_app_window_client.h",
    "browser/shell_app_window_client_mac.mm",
    "browser/shell_audio_controller_chromeos.cc",
    "browser/shell_audio_controller_chromeos.h",
    "browser/shell_browser_context.cc",
    "browser/shell_browser_context.h",
    "browser/shell_browser_context_keyed_service_factories.cc",
    "browser/shell_browser_context_keyed_service_factories.h",
    "browser/shell_browser_main_delegate.h",
    "browser/shell_browser_main_parts.cc",
    "browser/shell_browser_main_parts.h",
    "browser/shell_content_browser_client.cc",
    "browser/shell_content_browser_client.h",
    "browser/shell_desktop_controller_mac.h",
    "browser/shell_desktop_controller_mac.mm",
    "browser/shell_display_info_provider.cc",
    "browser/shell_display_info_provider.h",
    "browser/shell_extension_host_delegate.cc",
    "browser/shell_extension_host_delegate.h",
    "browser/shell_extension_loader.cc",
    "browser/shell_extension_loader.h",
    "browser/shell_extension_system.cc",
    "browser/shell_extension_system.h",
    "browser/shell_extension_system_factory.cc",
    "browser/shell_extension_system_factory.h",
    "browser/shell_extension_web_contents_observer.cc",
    "browser/shell_extension_web_contents_observer.h",
    "browser/shell_extensions_api_client.cc",
    "browser/shell_extensions_api_client.h",
    "browser/shell_extensions_browser_api_provider.cc",
    "browser/shell_extensions_browser_api_provider.h",
    "browser/shell_extensions_browser_client.cc",
    "browser/shell_extensions_browser_client.h",
    "browser/shell_keep_alive_requester.cc",
    "browser/shell_keep_alive_requester.h",
    "browser/shell_native_app_window.cc",
    "browser/shell_native_app_window.h",
    "browser/shell_native_app_window_mac.h",
    "browser/shell_native_app_window_mac.mm",
    "browser/shell_navigation_ui_data.cc",
    "browser/shell_navigation_ui_data.h",
    "browser/shell_network_controller_chromeos.cc",
    "browser/shell_network_controller_chromeos.h",
    "browser/shell_prefs.cc",
    "browser/shell_prefs.h",
    "browser/shell_special_storage_policy.cc",
    "browser/shell_special_storage_policy.h",
    "browser/shell_speech_recognition_manager_delegate.cc",
    "browser/shell_speech_recognition_manager_delegate.h",
    "browser/shell_update_query_params_delegate.cc",
    "browser/shell_update_query_params_delegate.h",
    "browser/shell_virtual_keyboard_delegate.cc",
    "browser/shell_virtual_keyboard_delegate.h",
    "browser/shell_web_view_guest_delegate.cc",
    "browser/shell_web_view_guest_delegate.h",
    "common/shell_content_client.cc",
    "common/shell_content_client.h",
    "common/shell_extensions_api_provider.cc",
    "common/shell_extensions_api_provider.h",
    "common/shell_extensions_client.cc",
    "common/shell_extensions_client.h",
    "common/switches.cc",
    "common/switches.h",
    "renderer/shell_content_renderer_client.cc",
    "renderer/shell_content_renderer_client.h",
    "renderer/shell_extensions_renderer_client.cc",
    "renderer/shell_extensions_renderer_client.h",
  ]

  if (use_aura) {
    sources += [
      "browser/root_window_controller.cc",
      "browser/root_window_controller.h",
      "browser/shell_app_window_client_aura.cc",
      "browser/shell_desktop_controller_aura.cc",
      "browser/shell_desktop_controller_aura.h",
      "browser/shell_native_app_window_aura.cc",
      "browser/shell_native_app_window_aura.h",
    ]
    deps += [
      "//ui/platform_window",
      "//ui/wm",
      "//ui/wm/public",
    ]
    if (is_chromeos) {
      deps += [ "//ui/ozone" ]
    }
  }

  if (is_desktop_linux) {
    sources += [
      "app/shell_crash_reporter_client.cc",
      "app/shell_crash_reporter_client.h",
      "browser/api/file_system/shell_file_system_delegate.cc",
      "browser/api/file_system/shell_file_system_delegate.h",
    ]
    deps += [
      "//build:branding_buildflags",
      "//components/crash/content/app",
      "//components/crash/core/common",
      "//components/upload_list",
      "//components/version_info:generate_version_info",
    ]
  }

  if (is_chromeos) {
    sources += [
      "browser/api/vpn_provider/vpn_service_factory.cc",
      "browser/shell_screen.cc",
      "browser/shell_screen.h",
    ]
    deps += [
      "//chromeos/audio",
      "//chromeos/constants",
      "//chromeos/dbus",
      "//chromeos/dbus/audio",
      "//chromeos/dbus/power",
      "//chromeos/disks",
      "//chromeos/login/login_state",
      "//chromeos/network",
      "//ui/chromeos",
      "//ui/display/manager",
    ]
  }

  if (enable_nacl) {
    sources += [
      "browser/shell_nacl_browser_delegate.cc",
      "browser/shell_nacl_browser_delegate.h",
    ]

    deps += [
      "//components/nacl/browser",
      "//components/nacl/common",
      "//components/nacl/loader",
      "//components/nacl/renderer",
      "//components/nacl/renderer/plugin:nacl_trusted_plugin",
      "//ppapi/shared_impl:shared_impl",
    ]

    if (is_linux) {
      deps += [ "//components/nacl/loader:nacl_helper" ]

      if (enable_nacl_nonsfi) {
        deps += [ "//components/nacl/loader:helper_nonsfi" ]
      }
    }
  }
}

executable("app_shell") {
  # testonly because :app_shell_lib is testonly. See :app_shell_lib comment.
  testonly = true
  sources = [
    "app/shell_main.cc",
  ]

  deps = [
    ":app_shell_lib",
    "//build/win:default_exe_manifest",
    "//content/public/app:both",
    "//extensions:shell_and_test_pak",
  ]

  if (is_win) {
    configs += [ "//build/config/win:windowed" ]
    configs -= [ "//build/config/win:console" ]
    deps += [ "//sandbox/win:sandbox" ]
  }
}

test("app_shell_unittests") {
  sources = [
    "../test/extensions_unittests_main.cc",
    "browser/api/identity/identity_api_unittest.cc",
    "browser/shell_content_browser_client_unittest.cc",
    "browser/shell_extension_loader_unittest.cc",
    "browser/shell_keep_alive_requester_unittest.cc",
    "browser/shell_prefs_unittest.cc",
    "browser/system_logs/shell_system_logs_fetcher_unittest.cc",
    "test/shell_test_extensions_browser_client.cc",
    "test/shell_test_extensions_browser_client.h",
  ]

  data = [
    "//extensions/test/data/",
    "$root_out_dir/extensions_shell_and_test.pak",

    #"$root_out_dir/natives_blob.bin", # move to gin
  ]

  deps = [
    ":app_shell_lib",
    "//apps",
    "//base",
    "//base/test:test_support",
    "//components/crx_file",
    "//components/feedback",
    "//components/keep_alive_registry",
    "//components/prefs",
    "//components/user_prefs",
    "//content/test:test_support",
    "//extensions:shell_and_test_pak",
    "//extensions:test_support",
    "//extensions/browser",
    "//extensions/common",
    "//extensions/common/api",
    "//extensions/shell/browser/system_logs",
    "//testing/gtest",
    "//ui/gl:test_support",
    "//ui/platform_window",
  ]

  data_deps = [
    # "//gin", # TODO(dpranke): Either gin or v8 data is needed ...
    "//third_party/mesa_headers",
  ]

  if (use_aura) {
    sources += [
      "browser/root_window_controller_unittest.cc",
      "browser/shell_desktop_controller_aura_unittest.cc",
      "browser/shell_native_app_window_aura_unittest.cc",
      "test/shell_test_base_aura.cc",
      "test/shell_test_base_aura.h",
      "test/shell_test_helper_aura.cc",
      "test/shell_test_helper_aura.h",
    ]
    deps += [
      "//ui/aura:test_support",
      "//ui/base:test_support",
      "//ui/base/ime/init",
      "//ui/compositor:test_support",
    ]
  }

  if (is_chromeos) {
    sources += [
      "browser/shell_audio_controller_chromeos_unittest.cc",
      "browser/shell_screen_unittest.cc",
    ]
    deps += [
      "//chromeos/audio",
      "//chromeos/constants",
      "//chromeos/dbus:test_support",
      "//chromeos/dbus/audio",
      "//chromeos/dbus/power",
    ]
  }

  if (enable_nacl) {
    sources += [ "browser/shell_nacl_browser_delegate_unittest.cc" ]
  }
}

process_version("version_header") {
  template_file = "common/version.h.in"
  sources = [
    "//chrome/VERSION",
    lastchange_file,
  ]
  output = "$target_gen_dir/common/version.h"
}

source_set("browser_tests") {
  testonly = true
  sources = [
    "browser/api/runtime/runtime_apitest.cc",
    "browser/shell_browsertest.cc",
    "test/shell_apitest.cc",
    "test/shell_apitest.h",
    "test/shell_test.cc",
    "test/shell_test.h",
    "test/shell_test_launcher_delegate.cc",
    "test/shell_test_launcher_delegate.h",
    "test/shell_tests_main.cc",
    "test/test_shell_main_delegate.cc",
    "test/test_shell_main_delegate.h",
  ]

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  deps = [
    ":app_shell_lib",
    "//base",
    "//base/test:test_support",
    "//components/keep_alive_registry",
    "//components/version_info",
    "//content/shell:content_shell_lib",
    "//content/test:test_support",
    "//extensions:test_support",
    "//extensions/browser",
    "//extensions/browser:test_support",
    "//extensions/common",
    "//ui/base",
  ]

  if (use_aura) {
    sources += [ "browser/shell_desktop_controller_aura_browsertest.cc" ]
    deps += [ "//ui/aura" ]
  }
}

source_set("unit_tests") {
  testonly = true
  sources = []

  deps = [
    ":app_shell_lib",
    "//base",
    "//base/test:test_support",
    "//extensions/browser",
  ]

  if (is_chromeos) {
    deps += [
      "//chromeos/constants",
      "//components/keyed_service/content",
    ]
  }
}

if (is_desktop_linux && is_official_build) {
  extract_symbols("app_shell_linux_symbols") {
    # testonly because :app_shell is testonly. See :app_shell_lib comment.
    testonly = true

    binary = "$root_out_dir/app_shell"
    symbol_file = "$root_out_dir/app_shell.breakpad.$current_cpu"
    deps = [
      ":app_shell",
    ]
  }
}
