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/memory/scoped_ptr.h"
10 #include "base/message_loop/message_loop.h"
11 #include "mojo/common/message_pump_mojo.h"
12 #include "mojo/public/cpp/application/application_delegate.h"
13 #include "mojo/public/cpp/application/application_impl.h"
18 void ApplicationImpl::Terminate() {
19 if (base::MessageLoop::current()->is_running())
20 base::MessageLoop::current()->Quit();
23 ApplicationRunnerChromium::ApplicationRunnerChromium(
24 ApplicationDelegate
* delegate
)
25 : delegate_(scoped_ptr
<ApplicationDelegate
>(delegate
)),
26 message_loop_type_(base::MessageLoop::TYPE_CUSTOM
),
29 ApplicationRunnerChromium::~ApplicationRunnerChromium() {}
31 void ApplicationRunnerChromium::set_message_loop_type(
32 base::MessageLoop::Type type
) {
33 DCHECK_NE(base::MessageLoop::TYPE_CUSTOM
, type
);
36 message_loop_type_
= type
;
39 MojoResult
ApplicationRunnerChromium::Run(MojoHandle shell_handle
) {
43 base::CommandLine::Init(0, NULL
);
44 #if !defined(COMPONENT_BUILD)
45 base::AtExitManager at_exit
;
49 scoped_ptr
<base::MessageLoop
> loop
;
50 if (message_loop_type_
== base::MessageLoop::TYPE_CUSTOM
)
51 loop
.reset(new base::MessageLoop(common::MessagePumpMojo::Create()));
53 loop
.reset(new base::MessageLoop(message_loop_type_
));
55 ApplicationImpl
impl(delegate_
.get(),
56 MakeScopedHandle(MessagePipeHandle(shell_handle
)));
60 return MOJO_RESULT_OK
;