Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / mojo / public / cpp / environment / environment.h
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 #ifndef MOJO_PUBLIC_CPP_ENVIRONMENT_ENVIRONMENT_H_
6 #define MOJO_PUBLIC_CPP_ENVIRONMENT_ENVIRONMENT_H_
7
8 #include "mojo/public/cpp/system/macros.h"
9
10 struct MojoAsyncWaiter;
11 struct MojoLogger;
12
13 namespace mojo {
14
15 // Other parts of the Mojo C++ APIs use the *static* methods of this class.
16 //
17 // The "standalone" implementation of this class requires that this class (in
18 // the lib/ subdirectory) be instantiated (and remain so) while using the Mojo
19 // C++ APIs. I.e., the static methods depend on things set up by the constructor
20 // and torn down by the destructor.
21 //
22 // Other implementations may not have this requirement.
23 class Environment {
24  public:
25   Environment();
26   // This constructor allows the standard implementations to be overridden (set
27   // a parameter to null to get the standard implementation).
28   Environment(const MojoAsyncWaiter* default_async_waiter,
29               const MojoLogger* default_logger);
30   ~Environment();
31
32   static const MojoAsyncWaiter* GetDefaultAsyncWaiter();
33   static const MojoLogger* GetDefaultLogger();
34
35   // These instantiate and destroy an environment-specific run loop for the
36   // current thread, allowing |GetDefaultAsyncWaiter()| to be used. (The run
37   // loop itself should be accessible via thread-local storage, using methods
38   // specific to the run loop implementation.) Creating and destroying nested
39   // run loops is not supported.
40   static void InstantiateDefaultRunLoop();
41   static void DestroyDefaultRunLoop();
42
43  private:
44   MOJO_DISALLOW_COPY_AND_ASSIGN(Environment);
45 };
46
47 }  // namespace mojo
48
49 #endif  // MOJO_PUBLIC_CPP_ENVIRONMENT_ENVIRONMENT_H_