From 0f8de3cecf676d9c052560a1129c13eb08f7cee1 Mon Sep 17 00:00:00 2001
From: "rsesek@chromium.org"
 <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Fri, 12 Apr 2013 21:48:57 +0000
Subject: Remove base/mach_ipc_mac.{h,mm}.

The only bit that was still being used was GetNumberOfMachPorts(). Move the
impl of that into its one caller.

BUG=none

Review URL: https://chromiumcodereview.appspot.com/14137013

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@194022 0039d316-1c4b-4281-b951-d872f2087c98
---
 base/base.gypi                                     |   2 -
 base/mach_ipc_mac.h                                | 328 -------------------
 base/mach_ipc_mac.mm                               | 358 ---------------------
 .../automation/testing_automation_provider.cc      |  27 +-
 content/app/content_main_runner.cc                 |   1 -
 content/browser/mach_broker_mac.mm                 |   2 +-
 6 files changed, 26 insertions(+), 692 deletions(-)
 delete mode 100644 base/mach_ipc_mac.h
 delete mode 100644 base/mach_ipc_mac.mm

diff --git a/base/base.gypi b/base/base.gypi
index 2afc858..f26c4c7 100644
--- a/base/base.gypi
+++ b/base/base.gypi
@@ -248,8 +248,6 @@
           'mac/scoped_nsexception_enabler.mm',
           'mac/scoped_sending_event.h',
           'mac/scoped_sending_event.mm',
-          'mach_ipc_mac.h',
-          'mach_ipc_mac.mm',
           'memory/aligned_memory.cc',
           'memory/aligned_memory.h',
           'memory/discardable_memory.cc',
