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"
17 const char* const* g_argv
;
20 __attribute__((visibility("default"))) void InitCommandLineArgs(
21 int argc
, const char* const* argv
) {
31 void ApplicationImpl::Terminate() {
32 if (base::MessageLoop::current()->is_running())
33 base::MessageLoop::current()->Quit();
36 ApplicationRunnerChromium::ApplicationRunnerChromium(
37 ApplicationDelegate
* delegate
)
38 : delegate_(scoped_ptr
<ApplicationDelegate
>(delegate
)),
39 message_loop_type_(base::MessageLoop::TYPE_CUSTOM
),
42 ApplicationRunnerChromium::~ApplicationRunnerChromium() {}
44 void ApplicationRunnerChromium::InitBaseCommandLine() {
45 base::CommandLine::Init(g_argc
, g_argv
);
48 void ApplicationRunnerChromium::set_message_loop_type(
49 base::MessageLoop::Type type
) {
50 DCHECK_NE(base::MessageLoop::TYPE_CUSTOM
, type
);
53 message_loop_type_
= type
;
56 MojoResult
ApplicationRunnerChromium::Run(
57 MojoHandle application_request_handle
) {
61 InitBaseCommandLine();
62 base::AtExitManager at_exit
;
65 base::debug::EnableInProcessStackDumping();
69 scoped_ptr
<base::MessageLoop
> loop
;
70 if (message_loop_type_
== base::MessageLoop::TYPE_CUSTOM
)
71 loop
.reset(new base::MessageLoop(common::MessagePumpMojo::Create()));
73 loop
.reset(new base::MessageLoop(message_loop_type_
));
75 ApplicationImpl
impl(delegate_
.get(),
76 MakeRequest
<Application
>(MakeScopedHandle(
77 MessagePipeHandle(application_request_handle
))));
81 return MOJO_RESULT_OK
;