103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// found in the LICENSE file.
403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "mojo/public/cpp/application/application_runner.h"
603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "mojo/public/cpp/application/application_delegate.h"
803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "mojo/public/cpp/application/application_impl.h"
903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "mojo/public/cpp/environment/environment.h"
1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "mojo/public/cpp/utility/run_loop.h"
1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace mojo {
1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// static
1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void ApplicationImpl::Terminate() {
1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  RunLoop::current()->Quit();
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)ApplicationRunner::ApplicationRunner(ApplicationDelegate* delegate)
2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    : delegate_(delegate) {}
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)ApplicationRunner::~ApplicationRunner() { assert(!delegate_); }
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)MojoResult ApplicationRunner::Run(MojoHandle shell_handle) {
2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  Environment env;
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  {
2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    RunLoop loop;
2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    ApplicationImpl app(delegate_,
2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        MakeScopedHandle(MessagePipeHandle(shell_handle)));
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    loop.Run();
3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  delete delegate_;
3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  delegate_ = NULL;
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return MOJO_RESULT_OK;
3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace mojo
38