# 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/crypto.gni")
import("//build/config/features.gni")
import("//build/config/sysroot.gni")
import("//chrome/common/features.gni")
import("//chromeos/assistant/assistant.gni")
import("//device/vr/buildflags/buildflags.gni")
import("//extensions/buildflags/buildflags.gni")
import("//printing/buildflags/buildflags.gni")

static_library("utility") {
  sources = [
    "chrome_content_utility_client.cc",
    "chrome_content_utility_client.h",
  ]

  defines = []
  configs += [
    "//build/config:precompiled_headers",
    "//build/config/compiler:wexit_time_destructors",
  ]

  public_deps = []
  deps = [
    "//base",
    "//chrome:resources",
    "//chrome:strings",
    "//chrome/common",
    "//chrome/common:mojo_bindings",
    "//chrome/services/noop:lib",
    "//chrome/services/noop/public/cpp",
    "//components/mirroring/mojom:constants",
    "//components/mirroring/service:mirroring_service",
    "//components/search_engines",
    "//components/services/heap_profiling",
    "//components/services/heap_profiling/public/cpp",
    "//components/services/patch:lib",
    "//components/services/unzip:lib",
    "//components/strings",
    "//components/url_formatter",
    "//content/public/child",
    "//content/public/common",
    "//content/public/utility",
    "//device/vr/buildflags",
    "//extensions/buildflags",
    "//ipc",
    "//media",
    "//net:net_with_v8",
    "//printing/buildflags",
    "//services/network:network_service",
    "//services/service_manager/public/cpp",
    "//skia",
    "//sql",
    "//third_party/libxml",
    "//third_party/zlib/google:zip",
    "//ui/base:buildflags",
  ]

  if (is_win) {
    deps += [
      "//components/services/quarantine",
      "//components/services/quarantine/public/mojom",
    ]
  }

  if (!is_android) {
    sources += [
      "importer/bookmark_html_reader.cc",
      "importer/bookmark_html_reader.h",
      "importer/bookmarks_file_importer.cc",
      "importer/bookmarks_file_importer.h",
      "importer/edge_database_reader_win.cc",
      "importer/edge_database_reader_win.h",
      "importer/edge_importer_win.cc",
      "importer/edge_importer_win.h",
      "importer/external_process_importer_bridge.cc",
      "importer/external_process_importer_bridge.h",
      "importer/favicon_reencode.cc",
      "importer/favicon_reencode.h",
      "importer/firefox_importer.cc",
      "importer/firefox_importer.h",
      "importer/ie_importer_win.cc",
      "importer/ie_importer_win.h",
      "importer/importer.cc",
      "importer/importer.h",
      "importer/importer_creator.cc",
      "importer/importer_creator.h",
      "importer/nss_decryptor.cc",
      "importer/nss_decryptor.h",
      "importer/nss_decryptor_mac.h",
      "importer/nss_decryptor_mac.mm",
      "importer/nss_decryptor_win.cc",
      "importer/nss_decryptor_win.h",
      "importer/profile_import_impl.cc",
      "importer/profile_import_impl.h",
      "importer/profile_import_service.cc",
      "importer/profile_import_service.h",
      "importer/safari_importer.h",
      "importer/safari_importer.mm",
    ]
    deps += [
      "//chrome/common:mojo_bindings",
      "//chrome/common/importer:interfaces",
      "//components/autofill/core/common",
      "//services/data_decoder:lib",
      "//services/proxy_resolver:lib",
    ]
  }

  if (enable_extensions) {
    sources += [
      "image_writer/disk_unmounter_mac.cc",
      "image_writer/disk_unmounter_mac.h",
      "image_writer/error_messages.cc",
      "image_writer/error_messages.h",
      "image_writer/image_writer.cc",
      "image_writer/image_writer.h",
      "image_writer/image_writer_handler.cc",
      "image_writer/image_writer_handler.h",
      "image_writer/image_writer_mac.cc",
      "image_writer/image_writer_win.cc",
    ]
    deps += [
      "//chrome/common/extensions/api",
      "//chrome/services/removable_storage_writer:lib",
    ]

    public_deps += [ "//chrome/common/extensions/api" ]

    # Prevent wininet from loading in the renderer. http://crbug.com/460679
    if (is_win) {
      ldflags = [ "/DELAYLOAD:wininet.dll" ]

      # Add ESE library for Edge Import support.
      libs = [ "esent.lib" ]
      ldflags += [ "/DELAYLOAD:esent.dll" ]

      deps += [
        "//chrome/services/util_win:lib",
        "//chrome/services/wifi_util_win:lib",
      ]
    }

    if (is_win || is_mac) {
      deps += [ "//components/wifi" ]
    } else {
      sources += [ "image_writer/image_writer_stub.cc" ]
    }
  }

  if (is_chromeos) {
    deps += [
      "//chrome/services/file_util:lib",
      "//chromeos/assistant:buildflags",
      "//chromeos/services/ime:lib",
      "//chromeos/services/ime/public/mojom",
    ]

    if (enable_cros_libassistant) {
      deps += [
        "//chromeos/services/assistant/audio_decoder:lib",
        "//chromeos/services/assistant/public/mojom",
      ]
    }
  }

  if (use_nss_certs) {
    sources += [
      "importer/nss_decryptor_system_nss.cc",
      "importer/nss_decryptor_system_nss.h",
    ]
    deps += [
      "//crypto",
      "//crypto:platform",
    ]
  }

  if (enable_basic_printing) {
    deps += [
      "//components/services/pdf_compositor/public/cpp:factory",
      "//components/services/pdf_compositor/public/interfaces",
    ]

    if (is_chromeos) {
      deps += [
        "//chrome/services/cups_ipp_parser:lib",
        "//chrome/services/cups_ipp_parser/public/mojom",
      ]
    }
  }

  if (enable_print_preview) {
    deps += [ "//chrome/services/printing:lib" ]

    if (is_win) {
      sources += [
        "printing_handler.cc",
        "printing_handler.h",
      ]
    }
  }

  if (safe_browsing_mode == 1) {
    deps += [ "//chrome/services/file_util:lib" ]
    if (is_mac) {
      deps += [ "//chrome/utility/safe_browsing/mac" ]
    }
  }

  if (is_android || enable_extensions) {
    deps += [ "//chrome/services/media_gallery_util:lib" ]
  }

  if (enable_isolated_xr_service) {
    deps += [
      "//chrome/services/isolated_xr_device:lib",
      "//device/vr/public/mojom",
    ]
  }

  if (enable_simple_browser_service_out_of_process) {
    deps += [
      "//services/content/simple_browser",
      "//services/content/simple_browser/public/mojom",
    ]
  }
}

if (!is_android) {
  source_set("profile_import_manifest") {
    sources = [
      "importer/profile_import_manifest.cc",
      "importer/profile_import_manifest.h",
    ]

    deps = [
      "//base",
      "//chrome/common/importer:interfaces",
      "//services/service_manager/public/cpp",
    ]
  }
}
