• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
Init(const MojoAsyncWaiter * default_async_waiter,const MojoLogger * default_logger)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 
Environment()35 Environment::Environment() {
36   Init(NULL, NULL);
37 }
38 
Environment(const MojoAsyncWaiter * default_async_waiter,const MojoLogger * default_logger)39 Environment::Environment(const MojoAsyncWaiter* default_async_waiter,
40                          const MojoLogger* default_logger) {
41   Init(default_async_waiter, default_logger);
42 }
43 
~Environment()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
GetDefaultAsyncWaiter()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
GetDefaultLogger()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
66