# Copyright 2018 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/ui.gni")

component("cpp") {
  output_name = "content_service_cpp"

  public = [
    "navigable_contents.h",
    "navigable_contents_observer.h",
    "navigable_contents_view.h",
  ]

  sources = [
    "navigable_contents.cc",
    "navigable_contents_view.cc",
  ]

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

  defines = [ "IS_CONTENT_SERVICE_CPP_IMPL" ]

  public_deps = [
    "//base",
    "//net",
    "//services/content/public/mojom",
    "//ui/accessibility",
    "//ui/accessibility/mojom",
    "//ui/base",
    "//ui/gfx:native_widget_types",
    "//ui/gfx/geometry",
    "//url",
  ]

  deps = []
  if (toolkit_views) {
    deps += [ "//ui/views" ]
  }

  if (use_aura) {
    deps += [ "//ui/aura" ]
  }
}

source_set("manifest") {
  sources = [
    "manifest.cc",
    "manifest.h",
  ]

  deps = [
    "//base",
    "//services/content/public/mojom",
    "//services/service_manager/public/cpp",
  ]
}
