Home | History | Annotate | Download | only in lib
      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
     66