# Copyright 2016 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.

source_set("native_app_launcher") {
  sources = [
    "ios_appstore_ids.h",
    "ios_appstore_ids.mm",
    "native_app_infobar_controller.h",
    "native_app_infobar_controller.mm",
    "native_app_infobar_delegate.h",
    "native_app_infobar_delegate.mm",
    "native_app_navigation_controller_protocol.h",
  ]
  deps = [
    "//base",
    "//components/infobars/core",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser/infobars",
    "//ios/chrome/browser/ui/infobars",
    "//ios/public/provider/chrome/browser/native_app_launcher",
    "//ui/base",
    "//url",
  ]
}

source_set("unit_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "native_app_infobar_controller_unittest.mm",
    "native_app_infobar_delegate_unittest.mm",
  ]
  deps = [
    ":native_app_launcher",
    "//base",
    "//base/test:test_support",
    "//components/infobars/core",
    "//ios/chrome/browser",
    "//ios/chrome/test:test_support",
    "//ios/public/provider/chrome/browser",
    "//ios/public/provider/chrome/browser:test_support",
    "//ios/public/provider/chrome/browser/native_app_launcher",
    "//ios/web",
    "//ios/web:test_support",
    "//net:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//url",
  ]
}

source_set("native_app_launcher_internal") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "native_app_navigation_controller.h",
    "native_app_navigation_controller.mm",
    "native_app_navigation_util.h",
    "native_app_navigation_util.mm",
  ]
  deps = [
    ":native_app_launcher",
    "//base",
    "//components/infobars/core",
    "//ios/chrome/browser",
    "//ios/chrome/browser/infobars",
    "//ios/chrome/browser/net",
    "//ios/chrome/browser/tabs",
    "//ios/public/provider/chrome/browser",
    "//ios/public/provider/chrome/browser/native_app_launcher",
    "//ios/public/provider/chrome/browser/signin",
    "//ios/public/provider/chrome/browser/ui",
    "//ios/web",
    "//net",
    "//ui/base",
    "//url",
  ]
  libs = [ "StoreKit.framework" ]
}

source_set("unit_tests_internal") {
  testonly = true
  sources = [
    "native_app_navigation_controller_unittest.mm",
    "native_app_navigation_util_unittest.mm",
  ]
  deps = [
    ":native_app_launcher",
    ":native_app_launcher_internal",
    "//base",
    "//base/test:test_support",
    "//components/infobars/core",
    "//ios/chrome/browser",
    "//ios/chrome/browser/web:test_support",
    "//ios/chrome/test:test_support",
    "//ios/public/provider/chrome/browser",
    "//ios/public/provider/chrome/browser:test_support",
    "//ios/public/provider/chrome/browser/native_app_launcher:test_support",
    "//ios/public/provider/chrome/browser/signin:test_support",
    "//ios/web",
    "//ios/web:test_support",
    "//net:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/base",
    "//url",
  ]
}
