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

import("//services/service_manager/public/cpp/service.gni")
import("//services/service_manager/public/service_manifest.gni")

source_set("lib") {
  sources = [
    "image_decoder_impl.cc",
    "image_decoder_impl.h",
    "image_decoder_service.cc",
    "image_decoder_service.h",
  ]

  deps = [
    "//base",
    "//content/public/child",
    "//mojo/public/cpp/bindings",
    "//skia",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  public_deps = [
    "//services/image_decoder/public/interfaces",
    "//services/service_manager/public/cpp",
  ]

  data_deps = [
    ":manifest",
  ]
}

source_set("tests") {
  testonly = true

  sources = [
    "image_decoder_impl_unittest.cc",
  ]

  deps = [
    ":lib",
    "//base",
    "//gin",
    "//gin:gin_test",
    "//skia",
    "//testing/gtest",
    "//third_party/WebKit/public:blink",
    "//ui/gfx",
  ]

  configs += [ "//v8:external_startup_data" ]
}

service_manifest("manifest") {
  name = "image_decoder"
  source = "manifest.json"
}
