Make Dispatcher::Type an enum class.

* It's not clear if I should make it sized (as int32_t) or not, so I
  left it unsized for now.
* I made the various operator<< inline, and added a missing export
  macro. (Everything ends up including <ostream> anyway.)
* Being strongly typed means that I found a non-sensical static_cast in
  dispatcher.cc.

R=yzshen@chromium.org

Review URL: https://codereview.chromium.org/1160203002
diff --git a/mojo/edk/embedder/embedder.cc b/mojo/edk/embedder/embedder.cc
index 29c5217..e6c2720 100644
--- a/mojo/edk/embedder/embedder.cc
+++ b/mojo/edk/embedder/embedder.cc
@@ -148,7 +148,7 @@
   if (!dispatcher)
     return MOJO_RESULT_INVALID_ARGUMENT;
 
-  if (dispatcher->GetType() != system::Dispatcher::kTypePlatformHandle)
+  if (dispatcher->GetType() != system::Dispatcher::Type::PLATFORM_HANDLE)
     return MOJO_RESULT_INVALID_ARGUMENT;
 
   *platform_handle =
diff --git a/mojo/edk/system/channel_endpoint_id.h b/mojo/edk/system/channel_endpoint_id.h
index c673258..afacb4e 100644
--- a/mojo/edk/system/channel_endpoint_id.h
+++ b/mojo/edk/system/channel_endpoint_id.h
@@ -81,8 +81,9 @@
               "ChannelEndpointId has incorrect size");
 
 // So logging macros and |DCHECK_EQ()|, etc. work.
-inline std::ostream& operator<<(std::ostream& out,
-                                const ChannelEndpointId& channel_endpoint_id) {
+MOJO_SYSTEM_IMPL_EXPORT inline std::ostream& operator<<(
+    std::ostream& out,
+    const ChannelEndpointId& channel_endpoint_id) {
   return out << channel_endpoint_id.value();
 }
 
diff --git a/mojo/edk/system/core_test_base.cc b/mojo/edk/system/core_test_base.cc
index 7196886..0e58363 100644
--- a/mojo/edk/system/core_test_base.cc
+++ b/mojo/edk/system/core_test_base.cc
@@ -30,7 +30,7 @@
   }
 
   // |Dispatcher| private methods:
-  Type GetType() const override { return kTypeUnknown; }
+  Type GetType() const override { return Type::UNKNOWN; }
 
  private:
   ~MockDispatcher() override { info_->IncrementDtorCallCount(); }
diff --git a/mojo/edk/system/data_pipe_consumer_dispatcher.cc b/mojo/edk/system/data_pipe_consumer_dispatcher.cc
index bee4b23..076b724 100644
--- a/mojo/edk/system/data_pipe_consumer_dispatcher.cc
+++ b/mojo/edk/system/data_pipe_consumer_dispatcher.cc
@@ -20,7 +20,7 @@
 }
 
 Dispatcher::Type DataPipeConsumerDispatcher::GetType() const {
-  return kTypeDataPipeConsumer;
+  return Type::DATA_PIPE_CONSUMER;
 }
 
 // static
diff --git a/mojo/edk/system/data_pipe_impl_unittest.cc b/mojo/edk/system/data_pipe_impl_unittest.cc
index 3a77488..1688e3d 100644
--- a/mojo/edk/system/data_pipe_impl_unittest.cc
+++ b/mojo/edk/system/data_pipe_impl_unittest.cc
@@ -376,7 +376,7 @@
     EXPECT_TRUE(to_send->HasOneRef());
     to_send = nullptr;
 
-    ASSERT_EQ(Dispatcher::kTypeDataPipeProducer, to_receive->GetType());
+    ASSERT_EQ(Dispatcher::Type::DATA_PIPE_PRODUCER, to_receive->GetType());
     producer_dispatcher_ =
         static_cast<DataPipeProducerDispatcher*>(to_receive.get());
   }
@@ -426,7 +426,7 @@
     EXPECT_TRUE(to_send->HasOneRef());
     to_send = nullptr;
 