diff --git a/base/mach_ipc_mac.h b/base/mach_ipc_mac.h
deleted file mode 100644
index 7f5f7d6..0000000
--- a/base/mach_ipc_mac.h
+++ /dev/null
@@ -1,328 +0,0 @@
-// Copyright (c) 2012 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 BASE_MACH_IPC_MAC_H_
-#define BASE_MACH_IPC_MAC_H_
-
-#include <mach/mach.h>
-#include <mach/message.h>
-#include <servers/bootstrap.h>
-#include <sys/types.h>
-
-#include <CoreServices/CoreServices.h>
-
-#include "base/base_export.h"
-#include "base/basictypes.h"
-
-//==============================================================================
-// DISCUSSION:
-//
-// The three main classes of interest are
-//
-//  MachMessage:    a wrapper for a Mach message of the following form
-//   mach_msg_header_t
-//   mach_msg_body_t
-//   optional descriptors
-//   optional extra message data
-//
-//  MachReceiveMessage and MachSendMessage subclass MachMessage
-//    and are used instead of MachMessage which is an abstract base class
-//
-//  ReceivePort:
-//    Represents a Mach port for which we have receive rights
-//
-//  MachPortSender:
-//    Represents a Mach port for which we have send rights
-//
-// Here's an example to receive a message on a server port:
-//
-//        // This creates our named server port
-//        ReceivePort receivePort("com.Google.MyService");
-//
-//        MachReceiveMessage message;
-//        kern_return_t result = receivePort.WaitForMessage(&message, 0);
-//
-//        if (result == KERN_SUCCESS && message.GetMessageID() == 57) {
-//          mach_port_t task = message.GetTranslatedPort(0);
-//          mach_port_t thread = message.GetTranslatedPort(1);
-//
-//          char *messageString = message.GetData();
-//
-//          printf("message string = %s\n", messageString);
-//        }
-//
-// Here is an example of using these classes to send a message to this port:
-//
-//    // send to already named port
-//    MachPortSender sender("com.Google.MyService");
-//    MachSendMessage message(57);      // our message ID is 57
-//
-//    // add some ports to be translated for us
-//    message.AddDescriptor(mach_task_self());     // our task
-//    message.AddDescriptor(mach_thread_self());   // this thread
-//
-//    char messageString[] = "Hello server!\n";
-//    message.SetData(messageString, strlen(messageString)+1);
-//    // timeout 1000ms
-//    kern_return_t result = sender.SendMessage(message, 1000);
-//
-
-#define PRINT_MACH_RESULT(result_, message_) \
-  printf(message_" %s (%d)\n", mach_error_string(result_), result_ );
-
-namespace base {
-
-//==============================================================================
-// A wrapper class for mach_msg_port_descriptor_t (with same memory layout)
-// with convenient constructors and accessors
-class MachMsgPortDescriptor : public mach_msg_port_descriptor_t {
- public:
-  // General-purpose constructor
-  MachMsgPortDescriptor(mach_port_t in_name,
-                        mach_msg_type_name_t in_disposition) {
-    name = in_name;
-    pad1 = 0;
-    pad2 = 0;
-    disposition = in_disposition;
-    type = MACH_MSG_PORT_DESCRIPTOR;
-  }
-
-  // For passing send rights to a port
-  MachMsgPortDescriptor(mach_port_t in_name) {
-    name = in_name;
-    pad1 = 0;
-    pad2 = 0;
-    disposition = MACH_MSG_TYPE_PORT_SEND;
-    type = MACH_MSG_PORT_DESCRIPTOR;
-  }
-
-  // Copy constructor
-  MachMsgPortDescriptor(const MachMsgPortDescriptor& desc) {
-    name = desc.name;
-    pad1 = desc.pad1;
-    pad2 = desc.pad2;
-    disposition = desc.disposition;
-    type = desc.type;
-  }
-
-  mach_port_t GetMachPort() const {
-    return name;
-  }
-
-  mach_msg_type_name_t GetDisposition() const {
-    return disposition;
-  }
-
-  // For convenience
-  operator mach_port_t() const {
-    return GetMachPort();
-  }
-};
-
-//==============================================================================
-// MachMessage: a wrapper for a Mach message
-//  (mach_msg_header_t, mach_msg_body_t, extra data)
-//
-//  This considerably simplifies the construction of a message for sending
-//  and the getting at relevant data and descriptors for the receiver.
-//
-//  This class can be initialized using external storage of an arbitrary size
-//  or it can manage storage internally.
-//  1. If storage is allocated internally, the combined size of the descriptors
-//  plus data must be less than 1024.  But as a benefit no memory allocation is
-//  necessary.
-//  2. For external storage, a buffer of at least EmptyMessageSize() must be
-//  provided.
-//
-//  A MachMessage object is used by ReceivePort::WaitForMessage
-//  and MachPortSender::SendMessage
-//
-class BASE_EXPORT MachMessage {
- public:
-  static const size_t kEmptyMessageSize;
-
-  virtual ~MachMessage();
-
-  // The receiver of the message can retrieve the raw data this way
-  u_int8_t *GetData() const {
-    return GetDataLength() > 0 ? GetDataPacket()->data : NULL;
-  }
-
-  u_int32_t GetDataLength() const {
-    return EndianU32_LtoN(GetDataPacket()->data_length);
-  }
-
-  // The message ID may be used as a code identifying the type of message
-  void SetMessageID(int32_t message_id) {
-    GetDataPacket()->id = EndianU32_NtoL(message_id);
-  }
-
-  int32_t GetMessageID() const { return EndianU32_LtoN(GetDataPacket()->id); }
-
-  // Adds a descriptor (typically a Mach port) to be translated
-  // returns true if successful, otherwise not enough space
-  bool AddDescriptor(const MachMsgPortDescriptor &desc);
-
-  int GetDescriptorCount() const {
-    return storage_->body.msgh_descriptor_count;
-  }
-
-  MachMsgPortDescriptor *GetDescriptor(int n) const;
-
-  // Convenience method which gets the Mach port described by the descriptor
-  mach_port_t GetTranslatedPort(int n) const;
-
-  // A simple message is one with no descriptors
-  bool IsSimpleMessage() const { return GetDescriptorCount() == 0; }
-
-  // Sets raw data for the message (returns false if not enough space)
-  bool SetData(const void* data, int32_t data_length);
-
- protected:
-  // Consider this an abstract base class - must create an actual instance
-  // of MachReceiveMessage or MachSendMessage
-  MachMessage();
-
-  // Constructor for use with preallocate storage.
-  // storage_length must be >= EmptyMessageSize()
-  MachMessage(void *storage, size_t storage_length);
-
-  friend class ReceivePort;
-  friend class MachPortSender;
-
-  // Represents raw data in our message
-  struct MessageDataPacket {
-    int32_t  id;          // little-endian
-    int32_t  data_length; // little-endian
-    u_int8_t data[1];     // actual size limited by storage_length_bytes_
-  };
-
-  MessageDataPacket* GetDataPacket() const;
-
-  void SetDescriptorCount(int n);
-  void SetDescriptor(int n, const MachMsgPortDescriptor &desc);
-
-  // Returns total message size setting msgh_size in the header to this value
-  int CalculateSize();
-
-  // Returns total storage size that this object can grow to, this is inclusive
-  // of the Mach header.
-  size_t MaxSize() const { return storage_length_bytes_; }
-
-  mach_msg_header_t *Head() const { return &(storage_->head); }
-
- private:
-  struct MachMessageData {
-    mach_msg_header_t  head;
-    mach_msg_body_t    body;
-    // descriptors and data may be embedded here.
-    u_int8_t           padding[1024];
-  };
-
-  MachMessageData *storage_;
-  size_t storage_length_bytes_;
-  bool own_storage_;  // Is storage owned by this object?
-};
-
-//==============================================================================
-// MachReceiveMessage and MachSendMessage are useful to separate the idea
-// of a Mach message being sent and being received, and adds increased type
-// safety:
-//  ReceivePort::WaitForMessage() only accepts a MachReceiveMessage
-//  MachPortSender::SendMessage() only accepts a MachSendMessage
-
-//==============================================================================
-class MachReceiveMessage : public MachMessage {
- public:
-  MachReceiveMessage() : MachMessage() {}
-  MachReceiveMessage(void *storage, size_t storage_length)
-      : MachMessage(storage, storage_length) {}
-
- private:
-    DISALLOW_COPY_AND_ASSIGN(MachReceiveMessage);
-};
-
-//==============================================================================
-class BASE_EXPORT MachSendMessage : public MachMessage {
- public:
-  explicit MachSendMessage(int32_t message_id);
-  MachSendMessage(void *storage, size_t storage_length, int32_t message_id);
-
- private:
-  void Initialize(int32_t message_id);
-
-  DISALLOW_COPY_AND_ASSIGN(MachSendMessage);
-};
-
-//==============================================================================
-// Represents a Mach port for which we have receive rights
-class BASE_EXPORT ReceivePort {
- public:
-  // Creates a new Mach port for receiving messages and registers a name for it
-  explicit ReceivePort(const char *receive_port_name);
-
-  // Given an already existing Mach port, use it.  We take ownership of the
-  // port and deallocate it in our destructor.
-  explicit ReceivePort(mach_port_t receive_port);
-
-  // Create a new Mach port for receiving messages
-  ReceivePort();
-
-  ~ReceivePort();
-
-  // Waits on the Mach port until message received or timeout.  If |timeout| is
-  // MACH_MSG_TIMEOUT_NONE, this method waits forever.
-  kern_return_t WaitForMessage(MachReceiveMessage *out_message,
-                               mach_msg_timeout_t timeout);
-
-  // The underlying Mach port that we wrap
-  mach_port_t  GetPort() const { return port_; }
-
- private:
-  mach_port_t   port_;
-  kern_return_t init_result_;
-
-  DISALLOW_COPY_AND_ASSIGN(ReceivePort);
-};
-
-//==============================================================================
-// Represents a Mach port for which we have send rights
-class BASE_EXPORT MachPortSender {
- public:
-  // get a port with send rights corresponding to a named registered service
-  explicit MachPortSender(const char *receive_port_name);
-
-
-  // Given an already existing Mach port, use it. Does not take ownership of
-  // |send_port|.
-  explicit MachPortSender(mach_port_t send_port);
-
-  kern_return_t SendMessage(const MachSendMessage& message,
-                            mach_msg_timeout_t timeout);
-
-  mach_port_t GetPort() const { return send_port_; }
-
- private:
-  mach_port_t   send_port_;
-  kern_return_t init_result_;
-
-  DISALLOW_COPY_AND_ASSIGN(MachPortSender);
-};
-
-//==============================================================================
-// Static utility functions.
-
-namespace mac {
-
-// Returns the number of Mach ports to which the given task has a right.
-// Note that unless the calling task has send rights to the passed task port,
-// this will fail unless the calling task is running as root.
-kern_return_t BASE_EXPORT GetNumberOfMachPorts(mach_port_t task_port,
-                                               int* port_count);
-
-}  // namespace mac
-
-}  // namespace base
-
-#endif // BASE_MACH_IPC_MAC_H_
diff --git a/base/mach_ipc_mac.mm b/base/mach_ipc_mac.mm
deleted file mode 100644
index 6f2575e..0000000
--- a/base/mach_ipc_mac.mm
+++ /dev/null
@@ -1,358 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "base/mach_ipc_mac.h"
-
-#import <Foundation/Foundation.h>
-#include <mach/vm_map.h>
-
-#include <stdio.h>
-#include "base/logging.h"
-
-namespace base {
-
-// static
-const size_t MachMessage::kEmptyMessageSize = sizeof(mach_msg_header_t) +
-    sizeof(mach_msg_body_t) + sizeof(MessageDataPacket);
-
-//==============================================================================
-MachSendMessage::MachSendMessage(int32_t message_id) : MachMessage() {
-  Initialize(message_id);
-}
-
-MachSendMessage::MachSendMessage(void *storage, size_t storage_length,
-                                 int32_t message_id)
-    : MachMessage(storage, storage_length) {
-  Initialize(message_id);
-}
-
-void MachSendMessage::Initialize(int32_t message_id) {
-  Head()->msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0);
-
-  // head.msgh_remote_port = ...; // filled out in MachPortSender::SendMessage()
-  Head()->msgh_local_port = MACH_PORT_NULL;
-  Head()->msgh_reserved = 0;
-  Head()->msgh_id = 0;
-
-  SetDescriptorCount(0);  // start out with no descriptors
-
-  SetMessageID(message_id);
-  SetData(NULL, 0);       // client may add data later
-}
-
-//==============================================================================
-MachMessage::MachMessage()
-    : storage_(new MachMessageData),  // Allocate storage_ ourselves
-      storage_length_bytes_(sizeof(MachMessageData)),
-      own_storage_(true) {
-  memset(storage_, 0, storage_length_bytes_);
-}
-
-//==============================================================================
-MachMessage::MachMessage(void *storage, size_t storage_length)
-    : storage_(static_cast<MachMessageData*>(storage)),
-      storage_length_bytes_(storage_length),
-      own_storage_(false) {
-  DCHECK(storage);
-  DCHECK_GE(storage_length, kEmptyMessageSize);
-}
-
-//==============================================================================
-MachMessage::~MachMessage() {
-  if (own_storage_) {
-    delete storage_;
-    storage_ = NULL;
-  }
-}
-
-//==============================================================================
-// returns true if successful
-bool MachMessage::SetData(const void* data,
-                          int32_t data_length) {
-  // Enforce the fact that it's only safe to call this method once on a
-  // message.
-  DCHECK(GetDataPacket()->data_length == 0);
-
-  // first check to make sure we have enough space
-  int size = CalculateSize();
-  int new_size = size + data_length;
-
-  if ((unsigned)new_size > storage_length_bytes_) {
-    return false;  // not enough space
-  }
-
-  GetDataPacket()->data_length = EndianU32_NtoL(data_length);
-  if (data) memcpy(GetDataPacket()->data, data, data_length);
-
-  // Update the Mach header with the new aligned size of the message.
-  CalculateSize();
-
-  return true;
-}
-
-//==============================================================================
-// calculates and returns the total size of the message
-// Currently, the entire message MUST fit inside of the MachMessage
-//    messsage size <= EmptyMessageSize()
-int MachMessage::CalculateSize() {
-  int size = sizeof(mach_msg_header_t) + sizeof(mach_msg_body_t);
-
-  // add space for MessageDataPacket
-  int32_t alignedDataLength = (GetDataLength() + 3) & ~0x3;
-  size += 2*sizeof(int32_t) + alignedDataLength;
-
-  // add space for descriptors
-  size += GetDescriptorCount() * sizeof(MachMsgPortDescriptor);
-
-  Head()->msgh_size = size;
-
-  return size;
-}
-
-//==============================================================================
-MachMessage::MessageDataPacket *MachMessage::GetDataPacket() const {
-  int desc_size = sizeof(MachMsgPortDescriptor)*GetDescriptorCount();
-  MessageDataPacket *packet =
-    reinterpret_cast<MessageDataPacket*>(storage_->padding + desc_size);
-
-  return packet;
-}
-
-//==============================================================================
-void MachMessage::SetDescriptor(int n,
-                                const MachMsgPortDescriptor &desc) {
-  MachMsgPortDescriptor *desc_array =
-    reinterpret_cast<MachMsgPortDescriptor*>(storage_->padding);
-  desc_array[n] = desc;
-}
-
-//==============================================================================
-// returns true if successful otherwise there was not enough space
-bool MachMessage::AddDescriptor(const MachMsgPortDescriptor &desc) {
-  // first check to make sure we have enough space
-  int size = CalculateSize();
-  int new_size = size + sizeof(MachMsgPortDescriptor);
-
-  if ((unsigned)new_size > storage_length_bytes_) {
-    return false;  // not enough space
-  }
-
-  // unfortunately, we need to move the data to allow space for the
-  // new descriptor
-  u_int8_t *p = reinterpret_cast<u_int8_t*>(GetDataPacket());
-  bcopy(p, p+sizeof(MachMsgPortDescriptor), GetDataLength()+2*sizeof(int32_t));
-
-  SetDescriptor(GetDescriptorCount(), desc);
-  SetDescriptorCount(GetDescriptorCount() + 1);
-
-  CalculateSize();
-
-  return true;
-}
-
-//==============================================================================
-void MachMessage::SetDescriptorCount(int n) {
-  storage_->body.msgh_descriptor_count = n;
-
-  if (n > 0) {
-    Head()->msgh_bits |= MACH_MSGH_BITS_COMPLEX;
-  } else {
-    Head()->msgh_bits &= ~MACH_MSGH_BITS_COMPLEX;
-  }
-}
-
-//==============================================================================
-MachMsgPortDescriptor *MachMessage::GetDescriptor(int n) const {
-  if (n < GetDescriptorCount()) {
-    MachMsgPortDescriptor *desc =
-        reinterpret_cast<MachMsgPortDescriptor*>(storage_->padding);
-    return desc + n;
-  }
-
-  return nil;
-}
-
-//==============================================================================
-mach_port_t MachMessage::GetTranslatedPort(int n) const {
-  if (n < GetDescriptorCount()) {
-    return GetDescriptor(n)->GetMachPort();
-  }
-  return MACH_PORT_NULL;
-}
-
-#pragma mark -
-
-//==============================================================================
-// create a new mach port for receiving messages and register a name for it
-ReceivePort::ReceivePort(const char *receive_port_name) {
-  mach_port_t current_task = mach_task_self();
-
-  init_result_ = mach_port_allocate(current_task,
-                                    MACH_PORT_RIGHT_RECEIVE,
-                                    &port_);
-
-  if (init_result_ != KERN_SUCCESS)
-    return;
-
-  init_result_ = mach_port_insert_right(current_task,
-                                        port_,
-                                        port_,
-                                        MACH_MSG_TYPE_MAKE_SEND);
-
-  if (init_result_ != KERN_SUCCESS)
-    return;
-
-  // Without |NSMachPortDeallocateNone|, the NSMachPort seems to deallocate
-  // receive rights on port when it is eventually released.  It is not necessary
-  // to deallocate any rights here as |port_| is fully deallocated in the
-  // ReceivePort destructor.
-  NSPort *ns_port = [NSMachPort portWithMachPort:port_
-                                         options:NSMachPortDeallocateNone];
-  NSString *port_name = [NSString stringWithUTF8String:receive_port_name];
-  [[NSMachBootstrapServer sharedInstance] registerPort:ns_port name:port_name];
-}
-
-//==============================================================================
-// create a new mach port for receiving messages
-ReceivePort::ReceivePort() {
-  mach_port_t current_task = mach_task_self();
-
-  init_result_ = mach_port_allocate(current_task,
-                                    MACH_PORT_RIGHT_RECEIVE,
-                                    &port_);
-
-  if (init_result_ != KERN_SUCCESS)
-    return;
-
-  init_result_ = mach_port_insert_right(current_task,
-                                        port_,
-                                        port_,
-                                        MACH_MSG_TYPE_MAKE_SEND);
-}
-
-//==============================================================================
-// Given an already existing mach port, use it.  We take ownership of the
-// port and deallocate it in our destructor.
-ReceivePort::ReceivePort(mach_port_t receive_port)
-  : port_(receive_port),
-    init_result_(KERN_SUCCESS) {
-}
-
-//==============================================================================
-ReceivePort::~ReceivePort() {
-  if (init_result_ == KERN_SUCCESS)
-    mach_port_deallocate(mach_task_self(), port_);
-}
-
-//==============================================================================
-kern_return_t ReceivePort::WaitForMessage(MachReceiveMessage *out_message,
-                                          mach_msg_timeout_t timeout) {
-  if (!out_message) {
-    return KERN_INVALID_ARGUMENT;
-  }
-
-  // return any error condition encountered in constructor
-  if (init_result_ != KERN_SUCCESS)
-    return init_result_;
-
-  out_message->Head()->msgh_bits = 0;
-  out_message->Head()->msgh_local_port = port_;
-  out_message->Head()->msgh_remote_port = MACH_PORT_NULL;
-  out_message->Head()->msgh_reserved = 0;
-  out_message->Head()->msgh_id = 0;
-
-  mach_msg_option_t rcv_options = MACH_RCV_MSG;
-  if (timeout != MACH_MSG_TIMEOUT_NONE)
-    rcv_options |= MACH_RCV_TIMEOUT;
-
-  kern_return_t result = mach_msg(out_message->Head(),
-                                  rcv_options,
-                                  0,
-                                  out_message->MaxSize(),
-                                  port_,
-                                  timeout,              // timeout in ms
-                                  MACH_PORT_NULL);
-
-  return result;
-}
-
-#pragma mark -
-
-//==============================================================================
-// get a port with send rights corresponding to a named registered service
-MachPortSender::MachPortSender(const char *receive_port_name) {
-  mach_port_t bootstrap_port = 0;
-  init_result_ = task_get_bootstrap_port(mach_task_self(), &bootstrap_port);
-
-  if (init_result_ != KERN_SUCCESS)
-    return;
-
-  init_result_ = bootstrap_look_up(bootstrap_port,
-                    const_cast<char*>(receive_port_name),
-                    &send_port_);
-}
-
-//==============================================================================
-MachPortSender::MachPortSender(mach_port_t send_port)
-  : send_port_(send_port),
-    init_result_(KERN_SUCCESS) {
-}
-
-//==============================================================================
-kern_return_t MachPortSender::SendMessage(const MachSendMessage& message,
-                                          mach_msg_timeout_t timeout) {
-  if (message.Head()->msgh_size == 0) {
-    NOTREACHED();
-    return KERN_INVALID_VALUE;    // just for safety -- never should occur
-  };
-
-  if (init_result_ != KERN_SUCCESS)
-    return init_result_;
-
-  message.Head()->msgh_remote_port = send_port_;
-
-  kern_return_t result = mach_msg(message.Head(),
-                                  MACH_SEND_MSG | MACH_SEND_TIMEOUT,
-                                  message.Head()->msgh_size,
-                                  0,
-                                  MACH_PORT_NULL,
-                                  timeout,              // timeout in ms
-                                  MACH_PORT_NULL);
-
-  return result;
-}
-
-//==============================================================================
-
-namespace mac {
-
-kern_return_t GetNumberOfMachPorts(mach_port_t task_port, int* num_ports) {
-  mach_port_name_array_t names;
-  mach_msg_type_number_t names_count;
-  mach_port_type_array_t types;
-  mach_msg_type_number_t types_count;
-
-  // A friendlier interface would allow NULL buffers to only get the counts.
-  kern_return_t kr = mach_port_names(task_port, &names, &names_count,
-                                     &types, &types_count);
-  if (kr != KERN_SUCCESS)
-    return kr;
-
-  // The documentation states this is an invariant.
-  DCHECK_EQ(names_count, types_count);
-  *num_ports = names_count;
-
-  kr = vm_deallocate(mach_task_self(),
-      reinterpret_cast<vm_address_t>(names),
-      names_count * sizeof(mach_port_name_array_t));
-  kr = vm_deallocate(mach_task_self(),
-      reinterpret_cast<vm_address_t>(types),
-      types_count * sizeof(mach_port_type_array_t));
-
-  return kr;
-}
-
-}  // namespace mac
-
-}  // namespace base
diff --git a/chrome/browser/automation/testing_automation_provider.cc b/chrome/browser/automation/testing_automation_provider.cc
index 6442107..e5bbdb1 100644
--- a/chrome/browser/automation/testing_automation_provider.cc
+++ b/chrome/browser/automation/testing_automation_provider.cc
@@ -159,7 +159,8 @@
 #endif
 
 #if defined(OS_MACOSX)
