diff --git a/http2/adapter/callback_visitor_test.cc b/http2/adapter/callback_visitor_test.cc
index eaf3f98..f7b982e 100644
--- a/http2/adapter/callback_visitor_test.cc
+++ b/http2/adapter/callback_visitor_test.cc
@@ -145,7 +145,7 @@
   visitor.OnEndStream(1);
 
   EXPECT_CALL(callbacks, OnStreamClose(1, NGHTTP2_NO_ERROR));
-  visitor.OnCloseStream(1, Http2ErrorCode::NO_ERROR);
+  visitor.OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR);
 
   EXPECT_CALL(callbacks, OnBeginFrame(HasFrameHeader(5, RST_STREAM, _)));
   visitor.OnFrameHeader(5, 4, RST_STREAM, 0);
@@ -278,7 +278,7 @@
   visitor.OnEndStream(1);
 
   EXPECT_CALL(callbacks, OnStreamClose(1, NGHTTP2_NO_ERROR));
-  visitor.OnCloseStream(1, Http2ErrorCode::NO_ERROR);
+  visitor.OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR);
 
   // RST_STREAM on stream 3
   EXPECT_CALL(callbacks, OnBeginFrame(HasFrameHeader(3, RST_STREAM, 0)));
diff --git a/http2/adapter/http2_protocol.cc b/http2/adapter/http2_protocol.cc
index dc0a57a..8b80718 100644
--- a/http2/adapter/http2_protocol.cc
+++ b/http2/adapter/http2_protocol.cc
@@ -45,8 +45,8 @@
 
 absl::string_view Http2ErrorCodeToString(Http2ErrorCode error_code) {
   switch (error_code) {
-    case Http2ErrorCode::NO_ERROR:
-      return "NO_ERROR";
+    case Http2ErrorCode::HTTP2_NO_ERROR:
+      return "HTTP2_NO_ERROR";
     case Http2ErrorCode::PROTOCOL_ERROR:
       return "PROTOCOL_ERROR";
     case Http2ErrorCode::INTERNAL_ERROR:
diff --git a/http2/adapter/http2_protocol.h b/http2/adapter/http2_protocol.h
index 9f72fbe..ce5a282 100644
--- a/http2/adapter/http2_protocol.h
+++ b/http2/adapter/http2_protocol.h
@@ -87,7 +87,7 @@
 
 // HTTP/2 error codes as specified in RFC 7540 Section 7.
 enum class Http2ErrorCode {
-  NO_ERROR = 0x0,
+  HTTP2_NO_ERROR = 0x0,
   PROTOCOL_ERROR = 0x1,
   INTERNAL_ERROR = 0x2,
   FLOW_CONTROL_ERROR = 0x3,
diff --git a/http2/adapter/http2_util.cc b/http2/adapter/http2_util.cc
index efca530..39b71dc 100644
--- a/http2/adapter/http2_util.cc
+++ b/http2/adapter/http2_util.cc
@@ -13,7 +13,7 @@
 
 spdy::SpdyErrorCode TranslateErrorCode(Http2ErrorCode code) {
   switch (code) {
-    case Http2ErrorCode::NO_ERROR:
+    case Http2ErrorCode::HTTP2_NO_ERROR:
       return spdy::ERROR_CODE_NO_ERROR;
     case Http2ErrorCode::PROTOCOL_ERROR:
       return spdy::ERROR_CODE_PROTOCOL_ERROR;
@@ -48,7 +48,7 @@
 Http2ErrorCode TranslateErrorCode(spdy::SpdyErrorCode code) {
   switch (code) {
     case spdy::ERROR_CODE_NO_ERROR:
-      return Http2ErrorCode::NO_ERROR;
+      return Http2ErrorCode::HTTP2_NO_ERROR;
     case spdy::ERROR_CODE_PROTOCOL_ERROR:
       return Http2ErrorCode::PROTOCOL_ERROR;
     case spdy::ERROR_CODE_INTERNAL_ERROR:
diff --git a/http2/adapter/nghttp2_adapter_test.cc b/http2/adapter/nghttp2_adapter_test.cc
index 599a529..5f958b8 100644
--- a/http2/adapter/nghttp2_adapter_test.cc
+++ b/http2/adapter/nghttp2_adapter_test.cc
@@ -240,7 +240,7 @@
   EXPECT_CALL(visitor, OnFrameHeader(1, 0, DATA, 1));
   EXPECT_CALL(visitor, OnBeginDataForStream(1, 0));
   EXPECT_CALL(visitor, OnEndStream(1));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
   EXPECT_CALL(visitor, OnFrameHeader(5, 4, RST_STREAM, 0));
   EXPECT_CALL(visitor, OnRstStream(5, Http2ErrorCode::REFUSED_STREAM));
   EXPECT_CALL(visitor, OnCloseStream(5, Http2ErrorCode::REFUSED_STREAM));
@@ -325,7 +325,7 @@
   EXPECT_CALL(visitor, OnHeaderForStream(1, "final-status", "A-OK"));
   EXPECT_CALL(visitor, OnEndHeadersForStream(1));
   EXPECT_CALL(visitor, OnEndStream(1));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   const int64_t stream_result = adapter->ProcessBytes(stream_frames);
   EXPECT_EQ(stream_frames.size(), stream_result);
@@ -405,7 +405,7 @@
   EXPECT_CALL(visitor, OnBeginDataForStream(1, 26));
   EXPECT_CALL(visitor, OnDataForStream(1, "This is the response body."));
   EXPECT_CALL(visitor, OnEndStream(1));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   const int64_t stream_result = adapter->ProcessBytes(stream_frames);
   EXPECT_EQ(stream_frames.size(), stream_result);
@@ -1527,7 +1527,8 @@
   EXPECT_CALL(visitor,
               OnDataForStream(stream_id, "This is the response body."));
   EXPECT_CALL(visitor, OnEndStream(stream_id));
-  EXPECT_CALL(visitor, OnCloseStream(stream_id, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor,
+              OnCloseStream(stream_id, Http2ErrorCode::HTTP2_NO_ERROR));
 
   // The first stream should close, which should make the session want to write
   // the next stream.
@@ -2480,7 +2481,7 @@
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x5));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x5, 0));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   send_result = adapter->Send();
   EXPECT_EQ(0, send_result);
@@ -2694,7 +2695,7 @@
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x5));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x5, 0));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   int send_result = adapter->Send();
   EXPECT_EQ(0, send_result);