-    ASSERT_EQ(Dispatcher::kTypeDataPipeConsumer, to_receive->GetType());
+    ASSERT_EQ(Dispatcher::Type::DATA_PIPE_CONSUMER, to_receive->GetType());
     consumer_dispatcher_ =
         static_cast<DataPipeConsumerDispatcher*>(to_receive.get());
   }
@@ -480,7 +480,7 @@
     // destroyed.
     EXPECT_TRUE(to_send->HasOneRef());
     to_send = nullptr;
-    ASSERT_EQ(Dispatcher::kTypeDataPipeProducer, to_receive->GetType());
+    ASSERT_EQ(Dispatcher::Type::DATA_PIPE_PRODUCER, to_receive->GetType());
     to_send = static_cast<DataPipeProducerDispatcher*>(to_receive.get());
     to_receive = nullptr;
 
@@ -491,7 +491,7 @@
     EXPECT_TRUE(to_send->HasOneRef());
     to_send = nullptr;
 
-    ASSERT_EQ(Dispatcher::kTypeDataPipeProducer, to_receive->GetType());
+    ASSERT_EQ(Dispatcher::Type::DATA_PIPE_PRODUCER, to_receive->GetType());
     producer_dispatcher_ =
         static_cast<DataPipeProducerDispatcher*>(to_receive.get());
   }
@@ -527,7 +527,7 @@
     // destroyed.
     EXPECT_TRUE(to_send->HasOneRef());
     to_send = nullptr;
-    ASSERT_EQ(Dispatcher::kTypeDataPipeConsumer, to_receive->GetType());
+    ASSERT_EQ(Dispatcher::Type::DATA_PIPE_CONSUMER, to_receive->GetType());
     to_send = static_cast<DataPipeConsumerDispatcher*>(to_receive.get());
     to_receive = nullptr;
 
@@ -538,7 +538,7 @@
     EXPECT_TRUE(to_send->HasOneRef());
     to_send = nullptr;
 
-    ASSERT_EQ(Dispatcher::kTypeDataPipeConsumer, to_receive->GetType());
+    ASSERT_EQ(Dispatcher::Type::DATA_PIPE_CONSUMER, to_receive->GetType());
     consumer_dispatcher_ =
         static_cast<DataPipeConsumerDispatcher*>(to_receive.get());
   }
diff --git a/mojo/edk/system/data_pipe_producer_dispatcher.cc b/mojo/edk/system/data_pipe_producer_dispatcher.cc
index 2480097..ccd0291 100644
--- a/mojo/edk/system/data_pipe_producer_dispatcher.cc
+++ b/mojo/edk/system/data_pipe_producer_dispatcher.cc
@@ -20,7 +20,7 @@
 }
 
 Dispatcher::Type DataPipeProducerDispatcher::GetType() const {
-  return kTypeDataPipeProducer;
+  return Type::DATA_PIPE_PRODUCER;
 }
 
 // static
