diff --git a/http2/adapter/oghttp2_adapter_test.cc b/http2/adapter/oghttp2_adapter_test.cc
index f5a8cb9..efe0327 100644
--- a/http2/adapter/oghttp2_adapter_test.cc
+++ b/http2/adapter/oghttp2_adapter_test.cc
@@ -1251,16 +1251,9 @@
           .Serialize();
 
   // The visitor gets notified about the HEADERS frame and DATA frame for the
-  // closed stream with further processing on the DATA frame.
+  // closed stream with no further processing on either frame.
   EXPECT_CALL(visitor, OnFrameHeader(stream_id, _, HEADERS, 0x4));
   EXPECT_CALL(visitor, OnFrameHeader(stream_id, _, DATA, 0x1));
-  EXPECT_CALL(visitor, OnBeginDataForStream(stream_id, _));
-  EXPECT_CALL(visitor,
-              OnDataForStream(stream_id, "This is the response body."));
-  EXPECT_CALL(visitor, OnEndStream(stream_id));
-  // This final OnCloseStream() is avoided because of a stream map check in
-  // OnEndStream().
-  EXPECT_CALL(visitor, OnCloseStream(stream_id, _)).Times(0);
 
   const int64_t response_result = adapter->ProcessBytes(response_frames);
   EXPECT_EQ(response_frames.size(), static_cast<size_t>(response_result));
diff --git a/http2/adapter/oghttp2_session.cc b/http2/adapter/oghttp2_session.cc
index a48dc47..c46f338 100644
--- a/http2/adapter/oghttp2_session.cc
+++ b/http2/adapter/oghttp2_session.cc
@@ -746,12 +746,17 @@
 
 void OgHttp2Session::OnDataFrameHeader(spdy::SpdyStreamId stream_id,
                                        size_t length, bool /*fin*/) {
-  if (static_cast<Http2StreamId>(stream_id) > highest_processed_stream_id_) {
-    // Receiving DATA before HEADERS is a connection error.
-    LatchErrorAndNotify(Http2ErrorCode::PROTOCOL_ERROR,
-                        ConnectionError::kWrongFrameSequence);
+  if (!stream_map_.contains(stream_id)) {
+    // The stream does not exist; it could be an error or a benign close, e.g.,
+    // getting data for a stream this connection recently closed.
+    if (static_cast<Http2StreamId>(stream_id) > highest_processed_stream_id_) {
+      // Receiving DATA before HEADERS is a connection error.
+      LatchErrorAndNotify(Http2ErrorCode::PROTOCOL_ERROR,
+                          ConnectionError::kWrongFrameSequence);
+    }
     return;
   }
+
   const bool result = visitor_.OnBeginDataForStream(stream_id, length);
   if (!result) {
     decoder_.StopProcessing();
@@ -764,8 +769,8 @@
   // Count the data against flow control, even if the stream is unknown.
   MarkDataBuffered(stream_id, len);
 
-  if (static_cast<Http2StreamId>(stream_id) > highest_processed_stream_id_) {
-    // Receiving DATA before HEADERS is a connection error; the visitor was
+  if (!stream_map_.contains(stream_id)) {
+    // If the stream was unknown due to a protocol error, the visitor was
     // informed in OnDataFrameHeader().
     return;
   }
@@ -781,8 +786,8 @@
   auto iter = stream_map_.find(stream_id);
   if (iter != stream_map_.end()) {
     iter->second.half_closed_remote = true;
+    visitor_.OnEndStream(stream_id);
   }
-  visitor_.OnEndStream(stream_id);
   if (iter != stream_map_.end() && iter->second.half_closed_local &&
       options_.perspective == Perspective::kClient) {
     // From the client's perspective, the stream can be closed if it's already
