diff --git a/quiche/http2/adapter/adapter_impl_comparison_test.cc b/quiche/http2/adapter/adapter_impl_comparison_test.cc
index 11fe362..1713bd8 100644
--- a/quiche/http2/adapter/adapter_impl_comparison_test.cc
+++ b/quiche/http2/adapter/adapter_impl_comparison_test.cc
@@ -64,7 +64,7 @@
   const int kConnectionWindowIncrease = 192 * 1024;
 
   const int32_t nghttp2_stream_id =
-      nghttp2_adapter->SubmitRequest(request_headers, nullptr, true, nullptr);
+      nghttp2_adapter->SubmitRequest(request_headers, true, nullptr);
 
   // Both the connection and stream flow control windows are increased.
   nghttp2_adapter->SubmitWindowUpdate(0, kConnectionWindowIncrease);
@@ -77,7 +77,7 @@
             nghttp2_window);
 
   const int32_t oghttp2_stream_id =
-      oghttp2_adapter->SubmitRequest(request_headers, nullptr, true, nullptr);
+      oghttp2_adapter->SubmitRequest(request_headers, true, nullptr);
   // Both the connection and stream flow control windows are increased.
   oghttp2_adapter->SubmitWindowUpdate(0, kConnectionWindowIncrease);
   oghttp2_adapter->SubmitWindowUpdate(oghttp2_stream_id,
diff --git a/quiche/http2/adapter/http2_adapter.h b/quiche/http2/adapter/http2_adapter.h
index d4dccca..339bdf7 100644
--- a/quiche/http2/adapter/http2_adapter.h
+++ b/quiche/http2/adapter/http2_adapter.h
@@ -122,16 +122,25 @@
   // be nullptr if the request does not have a body. If |end_stream| is true,
   // the adapter will set the fin bit on the request HEADERS frame.
   virtual int32_t SubmitRequest(absl::Span<const Header> headers,
-                                std::unique_ptr<DataFrameSource> data_source,
                                 bool end_stream, void* user_data) = 0;
+  // Deprecated
+  int32_t SubmitRequest(absl::Span<const Header> headers,
+                        nullptr_t /*data_source*/, bool end_stream,
+                        void* user_data) {
+    return SubmitRequest(headers, end_stream, user_data);
+  }
 
   // Returns 0 on success. |data_source| may be nullptr if the response does not
   // have a body. If |end_stream| is true, the adapter will set the fin bit on
   // the response HEADERS frame.
   virtual int SubmitResponse(Http2StreamId stream_id,
                              absl::Span<const Header> headers,
-                             std::unique_ptr<DataFrameSource> data_source,
                              bool end_stream) = 0;
+  // Deprecated
+  int SubmitResponse(Http2StreamId stream_id, absl::Span<const Header> headers,
+                     nullptr_t /*data_source*/, bool end_stream) {
+    return SubmitResponse(stream_id, headers, end_stream);
+  }
 
   // Queues trailers to be sent after any outstanding data on the stream with ID
   // |stream_id|. Returns 0 on success.
diff --git a/quiche/http2/adapter/nghttp2_adapter.cc b/quiche/http2/adapter/nghttp2_adapter.cc
index fd889c4..6e9aaa5 100644
--- a/quiche/http2/adapter/nghttp2_adapter.cc
+++ b/quiche/http2/adapter/nghttp2_adapter.cc
@@ -300,11 +300,8 @@
   }
 }
 
