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

Side by Side Diff: ipc/attachment_broker_privileged_mac.h

Issue 1978353003: mac: Fix an attachment broker race condition. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@temp48_windows_ab
Patch Set: Created 4 years, 7 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
« no previous file with comments | « no previous file | ipc/attachment_broker_privileged_mac.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 IPC_ATTACHMENT_BROKER_PRIVILEGED_MAC_H_ 5 #ifndef IPC_ATTACHMENT_BROKER_PRIVILEGED_MAC_H_
6 #define IPC_ATTACHMENT_BROKER_PRIVILEGED_MAC_H_ 6 #define IPC_ATTACHMENT_BROKER_PRIVILEGED_MAC_H_
7 7
8 #include <mach/mach.h> 8 #include <mach/mach.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 public base::PortProvider::Observer { 59 public base::PortProvider::Observer {
60 public: 60 public:
61 explicit AttachmentBrokerPrivilegedMac(base::PortProvider* port_provider); 61 explicit AttachmentBrokerPrivilegedMac(base::PortProvider* port_provider);
62 ~AttachmentBrokerPrivilegedMac() override; 62 ~AttachmentBrokerPrivilegedMac() override;
63 63
64 // IPC::AttachmentBroker overrides. 64 // IPC::AttachmentBroker overrides.
65 bool SendAttachmentToProcess( 65 bool SendAttachmentToProcess(
66 const scoped_refptr<IPC::BrokerableAttachment>& attachment, 66 const scoped_refptr<IPC::BrokerableAttachment>& attachment,
67 base::ProcessId destination_process) override; 67 base::ProcessId destination_process) override;
68 void DeregisterCommunicationChannel(Endpoint* endpoint) override; 68 void DeregisterCommunicationChannel(Endpoint* endpoint) override;
69 void ReceivedPeerPid(base::ProcessId peer_pid) override;
69 70
70 // IPC::Listener overrides. 71 // IPC::Listener overrides.
71 bool OnMessageReceived(const Message& message) override; 72 bool OnMessageReceived(const Message& message) override;
72 73
73 // base::PortProvider::Observer override. 74 // base::PortProvider::Observer override.
74 void OnReceivedTaskPort(base::ProcessHandle process) override; 75 void OnReceivedTaskPort(base::ProcessHandle process) override;
75 76
76 private: 77 private:
77 FRIEND_TEST_ALL_PREFIXES(AttachmentBrokerPrivilegedMacMultiProcessTest, 78 FRIEND_TEST_ALL_PREFIXES(AttachmentBrokerPrivilegedMacMultiProcessTest,
78 InsertRight); 79 InsertRight);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 161
161 // |wire_format.destination_process| must be another process. 162 // |wire_format.destination_process| must be another process.
162 // |wire_format.mach_port| must be the intermediate Mach port. 163 // |wire_format.mach_port| must be the intermediate Mach port.
163 // Ownership of |wire_format.mach_port| is implicitly passed to the process 164 // Ownership of |wire_format.mach_port| is implicitly passed to the process
164 // that receives the Chrome IPC message. 165 // that receives the Chrome IPC message.
165 // Returns |false| on irrecoverable error. 166 // Returns |false| on irrecoverable error.
166 bool RouteWireFormatToAnother(const MachPortWireFormat& wire_format); 167 bool RouteWireFormatToAnother(const MachPortWireFormat& wire_format);
167 168
168 // Atempts to broker all precursors whose destination is |pid|. Has no effect 169 // Atempts to broker all precursors whose destination is |pid|. Has no effect
169 // if |port_provider_| does not have the task port for |pid|. 170 // if |port_provider_| does not have the task port for |pid|.
170 void SendPrecursorsForProcess(base::ProcessId pid); 171 // If a communication channel has not been established from the destination
172 // process, and |store_on_failure| is true, then the precursor is kept for
173 // later reuse. If |store_on_failure| is false, then the precursor is deleted.
174 void SendPrecursorsForProcess(base::ProcessId pid, bool store_on_failure);
171 175
172 // Brokers a single precursor into the task represented by |task_port|. 176 // Brokers a single precursor into the task represented by |task_port|.
173 // Returns |false| on irrecoverable error. 177 // Returns |false| on irrecoverable error.
174 bool SendPrecursor(AttachmentPrecursor* precursor, mach_port_t task_port); 178 bool SendPrecursor(AttachmentPrecursor* precursor, mach_port_t task_port);
175 179
176 // Add a precursor to |precursors_|. Takes ownership of |port|. 180 // Add a precursor to |precursors_|. Takes ownership of |port|.
177 void AddPrecursor(base::ProcessId pid, 181 void AddPrecursor(base::ProcessId pid,
178 base::mac::ScopedMachSendRight port, 182 base::mac::ScopedMachSendRight port,
179 const BrokerableAttachment::AttachmentId& id); 183 const BrokerableAttachment::AttachmentId& id);
180 184
181 // Atempts to process all extractors whose source is |pid|. Has no effect 185 // Atempts to process all extractors whose source is |pid|. Has no effect
182 // if |port_provider_| does not have the task port for |pid|. 186 // if |port_provider_| does not have the task port for |pid|.
183 void ProcessExtractorsForProcess(base::ProcessId pid); 187 // If a communication channel has not been established from the source
188 // process, and |store_on_failure| is true, then the extractor is kept for
189 // later reuse. If |store_on_failure| is false, then the extractor is deleted.
190 void ProcessExtractorsForProcess(base::ProcessId pid, bool store_on_failure);
184 191
185 // Processes a single extractor whose source pid is represented by 192 // Processes a single extractor whose source pid is represented by
186 // |task_port|. 193 // |task_port|.
187 void ProcessExtractor(AttachmentExtractor* extractor, mach_port_t task_port); 194 void ProcessExtractor(AttachmentExtractor* extractor, mach_port_t task_port);
188 195
189 // Add an extractor to |extractors_|. 196 // Add an extractor to |extractors_|.
190 void AddExtractor(base::ProcessId source_pid, 197 void AddExtractor(base::ProcessId source_pid,
191 base::ProcessId dest_pid, 198 base::ProcessId dest_pid,
192 mach_port_name_t port, 199 mach_port_name_t port,
193 const BrokerableAttachment::AttachmentId& id); 200 const BrokerableAttachment::AttachmentId& id);
(...skipping 10 matching lines...) Expand all
204 // processed. 211 // processed.
205 std::map<base::ProcessId, ScopedVector<AttachmentExtractor>*> extractors_; 212 std::map<base::ProcessId, ScopedVector<AttachmentExtractor>*> extractors_;
206 base::Lock extractors_lock_; 213 base::Lock extractors_lock_;
207 214
208 DISALLOW_COPY_AND_ASSIGN(AttachmentBrokerPrivilegedMac); 215 DISALLOW_COPY_AND_ASSIGN(AttachmentBrokerPrivilegedMac);
209 }; 216 };
210 217
211 } // namespace IPC 218 } // namespace IPC
212 219
213 #endif // IPC_ATTACHMENT_BROKER_PRIVILEGED_MAC_H_ 220 #endif // IPC_ATTACHMENT_BROKER_PRIVILEGED_MAC_H_
OLDNEW
« no previous file with comments | « no previous file | ipc/attachment_broker_privileged_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698