@@ -2819,7 +2820,7 @@
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x5));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x5, 0));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   send_result = adapter->Send();
   EXPECT_EQ(0, send_result);
diff --git a/http2/adapter/nghttp2_session_test.cc b/http2/adapter/nghttp2_session_test.cc
index 2210394..5f5ee0f 100644
--- a/http2/adapter/nghttp2_session_test.cc
+++ b/http2/adapter/nghttp2_session_test.cc
@@ -186,7 +186,7 @@
   EXPECT_CALL(visitor_, OnFrameHeader(1, 0, DATA, 1));
   EXPECT_CALL(visitor_, OnBeginDataForStream(1, 0));
   EXPECT_CALL(visitor_, OnEndStream(1));
-  EXPECT_CALL(visitor_, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor_, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
   EXPECT_CALL(visitor_, OnFrameHeader(5, 4, RST_STREAM, 0));
   EXPECT_CALL(visitor_, OnRstStream(5, Http2ErrorCode::REFUSED_STREAM));
   EXPECT_CALL(visitor_, OnCloseStream(5, Http2ErrorCode::REFUSED_STREAM));
diff --git a/http2/adapter/oghttp2_adapter_test.cc b/http2/adapter/oghttp2_adapter_test.cc
index 171f0b2..765fe22 100644
--- a/http2/adapter/oghttp2_adapter_test.cc
+++ b/http2/adapter/oghttp2_adapter_test.cc
@@ -259,7 +259,7 @@
   EXPECT_CALL(visitor, OnHeaderForStream(1, "final-status", "A-OK"));
   EXPECT_CALL(visitor, OnEndHeadersForStream(1));
   EXPECT_CALL(visitor, OnEndStream(1));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   const int64_t stream_result = adapter->ProcessBytes(stream_frames);
   EXPECT_EQ(stream_frames.size(), static_cast<size_t>(stream_result));
@@ -343,7 +343,7 @@
   EXPECT_CALL(visitor, OnBeginDataForStream(1, 26));
   EXPECT_CALL(visitor, OnDataForStream(1, "This is the response body."));
   EXPECT_CALL(visitor, OnEndStream(1));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   const int64_t stream_result = adapter->ProcessBytes(stream_frames);
   EXPECT_EQ(stream_frames.size(), static_cast<size_t>(stream_result));
@@ -508,7 +508,7 @@
   EXPECT_CALL(visitor,
               OnFrameSent(RST_STREAM, stream_id1, 4, 0x0,
                           static_cast<int>(Http2ErrorCode::REFUSED_STREAM)));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
@@ -995,7 +995,8 @@
   EXPECT_CALL(visitor,
               OnDataForStream(stream_id, "This is the response body."));
   EXPECT_CALL(visitor, OnEndStream(stream_id));
-  EXPECT_CALL(visitor, OnCloseStream(stream_id, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor,
+              OnCloseStream(stream_id, Http2ErrorCode::HTTP2_NO_ERROR));
 
   // The first stream should close, which should make the session want to write
   // the next stream.
@@ -1231,7 +1232,8 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(RST_STREAM, stream_id, _, 0x0));
   EXPECT_CALL(visitor, OnFrameSent(RST_STREAM, stream_id, _, 0x0,
                                    static_cast<int>(Http2ErrorCode::CANCEL)));
-  EXPECT_CALL(visitor, OnCloseStream(stream_id, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor,
+              OnCloseStream(stream_id, Http2ErrorCode::HTTP2_NO_ERROR));
 
   result = adapter->Send();
   EXPECT_EQ(0, result);
@@ -1354,7 +1356,7 @@
   adapter_->SubmitPriorityForStream(3, 1, 255, true);
   adapter_->SubmitRst(3, Http2ErrorCode::CANCEL);
   adapter_->SubmitPing(42);
-  adapter_->SubmitGoAway(13, Http2ErrorCode::NO_ERROR, "");
+  adapter_->SubmitGoAway(13, Http2ErrorCode::HTTP2_NO_ERROR, "");
   adapter_->SubmitWindowUpdate(3, 127);
   EXPECT_TRUE(adapter_->want_write());
 
@@ -1386,7 +1388,8 @@
 
   adapter_->SubmitSettings(
       {{HEADER_TABLE_SIZE, 128}, {MAX_FRAME_SIZE, 128 << 10}});
-  adapter_->SubmitGoAway(13, Http2ErrorCode::NO_ERROR, "And don't come back!");
+  adapter_->SubmitGoAway(13, Http2ErrorCode::HTTP2_NO_ERROR,
+                         "And don't come back!");
   adapter_->SubmitPing(42);
   EXPECT_TRUE(adapter_->want_write());
 
@@ -1626,7 +1629,7 @@
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x5));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x5, 0));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   int send_result = adapter->Send();
   EXPECT_EQ(0, send_result);
