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/public/cpp/application/application_runner.h"
6
7#include "mojo/public/cpp/application/application_delegate.h"
8#include "mojo/public/cpp/application/application_impl.h"
9#include "mojo/public/cpp/environment/environment.h"
10#include "mojo/public/cpp/utility/run_loop.h"
11
12namespace mojo {
13
14// static
15void ApplicationImpl::Terminate() {
16  RunLoop::current()->Quit();
17}
18
19ApplicationRunner::ApplicationRunner(ApplicationDelegate* delegate)
20    : delegate_(delegate) {}
21ApplicationRunner::~ApplicationRunner() { assert(!delegate_); }
22
23MojoResult ApplicationRunner::Run(MojoHandle shell_handle) {
24  Environment env;
25  {
26    RunLoop loop;
27    ApplicationImpl app(delegate_,
28        MakeScopedHandle(MessagePipeHandle(shell_handle)));
29    loop.Run();
30  }
31
32  delete delegate_;
33  delegate_ = NULL;
34  return MOJO_RESULT_OK;
35}
36
37}  // namespace mojo
38