diff --git a/mojo/edk/system/dispatcher.cc b/mojo/edk/system/dispatcher.cc
index e8695e8..24f2c26 100644
--- a/mojo/edk/system/dispatcher.cc
+++ b/mojo/edk/system/dispatcher.cc
@@ -71,23 +71,23 @@
     const void* source,
     size_t size,
     embedder::PlatformHandleVector* platform_handles) {
-  switch (static_cast<int32_t>(type)) {
-    case kTypeUnknown:
+  switch (static_cast<Dispatcher::Type>(type)) {
+    case Type::UNKNOWN:
       DVLOG(2) << "Deserializing invalid handle";
       return nullptr;
-    case kTypeMessagePipe:
+    case Type::MESSAGE_PIPE:
       return scoped_refptr<Dispatcher>(
           MessagePipeDispatcher::Deserialize(channel, source, size));
-    case kTypeDataPipeProducer:
+    case Type::DATA_PIPE_PRODUCER:
       return scoped_refptr<Dispatcher>(
           DataPipeProducerDispatcher::Deserialize(channel, source, size));
-    case kTypeDataPipeConsumer:
+    case Type::DATA_PIPE_CONSUMER:
       return scoped_refptr<Dispatcher>(
           DataPipeConsumerDispatcher::Deserialize(channel, source, size));
-    case kTypeSharedBuffer:
+    case Type::SHARED_BUFFER:
       return scoped_refptr<Dispatcher>(SharedBufferDispatcher::Deserialize(
           channel, source, size, platform_handles));
-    case kTypePlatformHandle:
+    case Type::PLATFORM_HANDLE:
       return scoped_refptr<Dispatcher>(PlatformHandleDispatcher::Deserialize(
           channel, source, size, platform_handles));
   }
diff --git a/mojo/edk/system/dispatcher.h b/mojo/edk/system/dispatcher.h
index 8d7e1cb..d7b7780 100644
--- a/mojo/edk/system/dispatcher.h
+++ b/mojo/edk/system/dispatcher.h
@@ -8,6 +8,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <ostream>
 #include <vector>
 
 #include "base/macros.h"
@@ -59,15 +60,15 @@
 class MOJO_SYSTEM_IMPL_EXPORT Dispatcher
     : public base::RefCountedThreadSafe<Dispatcher> {
  public:
-  enum Type {
-    kTypeUnknown = 0,
-    kTypeMessagePipe,
-    kTypeDataPipeProducer,
-    kTypeDataPipeConsumer,
-    kTypeSharedBuffer,
+  enum class Type {
+    UNKNOWN = 0,
+    MESSAGE_PIPE,
+    DATA_PIPE_PRODUCER,
+    DATA_PIPE_CONSUMER,
+    SHARED_BUFFER,
 
     // "Private" types (not exposed via the public interface):
-    kTypePlatformHandle = -1
+    PLATFORM_HANDLE = -1
   };
   virtual Type GetType() const = 0;
 
@@ -399,6 +400,12 @@
   // Copy and assign allowed.
 };
 
+// So logging macros and |DCHECK_EQ()|, etc. work.
+MOJO_SYSTEM_IMPL_EXPORT inline std::ostream& operator<<(std::ostream& out,
+                                                        Dispatcher::Type type) {
+  return out << static_cast<int>(type);
+}
+
 }  // namespace system
 }  // namespace mojo
 
diff --git a/mojo/edk/system/dispatcher_unittest.cc b/mojo/edk/system/dispatcher_unittest.cc
index 97e2eed..2b853d2 100644
--- a/mojo/edk/system/dispatcher_unittest.cc
+++ b/mojo/edk/system/dispatcher_unittest.cc
@@ -23,7 +23,7 @@
  public:
   TrivialDispatcher() {}
 
-  Type GetType() const override { return kTypeUnknown; }
+  Type GetType() const override { return Type::UNKNOWN; }
 
  private:
   friend class base::RefCountedThreadSafe<TrivialDispatcher>;
@@ -41,7 +41,7 @@
 TEST(DispatcherTest, Basic) {
   scoped_refptr<Dispatcher> d(new TrivialDispatcher());
 
-  EXPECT_EQ(Dispatcher::kTypeUnknown, d->GetType());
+  EXPECT_EQ(Dispatcher::Type::UNKNOWN, d->GetType());
 
   EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
             d->WriteMessage(NullUserPointer(), 0, nullptr,
diff --git a/mojo/edk/system/message_in_transit.cc b/mojo/edk/system/message_in_transit.cc
index 47148f3..4909336 100644
--- a/mojo/edk/system/message_in_transit.cc
+++ b/mojo/edk/system/message_in_transit.cc
@@ -205,13 +205,5 @@
   }
 }
 
-std::ostream& operator<<(std::ostream& out, MessageInTransit::Type type) {
-  return out << static_cast<uint16_t>(type);
-}
-
-std::ostream& operator<<(std::ostream& out, MessageInTransit::Subtype subtype) {
-  return out << static_cast<uint16_t>(subtype);
-}
-
 }  // namespace system
 }  // namespace mojo
