15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "mojo/public/cpp/environment/environment.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <assert.h> 86d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include <stddef.h> 96d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "mojo/public/c/environment/logger.h" 116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "mojo/public/cpp/environment/lib/default_async_waiter.h" 126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "mojo/public/cpp/environment/lib/default_logger.h" 13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "mojo/public/cpp/utility/run_loop.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace mojo { 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)namespace { 186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)const MojoAsyncWaiter* g_default_async_waiter = NULL; 206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)const MojoLogger* g_default_logger = NULL; 216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void Init(const MojoAsyncWaiter* default_async_waiter, 236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const MojoLogger* default_logger) { 246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) g_default_async_waiter = 256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) default_async_waiter ? default_async_waiter : 266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) &internal::kDefaultAsyncWaiter; 276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) g_default_logger = default_logger ? default_logger : 286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) &internal::kDefaultLogger; 296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunLoop::SetUp(); 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} // namespace 346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)Environment::Environment() { 366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) Init(NULL, NULL); 376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)Environment::Environment(const MojoAsyncWaiter* default_async_waiter, 406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const MojoLogger* default_logger) { 416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) Init(default_async_waiter, default_logger); 426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Environment::~Environment() { 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunLoop::TearDown(); 466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // TODO(vtl): Maybe we should allow nesting, and restore previous default 486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // async waiters and loggers? 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch g_default_async_waiter = NULL; 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch g_default_logger = NULL; 516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// static 546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)const MojoAsyncWaiter* Environment::GetDefaultAsyncWaiter() { 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assert(g_default_async_waiter); // Fails if not "inside" |Environment|. 566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return g_default_async_waiter; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// static 606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)const MojoLogger* Environment::GetDefaultLogger() { 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assert(g_default_logger); // Fails if not "inside" |Environment|. 626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return g_default_logger; 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace mojo 66