-int32_t NgHttp2Adapter::SubmitRequest(
-    absl::Span<const Header> headers,
-    std::unique_ptr<DataFrameSource> data_source, bool end_stream,
-    void* stream_user_data) {
-  QUICHE_DCHECK(data_source == nullptr);
+int32_t NgHttp2Adapter::SubmitRequest(absl::Span<const Header> headers,
+                                      bool end_stream, void* stream_user_data) {
   auto nvs = GetNghttp2Nvs(headers);
   std::unique_ptr<nghttp2_data_provider> provider;
 
@@ -325,9 +322,7 @@
 
 int NgHttp2Adapter::SubmitResponse(Http2StreamId stream_id,
                                    absl::Span<const Header> headers,
-                                   std::unique_ptr<DataFrameSource> data_source,
                                    bool end_stream) {
-  QUICHE_DCHECK(data_source == nullptr);
   auto nvs = GetNghttp2Nvs(headers);
   std::unique_ptr<nghttp2_data_provider> provider;
   if (!end_stream) {
diff --git a/quiche/http2/adapter/nghttp2_adapter.h b/quiche/http2/adapter/nghttp2_adapter.h
index 69f5805..1fadd68 100644
--- a/quiche/http2/adapter/nghttp2_adapter.h
+++ b/quiche/http2/adapter/nghttp2_adapter.h
@@ -75,12 +75,14 @@
   void MarkDataConsumedForStream(Http2StreamId stream_id,
                                  size_t num_bytes) override;
 
+  // For the deprecated overload.
+  using Http2Adapter::SubmitRequest;
   int32_t SubmitRequest(absl::Span<const Header> headers,
-                        std::unique_ptr<DataFrameSource> data_source,
                         bool end_stream, void* user_data) override;
 
+  // For the deprecated overload.
+  using Http2Adapter::SubmitResponse;
   int SubmitResponse(Http2StreamId stream_id, absl::Span<const Header> headers,
-                     std::unique_ptr<DataFrameSource> data_source,
                      bool end_stream) override;
 
   int SubmitTrailer(Http2StreamId stream_id,
diff --git a/quiche/http2/adapter/oghttp2_adapter.cc b/quiche/http2/adapter/oghttp2_adapter.cc
index 9fb7e8c..321eca6 100644
--- a/quiche/http2/adapter/oghttp2_adapter.cc
+++ b/quiche/http2/adapter/oghttp2_adapter.cc
@@ -139,19 +139,14 @@
       stream_id, TranslateErrorCode(error_code)));
 }
 
-int32_t OgHttp2Adapter::SubmitRequest(
-    absl::Span<const Header> headers,
-    std::unique_ptr<DataFrameSource> data_source, bool end_stream,
-    void* user_data) {
-  QUICHE_DCHECK(data_source == nullptr);
+int32_t OgHttp2Adapter::SubmitRequest(absl::Span<const Header> headers,
+                                      bool end_stream, void* user_data) {
   return session_->SubmitRequest(headers, end_stream, user_data);
 }
 
 int OgHttp2Adapter::SubmitResponse(Http2StreamId stream_id,
                                    absl::Span<const Header> headers,
-                                   std::unique_ptr<DataFrameSource> data_source,
                                    bool end_stream) {
-  QUICHE_DCHECK(data_source == nullptr);
   return session_->SubmitResponse(stream_id, headers, end_stream);
 }
 
diff --git a/quiche/http2/adapter/oghttp2_adapter.h b/quiche/http2/adapter/oghttp2_adapter.h
index 400aa87..2af239f 100644
--- a/quiche/http2/adapter/oghttp2_adapter.h
+++ b/quiche/http2/adapter/oghttp2_adapter.h
@@ -53,11 +53,13 @@
   void MarkDataConsumedForStream(Http2StreamId stream_id,
                                  size_t num_bytes) override;
   void SubmitRst(Http2StreamId stream_id, Http2ErrorCode error_code) override;
+  // For the deprecated overload.
+  using Http2Adapter::SubmitRequest;
   int32_t SubmitRequest(absl::Span<const Header> headers,
-                        std::unique_ptr<DataFrameSource> data_source,
                         bool end_stream, void* user_data) override;
+  // For the deprecated overload.
+  using Http2Adapter::SubmitResponse;
   int SubmitResponse(Http2StreamId stream_id, absl::Span<const Header> headers,
-                     std::unique_ptr<DataFrameSource> data_source,
                      bool end_stream) override;
 
   int SubmitTrailer(Http2StreamId stream_id,
