diff --git a/mojo/edk/system/channel.cc b/mojo/edk/system/channel.cc
index b13d08c..2e1b96c 100644
--- a/mojo/edk/system/channel.cc
+++ b/mojo/edk/system/channel.cc
@@ -14,6 +14,7 @@
 #include "mojo/edk/system/endpoint_relayer.h"
 #include "mojo/edk/system/transport_data.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::MakeRefCounted;
 using mojo::util::MutexLocker;
 using mojo::util::RefPtr;
@@ -295,7 +296,7 @@
 
 void Channel::OnReadMessage(
     const MessageInTransit::View& message_view,
-    embedder::ScopedPlatformHandleVectorPtr platform_handles) {
+    std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles) {
 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
   DCHECK(thread_checker_.IsCreationThreadCurrent());
 #endif  // !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
@@ -352,7 +353,7 @@
 
 void Channel::OnReadMessageForEndpoint(
     const MessageInTransit::View& message_view,
-    embedder::ScopedPlatformHandleVectorPtr platform_handles) {
+    std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles) {
 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
   DCHECK(thread_checker_.IsCreationThreadCurrent());
 #endif  // !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
@@ -415,7 +416,7 @@
 
 void Channel::OnReadMessageForChannel(
     const MessageInTransit::View& message_view,
-    embedder::ScopedPlatformHandleVectorPtr platform_handles) {
+    std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles) {
 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
   DCHECK(thread_checker_.IsCreationThreadCurrent());
 #endif  // !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
diff --git a/mojo/edk/system/channel.h b/mojo/edk/system/channel.h
index 1780205..166e385 100644
--- a/mojo/edk/system/channel.h
+++ b/mojo/edk/system/channel.h
@@ -191,16 +191,19 @@
   // |RawChannel::Delegate| implementation (only called on the creation thread):
   void OnReadMessage(
       const MessageInTransit::View& message_view,
-      embedder::ScopedPlatformHandleVectorPtr platform_handles) override;
+      std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+          platform_handles) override;
   void OnError(Error error) override;
 
   // Helpers for |OnReadMessage| (only called on the creation thread):
   void OnReadMessageForEndpoint(
       const MessageInTransit::View& message_view,
-      embedder::ScopedPlatformHandleVectorPtr platform_handles);
+      std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+          platform_handles);
   void OnReadMessageForChannel(
       const MessageInTransit::View& message_view,
-      embedder::ScopedPlatformHandleVectorPtr platform_handles);
+      std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+          platform_handles);
 
   // Handles "attach and run endpoint" messages.
   bool OnAttachAndRunEndpoint(ChannelEndpointId local_id,
diff --git a/mojo/edk/system/data_pipe.cc b/mojo/edk/system/data_pipe.cc
index 109f1ac..3efd6db 100644
--- a/mojo/edk/system/data_pipe.cc
+++ b/mojo/edk/system/data_pipe.cc
@@ -25,6 +25,7 @@
 #include "mojo/edk/system/remote_producer_data_pipe_impl.h"
 #include "mojo/edk/util/make_unique.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::MutexLocker;
 using mojo::util::RefPtr;
 
@@ -416,7 +417,7 @@
     Channel* channel,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* platform_handles) {
   MutexLocker locker(&mutex_);
   DCHECK(has_local_producer_no_lock());
   // Warning: After |ProducerEndSerialize()|, quite probably |impl_| has
@@ -625,7 +626,7 @@
     Channel* channel,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* platform_handles) {
   MutexLocker locker(&mutex_);
   DCHECK(has_local_consumer_no_lock());
   // Warning: After |ConsumerEndSerialize()|, quite probably |impl_| has
diff --git a/mojo/edk/system/data_pipe.h b/mojo/edk/system/data_pipe.h
index 0d77668..866ad9d 100644
--- a/mojo/edk/system/data_pipe.h
+++ b/mojo/edk/system/data_pipe.h
@@ -8,8 +8,9 @@
 #include <stdint.h>
 
 #include <memory>
+#include <vector>
 
-#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
 #include "mojo/edk/system/channel_endpoint_client.h"
 #include "mojo/edk/system/handle_signals_state.h"
 #include "mojo/edk/system/memory.h"
@@ -119,10 +120,11 @@
   void ProducerStartSerialize(Channel* channel,
                               size_t* max_size,
                               size_t* max_platform_handles);
-  bool ProducerEndSerialize(Channel* channel,
-                            void* destination,
-                            size_t* actual_size,
-                            embedder::PlatformHandleVector* platform_handles);
+  bool ProducerEndSerialize(
+      Channel* channel,
+      void* destination,
+      size_t* actual_size,
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles);
   bool ProducerIsBusy() const;
 
   // These are called by the consumer dispatcher to implement its methods of
@@ -151,10 +153,11 @@
   void ConsumerStartSerialize(Channel* channel,
                               size_t* max_size,
                               size_t* max_platform_handles);
-  bool ConsumerEndSerialize(Channel* channel,
-                            void* destination,
-                            size_t* actual_size,
-                            embedder::PlatformHandleVector* platform_handles);
+  bool ConsumerEndSerialize(
+      Channel* channel,
+      void* destination,
+      size_t* actual_size,
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles);
   bool ConsumerIsBusy() const;
 
   // The following are only to be used by |DataPipeImpl| (and its subclasses):
diff --git a/mojo/edk/system/data_pipe_consumer_dispatcher.cc b/mojo/edk/system/data_pipe_consumer_dispatcher.cc
index 490b917..b0101e3 100644
--- a/mojo/edk/system/data_pipe_consumer_dispatcher.cc
+++ b/mojo/edk/system/data_pipe_consumer_dispatcher.cc
@@ -10,6 +10,7 @@
 #include "mojo/edk/system/data_pipe.h"
 #include "mojo/edk/system/memory.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::MutexLocker;
 using mojo::util::RefPtr;
 
@@ -161,7 +162,7 @@
     Channel* channel,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* platform_handles) {
   AssertHasOneRef();  // Only one ref => no need to take the lock.
 
   bool rv = data_pipe_->ConsumerEndSerialize(channel, destination, actual_size,
diff --git a/mojo/edk/system/data_pipe_consumer_dispatcher.h b/mojo/edk/system/data_pipe_consumer_dispatcher.h
index 9f2389d..f650c7b 100644
--- a/mojo/edk/system/data_pipe_consumer_dispatcher.h
+++ b/mojo/edk/system/data_pipe_consumer_dispatcher.h
@@ -69,7 +69,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) override
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) override
       MOJO_NOT_THREAD_SAFE;
   bool IsBusyNoLock() const override;
 
