# 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("//mojo/public/tools/bindings/mojom.gni")

component("common") {
  output_name = "storage_common"
  sources = [
    "blob_storage/blob_handle.cc",
    "blob_storage/blob_handle.h",
    "blob_storage/blob_storage_constants.cc",
    "blob_storage/blob_storage_constants.h",
    "database/database_connections.cc",
    "database/database_connections.h",
    "database/database_identifier.cc",
    "database/database_identifier.h",
    "fileapi/file_system_info.cc",
    "fileapi/file_system_info.h",
    "fileapi/file_system_mount_option.h",
    "fileapi/file_system_type_converters.h",
    "fileapi/file_system_types.h",
    "fileapi/file_system_util.cc",
    "fileapi/file_system_util.h",
    "quota/quota_limit_type.h",
    "storage_histograms.cc",
    "storage_histograms.h",
  ]

  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
  configs += [
    "//build/config/compiler:no_size_t_to_int_warning",
    "//build/config/compiler:wexit_time_destructors",
  ]

  defines = [ "IS_STORAGE_COMMON_IMPL" ]

  public_deps = [
    "//components/services/filesystem/public/interfaces",
    "//services/network/public/mojom",
    "//third_party/blink/public:blink_headers",
  ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//net",
    "//url",
  ]
}

source_set("unittests") {
  testonly = true

  sources = [
    "database/database_connections_unittest.cc",
    "database/database_identifier_unittest.cc",
    "fileapi/file_system_util_unittest.cc",
    "run_all_unittests.cc",
  ]

  deps = [
    ":common",
    "//base/test:test_support",
    "//mojo/core/embedder",
    "//testing/gtest",
    "//url",
  ]
}