-#include "base/mach_ipc_mac.h"
+#include <mach/mach.h>
+#include <mach/mach_vm.h>
 #endif
 
 #if !defined(NO_TCMALLOC) && (defined(OS_LINUX) || defined(OS_CHROMEOS))
@@ -490,7 +491,29 @@ void TestingAutomationProvider::AppendTab(int handle,
 
 void TestingAutomationProvider::GetMachPortCount(int* port_count) {
 #if defined(OS_MACOSX)
-  base::mac::GetNumberOfMachPorts(mach_task_self(), port_count);
+  mach_port_name_array_t names;
+  mach_msg_type_number_t names_count;
+  mach_port_type_array_t types;
+  mach_msg_type_number_t types_count;
+
+  mach_port_t port = mach_task_self();
+
+  // A friendlier interface would allow NULL buffers to only get the counts.
+  kern_return_t kr = mach_port_names(port, &names, &names_count,
+                                     &types, &types_count);
+  if (kr != KERN_SUCCESS) {
+    *port_count = 0;
+    return;
+  }
+
+  // The documentation states this is an invariant.
+  DCHECK_EQ(names_count, types_count);
+  *port_count = names_count;
+
+  mach_vm_deallocate(port, reinterpret_cast<mach_vm_address_t>(names),
+      names_count * sizeof(mach_port_name_array_t));
+  mach_vm_deallocate(port, reinterpret_cast<mach_vm_address_t>(types),
+      types_count * sizeof(mach_port_type_array_t));
 #else
   *port_count = 0;
 #endif
diff --git a/content/app/content_main_runner.cc b/content/app/content_main_runner.cc
index 257f701..46599ac 100644
--- a/content/app/content_main_runner.cc
+++ b/content/app/content_main_runner.cc
@@ -66,7 +66,6 @@
 #elif defined(OS_MACOSX)
 #include "base/mac/scoped_nsautorelease_pool.h"
 #if !defined(OS_IOS)
-#include "base/mach_ipc_mac.h"
 #include "base/power_monitor/power_monitor.h"
 #include "content/browser/mach_broker_mac.h"
 #include "content/common/sandbox_init_mac.h"
diff --git a/content/browser/mach_broker_mac.mm b/content/browser/mach_broker_mac.mm
index d765cf5..783b708 100644
--- a/content/browser/mach_broker_mac.mm
+++ b/content/browser/mach_broker_mac.mm
@@ -5,6 +5,7 @@
 #include "content/browser/mach_broker_mac.h"
 
 #include <bsm/libbsm.h>
+#include <servers/bootstrap.h>
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
@@ -12,7 +13,6 @@
 #include "base/logging.h"
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_mach_port.h"
-#include "base/mach_ipc_mac.h"
 #include "base/string_util.h"
 #include "base/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
-- 
cgit v1.1