diff --git a/mojo/edk/system/data_pipe_impl.h b/mojo/edk/system/data_pipe_impl.h
index e25b697..4596a62 100644
--- a/mojo/edk/system/data_pipe_impl.h
+++ b/mojo/edk/system/data_pipe_impl.h
@@ -8,8 +8,9 @@
 #include <stdint.h>
 
 #include <utility>
+#include <vector>
 
-#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
 #include "mojo/edk/system/data_pipe.h"
 #include "mojo/edk/system/handle_signals_state.h"
 #include "mojo/edk/system/memory.h"
@@ -75,7 +76,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) = 0;
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) = 0;
 
   virtual void ConsumerClose() = 0;
   // |num_bytes.Get()| will be a nonzero multiple of |element_num_bytes()|.
@@ -102,7 +103,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) = 0;
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) = 0;
 
   virtual bool OnReadMessage(unsigned port, MessageInTransit* message) = 0;
   virtual void OnDetachFromChannel(unsigned port) = 0;
diff --git a/mojo/edk/system/data_pipe_producer_dispatcher.cc b/mojo/edk/system/data_pipe_producer_dispatcher.cc
index 814fa59..c08bd88 100644
--- a/mojo/edk/system/data_pipe_producer_dispatcher.cc
+++ b/mojo/edk/system/data_pipe_producer_dispatcher.cc
@@ -10,6 +10,7 @@
 #include "mojo/edk/system/data_pipe.h"
 #include "mojo/edk/system/memory.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::MutexLocker;
 using mojo::util::RefPtr;
 
@@ -137,7 +138,7 @@
     Channel* channel,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* platform_handles) {
   AssertHasOneRef();  // Only one ref => no need to take the lock.
 
   bool rv = data_pipe_->ProducerEndSerialize(channel, destination, actual_size,
diff --git a/mojo/edk/system/data_pipe_producer_dispatcher.h b/mojo/edk/system/data_pipe_producer_dispatcher.h
index 9251ce1..6118449 100644
--- a/mojo/edk/system/data_pipe_producer_dispatcher.h
+++ b/mojo/edk/system/data_pipe_producer_dispatcher.h
@@ -69,7 +69,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) override
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) override
       MOJO_NOT_THREAD_SAFE;
   bool IsBusyNoLock() const override;
 
diff --git a/mojo/edk/system/dispatcher.cc b/mojo/edk/system/dispatcher.cc
index ea88870..9433ccc 100644
--- a/mojo/edk/system/dispatcher.cc
+++ b/mojo/edk/system/dispatcher.cc
@@ -12,6 +12,7 @@
 #include "mojo/edk/system/platform_handle_dispatcher.h"
 #include "mojo/edk/system/shared_buffer_dispatcher.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::MutexLocker;
 using mojo::util::RefPtr;
 
@@ -63,7 +64,7 @@
     Channel* channel,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* platform_handles) {
   DCHECK(dispatcher);
   return dispatcher->EndSerializeAndClose(channel, destination, actual_size,
                                           platform_handles);
@@ -75,7 +76,7 @@
     int32_t type,
     const void* source,
     size_t size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* platform_handles) {
   switch (static_cast<Dispatcher::Type>(type)) {
     case Type::UNKNOWN:
       DVLOG(2) << "Deserializing invalid handle";
@@ -412,7 +413,7 @@
     Channel* /*channel*/,
     void* /*destination*/,
     size_t* /*actual_size*/,
-    embedder::PlatformHandleVector* /*platform_handles*/) {
+    std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
   AssertHasOneRef();  // Only one ref => no need to take the lock.
   DCHECK(is_closed_);
   // By default, serializing isn't supported, so just close.
@@ -461,7 +462,7 @@
     Channel* channel,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* platform_handles) {
   DCHECK(channel);
   DCHECK(actual_size);
   AssertHasOneRef();  // Only one ref => no need to take the lock.
diff --git a/mojo/edk/system/dispatcher.h b/mojo/edk/system/dispatcher.h
index e425bb3..b9bb895 100644
--- a/mojo/edk/system/dispatcher.h
+++ b/mojo/edk/system/dispatcher.h
@@ -12,7 +12,7 @@
 #include <ostream>
 #include <vector>
 
-#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
 #include "mojo/edk/system/handle_signals_state.h"
 #include "mojo/edk/system/memory.h"
 #include "mojo/edk/util/mutex.h"
@@ -200,7 +200,7 @@
         Channel* channel,
         void* destination,
         size_t* actual_size,
-        embedder::PlatformHandleVector* platform_handles);
+        std::vector<embedder::ScopedPlatformHandle>* platform_handles);
 
     // Deserialization API.
     // Note: This "clears" (i.e., reset to the invalid handle) any platform
@@ -210,7 +210,7 @@
         int32_t type,
         const void* source,
         size_t size,
-        embedder::PlatformHandleVector* platform_handles);
+        std::vector<embedder::ScopedPlatformHandle>* platform_handles);
   };
 
  protected:
@@ -304,7 +304,8 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) MOJO_NOT_THREAD_SAFE;
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles)
+      MOJO_NOT_THREAD_SAFE;
 
   // This should be overridden to return true if/when there's an ongoing
   // operation (e.g., two-phase read/writes on data pipes) that should prevent a
@@ -371,8 +372,8 @@
   bool EndSerializeAndClose(Channel* channel,
                             void* destination,
                             size_t* actual_size,
-                            embedder::PlatformHandleVector* platform_handles)
-      MOJO_NOT_THREAD_SAFE;
+                            std::vector<embedder::ScopedPlatformHandle>*
+                                platform_handles) MOJO_NOT_THREAD_SAFE;
 
   // This protects the following members as well as any state added by
   // subclasses.
diff --git a/mojo/edk/system/local_data_pipe_impl.cc b/mojo/edk/system/local_data_pipe_impl.cc
index d4330ae..565d4af 100644
--- a/mojo/edk/system/local_data_pipe_impl.cc
+++ b/mojo/edk/system/local_data_pipe_impl.cc
@@ -25,6 +25,7 @@
 #include "mojo/edk/system/remote_producer_data_pipe_impl.h"
 #include "mojo/edk/util/make_unique.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::RefPtr;
 
 namespace mojo {
@@ -164,7 +165,7 @@
     Channel* channel,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
   SerializedDataPipeProducerDispatcher* s =
       static_cast<SerializedDataPipeProducerDispatcher*>(destination);
   s->validated_options = validated_options();
@@ -336,7 +337,7 @@
     Channel* channel,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
   SerializedDataPipeConsumerDispatcher* s =
       static_cast<SerializedDataPipeConsumerDispatcher*>(destination);
   s->validated_options = validated_options();
diff --git a/mojo/edk/system/local_data_pipe_impl.h b/mojo/edk/system/local_data_pipe_impl.h
index aa14590..b4f513e 100644
--- a/mojo/edk/system/local_data_pipe_impl.h
+++ b/mojo/edk/system/local_data_pipe_impl.h
@@ -43,7 +43,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) override;
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) override;
   void ConsumerClose() override;
   MojoResult ConsumerReadData(UserPointer<void> elements,
                               UserPointer<uint32_t> num_bytes,
@@ -66,7 +66,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) override;
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) override;
   bool OnReadMessage(unsigned port, MessageInTransit* message) override;
   void OnDetachFromChannel(unsigned port) override;
 
