1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "mojo/services/test_service/test_service_application.h"
6
7#include <assert.h>
8
9#include "mojo/public/c/system/main.h"
10#include "mojo/public/cpp/application/application_connection.h"
11#include "mojo/public/cpp/application/application_runner.h"
12#include "mojo/public/cpp/utility/run_loop.h"
13#include "mojo/services/test_service/test_service_impl.h"
14#include "mojo/services/test_service/test_time_service_impl.h"
15
16namespace mojo {
17namespace test {
18
19TestServiceApplication::TestServiceApplication() : ref_count_(0) {
20}
21
22TestServiceApplication::~TestServiceApplication() {
23}
24
25bool TestServiceApplication::ConfigureIncomingConnection(
26    ApplicationConnection* connection) {
27  connection->AddService<TestService>(this);
28  connection->AddService<TestTimeService>(this);
29  return true;
30}
31
32void TestServiceApplication::Create(ApplicationConnection* connection,
33                                    InterfaceRequest<TestService> request) {
34  BindToRequest(new TestServiceImpl(connection, this), &request);
35}
36
37void TestServiceApplication::Create(ApplicationConnection* connection,
38                                    InterfaceRequest<TestTimeService> request) {
39  BindToRequest(new TestTimeServiceImpl(connection), &request);
40}
41
42void TestServiceApplication::AddRef() {
43  assert(ref_count_ >= 0);
44  ref_count_++;
45}
46
47void TestServiceApplication::ReleaseRef() {
48  assert(ref_count_ > 0);
49  ref_count_--;
50  if (ref_count_ <= 0)
51    RunLoop::current()->Quit();
52}
53
54}  // namespace test
55}  // namespace mojo
56
57MojoResult MojoMain(MojoHandle shell_handle) {
58  mojo::ApplicationRunner runner(new mojo::test::TestServiceApplication);
59  return runner.Run(shell_handle);
60}
61