diff --git a/mojo/edk/system/message_in_transit.h b/mojo/edk/system/message_in_transit.h
index 946308c..7e79c48 100644
--- a/mojo/edk/system/message_in_transit.h
+++ b/mojo/edk/system/message_in_transit.h
@@ -8,7 +8,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <iosfwd>
+#include <ostream>
 #include <vector>
 
 #include "base/macros.h"
@@ -284,10 +284,19 @@
   DISALLOW_COPY_AND_ASSIGN(MessageInTransit);
 };
 
-// Stream operator for |MessageInTransit::Type| and |Subtype| so we can use
-// |CHECK_EQ()|, |EXPECT_EQ()|, etc.
-std::ostream& operator<<(std::ostream& out, MessageInTransit::Type type);
-std::ostream& operator<<(std::ostream& out, MessageInTransit::Subtype subtype);
+// So logging macros and |DCHECK_EQ()|, etc. work.
+MOJO_SYSTEM_IMPL_EXPORT inline std::ostream& operator<<(
+    std::ostream& out,
+    MessageInTransit::Type type) {
+  return out << static_cast<uint16_t>(type);
+}
+
+// So logging macros and |DCHECK_EQ()|, etc. work.
+MOJO_SYSTEM_IMPL_EXPORT inline std::ostream& operator<<(
+    std::ostream& out,
+    MessageInTransit::Subtype subtype) {
+  return out << static_cast<uint16_t>(subtype);
+}
 
 }  // namespace system
 }  // namespace mojo