diff --git a/mojo/edk/system/master_connection_manager.cc b/mojo/edk/system/master_connection_manager.cc
index 4e78897..19f2d5d 100644
--- a/mojo/edk/system/master_connection_manager.cc
+++ b/mojo/edk/system/master_connection_manager.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include <unordered_map>
 #include <utility>
+#include <vector>
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
@@ -17,6 +18,7 @@
 #include "mojo/edk/embedder/platform_channel_pair.h"
 #include "mojo/edk/embedder/platform_handle.h"
 #include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
 #include "mojo/edk/system/connection_manager_messages.h"
 #include "mojo/edk/system/message_in_transit.h"
 #include "mojo/edk/system/raw_channel.h"
@@ -25,8 +27,10 @@
 #include "mojo/edk/util/waitable_event.h"
 #include "mojo/public/cpp/system/macros.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::platform::TaskRunner;
 using mojo::util::AutoResetWaitableEvent;
+using mojo::util::MakeUnique;
 using mojo::util::MutexLocker;
 using mojo::util::RefPtr;
 
@@ -84,9 +88,9 @@
 
  private:
   // |RawChannel::Delegate| methods:
-  void OnReadMessage(
-      const MessageInTransit::View& message_view,
-      embedder::ScopedPlatformHandleVectorPtr platform_handles) override;
+  void OnReadMessage(const MessageInTransit::View& message_view,
+                     std::unique_ptr<std::vector<ScopedPlatformHandle>>
+                         platform_handles) override;
   void OnError(Error error) override;
 
   // Handles an error that's fatal to this object. Note that this probably
@@ -129,7 +133,7 @@
 
 void MasterConnectionManager::Helper::OnReadMessage(
     const MessageInTransit::View& message_view,
-    embedder::ScopedPlatformHandleVectorPtr platform_handles) {
+    std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles) {
   if (message_view.type() != MessageInTransit::Type::CONNECTION_MANAGER) {
     LOG(ERROR) << "Invalid message type " << message_view.type();
     FatalError();  // WARNING: This destroys us.
@@ -199,9 +203,8 @@
     DCHECK_EQ(message_view.subtype(),
               MessageInTransit::Subtype::CONNECTION_MANAGER_CONNECT);
     DCHECK(platform_handle.is_valid());
-    embedder::ScopedPlatformHandleVectorPtr platform_handles(
-        new embedder::PlatformHandleVector());
-    platform_handles->push_back(platform_handle.release());
+    auto platform_handles = MakeUnique<std::vector<ScopedPlatformHandle>>();
+    platform_handles->push_back(std::move(platform_handle));
     response->SetTransportData(util::MakeUnique<TransportData>(
         std::move(platform_handles),
         raw_channel_->GetSerializedPlatformHandleSize()));
@@ -317,6 +320,7 @@
   }
 
  private:
+  // TODO(vtl): Make |second| |ScopedPlatformHandle|s.
   std::unordered_map<ProcessIdentifier, embedder::PlatformHandle>
       process_connections_;  // "Owns" any valid platform handles.
 
diff --git a/mojo/edk/system/message_pipe.cc b/mojo/edk/system/message_pipe.cc
index 5256bd3..6287426 100644
--- a/mojo/edk/system/message_pipe.cc
+++ b/mojo/edk/system/message_pipe.cc
@@ -19,6 +19,7 @@
 #include "mojo/edk/system/proxy_message_pipe_endpoint.h"
 #include "mojo/edk/util/make_unique.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::MakeRefCounted;
 using mojo::util::MutexLocker;
 using mojo::util::RefPtr;
@@ -228,7 +229,7 @@
     Channel* channel,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* /*platform_handles*/) {
+    std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
   DCHECK(port == 0 || port == 1);
 
   MutexLocker locker(&mutex_);
diff --git a/mojo/edk/system/message_pipe.h b/mojo/edk/system/message_pipe.h
index 99b1200..4e82e03 100644
--- a/mojo/edk/system/message_pipe.h
+++ b/mojo/edk/system/message_pipe.h
@@ -11,7 +11,7 @@
 #include <memory>
 #include <vector>
 
-#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
 #include "mojo/edk/system/channel_endpoint_client.h"
 #include "mojo/edk/system/dispatcher.h"
 #include "mojo/edk/system/handle_signals_state.h"
@@ -109,11 +109,12 @@
                       Channel* channel,
                       size_t* max_size,
                       size_t* max_platform_handles);
-  bool EndSerialize(unsigned port,
-                    Channel* channel,
-                    void* destination,
-                    size_t* actual_size,
-                    embedder::PlatformHandleVector* platform_handles);
+  bool EndSerialize(
+      unsigned port,
+      Channel* channel,
+      void* destination,
+      size_t* actual_size,
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles);
 
   // |ChannelEndpointClient| methods:
   bool OnReadMessage(unsigned port, MessageInTransit* message) override;
diff --git a/mojo/edk/system/message_pipe_dispatcher.cc b/mojo/edk/system/message_pipe_dispatcher.cc
index 704fd13..cc400d5 100644
--- a/mojo/edk/system/message_pipe_dispatcher.cc
+++ b/mojo/edk/system/message_pipe_dispatcher.cc
@@ -14,6 +14,7 @@
 #include "mojo/edk/system/options_validation.h"
 #include "mojo/edk/system/proxy_message_pipe_endpoint.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::RefPtr;
 
 namespace mojo {
@@ -204,7 +205,7 @@
     Channel* channel,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* platform_handles) {
   AssertHasOneRef();  // Only one ref => no need to take the lock.
 
   bool rv = message_pipe_->EndSerialize(port_, channel, destination,
diff --git a/mojo/edk/system/message_pipe_dispatcher.h b/mojo/edk/system/message_pipe_dispatcher.h
index da64649..a26fdf0 100644
--- a/mojo/edk/system/message_pipe_dispatcher.h
+++ b/mojo/edk/system/message_pipe_dispatcher.h
@@ -106,7 +106,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) override
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) override
       MOJO_NOT_THREAD_SAFE;
 
   // This will be null if closed.
