# 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("//build/config/ui.gni")
import("//services/service_manager/public/cpp/service.gni")
import("//services/service_manager/public/service_manifest.gni")
import("//tools/grit/repack.gni")

service("simple_wm") {
  testonly = true

  sources = [
    "main.cc",
  ]

  deps = [
    ":lib",
    "//base",
    "//services/service_manager/public/cpp",
    "//ui/views/mus:for_mojo_application",
  ]

  resources = [ "$root_out_dir/views_mus_resources.pak" ]
}

source_set("lib") {
  testonly = true
  sources = [
    "move_event_handler.cc",
    "move_event_handler.h",
    "move_loop.cc",
    "move_loop.h",
    "simple_wm.cc",
    "simple_wm.h",
  ]

  deps = [
    "//base",
    "//services/service_manager/public/cpp",
    "//services/ui/public/cpp",
    "//services/ui/public/interfaces",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/display",
    "//ui/display:test_support",
    "//ui/gfx/geometry/mojo",
    "//ui/views",
    "//ui/views/mus:mus",
    "//ui/wm",
    "//ui/wm/public",
  ]

  public_deps = [
    "//skia",  # Due to use of Sk types in service header.
  ]

  data_deps = [
    "//services/ui",
  ]
}

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