a534a43cdb85e1016f0065c0fdc67ebee71d26f3
[platform/framework/web/crosswalk.git] / src / mojo / public / cpp / environment / lib / environment.cc
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/environment/environment.h"
6
7 #include <assert.h>
8 #include <stddef.h>
9
10 #include "mojo/public/c/environment/logger.h"
11 #include "mojo/public/cpp/environment/lib/default_async_waiter.h"
12 #include "mojo/public/cpp/environment/lib/default_logger.h"
13 #include "mojo/public/cpp/utility/run_loop.h"
14
15 namespace mojo {
16
17 namespace {
18
19 const MojoAsyncWaiter* g_default_async_waiter = NULL;
20 const MojoLogger* g_default_logger = NULL;
21
22 void Init(const MojoAsyncWaiter* default_async_waiter,
23           const MojoLogger* default_logger) {
24   g_default_async_waiter =
25       default_async_waiter ? default_async_waiter :
26                              &internal::kDefaultAsyncWaiter;
27   g_default_logger = default_logger ? default_logger :
28                                       &internal::kDefaultLogger;
29
30   RunLoop::SetUp();
31 }
32
33 }  // namespace
34
35 Environment::Environment() {
36   Init(NULL, NULL);
37 }
38
39 Environment::Environment(const MojoAsyncWaiter* default_async_waiter,
40                          const MojoLogger* default_logger) {
41   Init(default_async_waiter, default_logger);
42 }
43
44 Environment::~Environment() {
45   RunLoop::TearDown();
46
47   // TODO(vtl): Maybe we should allow nesting, and restore previous default
48   // async waiters and loggers?
49   g_default_async_waiter = NULL;
50   g_default_logger = NULL;
51 }
52
53 // static
54 const MojoAsyncWaiter* Environment::GetDefaultAsyncWaiter() {
55   assert(g_default_async_waiter);  // Fails if not "inside" |Environment|.
56   return g_default_async_waiter;
57 }
58
59 // static
60 const MojoLogger* Environment::GetDefaultLogger() {
61   assert(g_default_logger);  // Fails if not "inside" |Environment|.
62   return g_default_logger;
63 }
64
65 }  // namespace mojo