diff --git a/mojo/edk/system/platform_handle_dispatcher.cc b/mojo/edk/system/platform_handle_dispatcher.cc
index 91c64fd..7cb7110 100644
--- a/mojo/edk/system/platform_handle_dispatcher.cc
+++ b/mojo/edk/system/platform_handle_dispatcher.cc
@@ -5,9 +5,11 @@
 #include "mojo/edk/system/platform_handle_dispatcher.h"
 
 #include <algorithm>
+#include <utility>
 
 #include "base/logging.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::MutexLocker;
 using mojo::util::RefPtr;
 
@@ -24,7 +26,7 @@
 
 }  // namespace
 
-embedder::ScopedPlatformHandle PlatformHandleDispatcher::PassPlatformHandle() {
+ScopedPlatformHandle PlatformHandleDispatcher::PassPlatformHandle() {
   MutexLocker locker(&mutex());
   return platform_handle_.Pass();
 }
@@ -38,7 +40,7 @@
     Channel* channel,
     const void* source,
     size_t size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* platform_handles) {
   if (size != sizeof(SerializedPlatformHandleDispatcher)) {
     LOG(ERROR) << "Invalid serialized platform handle dispatcher (bad size)";
     return nullptr;
@@ -49,7 +51,7 @@
   size_t platform_handle_index = serialization->platform_handle_index;
 
   // Starts off invalid, which is what we want.
-  embedder::PlatformHandle platform_handle;
+  ScopedPlatformHandle platform_handle;
 
   if (platform_handle_index != kInvalidPlatformHandleIndex) {
     if (!platform_handles ||
@@ -64,13 +66,12 @@
     std::swap(platform_handle, (*platform_handles)[platform_handle_index]);
   }
 
-  return Create(embedder::ScopedPlatformHandle(platform_handle));
+  return Create(std::move(platform_handle));
 }
 
 PlatformHandleDispatcher::PlatformHandleDispatcher(
-    embedder::ScopedPlatformHandle platform_handle)
-    : platform_handle_(platform_handle.Pass()) {
-}
+    ScopedPlatformHandle platform_handle)
+    : platform_handle_(platform_handle.Pass()) {}
 
 PlatformHandleDispatcher::~PlatformHandleDispatcher() {
 }
@@ -99,14 +100,14 @@
     Channel* /*channel*/,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* platform_handles) {
   AssertHasOneRef();  // Only one ref => no need to take the lock.
 
   SerializedPlatformHandleDispatcher* serialization =
       static_cast<SerializedPlatformHandleDispatcher*>(destination);
   if (platform_handle_.is_valid()) {
     serialization->platform_handle_index = platform_handles->size();
-    platform_handles->push_back(platform_handle_.release());
+    platform_handles->push_back(std::move(platform_handle_));
   } else {
     serialization->platform_handle_index = kInvalidPlatformHandleIndex;
   }
diff --git a/mojo/edk/system/platform_handle_dispatcher.h b/mojo/edk/system/platform_handle_dispatcher.h
index d9b809f..16ce340 100644
--- a/mojo/edk/system/platform_handle_dispatcher.h
+++ b/mojo/edk/system/platform_handle_dispatcher.h
@@ -34,7 +34,7 @@
       Channel* channel,
       const void* source,
       size_t size,
-      embedder::PlatformHandleVector* platform_handles);
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles);
 
  private:
   explicit PlatformHandleDispatcher(
@@ -53,7 +53,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) override
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) override
       MOJO_NOT_THREAD_SAFE;
 
   embedder::ScopedPlatformHandle platform_handle_ MOJO_GUARDED_BY(mutex());
