# 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",
    "//google_apis",
    "//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_network_delegate.cc",
    "browser/shell_network_delegate.h",
    "browser/shell_oauth2_token_service.cc",
    "browser/shell_oauth2_token_service.h",
    "browser/shell_oauth2_token_service_delegate.cc",
    "browser/shell_oauth2_token_service_delegate.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_url_request_context_getter.cc",
    "browser/shell_url_request_context_getter.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 += [
      "//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_oauth2_token_service_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",
    "//google_apis",
    "//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",
    ]
  }
}