@@ -1732,7 +1735,7 @@
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x5, 0));
   EXPECT_CALL(visitor, OnBeforeFrameSent(RST_STREAM, 1, 4, 0x0));
   EXPECT_CALL(visitor, OnFrameSent(RST_STREAM, 1, 4, 0x0, 0));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   int send_result = adapter->Send();
   EXPECT_EQ(0, send_result);
@@ -1816,7 +1819,7 @@
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x5));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x5, 0));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   send_result = adapter->Send();
   EXPECT_EQ(0, send_result);
@@ -1983,7 +1986,7 @@
   EXPECT_CALL(visitor,
               OnFrameSent(RST_STREAM, 1, 4, 0x0,
                           static_cast<int>(Http2ErrorCode::INTERNAL_ERROR)));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   int send_result = adapter->Send();
   // Some bytes should have been serialized.
@@ -2044,7 +2047,7 @@
   EXPECT_CALL(visitor,
               OnFrameSent(RST_STREAM, 1, 4, 0x0,
                           static_cast<int>(Http2ErrorCode::INTERNAL_ERROR)));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
   EXPECT_CALL(visitor, OnBeforeFrameSent(GOAWAY, 0, _, 0x0));
   EXPECT_CALL(visitor,
               OnFrameSent(GOAWAY, 0, _, 0x0,
diff --git a/http2/adapter/oghttp2_session.cc b/http2/adapter/oghttp2_session.cc
index cf820b8..c63dfb7 100644
--- a/http2/adapter/oghttp2_session.cc
+++ b/http2/adapter/oghttp2_session.cc
@@ -142,7 +142,7 @@
 Http2ErrorCode GetHttp2ErrorCode(SpdyFramerError error) {
   switch (error) {
     case SpdyFramerError::SPDY_NO_ERROR:
-      return Http2ErrorCode::NO_ERROR;
+      return Http2ErrorCode::HTTP2_NO_ERROR;
     case SpdyFramerError::SPDY_INVALID_STREAM_ID:
     case SpdyFramerError::SPDY_INVALID_CONTROL_FRAME:
     case SpdyFramerError::SPDY_INVALID_PADDING:
@@ -799,7 +799,7 @@
     // half_closed_local.
     // TODO(birenroy): consider whether there are outbound frames queued for the
     // stream.
-    CloseStream(stream_id, Http2ErrorCode::NO_ERROR);
+    CloseStream(stream_id, Http2ErrorCode::HTTP2_NO_ERROR);
   }
 }
 
@@ -1219,7 +1219,7 @@
   const StreamState& state = iter->second;
   if (static_cast<FrameType>(frame_type) == FrameType::RST_STREAM ||
       (state.half_closed_local && state.half_closed_remote)) {
-    CloseStream(stream_id, Http2ErrorCode::NO_ERROR);
+    CloseStream(stream_id, Http2ErrorCode::HTTP2_NO_ERROR);
   }
 }
 
diff --git a/http2/adapter/oghttp2_session_test.cc b/http2/adapter/oghttp2_session_test.cc
index 1f604ee..28a143a 100644
--- a/http2/adapter/oghttp2_session_test.cc
+++ b/http2/adapter/oghttp2_session_test.cc
@@ -894,7 +894,7 @@
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x5));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x5, 0));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   send_result = session.Send();
   EXPECT_EQ(0, send_result);
@@ -978,7 +978,7 @@
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x5));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x5, 0));
-  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
+  EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::HTTP2_NO_ERROR));
 
   send_result = session.Send();
   EXPECT_EQ(0, send_result);