diff --git a/mojo/edk/system/message_pipe.cc b/mojo/edk/system/message_pipe.cc
index 473bf5d..b17344c 100644
--- a/mojo/edk/system/message_pipe.cc
+++ b/mojo/edk/system/message_pipe.cc
@@ -352,7 +352,7 @@
   for (size_t i = 0; i < transports->size(); i++) {
     if (!(*transports)[i].is_valid())
       continue;
-    if ((*transports)[i].GetType() == Dispatcher::kTypeMessagePipe) {
+    if ((*transports)[i].GetType() == Dispatcher::Type::MESSAGE_PIPE) {
       MessagePipeDispatcherTransport mp_transport((*transports)[i]);
       if (mp_transport.GetMessagePipe() == this) {
         // The other case should have been disallowed by |Core|. (Note: |port|
diff --git a/mojo/edk/system/message_pipe_dispatcher.cc b/mojo/edk/system/message_pipe_dispatcher.cc
index a6733db..95faede 100644
--- a/mojo/edk/system/message_pipe_dispatcher.cc
+++ b/mojo/edk/system/message_pipe_dispatcher.cc
@@ -68,7 +68,7 @@
 }
 
 Dispatcher::Type MessagePipeDispatcher::GetType() const {
-  return kTypeMessagePipe;
+  return Type::MESSAGE_PIPE;
 }
 
 // static
@@ -223,7 +223,8 @@
 MessagePipeDispatcherTransport::MessagePipeDispatcherTransport(
     DispatcherTransport transport)
     : DispatcherTransport(transport) {
-  DCHECK_EQ(message_pipe_dispatcher()->GetType(), Dispatcher::kTypeMessagePipe);
+  DCHECK_EQ(message_pipe_dispatcher()->GetType(),
+            Dispatcher::Type::MESSAGE_PIPE);
 }
 
 }  // namespace system
diff --git a/mojo/edk/system/message_pipe_dispatcher_unittest.cc b/mojo/edk/system/message_pipe_dispatcher_unittest.cc
index 760aced..55aedb3 100644
--- a/mojo/edk/system/message_pipe_dispatcher_unittest.cc
+++ b/mojo/edk/system/message_pipe_dispatcher_unittest.cc
@@ -43,7 +43,7 @@
   for (unsigned i = 0; i < 2; i++) {
     scoped_refptr<MessagePipeDispatcher> d0(new MessagePipeDispatcher(
         MessagePipeDispatcher::kDefaultCreateOptions));
-    EXPECT_EQ(Dispatcher::kTypeMessagePipe, d0->GetType());
+    EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, d0->GetType());
     scoped_refptr<MessagePipeDispatcher> d1(new MessagePipeDispatcher(
         MessagePipeDispatcher::kDefaultCreateOptions));
     {
diff --git a/mojo/edk/system/multiprocess_message_pipe_unittest.cc b/mojo/edk/system/multiprocess_message_pipe_unittest.cc
index 3512868..ed2f30f 100644
--- a/mojo/edk/system/multiprocess_message_pipe_unittest.cc
+++ b/mojo/edk/system/multiprocess_message_pipe_unittest.cc
@@ -240,7 +240,7 @@
   CHECK_EQ(read_buffer, std::string("go 1"));
   CHECK_EQ(num_dispatchers, 1u);
 
-  CHECK_EQ(dispatchers[0]->GetType(), Dispatcher::kTypeSharedBuffer);
+  CHECK_EQ(dispatchers[0]->GetType(), Dispatcher::Type::SHARED_BUFFER);
 
   scoped_refptr<SharedBufferDispatcher> dispatcher(
       static_cast<SharedBufferDispatcher*>(dispatchers[0].get()));
@@ -424,7 +424,7 @@
   CHECK_GT(num_handles, 0);
 
   for (int i = 0; i < num_handles; ++i) {
-    CHECK_EQ(dispatchers[i]->GetType(), Dispatcher::kTypePlatformHandle);
+    CHECK_EQ(dispatchers[i]->GetType(), Dispatcher::Type::PLATFORM_HANDLE);
 
     scoped_refptr<PlatformHandleDispatcher> dispatcher(
         static_cast<PlatformHandleDispatcher*>(dispatchers[i].get()));
diff --git a/mojo/edk/system/platform_handle_dispatcher.cc b/mojo/edk/system/platform_handle_dispatcher.cc
index f064c67..94e10e2 100644
--- a/mojo/edk/system/platform_handle_dispatcher.cc
+++ b/mojo/edk/system/platform_handle_dispatcher.cc
@@ -32,7 +32,7 @@
 }
 
 Dispatcher::Type PlatformHandleDispatcher::GetType() const {
-  return kTypePlatformHandle;
+  return Type::PLATFORM_HANDLE;
 }
 
 // static
diff --git a/mojo/edk/system/platform_handle_dispatcher_unittest.cc b/mojo/edk/system/platform_handle_dispatcher_unittest.cc
index dae53b4..3b37b72 100644
--- a/mojo/edk/system/platform_handle_dispatcher_unittest.cc
+++ b/mojo/edk/system/platform_handle_dispatcher_unittest.cc
@@ -39,7 +39,7 @@
   scoped_refptr<PlatformHandleDispatcher> dispatcher(
       new PlatformHandleDispatcher(h.Pass()));
   EXPECT_FALSE(h.is_valid());
-  EXPECT_EQ(Dispatcher::kTypePlatformHandle, dispatcher->GetType());
+  EXPECT_EQ(Dispatcher::Type::PLATFORM_HANDLE, dispatcher->GetType());
 
   h = dispatcher->PassPlatformHandle().Pass();
   EXPECT_TRUE(h.is_valid());
@@ -79,7 +79,7 @@
   DispatcherTransport transport(
       test::DispatcherTryStartTransport(dispatcher.get()));
   EXPECT_TRUE(transport.is_valid());
-  EXPECT_EQ(Dispatcher::kTypePlatformHandle, transport.GetType());
+  EXPECT_EQ(Dispatcher::Type::PLATFORM_HANDLE, transport.GetType());
   EXPECT_FALSE(transport.IsBusy());
 
   scoped_refptr<Dispatcher> generic_dispatcher =
@@ -90,7 +90,7 @@
   EXPECT_TRUE(dispatcher->HasOneRef());
   dispatcher = nullptr;
 
-  ASSERT_EQ(Dispatcher::kTypePlatformHandle, generic_dispatcher->GetType());
+  ASSERT_EQ(Dispatcher::Type::PLATFORM_HANDLE, generic_dispatcher->GetType());
   dispatcher = static_cast<PlatformHandleDispatcher*>(generic_dispatcher.get());
 
   fp = mojo::test::FILEFromPlatformHandle(dispatcher->PassPlatformHandle(),
diff --git a/mojo/edk/system/remote_data_pipe_impl_unittest.cc b/mojo/edk/system/remote_data_pipe_impl_unittest.cc
index 7efd40a..40d2f6f 100644
--- a/mojo/edk/system/remote_data_pipe_impl_unittest.cc
+++ b/mojo/edk/system/remote_data_pipe_impl_unittest.cc
@@ -226,7 +226,8 @@
   ASSERT_TRUE(read_dispatchers[0]);
   EXPECT_TRUE(read_dispatchers[0]->HasOneRef());
 
-  EXPECT_EQ(Dispatcher::kTypeDataPipeConsumer, read_dispatchers[0]->GetType());
+  EXPECT_EQ(Dispatcher::Type::DATA_PIPE_CONSUMER,
+            read_dispatchers[0]->GetType());
   consumer =
       static_cast<DataPipeConsumerDispatcher*>(read_dispatchers[0].get());
   read_dispatchers.clear();
diff --git a/mojo/edk/system/remote_message_pipe_unittest.cc b/mojo/edk/system/remote_message_pipe_unittest.cc
index 1860c23..6d22da7 100644
--- a/mojo/edk/system/remote_message_pipe_unittest.cc
+++ b/mojo/edk/system/remote_message_pipe_unittest.cc
@@ -674,7 +674,7 @@
   ASSERT_TRUE(read_dispatchers[0]);
   EXPECT_TRUE(read_dispatchers[0]->HasOneRef());
 
-  EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType());
+  EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType());
   dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get());
 
   // Add the waiter now, before it becomes readable to avoid a race.
@@ -848,7 +848,7 @@
   ASSERT_TRUE(read_dispatchers[0]);
   EXPECT_TRUE(read_dispatchers[0]->HasOneRef());
 
-  EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType());
+  EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType());
   dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get());
 
   // |dispatcher| should already be readable and not writable.
