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)22void 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()35Environment::Environment() { 36 Init(NULL, NULL); 37 } 38 Environment(const MojoAsyncWaiter * default_async_waiter,const MojoLogger * default_logger)39Environment::Environment(const MojoAsyncWaiter* default_async_waiter, 40 const MojoLogger* default_logger) { 41 Init(default_async_waiter, default_logger); 42 } 43 ~Environment()44Environment::~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()54const 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()60const MojoLogger* Environment::GetDefaultLogger() { 61 assert(g_default_logger); // Fails if not "inside" |Environment|. 62 return g_default_logger; 63 } 64 65 } // namespace mojo 66