# 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")

assert(use_aura)

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/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/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",
  ]
}
