# Copyright 2020 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//components/safe_browsing/buildflags.gni")

if (is_chromeos || is_mac) {
  static_library("storage") {
    sources = [
      "prepare_directory_task.cc",
      "prepare_directory_task.h",
      "prepare_subdirectory_task.cc",
      "prepare_subdirectory_task.h",
      "store_file_task.cc",
      "store_file_task.h",
      "store_files_task.cc",
      "store_files_task.h",
    ]
    deps = [
      "//content/public/browser",
      "//mojo/public/cpp/bindings",
    ]
    public_deps = [
      "//base",
      "//third_party/blink/public/common",
    ]
  }
}

if (is_win || is_chromeos || is_mac) {
  source_set("webshare") {
    public = [ "share_service_impl.h" ]

    public_deps = [
      "//base",
      "//components/safe_browsing:buildflags",
      "//content/public/browser",
    ]

    if (safe_browsing_mode != 0) {
      public += [ "safe_browsing_request.h" ]
    }

    if (is_chromeos) {
      public += [ "chromeos/sharesheet_client.h" ]
      public_deps += [
        "//chrome/browser/sharesheet",
        "//chromeos/components/sharesheet:constants",
        "//url",
      ]
    }

    if (is_win) {
      public += [
        "win/share_operation.h",
        "win/show_share_ui_for_window_operation.h",
      ]
    }

    if (is_mac) {
      public += [ "mac/sharing_service_operation.h" ]
    }
  }

  source_set("impl") {
    sources = [ "share_service_impl.cc" ]

    public_deps = [ ":webshare" ]

    deps = [
      "//chrome/browser:bad_message",
      "//chrome/browser:browser_process",
      "//chrome/browser:browser_public_dependencies",
      "//mojo/public/cpp/bindings",
    ]

    if (safe_browsing_mode != 0) {
      sources += [ "safe_browsing_request.cc" ]
      deps += [
        "//chrome/browser/safe_browsing",
        "//components/safe_browsing/content/common:file_type_policies",
        "//components/safe_browsing/core/browser/db",
        "//components/safe_browsing/core/browser/db:database_manager",
        "//components/safe_browsing/core/browser/db:v5_get_hash_protocol_manager",
        "//components/safe_browsing/core/common",
      ]
    }

    if (is_chromeos) {
      sources += [ "chromeos/sharesheet_client.cc" ]
      deps += [
        ":storage",
        "//chrome/browser/apps/app_service",
        "//chrome/browser/ash/file_manager",
        "//chrome/browser/profiles",
        "//chrome/browser/sharesheet",
        "//components/prefs",
        "//components/services/app_service",
        "//components/visibility_timer",
        "//net",
      ]
    }

    if (is_win) {
      sources += [
        "win/share_operation.cc",
        "win/show_share_ui_for_window_operation.cc",
      ]
      deps += [
        "//chrome/browser/profiles",
        "//net",
        "//storage/browser",
        "//ui/display",
      ]
    }

    if (is_mac) {
      sources += [ "mac/sharing_service_operation.mm" ]
      deps += [
        ":storage",
        "//chrome/browser/profiles",
        "//components/visibility_timer",
        "//net",
        "//storage/browser",
      ]
    }
  }

  source_set("browser_tests") {
    testonly = true
    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [ "share_service_browsertest.cc" ]

    deps = [
      ":webshare",
      "//base/test:test_support",
      "//chrome/browser",
      "//chrome/browser/safe_browsing:test_support",
      "//chrome/test:test_support",
      "//components/safe_browsing/content/common:file_type_policies_test_support",
      "//components/safe_browsing/core/browser/db:test_database_manager",
      "//components/safe_browsing/core/browser/db:v5_get_hash_protocol_manager",
      "//content/public/browser",
      "//content/test:test_support",
      "//net:test_support",
      "//testing/gtest",
      "//ui/base",
    ]

    if (is_chromeos) {
      sources += [ "chromeos/sharesheet_client_browsertest.cc" ]
      deps += [
        "//chrome/browser/ash/file_manager",
        "//chrome/browser/sharesheet",
      ]
    }

    if (is_win) {
      deps += [ ":test_support" ]
    }

    if (is_mac) {
      sources += [ "mac/sharing_service_operation_browsertest.cc" ]
    }
  }
}

if (is_win) {
  source_set("test_support") {
    testonly = true

    sources = [
      "win/fake_buffer.cc",
      "win/fake_buffer.h",
      "win/fake_data_transfer_manager.cc",
      "win/fake_data_transfer_manager.h",
      "win/fake_data_transfer_manager_interop.cc",
      "win/fake_data_transfer_manager_interop.h",
      "win/fake_data_writer_factory.cc",
      "win/fake_data_writer_factory.h",
      "win/fake_iasync_operation_with_progress.h",
      "win/fake_random_access_stream.cc",
      "win/fake_random_access_stream.h",
      "win/fake_storage_file_statics.cc",
      "win/fake_storage_file_statics.h",
      "win/fake_uri_runtime_class_factory.cc",
      "win/fake_uri_runtime_class_factory.h",
      "win/scoped_fake_data_transfer_manager_interop.cc",
      "win/scoped_fake_data_transfer_manager_interop.h",
      "win/scoped_share_operation_fake_components.cc",
      "win/scoped_share_operation_fake_components.h",
    ]

    deps = [
      ":webshare",
      "//base",
      "//base/test:test_support",
      "//testing/gtest",
    ]
  }
}

source_set("unit_tests") {
  testonly = true

  sources = [ "share_service_unittest.cc" ]

  if (is_chromeos || is_mac) {
    sources += [ "prepare_directory_task_unittest.cc" ]
  }

  if (is_mac) {
    sources += [ "mac/sharing_service_operation_unittest.cc" ]
  }

  if (is_win) {
    sources += [
      "win/fake_buffer_unittest.cc",
      "win/fake_data_transfer_manager_interop_unittest.cc",
      "win/fake_data_transfer_manager_unittest.cc",
      "win/fake_data_writer_factory_unittest.cc",
      "win/fake_random_access_stream_unittest.cc",
      "win/fake_storage_file_statics_unittest.cc",
      "win/fake_uri_runtime_class_factory_unittest.cc",
      "win/share_operation_unittest.cc",
      "win/show_share_ui_for_window_operation_unittest.cc",
    ]
  }

  deps = [
    "//base/test:test_support",
    "//chrome/browser",
    "//chrome/common",
    "//chrome/test:test_support",
    "//content/public/browser",
    "//content/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (is_win || is_chromeos || is_mac) {
    deps += [ "//chrome/browser/webshare" ]
  }

  if (is_win) {
    deps += [ ":test_support" ]
  }

  if (is_chromeos) {
    deps += [
      "//chrome/browser/sharesheet",
      "//chrome/browser/webshare/chromeos:unit_tests",
    ]
  }

  if (is_chromeos || is_mac) {
    deps += [ "//chrome/browser/webshare:storage" ]
  }
}