@@ -982,7 +982,7 @@
   ASSERT_TRUE(read_dispatchers[0]);
   EXPECT_TRUE(read_dispatchers[0]->HasOneRef());
 
-  EXPECT_EQ(Dispatcher::kTypeSharedBuffer, read_dispatchers[0]->GetType());
+  EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, read_dispatchers[0]->GetType());
   dispatcher = static_cast<SharedBufferDispatcher*>(read_dispatchers[0].get());
 
   // Make another mapping.
@@ -1101,7 +1101,7 @@
   ASSERT_TRUE(read_dispatchers[0]);
   EXPECT_TRUE(read_dispatchers[0]->HasOneRef());
 
-  EXPECT_EQ(Dispatcher::kTypePlatformHandle, read_dispatchers[0]->GetType());
+  EXPECT_EQ(Dispatcher::Type::PLATFORM_HANDLE, read_dispatchers[0]->GetType());
   dispatcher =
       static_cast<PlatformHandleDispatcher*>(read_dispatchers[0].get());
 
@@ -1238,7 +1238,7 @@
   ASSERT_TRUE(read_dispatchers[0]);
   EXPECT_TRUE(read_dispatchers[0]->HasOneRef());
 
-  EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType());
+  EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType());
   dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get());
   read_dispatchers.clear();
 
@@ -1295,7 +1295,7 @@
   ASSERT_TRUE(read_dispatchers[0]);
   EXPECT_TRUE(read_dispatchers[0]->HasOneRef());
 
-  EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType());
+  EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType());
   dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get());
   read_dispatchers.clear();
 
diff --git a/mojo/edk/system/shared_buffer_dispatcher.cc b/mojo/edk/system/shared_buffer_dispatcher.cc
index db823d5..653c507 100644
--- a/mojo/edk/system/shared_buffer_dispatcher.cc
+++ b/mojo/edk/system/shared_buffer_dispatcher.cc
@@ -82,7 +82,7 @@
 }
 
 Dispatcher::Type SharedBufferDispatcher::GetType() const {
-  return kTypeSharedBuffer;
+  return Type::SHARED_BUFFER;
 }
 
 // static
