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

# GYP version: mojo/mojo_services.gypi:mojo_view_manager
shared_library("view_manager") {
  output_name = "mojo_view_manager"

  deps = [
    "//base",
    "//cc/surfaces",
    "//mojo/application",
    "//mojo/common",
    "//mojo/converters/geometry",
    "//mojo/converters/input_events",
    "//mojo/converters/surfaces",
    "//mojo/environment:chromium",
    "//mojo/public/c/system:for_shared_library",
    "//mojo/public/cpp/bindings",
    "//mojo/public/interfaces/application",
    "//mojo/services/public/interfaces/geometry",
    "//mojo/services/public/interfaces/input_events",
    "//mojo/services/public/interfaces/native_viewport",
    "//mojo/services/public/interfaces/surfaces",
    "//mojo/services/public/interfaces/view_manager",
    "//mojo/services/public/interfaces/window_manager",
    "//ui/base",
    "//ui/events",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  defines = [
    "MOJO_VIEW_MANAGER_IMPLEMENTATION",
  ]

  sources = [
    "access_policy.h",
    "access_policy_delegate.h",
    "connection_manager.cc",
    "connection_manager.h",
    "default_access_policy.cc",
    "default_access_policy.h",
    "display_manager.cc",
    "display_manager.h",
    "main.cc",
    "server_view.cc",
    "server_view.h",
    "server_view_delegate.h",
    "view_manager_export.h",
    "view_manager_init_service_context.cc",
    "view_manager_init_service_context.h",
    "view_manager_init_service_impl.cc",
    "view_manager_init_service_impl.h",
    "view_manager_service_impl.cc",
    "view_manager_service_impl.h",
    "window_manager_access_policy.cc",
    "window_manager_access_policy.h",
    "window_manager_client_impl.cc",
    "window_manager_client_impl.h",
  ]
}

# GYP version: mojo/mojo_services.gypi:mojo_view_manager_unittests
test("mojo_view_manager_unittests") {
  deps = [
    "//base",
    "//base/test:test_support",
    "//mojo/application",
    "//mojo/application_manager",
    "//mojo/converters/geometry",
    "//mojo/converters/input_events",
    "//mojo/edk/system",
    "//mojo/environment:chromium",
    "//mojo/public/cpp/bindings",
    "//mojo/services/public/cpp/native_viewport:args",
    "//mojo/services/public/cpp/view_manager",
    "//mojo/services/public/cpp/view_manager/lib:run_unittests",
    "//mojo/services/public/interfaces/view_manager",
    "//mojo/services/public/interfaces/window_manager",
    "//mojo/shell:test_support",
    "//testing/gtest",
    "//ui/gfx/geometry",
  ]

  if (use_x11) {
    deps += ["//ui/gfx/x"]
  }

  if (is_component_build) {
    deps += ["//ui/gl"]
  }

  sources = [
    "test_change_tracker.cc",
    "test_change_tracker.h",
    "view_manager_unittest.cc",
  ]
}