diff --git a/mojo/edk/system/raw_channel.cc b/mojo/edk/system/raw_channel.cc
index 16f924d..3b83a67 100644
--- a/mojo/edk/system/raw_channel.cc
+++ b/mojo/edk/system/raw_channel.cc
@@ -16,6 +16,7 @@
 #include "mojo/edk/system/message_in_transit.h"
 #include "mojo/edk/system/transport_data.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::MutexLocker;
 
 namespace mojo {
@@ -58,7 +59,7 @@
   if (!transport_data)
     return false;
 
-  const embedder::PlatformHandleVector* all_platform_handles =
+  const std::vector<ScopedPlatformHandle>* all_platform_handles =
       transport_data->platform_handles();
   if (!all_platform_handles) {
     DCHECK_EQ(platform_handles_offset_, 0u);
@@ -80,11 +81,12 @@
 
   MessageInTransit* message = message_queue_.PeekMessage();
   TransportData* transport_data = message->transport_data();
-  embedder::PlatformHandleVector* all_platform_handles =
+  std::vector<ScopedPlatformHandle>* all_platform_handles =
       transport_data->platform_handles();
   *num_platform_handles =
       all_platform_handles->size() - platform_handles_offset_;
-  *platform_handles = &(*all_platform_handles)[platform_handles_offset_];
+  *platform_handles = reinterpret_cast<embedder::PlatformHandle*>(
+      &(*all_platform_handles)[platform_handles_offset_]);
 
   if (serialized_platform_handle_size_ > 0) {
     size_t serialization_data_offset =
@@ -326,7 +328,7 @@
           return;  // |this| may have been destroyed in |CallOnError()|.
         }
       } else {
-        embedder::ScopedPlatformHandleVectorPtr platform_handles;
+        std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles;
         if (message_view.transport_data_buffer()) {
           size_t num_platform_handles;
           const void* platform_handle_table;
diff --git a/mojo/edk/system/raw_channel.h b/mojo/edk/system/raw_channel.h
index beb0194..f085120 100644
--- a/mojo/edk/system/raw_channel.h
+++ b/mojo/edk/system/raw_channel.h
@@ -9,7 +9,6 @@
 #include <vector>
 
 #include "base/memory/weak_ptr.h"
-#include "mojo/edk/embedder/platform_handle_vector.h"
 #include "mojo/edk/embedder/scoped_platform_handle.h"
 #include "mojo/edk/system/message_in_transit.h"
 #include "mojo/edk/system/message_in_transit_queue.h"
@@ -67,7 +66,8 @@
     // |Shutdown()| and then (if desired) destroy it.
     virtual void OnReadMessage(
         const MessageInTransit::View& message_view,
-        embedder::ScopedPlatformHandleVectorPtr platform_handles) = 0;
+        std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+            platform_handles) = 0;
 
     // Called when there's a (fatal) error. This may call the |RawChannel|'s
     // |Shutdown()| and then (if desired) destroy it.
@@ -261,9 +261,10 @@
   // called when |num_platform_handles| is nonzero. Returns null if the
   // |num_platform_handles| handles are not available. Only called on the I/O
   // thread.
-  virtual embedder::ScopedPlatformHandleVectorPtr GetReadPlatformHandles(
-      size_t num_platform_handles,
-      const void* platform_handle_table) MOJO_LOCKS_EXCLUDED(write_mutex_) = 0;
+  virtual std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+  GetReadPlatformHandles(size_t num_platform_handles,
+                         const void* platform_handle_table)
+      MOJO_LOCKS_EXCLUDED(write_mutex_) = 0;
 
   // Writes contents in |write_buffer_no_lock()|.
   // This class guarantees that:
diff --git a/mojo/edk/system/raw_channel_posix.cc b/mojo/edk/system/raw_channel_posix.cc
index 096d0d7..cec566b 100644
--- a/mojo/edk/system/raw_channel_posix.cc
+++ b/mojo/edk/system/raw_channel_posix.cc
@@ -10,8 +10,10 @@
 
 #include <algorithm>
 #include <deque>
+#include <iterator>
 #include <memory>
 #include <utility>
+#include <vector>
 
 #include "base/bind.h"
 #include "base/location.h"
@@ -20,11 +22,13 @@
 #include "base/message_loop/message_loop.h"
 #include "mojo/edk/embedder/platform_channel_utils.h"
 #include "mojo/edk/embedder/platform_handle.h"
-#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
 #include "mojo/edk/system/transport_data.h"
 #include "mojo/edk/util/make_unique.h"
 #include "mojo/public/cpp/system/macros.h"
 
+using mojo::embedder::ScopedPlatformHandle;
+using mojo::util::MakeUnique;
 using mojo::util::MutexLocker;
 
 namespace mojo {
@@ -52,7 +56,7 @@
       const MessageInTransit::View& message_view) override;
   IOResult Read(size_t* bytes_read) override;
   IOResult ScheduleRead() override;
-  embedder::ScopedPlatformHandleVectorPtr GetReadPlatformHandles(
+  std::unique_ptr<std::vector<ScopedPlatformHandle>> GetReadPlatformHandles(
       size_t num_platform_handles,
       const void* platform_handle_table) override;
   IOResult WriteNoLock(size_t* platform_handles_written,
@@ -80,7 +84,7 @@
 
   bool pending_read_;
 
-  std::deque<embedder::PlatformHandle> read_platform_handles_;
+  std::deque<embedder::ScopedPlatformHandle> read_platform_handles_;
 
   bool pending_write_ MOJO_GUARDED_BY(write_mutex());
 
@@ -112,8 +116,6 @@
   // These must have been shut down/destroyed on the I/O thread.
   DCHECK(!read_watcher_);
   DCHECK(!write_watcher_);
-
-  embedder::CloseAllPlatformHandles(&read_platform_handles_);
 }
 
 size_t RawChannelPosix::GetSerializedPlatformHandleSize() const {
@@ -124,7 +126,7 @@
 void RawChannelPosix::EnqueueMessageNoLock(
     std::unique_ptr<MessageInTransit> message) {
   if (message->transport_data()) {
-    embedder::PlatformHandleVector* const platform_handles =
+    std::vector<ScopedPlatformHandle>* const platform_handles =
         message->transport_data()->platform_handles();
     if (platform_handles &&
         platform_handles->size() > embedder::kPlatformChannelMaxNumHandles) {
@@ -139,11 +141,13 @@
             MessageInTransit::Type::RAW_CHANNEL,
             MessageInTransit::Subtype::RAW_CHANNEL_POSIX_EXTRA_PLATFORM_HANDLES,
             0, nullptr));
-        embedder::ScopedPlatformHandleVectorPtr fds(
-            new embedder::PlatformHandleVector(
-                platform_handles->begin() + i,
-                platform_handles->begin() + i +
-                    embedder::kPlatformChannelMaxNumHandles));
+        using IteratorType = std::vector<ScopedPlatformHandle>::iterator;
+        std::unique_ptr<std::vector<ScopedPlatformHandle>> fds(
+            MakeUnique<std::vector<ScopedPlatformHandle>>(
+                std::move_iterator<IteratorType>(platform_handles->begin() + i),
+                std::move_iterator<IteratorType>(
+                    platform_handles->begin() + i +
+                    embedder::kPlatformChannelMaxNumHandles)));
         fd_message->SetTransportData(util::MakeUnique<TransportData>(
             std::move(fds), GetSerializedPlatformHandleSize()));
         RawChannel::EnqueueMessageNoLock(std::move(fd_message));
@@ -193,21 +197,21 @@
   return IO_PENDING;
 }
 
-embedder::ScopedPlatformHandleVectorPtr RawChannelPosix::GetReadPlatformHandles(
-    size_t num_platform_handles,
-    const void* /*platform_handle_table*/) {
+std::unique_ptr<std::vector<ScopedPlatformHandle>>
+RawChannelPosix::GetReadPlatformHandles(size_t num_platform_handles,
+                                        const void* /*platform_handle_table*/) {
   DCHECK_GT(num_platform_handles, 0u);
 
   if (read_platform_handles_.size() < num_platform_handles) {
-    embedder::CloseAllPlatformHandles(&read_platform_handles_);
     read_platform_handles_.clear();
-    return embedder::ScopedPlatformHandleVectorPtr();
+    return nullptr;
   }
 
-  embedder::ScopedPlatformHandleVectorPtr rv(
-      new embedder::PlatformHandleVector(num_platform_handles));
-  rv->assign(read_platform_handles_.begin(),
-             read_platform_handles_.begin() + num_platform_handles);
+  auto rv = MakeUnique<std::vector<ScopedPlatformHandle>>(num_platform_handles);
+  using IteratorType = std::deque<ScopedPlatformHandle>::iterator;
+  rv->assign(std::move_iterator<IteratorType>(read_platform_handles_.begin()),
+             std::move_iterator<IteratorType>(read_platform_handles_.begin() +
+                                              num_platform_handles));
   read_platform_handles_.erase(
       read_platform_handles_.begin(),
       read_platform_handles_.begin() + num_platform_handles);
@@ -422,7 +426,6 @@
         (TransportData::GetMaxPlatformHandles() +
          embedder::kPlatformChannelMaxNumHandles)) {
       LOG(ERROR) << "Received too many platform handles";
-      embedder::CloseAllPlatformHandles(&read_platform_handles_);
       read_platform_handles_.clear();
       return IO_FAILED_UNKNOWN;
     }
diff --git a/mojo/edk/system/raw_channel_unittest.cc b/mojo/edk/system/raw_channel_unittest.cc
index 202c152..a5278cb 100644
--- a/mojo/edk/system/raw_channel_unittest.cc
+++ b/mojo/edk/system/raw_channel_unittest.cc
@@ -31,7 +31,9 @@
 #include "mojo/public/cpp/system/macros.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::AutoResetWaitableEvent;
+using mojo::util::MakeUnique;
 using mojo::util::Mutex;
 using mojo::util::MutexLocker;
 
@@ -95,7 +97,7 @@
  protected:
   test::TestIOThread* io_thread() { return &io_thread_; }
 
-  embedder::ScopedPlatformHandle handles[2];
+  ScopedPlatformHandle handles[2];
 
  private:
   test::TestIOThread io_thread_;
@@ -111,9 +113,9 @@
   ~WriteOnlyRawChannelDelegate() override {}
 
   // |RawChannel::Delegate| implementation:
-  void OnReadMessage(
-      const MessageInTransit::View& /*message_view*/,
-      embedder::ScopedPlatformHandleVectorPtr /*platform_handles*/) override {
+  void OnReadMessage(const MessageInTransit::View& /*message_view*/,
+                     std::unique_ptr<std::vector<ScopedPlatformHandle>>
+                     /*platform_handles*/) override {
     CHECK(false);  // Should not get called.
   }
   void OnError(Error error) override {
@@ -224,9 +226,9 @@
   ~ReadCheckerRawChannelDelegate() override {}
 
   // |RawChannel::Delegate| implementation (called on the I/O thread):
-  void OnReadMessage(
-      const MessageInTransit::View& message_view,
-      embedder::ScopedPlatformHandleVectorPtr platform_handles) override {
+  void OnReadMessage(const MessageInTransit::View& message_view,
+                     std::unique_ptr<std::vector<ScopedPlatformHandle>>
+                         platform_handles) override {
     EXPECT_FALSE(platform_handles);
 
     size_t position;
@@ -339,9 +341,9 @@
   ~ReadCountdownRawChannelDelegate() override {}
 
   // |RawChannel::Delegate| implementation (called on the I/O thread):
-  void OnReadMessage(
-      const MessageInTransit::View& message_view,
-      embedder::ScopedPlatformHandleVectorPtr platform_handles) override {
+  void OnReadMessage(const MessageInTransit::View& message_view,
+                     std::unique_ptr<std::vector<ScopedPlatformHandle>>
+                         platform_handles) override {
     EXPECT_FALSE(platform_handles);
 
     EXPECT_LT(count_, expected_count_);
@@ -553,9 +555,9 @@
   ~ShutdownOnReadMessageRawChannelDelegate() override {}
 
   // |RawChannel::Delegate| implementation (called on the I/O thread):
-  void OnReadMessage(
-      const MessageInTransit::View& message_view,
-      embedder::ScopedPlatformHandleVectorPtr platform_handles) override {
+  void OnReadMessage(const MessageInTransit::View& message_view,
+                     std::unique_ptr<std::vector<ScopedPlatformHandle>>
+                         platform_handles) override {
     EXPECT_FALSE(platform_handles);
     EXPECT_FALSE(did_shutdown_);
     EXPECT_TRUE(
@@ -629,7 +631,8 @@
   // |RawChannel::Delegate| implementation (called on the I/O thread):
   void OnReadMessage(
       const MessageInTransit::View& /*message_view*/,
-      embedder::ScopedPlatformHandleVectorPtr /*platform_handles*/) override {
+      std::unique_ptr<std::vector<ScopedPlatformHandle>> /*platform_handles*/)
+      override {
     CHECK(false);  // Should not get called.
   }
   void OnError(Error error) override {
@@ -728,9 +731,9 @@
   ~ReadPlatformHandlesCheckerRawChannelDelegate() override {}
 
   // |RawChannel::Delegate| implementation (called on the I/O thread):
-  void OnReadMessage(
-      const MessageInTransit::View& message_view,
-      embedder::ScopedPlatformHandleVectorPtr platform_handles) override {
+  void OnReadMessage(const MessageInTransit::View& message_view,
+                     std::unique_ptr<std::vector<ScopedPlatformHandle>>
+                         platform_handles) override {
     const char kHello[] = "hello";
 
     EXPECT_EQ(sizeof(kHello), message_view.num_bytes());
@@ -738,9 +741,9 @@
 
     ASSERT_TRUE(platform_handles);
     ASSERT_EQ(2u, platform_handles->size());
-    embedder::ScopedPlatformHandle h1(platform_handles->at(0));
+    ScopedPlatformHandle h1(std::move(platform_handles->at(0)));
     EXPECT_TRUE(h1.is_valid());
-    embedder::ScopedPlatformHandle h2(platform_handles->at(1));
+    ScopedPlatformHandle h2(std::move(platform_handles->at(1)));
     EXPECT_TRUE(h2.is_valid());
     platform_handles->clear();
 
@@ -798,12 +801,11 @@
 
   {
     const char kHello[] = "hello";
-    embedder::ScopedPlatformHandleVectorPtr platform_handles(
-        new embedder::PlatformHandleVector());
+    auto platform_handles = MakeUnique<std::vector<ScopedPlatformHandle>>();
     platform_handles->push_back(
-        mojo::test::PlatformHandleFromFILE(std::move(fp1)).release());
+        mojo::test::PlatformHandleFromFILE(std::move(fp1)));
     platform_handles->push_back(
-        mojo::test::PlatformHandleFromFILE(std::move(fp2)).release());
+        mojo::test::PlatformHandleFromFILE(std::move(fp2)));
 
     std::unique_ptr<MessageInTransit> message(
         new MessageInTransit(MessageInTransit::Type::ENDPOINT_CLIENT,
diff --git a/mojo/edk/system/remote_consumer_data_pipe_impl.cc b/mojo/edk/system/remote_consumer_data_pipe_impl.cc
index b54b0fa..a3bd83d 100644
--- a/mojo/edk/system/remote_consumer_data_pipe_impl.cc
+++ b/mojo/edk/system/remote_consumer_data_pipe_impl.cc
@@ -18,6 +18,7 @@
 #include "mojo/edk/system/message_in_transit.h"
 #include "mojo/edk/system/remote_data_pipe_ack.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::RefPtr;
 
 namespace mojo {
@@ -278,7 +279,7 @@
     Channel* channel,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
   SerializedDataPipeProducerDispatcher* s =
       static_cast<SerializedDataPipeProducerDispatcher*>(destination);
   s->validated_options = validated_options();
@@ -365,7 +366,7 @@
     Channel* /*channel*/,
     void* /*destination*/,
     size_t* /*actual_size*/,
-    embedder::PlatformHandleVector* /*platform_handles*/) {
+    std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
   NOTREACHED();
   return false;
 }
diff --git a/mojo/edk/system/remote_consumer_data_pipe_impl.h b/mojo/edk/system/remote_consumer_data_pipe_impl.h
index 20a3f04..4c8e8e8 100644
--- a/mojo/edk/system/remote_consumer_data_pipe_impl.h
+++ b/mojo/edk/system/remote_consumer_data_pipe_impl.h
@@ -62,7 +62,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) override;
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) override;
   void ConsumerClose() override;
   MojoResult ConsumerReadData(UserPointer<void> elements,
                               UserPointer<uint32_t> num_bytes,
@@ -85,7 +85,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) override;
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) override;
   bool OnReadMessage(unsigned port, MessageInTransit* message) override;
   void OnDetachFromChannel(unsigned port) override;
 
diff --git a/mojo/edk/system/remote_producer_data_pipe_impl.cc b/mojo/edk/system/remote_producer_data_pipe_impl.cc
index 772277b..c473499 100644
--- a/mojo/edk/system/remote_producer_data_pipe_impl.cc
+++ b/mojo/edk/system/remote_producer_data_pipe_impl.cc
@@ -20,6 +20,7 @@
 #include "mojo/edk/system/remote_consumer_data_pipe_impl.h"
 #include "mojo/edk/system/remote_data_pipe_ack.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::RefPtr;
 
 namespace mojo {
@@ -162,7 +163,7 @@
     Channel* /*channel*/,
     void* /*destination*/,
     size_t* /*actual_size*/,
-    embedder::PlatformHandleVector* /*platform_handles*/) {
+    std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
   NOTREACHED();
   return false;
 }
@@ -305,7 +306,7 @@
     Channel* channel,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
   SerializedDataPipeConsumerDispatcher* s =
       static_cast<SerializedDataPipeConsumerDispatcher*>(destination);
   s->validated_options = validated_options();
diff --git a/mojo/edk/system/remote_producer_data_pipe_impl.h b/mojo/edk/system/remote_producer_data_pipe_impl.h
index 1210b73..0073814 100644
--- a/mojo/edk/system/remote_producer_data_pipe_impl.h
+++ b/mojo/edk/system/remote_producer_data_pipe_impl.h
@@ -63,7 +63,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) override;
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) override;
   void ConsumerClose() override;
   MojoResult ConsumerReadData(UserPointer<void> elements,
                               UserPointer<uint32_t> num_bytes,
@@ -86,7 +86,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) override;
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) override;
   bool OnReadMessage(unsigned port, MessageInTransit* message) override;
   void OnDetachFromChannel(unsigned port) override;
 
diff --git a/mojo/edk/system/shared_buffer_dispatcher.cc b/mojo/edk/system/shared_buffer_dispatcher.cc
index 8b86d0a..128708e 100644
--- a/mojo/edk/system/shared_buffer_dispatcher.cc
+++ b/mojo/edk/system/shared_buffer_dispatcher.cc
@@ -15,6 +15,7 @@
 #include "mojo/edk/system/options_validation.h"
 #include "mojo/public/c/system/macros.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::util::RefPtr;
 
 namespace mojo {
@@ -98,7 +99,7 @@
     Channel* channel,
     const void* source,
     size_t size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* platform_handles) {
   DCHECK(channel);
 
   if (size != sizeof(SerializedSharedBufferDispatcher)) {
@@ -140,7 +141,7 @@
   }
 
   // Starts off invalid, which is what we want.
-  embedder::PlatformHandle platform_handle;
+  ScopedPlatformHandle platform_handle;
   // We take ownership of the handle, so we have to invalidate the one in
   // |platform_handles|.
   std::swap(platform_handle, (*platform_handles)[platform_handle_index]);
@@ -149,7 +150,7 @@
   // closed even if creation fails.
   auto shared_buffer =
       channel->platform_support()->CreateSharedBufferFromHandle(
-          num_bytes, embedder::ScopedPlatformHandle(platform_handle));
+          num_bytes, std::move(platform_handle));
   if (!shared_buffer) {
     LOG(ERROR)
         << "Invalid serialized shared buffer dispatcher (invalid num_bytes?)";
@@ -267,7 +268,7 @@
     Channel* /*channel*/,
     void* destination,
     size_t* actual_size,
-    embedder::PlatformHandleVector* platform_handles) {
+    std::vector<ScopedPlatformHandle>* platform_handles) {
   AssertHasOneRef();  // Only one ref => no need to take the lock.
   DCHECK(shared_buffer_);
 
@@ -276,7 +277,7 @@
   // If there's only one reference to |shared_buffer_|, then it's ours (and no
   // one else can make any more references to it), so we can just take its
   // handle.
-  embedder::ScopedPlatformHandle platform_handle(
+  ScopedPlatformHandle platform_handle(
       shared_buffer_->HasOneRef() ? shared_buffer_->PassPlatformHandle()
                                   : shared_buffer_->DuplicatePlatformHandle());
   if (!platform_handle.is_valid()) {
@@ -286,7 +287,7 @@
 
   serialization->num_bytes = shared_buffer_->GetNumBytes();
   serialization->platform_handle_index = platform_handles->size();
-  platform_handles->push_back(platform_handle.release());
+  platform_handles->push_back(std::move(platform_handle));
   *actual_size = sizeof(SerializedSharedBufferDispatcher);
 
   shared_buffer_ = nullptr;
diff --git a/mojo/edk/system/shared_buffer_dispatcher.h b/mojo/edk/system/shared_buffer_dispatcher.h
index 9f153cf..bcb8279 100644
--- a/mojo/edk/system/shared_buffer_dispatcher.h
+++ b/mojo/edk/system/shared_buffer_dispatcher.h
@@ -59,7 +59,7 @@
       Channel* channel,
       const void* source,
       size_t size,
-      embedder::PlatformHandleVector* platform_handles);
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles);
 
  private:
   static util::RefPtr<SharedBufferDispatcher> CreateInternal(
@@ -100,7 +100,7 @@
       Channel* channel,
       void* destination,
       size_t* actual_size,
-      embedder::PlatformHandleVector* platform_handles) override
+      std::vector<embedder::ScopedPlatformHandle>* platform_handles) override
       MOJO_NOT_THREAD_SAFE;
 
   util::RefPtr<embedder::PlatformSharedBuffer> shared_buffer_
diff --git a/mojo/edk/system/slave_connection_manager.cc b/mojo/edk/system/slave_connection_manager.cc
index 0018a60..c0504e7 100644
--- a/mojo/edk/system/slave_connection_manager.cc
+++ b/mojo/edk/system/slave_connection_manager.cc
@@ -15,6 +15,7 @@
 #include "mojo/edk/system/message_in_transit.h"
 #include "mojo/edk/util/make_unique.h"
 
+using mojo::embedder::ScopedPlatformHandle;
 using mojo::platform::TaskRunner;
 using mojo::util::MutexLocker;
 using mojo::util::RefPtr;
@@ -49,7 +50,7 @@
 void SlaveConnectionManager::Init(
     RefPtr<TaskRunner>&& delegate_thread_task_runner,
     embedder::SlaveProcessDelegate* slave_process_delegate,
-    embedder::ScopedPlatformHandle platform_handle) {
+    ScopedPlatformHandle platform_handle) {
   DCHECK(delegate_thread_task_runner);
   DCHECK(slave_process_delegate);
   DCHECK(platform_handle.is_valid());
@@ -116,7 +117,7 @@
     const ConnectionIdentifier& connection_id,
     ProcessIdentifier* peer_process_identifier,
     bool* is_first,
-    embedder::ScopedPlatformHandle* platform_handle) {
+    ScopedPlatformHandle* platform_handle) {
   AssertNotOnPrivateThread();
   DCHECK(peer_process_identifier);
   DCHECK(is_first);
@@ -135,7 +136,7 @@
 }
 
 void SlaveConnectionManager::InitOnPrivateThread(
-    embedder::ScopedPlatformHandle platform_handle) {
+    ScopedPlatformHandle platform_handle) {
   AssertOnPrivateThread();
 
   raw_channel_ = RawChannel::Create(platform_handle.Pass());
@@ -208,7 +209,7 @@
     Result* result,
     ProcessIdentifier* peer_process_identifier,
     bool* is_first,
-    embedder::ScopedPlatformHandle* platform_handle) {
+    ScopedPlatformHandle* platform_handle) {
   DCHECK(result);
   AssertOnPrivateThread();
   // This should only posted (from another thread, to |private_thread_|) with
@@ -236,7 +237,7 @@
 
 void SlaveConnectionManager::OnReadMessage(
     const MessageInTransit::View& message_view,
-    embedder::ScopedPlatformHandleVectorPtr platform_handles) {
+    std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles) {
   AssertOnPrivateThread();
 
   // Set |*ack_result_| to failure by default.
@@ -292,8 +293,7 @@
             CONNECTION_MANAGER_ACK_SUCCESS_CONNECT_NEW_CONNECTION:
           CHECK_EQ(num_platform_handles, 1u);
           *ack_result_ = Result::SUCCESS_CONNECT_NEW_CONNECTION;
-          ack_platform_handle_->reset(platform_handles->at(0));
-          platform_handles->at(0) = embedder::PlatformHandle();
+          *ack_platform_handle_ = std::move(platform_handles->at(0));
           break;
         case MessageInTransit::Subtype::
             CONNECTION_MANAGER_ACK_SUCCESS_CONNECT_REUSE_CONNECTION:
diff --git a/mojo/edk/system/slave_connection_manager.h b/mojo/edk/system/slave_connection_manager.h
index 2453f56..951f1e1 100644
--- a/mojo/edk/system/slave_connection_manager.h
+++ b/mojo/edk/system/slave_connection_manager.h
@@ -80,7 +80,8 @@
   // |RawChannel::Delegate| methods (only called on |private_thread_|):
   void OnReadMessage(
       const MessageInTransit::View& message_view,
-      embedder::ScopedPlatformHandleVectorPtr platform_handles) override;
+      std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+          platform_handles) override;
   void OnError(Error error) override;
 
   // Asserts that the current thread is *not* |private_thread_| (no-op if
diff --git a/mojo/edk/system/transport_data.cc b/mojo/edk/system/transport_data.cc
index 805d24c..1f7d8ea 100644
--- a/mojo/edk/system/transport_data.cc
+++ b/mojo/edk/system/transport_data.cc
@@ -13,6 +13,8 @@
 #include "mojo/edk/system/configuration.h"
 #include "mojo/edk/system/message_in_transit.h"
 
+using mojo::embedder::ScopedPlatformHandle;
+
 namespace mojo {
 namespace system {
 
@@ -124,7 +126,7 @@
 
   if (estimated_num_platform_handles > 0) {
     DCHECK(!platform_handles_);
-    platform_handles_.reset(new embedder::PlatformHandleVector());
+    platform_handles_.reset(new std::vector<ScopedPlatformHandle>());
   }
 
   Header* header = reinterpret_cast<Header*>(buffer_.get());
@@ -194,7 +196,7 @@
 }
 
 TransportData::TransportData(
-    embedder::ScopedPlatformHandleVectorPtr platform_handles,
+    std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles,
     size_t serialized_platform_handle_size)
     : buffer_size_(), platform_handles_(std::move(platform_handles)) {
   buffer_size_ = MessageInTransit::RoundUpMessageAlignment(
@@ -311,7 +313,7 @@
 std::unique_ptr<DispatcherVector> TransportData::DeserializeDispatchers(
     const void* buffer,
     size_t buffer_size,
-    embedder::ScopedPlatformHandleVectorPtr platform_handles,
+    std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles,
     Channel* channel) {
   DCHECK(buffer);
   DCHECK_GT(buffer_size, 0u);
diff --git a/mojo/edk/system/transport_data.h b/mojo/edk/system/transport_data.h
index fb4ba6b..60a0821 100644
--- a/mojo/edk/system/transport_data.h
+++ b/mojo/edk/system/transport_data.h
@@ -11,8 +11,7 @@
 #include <vector>
 
 #include "base/memory/aligned_memory.h"
-#include "mojo/edk/embedder/platform_handle.h"
-#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
 #include "mojo/edk/system/dispatcher.h"
 #include "mojo/public/cpp/system/macros.h"
 
@@ -95,7 +94,8 @@
   // |Dispatcher|s. (|Header| will be present, and zero except for
   // |num_platform_handles|, and |platform_handle_table_offset| if necessary.)
   explicit TransportData(
-      embedder::ScopedPlatformHandleVectorPtr platform_handles,
+      std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+          platform_handles,
       size_t serialized_platform_handle_size);
 
   ~TransportData();
@@ -110,10 +110,10 @@
 
   // Gets attached platform-specific handles; this may return null if there are
   // none. Note that the caller may mutate the set of platform-specific handles.
-  const embedder::PlatformHandleVector* platform_handles() const {
+  const std::vector<embedder::ScopedPlatformHandle>* platform_handles() const {
     return platform_handles_.get();
   }
-  embedder::PlatformHandleVector* platform_handles() {
+  std::vector<embedder::ScopedPlatformHandle>* platform_handles() {
     return platform_handles_.get();
   }
 
@@ -142,7 +142,8 @@
   static std::unique_ptr<DispatcherVector> DeserializeDispatchers(
       const void* buffer,
       size_t buffer_size,
-      embedder::ScopedPlatformHandleVectorPtr platform_handles,
+      std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+          platform_handles,
       Channel* channel);
 
  private:
@@ -179,7 +180,8 @@
   // transport). The vector (if any) owns the handles that it contains (and is
   // responsible for closing them).
   // TODO(vtl): With C++11, change it to a vector of |ScopedPlatformHandle|s.
-  embedder::ScopedPlatformHandleVectorPtr platform_handles_;
+  std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+      platform_handles_;
 
   MOJO_DISALLOW_COPY_AND_ASSIGN(TransportData);
 };
