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.
5 #include "mojo/application/application_runner_chromium.h"
7 #include "base/at_exit.h"
8 #include "base/command_line.h"
9 #include "base/debug/stack_trace.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/message_loop/message_loop.h"
12 #include "mojo/common/message_pump_mojo.h"
13 #include "mojo/public/cpp/application/application_delegate.h"
14 #include "mojo/public/cpp/application/application_impl.h"
19 void ApplicationImpl::Terminate() {
20 if (base::MessageLoop::current()->is_running())
21 base::MessageLoop::current()->Quit();
24 ApplicationRunnerChromium::ApplicationRunnerChromium(
25 ApplicationDelegate
* delegate
)
26 : delegate_(scoped_ptr
<ApplicationDelegate
>(delegate
)),
27 message_loop_type_(base::MessageLoop::TYPE_CUSTOM
),
30 ApplicationRunnerChromium::~ApplicationRunnerChromium() {}
32 void ApplicationRunnerChromium::set_message_loop_type(
33 base::MessageLoop::Type type
) {
34 DCHECK_NE(base::MessageLoop::TYPE_CUSTOM
, type
);
37 message_loop_type_
= type
;
40 MojoResult
ApplicationRunnerChromium::Run(
41 MojoHandle application_request_handle
) {
45 base::CommandLine::Init(0, NULL
);
46 base::AtExitManager at_exit
;
49 base::debug::EnableInProcessStackDumping();
53 scoped_ptr
<base::MessageLoop
> loop
;
54 if (message_loop_type_
== base::MessageLoop::TYPE_CUSTOM
)
55 loop
.reset(new base::MessageLoop(common::MessagePumpMojo::Create()));
57 loop
.reset(new base::MessageLoop(message_loop_type_
));
59 ApplicationImpl
impl(delegate_
.get(),
60 MakeRequest
<Application
>(MakeScopedHandle(
61 MessagePipeHandle(application_request_handle
))));
65 return MOJO_RESULT_OK
;