Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: third_party/mojo/src/mojo/edk/system/connection_manager.h

Issue 1310103002: Update mojo sdk to rev c02a28868825edfa57ab77947b8cb15e741c5598 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MOJO_EDK_SYSTEM_CONNECTION_MANAGER_H_ 5 #ifndef MOJO_EDK_SYSTEM_CONNECTION_MANAGER_H_
6 #define MOJO_EDK_SYSTEM_CONNECTION_MANAGER_H_ 6 #define MOJO_EDK_SYSTEM_CONNECTION_MANAGER_H_
7 7
8 #include <ostream>
9
8 #include "mojo/edk/system/connection_identifier.h" 10 #include "mojo/edk/system/connection_identifier.h"
9 #include "mojo/edk/system/process_identifier.h" 11 #include "mojo/edk/system/process_identifier.h"
10 #include "mojo/edk/system/system_impl_export.h" 12 #include "mojo/edk/system/system_impl_export.h"
13 #include "mojo/edk/system/thread_annotations.h"
11 #include "mojo/public/cpp/system/macros.h" 14 #include "mojo/public/cpp/system/macros.h"
12 15
13 namespace mojo { 16 namespace mojo {
14 17
15 namespace embedder { 18 namespace embedder {
16 class PlatformSupport; 19 class PlatformSupport;
17 class ScopedPlatformHandle; 20 class ScopedPlatformHandle;
18 } // namespace embedder 21 } // namespace embedder
19 22
20 namespace system { 23 namespace system {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 // Implementation notes: We implement this using a "star topology", with a 55 // Implementation notes: We implement this using a "star topology", with a
53 // single trusted "master" (broker) process and an arbitrary number of untrusted 56 // single trusted "master" (broker) process and an arbitrary number of untrusted
54 // "slave" (client) processes. The former is implemented by 57 // "slave" (client) processes. The former is implemented by
55 // |MasterConnectionManager| (master_connection_manager.*) and the latter by 58 // |MasterConnectionManager| (master_connection_manager.*) and the latter by
56 // |SlaveConnectionManager| (slave_connection_manager.*). Each slave is 59 // |SlaveConnectionManager| (slave_connection_manager.*). Each slave is
57 // connected to the master by a special dedicated |RawChannel|, on which it does 60 // connected to the master by a special dedicated |RawChannel|, on which it does
58 // synchronous IPC (note, however, that the master should never block on any 61 // synchronous IPC (note, however, that the master should never block on any
59 // slave). 62 // slave).
60 class MOJO_SYSTEM_IMPL_EXPORT ConnectionManager { 63 class MOJO_SYSTEM_IMPL_EXPORT ConnectionManager {
61 public: 64 public:
65 enum class Result {
66 FAILURE = 0,
67 SUCCESS,
68 // These results are used for |Connect()| (which also uses |FAILURE|, but
69 // not |SUCCESS|).
70 SUCCESS_CONNECT_SAME_PROCESS,
71 SUCCESS_CONNECT_NEW_CONNECTION,
72 SUCCESS_CONNECT_REUSE_CONNECTION
73 };
74
62 virtual ~ConnectionManager() {} 75 virtual ~ConnectionManager() {}
63 76
64 ConnectionIdentifier GenerateConnectionIdentifier(); 77 ConnectionIdentifier GenerateConnectionIdentifier();
65 78
66 // Shuts down this connection manager. No other methods may be called after 79 // Shuts down this connection manager. No other methods may be called after
67 // this is (or while it is being) called. 80 // this is (or while it is being) called.
68 virtual void Shutdown() = 0; 81 virtual void Shutdown() MOJO_NOT_THREAD_SAFE = 0;
69 82
70 // TODO(vtl): Add a "get my own process identifier" method? 83 // TODO(vtl): Add a "get my own process identifier" method?
71 84
72 // All of the methods below return true on success or false on failure. 85 // All of the methods below return true on success or false on failure.
73 // Failure is obviously fatal for the establishment of a particular 86 // Failure is obviously fatal for the establishment of a particular
74 // connection, but should not be treated as fatal to the process. Failure may, 87 // connection, but should not be treated as fatal to the process. Failure may,
75 // e.g., be caused by a misbehaving (malicious) untrusted peer process. 88 // e.g., be caused by a misbehaving (malicious) untrusted peer process.
76 89
77 // Allows a process who makes the identical call (with equal |connection_id|) 90 // Allows a process who makes the identical call (with equal |connection_id|)
78 // to connect to the calling process. (On success, there will be a "pending 91 // to connect to the calling process. (On success, there will be a "pending
79 // connection" for the given |connection_id| for the calling process.) 92 // connection" for the given |connection_id| for the calling process.)
80 virtual bool AllowConnect(const ConnectionIdentifier& connection_id) = 0; 93 virtual bool AllowConnect(const ConnectionIdentifier& connection_id) = 0;
81 94
82 // Cancels a pending connection for the calling process. (Note that this may 95 // Cancels a pending connection for the calling process. (Note that this may
83 // fail even if |AllowConnect()| succeeded; regardless, |Connect()| should not 96 // fail even if |AllowConnect()| succeeded; regardless, |Connect()| should not
84 // be called.) 97 // be called.)
85 virtual bool CancelConnect(const ConnectionIdentifier& connection_id) = 0; 98 virtual bool CancelConnect(const ConnectionIdentifier& connection_id) = 0;
86 99
87 // Connects a pending connection; to be called only after both parties have 100 // Connects a pending connection; to be called only after both parties have
88 // called |AllowConnect()|. On success, |peer_process_identifier| is set to an 101 // called |AllowConnect()|. On success, |Result::SUCCESS_CONNECT_...| is
89 // unique identifier for the peer process, and if the peer process is not the 102 // returned and |peer_process_identifier| is set to an unique identifier for
90 // same as the calling process then |*platform_handle| is set to a suitable 103 // the peer process. In the case of |SUCCESS_CONNECT_SAME_PROCESS|,
91 // native handle connecting the two parties (if the two parties are the same 104 // |*platform_handle| is set to a suitable native handle connecting the two
92 // process, then |*platform_handle| is reset to be invalid). 105 // parties.
93 virtual bool Connect(const ConnectionIdentifier& connection_id, 106 virtual Result Connect(const ConnectionIdentifier& connection_id,
94 ProcessIdentifier* peer_process_identifier, 107 ProcessIdentifier* peer_process_identifier,
95 embedder::ScopedPlatformHandle* platform_handle) = 0; 108 embedder::ScopedPlatformHandle* platform_handle) = 0;
96 109
97 protected: 110 protected:
98 // |platform_support| must be valid and remain alive until after |Shutdown()| 111 // |platform_support| must be valid and remain alive until after |Shutdown()|
99 // has completed. 112 // has completed.
100 explicit ConnectionManager(embedder::PlatformSupport* platform_support) 113 explicit ConnectionManager(embedder::PlatformSupport* platform_support)
101 : platform_support_(platform_support) {} 114 : platform_support_(platform_support) {}
102 115
103 private: 116 private:
104 embedder::PlatformSupport* const platform_support_; 117 embedder::PlatformSupport* const platform_support_;
105 118
106 MOJO_DISALLOW_COPY_AND_ASSIGN(ConnectionManager); 119 MOJO_DISALLOW_COPY_AND_ASSIGN(ConnectionManager);
107 }; 120 };
108 121
122 // So logging macros and |DCHECK_EQ()|, etc. work.
123 MOJO_SYSTEM_IMPL_EXPORT inline std::ostream& operator<<(
124 std::ostream& out,
125 ConnectionManager::Result result) {
126 return out << static_cast<int>(result);
127 }
128
109 } // namespace system 129 } // namespace system
110 } // namespace mojo 130 } // namespace mojo
111 131
112 #endif // MOJO_EDK_SYSTEM_CONNECTION_MANAGER_H_ 132 #endif // MOJO_EDK_SYSTEM_CONNECTION_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698