# Copyright 2018 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/chrome_build.gni")
import("//build/toolchain/win/midl.gni")
import("//chrome/process_version_rc_template.gni")
import("//testing/test.gni")

midl("elevation_service_idl") {
  sources = [
    "elevation_service_idl.idl",
  ]
}

# Must be in a config because of how GN orders flags (otherwise /W4 will appear
# after this, and turn it back on).
config("no-missing-braces") {
  # Macros invoked by WRL CoCreatableClass omit optional braces.
  cflags = [ "-Wno-missing-braces" ]
}

# This service needs to work with Windows 7, so explicitly setting the defines
# to reflect this. Otherwise, WRL uses APIs that are only available in later
# Windows versions.
config("winver") {
  defines = [
    "NTDDI_VERSION=NTDDI_WIN7",
    "_WIN32_WINNT=_WIN32_WINNT_WIN7",
    "WINVER=_WIN32_WINNT_WIN7",
  ]
}

executable("elevation_service") {
  sources = [
    "elevation_service.cc",
    "elevation_service.rc",
  ]

  configs -= [ "//build/config/win:console" ]
  configs += [ "//build/config/win:windowed" ]
  configs += [ ":no-missing-braces" ]
  configs -= [ "//build/config/win:winver" ]
  configs += [ ":winver" ]

  deps = [
    ":lib",
    ":version_resources",
    "//base",
    "//build/win:default_exe_manifest",
    "//chrome/install_static:primary_module",
    "//components/crx_file",
    "//third_party/zlib/google:zip",
  ]
}

source_set("lib") {
  visibility = [ ":*" ]

  public = [
    "elevated_recovery_impl.h",
    "elevator.h",
    "service_main.h",
  ]

  sources = [
    "elevated_recovery_impl.cc",
    "elevator.cc",
    "service_main.cc",
  ]

  configs += [ ":no-missing-braces" ]
  configs -= [ "//build/config/win:winver" ]
  configs += [ ":winver" ]

  public_deps = [
    ":elevation_service_idl",
    "//base",
  ]

  deps = [
    "//chrome/install_static:install_static_util",
  ]
}

process_version_rc_template("version_resources") {
  sources = [
    "elevation_service_exe.ver",
  ]
  output = "$target_gen_dir/elevation_service_exe.rc"
}

copy("elevation_service_unittests_files") {
  sources = [
    "//components/test/data/crx_file/valid_no_publisher.crx3",
    "//components/test/data/crx_file/valid_publisher.crx3",
    "//components/test/data/update_client/ChromeRecovery.crx3",
  ]
  outputs = [
    "$root_out_dir/elevated_recovery_unittest/{{source_file_part}}",
  ]
}

test("elevation_service_unittests") {
  sources = [
    "elevated_recovery_unittest.cc",
    "run_all_unittests.cc",
    "service_main_unittest.cc",
  ]

  configs -= [ "//build/config/win:winver" ]
  configs += [ ":winver" ]

  deps = [
    ":lib",
    "//base",
    "//base/test:test_support",
    "//chrome/install_static:install_static_util",
    "//chrome/install_static/test:test_support",
    "//components/crx_file",
    "//testing/gtest",
    "//third_party/zlib/google:zip",
  ]

  data_deps = [
    ":elevation_service",
    ":elevation_service_unittests_files",
  ]
}
