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

Unified Diff: ipc/attachment_broker_privileged_mac.h

Issue 2473993003: Delete IPC::ChannelPosix, IPC::ChannelWin and IPC::AttachmentBroker. (Closed)
Patch Set: Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ipc/attachment_broker_privileged.cc ('k') | ipc/attachment_broker_privileged_mac.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ipc/attachment_broker_privileged_mac.h
diff --git a/ipc/attachment_broker_privileged_mac.h b/ipc/attachment_broker_privileged_mac.h
deleted file mode 100644
index 9122a16d8fba38af68ccbb44c04d3d74d4ab5107..0000000000000000000000000000000000000000
--- a/ipc/attachment_broker_privileged_mac.h
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IPC_ATTACHMENT_BROKER_PRIVILEGED_MAC_H_
-#define IPC_ATTACHMENT_BROKER_PRIVILEGED_MAC_H_
-
-#include <mach/mach.h>
-#include <stdint.h>
-
-#include <map>
-
-#include "base/gtest_prod_util.h"
-#include "base/mac/scoped_mach_port.h"
-#include "base/macros.h"
-#include "base/memory/scoped_vector.h"
-#include "base/process/port_provider_mac.h"
-#include "base/synchronization/lock.h"
-#include "ipc/attachment_broker_privileged.h"
-#include "ipc/ipc_export.h"
-#include "ipc/mach_port_attachment_mac.h"
-
-namespace base {
-class PortProvider;
-} // namespace base
-
-namespace IPC {
-
-// This class is a concrete subclass of AttachmentBrokerPrivileged for the
-// OSX platform.
-//
-// An example of the typical process by which a Mach port gets brokered.
-// Definitions:
-// 1. Let there be three processes P1, U2, U3. P1 is privileged.
-// 2. U2 wants to send a Mach port M2 to U3. If this port is inserted into P1,
-// it will be called M1. If it is inserted into U3, it will be called M3.
-// 3. name() returns a serializable representation of a Mach port that can be
-// passed over chrome IPC.
-// 4. pid() returns the process id of a process.
-//
-// Process:
-// 1. U2 sends a AttachmentBrokerMsg_DuplicateMachPort message to P1. The
-// message contains name(M2), and pid(U3).
-// 2. P1 extracts M2 into its own namespace, making M1.
-// 3. P1 makes a new Mach port R in U3.
-// 4. P1 sends a mach_msg with M1 to R.
-// 5. P1 sends name(R) to U3.
-// 6. U3 retrieves the queued message from R. The kernel automatically
-// translates M1 into the namespace of U3, making M3.
-//
-// The logic of this class is a little bit more complex becauese any or all of
-// P1, U2 and U3 may be the same, and depending on the exact configuration,
-// the creation of R may not be necessary.
-//
-// For the rest of this file, and the corresponding implementation file, R will
-// be called the "intermediate Mach port" and M3 the "final Mach port".
-class IPC_EXPORT AttachmentBrokerPrivilegedMac
- : public AttachmentBrokerPrivileged,
- public base::PortProvider::Observer {
- public:
- explicit AttachmentBrokerPrivilegedMac(base::PortProvider* port_provider);
- ~AttachmentBrokerPrivilegedMac() override;
-
- // IPC::AttachmentBroker overrides.
- bool SendAttachmentToProcess(
- const scoped_refptr<IPC::BrokerableAttachment>& attachment,
- base::ProcessId destination_process) override;
- void DeregisterCommunicationChannel(Endpoint* endpoint) override;
- void ReceivedPeerPid(base::ProcessId peer_pid) override;
-
- // IPC::Listener overrides.
- bool OnMessageReceived(const Message& message) override;
-
- // base::PortProvider::Observer override.
- void OnReceivedTaskPort(base::ProcessHandle process) override;
-
- private:
- FRIEND_TEST_ALL_PREFIXES(AttachmentBrokerPrivilegedMacMultiProcessTest,
- InsertRight);
- FRIEND_TEST_ALL_PREFIXES(AttachmentBrokerPrivilegedMacMultiProcessTest,
- InsertSameRightTwice);
- FRIEND_TEST_ALL_PREFIXES(AttachmentBrokerPrivilegedMacMultiProcessTest,
- InsertTwoRights);
- using MachPortWireFormat = internal::MachPortAttachmentMac::WireFormat;
-
- // Contains all the information necessary to broker an attachment into a
- // destination process. The only thing that prevents an AttachmentPrecusor
- // from being immediately processed is if |port_provider_| does not yet have a
- // task port for |pid|.
- class IPC_EXPORT AttachmentPrecursor {
- public:
- AttachmentPrecursor(const base::ProcessId& pid,
- base::mac::ScopedMachSendRight port_to_insert,
- const BrokerableAttachment::AttachmentId& id);
- ~AttachmentPrecursor();
-
- // Caller takes ownership of |port_|.
- base::mac::ScopedMachSendRight TakePort();
-
- base::ProcessId pid() const { return pid_; }
- const BrokerableAttachment::AttachmentId id() const { return id_; }
-
- private:
- // The pid of the destination process.
- const base::ProcessId pid_;
- // The final Mach port, as per definition at the top of this file.
- base::mac::ScopedMachSendRight port_;
- // The id of the attachment.
- const BrokerableAttachment::AttachmentId id_;
- DISALLOW_COPY_AND_ASSIGN(AttachmentPrecursor);
- };
-
- // Contains all the information necessary to extract a send right and create
- // an AttachmentPrecursor. The only thing that prevents an AttachmentExtractor
- // from being immediately processed is if |port_provider_| does not yet have a
- // task port for |source_pid|.
- class IPC_EXPORT AttachmentExtractor {
- public:
- AttachmentExtractor(const base::ProcessId& source_pid,
- const base::ProcessId& dest_pid,
- mach_port_name_t port,
- const BrokerableAttachment::AttachmentId& id);
- ~AttachmentExtractor();
-
- base::ProcessId source_pid() const { return source_pid_; }
- base::ProcessId dest_pid() const { return dest_pid_; }
- mach_port_name_t port() const { return port_to_extract_; }
- const BrokerableAttachment::AttachmentId id() const { return id_; }
-
- private:
- const base::ProcessId source_pid_;
- const base::ProcessId dest_pid_;
- mach_port_name_t port_to_extract_;
- const BrokerableAttachment::AttachmentId id_;
- };
-
- // IPC message handlers.
- void OnDuplicateMachPort(const Message& message);
-
- // Duplicates the Mach port referenced from |wire_format| from
- // |source_process| into |wire_format|'s destination process.
- MachPortWireFormat DuplicateMachPort(const MachPortWireFormat& wire_format,
- base::ProcessId source_process);
-
- // Extracts a copy of the send right to |named_right| from |task_port|.
- // Returns MACH_PORT_NULL on error.
- base::mac::ScopedMachSendRight ExtractNamedRight(
- mach_port_t task_port,
- mach_port_name_t named_right);
-
- // Copies an existing |wire_format|, but substitutes in a different mach port.
- MachPortWireFormat CopyWireFormat(const MachPortWireFormat& wire_format,
- uint32_t mach_port);
-
- // |wire_format.destination_process| must be this process.
- // |wire_format.mach_port| must be the final Mach port.
- // Consumes a reference to |wire_format.mach_port|, as ownership is implicitly
- // passed to the consumer of the Chrome IPC message.
- // Makes an attachment, queues it, and notifies the observers.
- void RoutePrecursorToSelf(AttachmentPrecursor* precursor);
-
- // |wire_format.destination_process| must be another process.
- // |wire_format.mach_port| must be the intermediate Mach port.
- // Ownership of |wire_format.mach_port| is implicitly passed to the process
- // that receives the Chrome IPC message.
- // Returns |false| on irrecoverable error.
- bool RouteWireFormatToAnother(const MachPortWireFormat& wire_format);
-
- // Atempts to broker all precursors whose destination is |pid|. Has no effect
- // if |port_provider_| does not have the task port for |pid|.
- // If a communication channel has not been established from the destination
- // process, and |store_on_failure| is true, then the precursor is kept for
- // later reuse. If |store_on_failure| is false, then the precursor is deleted.
- void SendPrecursorsForProcess(base::ProcessId pid, bool store_on_failure);
-
- // Brokers a single precursor into the task represented by |task_port|.
- // Returns |false| on irrecoverable error.
- bool SendPrecursor(AttachmentPrecursor* precursor, mach_port_t task_port);
-
- // Add a precursor to |precursors_|. Takes ownership of |port|.
- void AddPrecursor(base::ProcessId pid,
- base::mac::ScopedMachSendRight port,
- const BrokerableAttachment::AttachmentId& id);
-
- // Atempts to process all extractors whose source is |pid|. Has no effect
- // if |port_provider_| does not have the task port for |pid|.
- // If a communication channel has not been established from the source
- // process, and |store_on_failure| is true, then the extractor is kept for
- // later reuse. If |store_on_failure| is false, then the extractor is deleted.
- void ProcessExtractorsForProcess(base::ProcessId pid, bool store_on_failure);
-
- // Processes a single extractor whose source pid is represented by
- // |task_port|.
- void ProcessExtractor(AttachmentExtractor* extractor, mach_port_t task_port);
-
- // Add an extractor to |extractors_|.
- void AddExtractor(base::ProcessId source_pid,
- base::ProcessId dest_pid,
- mach_port_name_t port,
- const BrokerableAttachment::AttachmentId& id);
-
- // The port provider must live at least as long as the AttachmentBroker.
- base::PortProvider* port_provider_;
-
- // For each ProcessId, a vector of precursors that are waiting to be
- // sent.
- std::map<base::ProcessId, ScopedVector<AttachmentPrecursor>*> precursors_;
- base::Lock precursors_lock_;
-
- // For each ProcessId, a vector of extractors that are waiting to be
- // processed.
- std::map<base::ProcessId, ScopedVector<AttachmentExtractor>*> extractors_;
- base::Lock extractors_lock_;
-
- DISALLOW_COPY_AND_ASSIGN(AttachmentBrokerPrivilegedMac);
-};
-
-} // namespace IPC
-
-#endif // IPC_ATTACHMENT_BROKER_PRIVILEGED_MAC_H_
« no previous file with comments | « ipc/attachment_broker_privileged.cc ('k') | ipc/attachment_broker_privileged_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698