diff --git a/mojo/edk/system/shared_buffer_dispatcher_unittest.cc b/mojo/edk/system/shared_buffer_dispatcher_unittest.cc
index 29dcb57..42446c5 100644
--- a/mojo/edk/system/shared_buffer_dispatcher_unittest.cc
+++ b/mojo/edk/system/shared_buffer_dispatcher_unittest.cc
@@ -119,7 +119,7 @@
                                 SharedBufferDispatcher::kDefaultCreateOptions,
                                 100, &dispatcher));
   ASSERT_TRUE(dispatcher);
-  EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher->GetType());
+  EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, dispatcher->GetType());
 
   // Make a couple of mappings.
   scoped_ptr<embedder::PlatformSharedBufferMapping> mapping1;
@@ -166,7 +166,7 @@
   EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->DuplicateBufferHandle(
                                 NullUserPointer(), &dispatcher2));
   ASSERT_TRUE(dispatcher2);
-  EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher2->GetType());
+  EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, dispatcher2->GetType());
 
   EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close());
 
@@ -194,7 +194,7 @@
     EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->DuplicateBufferHandle(
                                   MakeUserPointer(&options[i]), &dispatcher2));
     ASSERT_TRUE(dispatcher2);
-    EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher2->GetType());
+    EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, dispatcher2->GetType());
     EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->Close());
   }
 
diff --git a/mojo/edk/system/simple_dispatcher_unittest.cc b/mojo/edk/system/simple_dispatcher_unittest.cc
index b8e57e9..58f1458 100644
--- a/mojo/edk/system/simple_dispatcher_unittest.cc
+++ b/mojo/edk/system/simple_dispatcher_unittest.cc
@@ -60,7 +60,7 @@
     HandleSignalsStateChangedNoLock();
   }
 
-  Type GetType() const override { return kTypeUnknown; }
+  Type GetType() const override { return Type::UNKNOWN; }
 
  private:
   friend class base::RefCountedThreadSafe<MockSimpleDispatcher>;
diff --git a/mojo/edk/system/transport_data.cc b/mojo/edk/system/transport_data.cc
index 24b49ec..783a51d 100644
--- a/mojo/edk/system/transport_data.cc
+++ b/mojo/edk/system/transport_data.cc
@@ -137,8 +137,8 @@
   for (size_t i = 0; i < num_handles; i++) {
     Dispatcher* dispatcher = (*dispatchers)[i].get();
     if (!dispatcher) {
-      static_assert(Dispatcher::kTypeUnknown == 0,
-                    "Value of Dispatcher::kTypeUnknown must be 0");
+      static_assert(static_cast<int32_t>(Dispatcher::Type::UNKNOWN) == 0,
+                    "Value of Dispatcher::Type::UNKNOWN must be 0");
       continue;
     }
 
@@ -166,7 +166,7 @@
 #endif
     } else {
       // Nothing to do on failure, since |buffer_| was cleared, and
-      // |kTypeUnknown| is zero. The handle was simply closed.
+      // |Type::UNKNOWN| is zero. The handle was simply closed.
       LOG(ERROR) << "Failed to serialize handle to remote message pipe";
     }
 
diff --git a/mojo/edk/system/transport_data.h b/mojo/edk/system/transport_data.h
index 9911b11..7cb25d3 100644
--- a/mojo/edk/system/transport_data.h
+++ b/mojo/edk/system/transport_data.h
@@ -162,7 +162,8 @@
   };
 
   struct HandleTableEntry {
-    int32_t type;     // From |Dispatcher::Type| (|kTypeUnknown| for "invalid").
+    // TODO(vtl): Should I make |Dispatcher::Type| an |int32_t| enum class?
+    int32_t type;     // From |Dispatcher::Type| (|UNKNOWN| for "invalid").
     uint32_t offset;  // Relative to the start of the "secondary buffer".
     uint32_t size;    // (Not including any padding.)
     uint32_t unused;