# Copyright 2014 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("//mojo/public/mojo_application.gni")
import("//mojo/public/tools/bindings/mojom.gni")

group("wm_flow") {
  deps = [
    ":app",
    ":embedded",
    ":wm",
  ]
}

mojo_native_application("wm") {
  output_name = "wm_flow_wm"

  sources = [
    "wm/wm.cc",
    "wm/frame_controller.cc",
    "wm/frame_controller.h",
  ]

  deps = [
    ":wm_bindings",
    "//base",
    "//mojo/application",
    "//mojo/converters/geometry",
    "//mojo/public/interfaces/application",
    "//mojo/services/input_events/public/interfaces",
    "//mojo/services/view_manager/public/cpp",
    "//services/window_manager:lib",
    "//skia",
    "//ui/gfx/geometry",
    "//url",
  ]
}

mojo_native_application("app") {
  output_name = "wm_flow_app"

  sources = [
    "app/app.cc",
  ]

  deps = [
    ":embedder_bindings",
    ":embeddee_bindings",
    "//base",
    "//examples/bitmap_uploader",
    "//mojo/application",
    "//mojo/common",
    "//mojo/public/interfaces/application:application",
    "//mojo/services/view_manager/public/cpp",
    "//services/window_manager:lib",
    "//skia",
    "//url",
  ]
}

mojo_native_application("embedded") {
  output_name = "wm_flow_embedded"

  sources = [
    "embedded/embedded.cc",
  ]

  deps = [
    ":embeddee_bindings",
    ":embedder_bindings",
    "//base",
    "//examples/bitmap_uploader",
    "//mojo/application",
    "//mojo/services/view_manager/public/cpp",
    "//services/window_manager:lib",
    "//skia",
    "//url",
  ]
}

mojom("wm_bindings") {
  sources = [
    "wm/window_frame_host.mojom",
  ]
}

mojom("embedder_bindings") {
  sources = [
    "app/embedder.mojom",
  ]
}

mojom("embeddee_bindings") {
  sources = [
    "embedded/embeddee.mojom",
  ]
}
