# 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("//extensions/buildflags/buildflags.gni")
import("//printing/buildflags/buildflags.gni")
import("//services/service_manager/public/service_manifest.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",
    "//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",
    "//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:ui_features",
  ]

  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) {
    sources += [
      "mash_service_factory.cc",
      "mash_service_factory.h",
    ]
    deps += [
      "//ash",
      "//ash/components/autoclick:lib",
      "//ash/components/quick_launch:lib",
      "//ash/components/quick_launch/public/mojom",
      "//ash/components/shortcut_viewer:lib",
      "//ash/components/shortcut_viewer/public/mojom",
      "//ash/components/tap_visualizer:lib",
      "//ash/components/tap_visualizer/public/mojom",
      "//chrome/services/file_util:lib",
      "//components/services/font:lib",
      "//components/services/font/public/interfaces",
      "//services/ui:lib",
      "//services/ui/public/interfaces",
    ]
  }

  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 (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 (!is_android) {
  service_manifest("profile_import_manifest") {
    name = "profile_import"
    source = "importer/profile_import_manifest.json"
  }
}
