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

source_set("application") {
  sources = [
    "application_runner_chromium.cc",
    "application_runner_chromium.h",
    "run_application.cc",
  ]

  public_deps = [
    "//mojo/public/cpp/application",
  ]
  deps = [
    "//base",
    "//mojo/environment:chromium",
    "//mojo/message_pump",
    "//mojo/public/cpp/system",
  ]
}

source_set("content_handler") {
  sources = [
    "content_handler_factory.cc",
    "content_handler_factory.h",
  ]
  deps = [
    ":application",
    "//base",
    "//mojo/environment:chromium",
    "//mojo/message_pump",
    "//mojo/public/interfaces/application",
    "//mojo/services/content_handler/interfaces",
    "//mojo/services/network/interfaces",
  ]
}

source_set("test_support") {
  testonly = true
  sources = [
    "application_test_main_chromium.cc",
  ]

  public_deps = [
    "//mojo/public/cpp/application:test_support",
  ]
  deps = [
    "//base",
    "//base/test:test_config",
    "//mojo/environment:chromium",
    "//mojo/public/cpp/application",
    "//mojo/public/cpp/system",
  ]
}
