Removes DataFrameSource interface methods and related utilities.
The `DataFrameSource` parts of the API are no longer used.
PiperOrigin-RevId: 700001502
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 2492384..933ba80 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -1436,7 +1436,6 @@
"http2/adapter/nghttp2_adapter_test.cc",
"http2/adapter/nghttp2_data_provider_test.cc",
"http2/adapter/nghttp2_session_test.cc",
- "http2/adapter/nghttp2_util_test.cc",
]
default_platform_impl_hdrs = [
"common/platform/default/quiche_platform_impl/quiche_bug_tracker_impl.h",
diff --git a/build/source_list.gni b/build/source_list.gni
index b9d9c23..db4f4ad 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -1440,7 +1440,6 @@
"src/quiche/http2/adapter/nghttp2_adapter_test.cc",
"src/quiche/http2/adapter/nghttp2_data_provider_test.cc",
"src/quiche/http2/adapter/nghttp2_session_test.cc",
- "src/quiche/http2/adapter/nghttp2_util_test.cc",
]
default_platform_impl_hdrs = [
"src/quiche/common/platform/default/quiche_platform_impl/quiche_bug_tracker_impl.h",
diff --git a/build/source_list.json b/build/source_list.json
index 2e77d42..2f041c7 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -1438,8 +1438,7 @@
"quiche/http2/adapter/callback_visitor_test.cc",
"quiche/http2/adapter/nghttp2_adapter_test.cc",
"quiche/http2/adapter/nghttp2_data_provider_test.cc",
- "quiche/http2/adapter/nghttp2_session_test.cc",
- "quiche/http2/adapter/nghttp2_util_test.cc"
+ "quiche/http2/adapter/nghttp2_session_test.cc"
],
"default_platform_impl_hdrs": [
"quiche/common/platform/default/quiche_platform_impl/quiche_bug_tracker_impl.h",
diff --git a/quiche/http2/adapter/data_source.h b/quiche/http2/adapter/data_source.h
index ffd78a0..589e768 100644
--- a/quiche/http2/adapter/data_source.h
+++ b/quiche/http2/adapter/data_source.h
@@ -11,26 +11,10 @@
namespace http2 {
namespace adapter {
-// Represents a source of DATA frames for transmission to the peer.
+// TODO(birenroy): move the remaining constants.
class QUICHE_EXPORT DataFrameSource {
public:
- virtual ~DataFrameSource() {}
-
enum : int64_t { kBlocked = 0, kError = -1 };
-
- // Returns the number of bytes to send in the next DATA frame, and whether
- // this frame indicates the end of the data. Returns {kBlocked, false} if
- // blocked, {kError, false} on error.
- virtual std::pair<int64_t, bool> SelectPayloadLength(size_t max_length) = 0;
-
- // This method is called with a frame header and a payload length to send. The
- // source should send or buffer the entire frame and return true, or return
- // false without sending or buffering anything.
- virtual bool Send(absl::string_view frame_header, size_t payload_length) = 0;
-
- // If true, the end of this data source indicates the end of the stream.
- // Otherwise, this data will be followed by trailers.
- virtual bool send_fin() const = 0;
};
// Represents a source of metadata frames for transmission to the peer.
diff --git a/quiche/http2/adapter/nghttp2_util.cc b/quiche/http2/adapter/nghttp2_util.cc
index c2b8245..f54ca9d 100644
--- a/quiche/http2/adapter/nghttp2_util.cc
+++ b/quiche/http2/adapter/nghttp2_util.cc
@@ -163,67 +163,6 @@
return InvalidFrameError::kProtocol;
}
-class Nghttp2DataFrameSource : public DataFrameSource {
- public:
- Nghttp2DataFrameSource(nghttp2_data_provider provider,
- nghttp2_send_data_callback send_data, void* user_data)
- : provider_(std::move(provider)),
- send_data_(std::move(send_data)),
- user_data_(user_data) {}
-
- std::pair<int64_t, bool> SelectPayloadLength(size_t max_length) override {
- const int32_t stream_id = 0;
- uint32_t data_flags = 0;
- int64_t result = provider_.read_callback(
- nullptr /* session */, stream_id, nullptr /* buf */, max_length,
- &data_flags, &provider_.source, nullptr /* user_data */);
- if (result == NGHTTP2_ERR_DEFERRED) {
- return {kBlocked, false};
- } else if (result < 0) {
- return {kError, false};
- } else if ((data_flags & NGHTTP2_DATA_FLAG_NO_COPY) == 0) {
- QUICHE_LOG(ERROR) << "Source did not use the zero-copy API!";
- return {kError, false};
- } else {
- const bool eof = data_flags & NGHTTP2_DATA_FLAG_EOF;
- if (eof && (data_flags & NGHTTP2_DATA_FLAG_NO_END_STREAM) == 0) {
- send_fin_ = true;
- }
- return {result, eof};
- }
- }
-
- bool Send(absl::string_view frame_header, size_t payload_length) override {
- nghttp2_frame frame;
- frame.hd.type = 0;
- frame.hd.length = payload_length;
- frame.hd.flags = 0;
- frame.hd.stream_id = 0;
- frame.data.padlen = 0;
- const int result = send_data_(
- nullptr /* session */, &frame, ToUint8Ptr(frame_header.data()),
- payload_length, &provider_.source, user_data_);
- QUICHE_LOG_IF(ERROR, result < 0 && result != NGHTTP2_ERR_WOULDBLOCK)
- << "Unexpected error code from send: " << result;
- return result == 0;
- }
-
- bool send_fin() const override { return send_fin_; }
-
- private:
- nghttp2_data_provider provider_;
- nghttp2_send_data_callback send_data_;
- void* user_data_;
- bool send_fin_ = false;
-};
-
-std::unique_ptr<DataFrameSource> MakeZeroCopyDataFrameSource(
- nghttp2_data_provider provider, void* user_data,
- nghttp2_send_data_callback send_data) {
- return std::make_unique<Nghttp2DataFrameSource>(
- std::move(provider), std::move(send_data), user_data);
-}
-
absl::string_view ErrorString(uint32_t error_code) {
return Http2ErrorCodeToString(static_cast<Http2ErrorCode>(error_code));
}
diff --git a/quiche/http2/adapter/nghttp2_util.h b/quiche/http2/adapter/nghttp2_util.h
index 5e08e8c..5b9f468 100644
--- a/quiche/http2/adapter/nghttp2_util.h
+++ b/quiche/http2/adapter/nghttp2_util.h
@@ -61,13 +61,6 @@
int ToNgHttp2ErrorCode(Http2VisitorInterface::InvalidFrameError error);
Http2VisitorInterface::InvalidFrameError ToInvalidFrameError(int error);
-// Transforms a nghttp2_data_provider into a DataFrameSource. Assumes that
-// |provider| uses the zero-copy nghttp2_data_source_read_callback API. Unsafe
-// otherwise.
-std::unique_ptr<DataFrameSource> MakeZeroCopyDataFrameSource(
- nghttp2_data_provider provider, void* user_data,
- nghttp2_send_data_callback send_data);
-
void LogBeforeSend(const nghttp2_frame& frame);
} // namespace adapter
diff --git a/quiche/http2/adapter/nghttp2_util_test.cc b/quiche/http2/adapter/nghttp2_util_test.cc
deleted file mode 100644
index 69b85f5..0000000
--- a/quiche/http2/adapter/nghttp2_util_test.cc
+++ /dev/null
@@ -1,112 +0,0 @@
-#include "quiche/http2/adapter/nghttp2_util.h"
-
-#include <memory>
-#include <string>
-
-#include "quiche/http2/adapter/nghttp2_test_utils.h"
-#include "quiche/http2/adapter/test_utils.h"
-#include "quiche/common/platform/api/quiche_test.h"
-
-namespace http2 {
-namespace adapter {
-namespace test {
-namespace {
-
-// This send callback assumes |source|'s pointer is a TestDataSource, and
-// |user_data| is a std::string.
-int FakeSendCallback(nghttp2_session*, nghttp2_frame* /*frame*/,
- const uint8_t* framehd, size_t length,
- nghttp2_data_source* source, void* user_data) {
- auto* dest = static_cast<std::string*>(user_data);
- // Appends the frame header to the string.
- absl::StrAppend(dest, ToStringView(framehd, 9));
- auto* test_source = static_cast<TestDataSource*>(source->ptr);
- absl::string_view payload = test_source->ReadNext(length);
- // Appends the frame payload to the string.
- absl::StrAppend(dest, payload);
- return 0;
-}
-
-TEST(MakeZeroCopyDataFrameSource, EmptyPayload) {
- std::string result;
-
- const absl::string_view kEmptyBody = "";
- TestDataSource body1{kEmptyBody};
- // The TestDataSource is wrapped in the nghttp2_data_provider data type.
- nghttp2_data_provider provider = body1.MakeDataProvider();
-
- // This call transforms it back into a DataFrameSource, which is compatible
- // with the Http2Adapter API.
- std::unique_ptr<DataFrameSource> frame_source =
- MakeZeroCopyDataFrameSource(provider, &result, FakeSendCallback);
- auto [length, eof] = frame_source->SelectPayloadLength(100);
- EXPECT_EQ(length, 0);
- EXPECT_TRUE(eof);
- frame_source->Send("ninebytes", 0);
- EXPECT_EQ(result, "ninebytes");
-}
-
-TEST(MakeZeroCopyDataFrameSource, ShortPayload) {
- std::string result;
-
- const absl::string_view kShortBody =
- "<html><head><title>Example Page!</title></head>"
- "<body><div><span><table><tr><th><blink>Wow!!"
- "</blink></th></tr></table></span></div></body>"
- "</html>";
- TestDataSource body1{kShortBody};
- // The TestDataSource is wrapped in the nghttp2_data_provider data type.
- nghttp2_data_provider provider = body1.MakeDataProvider();
-
- // This call transforms it back into a DataFrameSource, which is compatible
- // with the Http2Adapter API.
- std::unique_ptr<DataFrameSource> frame_source =
- MakeZeroCopyDataFrameSource(provider, &result, FakeSendCallback);
- auto [length, eof] = frame_source->SelectPayloadLength(200);
- EXPECT_EQ(length, kShortBody.size());
- EXPECT_TRUE(eof);
- frame_source->Send("ninebytes", length);
- EXPECT_EQ(result, absl::StrCat("ninebytes", kShortBody));
-}
-
-TEST(MakeZeroCopyDataFrameSource, MultiFramePayload) {
- std::string result;
-
- const absl::string_view kShortBody =
- "<html><head><title>Example Page!</title></head>"
- "<body><div><span><table><tr><th><blink>Wow!!"
- "</blink></th></tr></table></span></div></body>"
- "</html>";
- TestDataSource body1{kShortBody};
- // The TestDataSource is wrapped in the nghttp2_data_provider data type.
- nghttp2_data_provider provider = body1.MakeDataProvider();
-
- // This call transforms it back into a DataFrameSource, which is compatible
- // with the Http2Adapter API.
- std::unique_ptr<DataFrameSource> frame_source =
- MakeZeroCopyDataFrameSource(provider, &result, FakeSendCallback);
- auto ret = frame_source->SelectPayloadLength(50);
- EXPECT_EQ(ret.first, 50);
- EXPECT_FALSE(ret.second);
- frame_source->Send("ninebyte1", ret.first);
-
- ret = frame_source->SelectPayloadLength(50);
- EXPECT_EQ(ret.first, 50);
- EXPECT_FALSE(ret.second);
- frame_source->Send("ninebyte2", ret.first);
-
- ret = frame_source->SelectPayloadLength(50);
- EXPECT_EQ(ret.first, 44);
- EXPECT_TRUE(ret.second);
- frame_source->Send("ninebyte3", ret.first);
-
- EXPECT_EQ(result,
- "ninebyte1<html><head><title>Example Page!</title></head><bo"
- "ninebyte2dy><div><span><table><tr><th><blink>Wow!!</blink><"
- "ninebyte3/th></tr></table></span></div></body></html>");
-}
-
-} // namespace
-} // namespace test
-} // namespace adapter
-} // namespace http2