Update Http2VisitorInterface::OnHeaderResult from enum to enum class.
This update aligns with internal change 691497117, which did the same for
another class, following https://abseil.io/tips/86.
No functional change is intended.
NOT generated via copybara.
PiperOrigin-RevId: 696578103
diff --git a/quiche/http2/adapter/callback_visitor.cc b/quiche/http2/adapter/callback_visitor.cc
index 89b02b5..97a2c29 100644
--- a/quiche/http2/adapter/callback_visitor.cc
+++ b/quiche/http2/adapter/callback_visitor.cc
@@ -77,6 +77,8 @@
namespace http2 {
namespace adapter {
+using OnHeaderResult = ::http2::adapter::Http2VisitorInterface::OnHeaderResult;
+
CallbackVisitor::CallbackVisitor(Perspective perspective,
const nghttp2_session_callbacks& callbacks,
void* user_data)
@@ -240,8 +242,9 @@
return true;
}
-Http2VisitorInterface::OnHeaderResult CallbackVisitor::OnHeaderForStream(
- Http2StreamId stream_id, absl::string_view name, absl::string_view value) {
+OnHeaderResult CallbackVisitor::OnHeaderForStream(Http2StreamId stream_id,
+ absl::string_view name,
+ absl::string_view value) {
QUICHE_VLOG(2) << "OnHeaderForStream(stream_id=" << stream_id << ", name=["
<< absl::CEscape(name) << "], value=[" << absl::CEscape(value)
<< "])";
@@ -251,15 +254,15 @@
ToUint8Ptr(value.data()), value.size(), NGHTTP2_NV_FLAG_NONE,
user_data_);
if (result == 0) {
- return HEADER_OK;
+ return OnHeaderResult::HEADER_OK;
} else if (result == NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE) {
- return HEADER_RST_STREAM;
+ return OnHeaderResult::HEADER_RST_STREAM;
} else {
// Assume NGHTTP2_ERR_CALLBACK_FAILURE.
- return HEADER_CONNECTION_ERROR;
+ return OnHeaderResult::HEADER_CONNECTION_ERROR;
}
}
- return HEADER_OK;
+ return OnHeaderResult::HEADER_OK;
}
bool CallbackVisitor::OnEndHeadersForStream(Http2StreamId stream_id) {
diff --git a/quiche/http2/adapter/http2_visitor_interface.h b/quiche/http2/adapter/http2_visitor_interface.h
index 3bf489f..f00ac61 100644
--- a/quiche/http2/adapter/http2_visitor_interface.h
+++ b/quiche/http2/adapter/http2_visitor_interface.h
@@ -150,7 +150,7 @@
// different error code instead, which should be done before returning
// HEADER_RST_STREAM. Returning HEADER_CONNECTION_ERROR will lead to a
// non-recoverable error on the connection.
- enum OnHeaderResult {
+ enum class OnHeaderResult {
// The header was accepted.
HEADER_OK,
// The application considers the header a connection error.
diff --git a/quiche/http2/adapter/mock_http2_visitor.h b/quiche/http2/adapter/mock_http2_visitor.h
index a99c944..2e68cb2 100644
--- a/quiche/http2/adapter/mock_http2_visitor.h
+++ b/quiche/http2/adapter/mock_http2_visitor.h
@@ -19,7 +19,8 @@
ON_CALL(*this, OnFrameHeader).WillByDefault(testing::Return(true));
ON_CALL(*this, OnBeginHeadersForStream)
.WillByDefault(testing::Return(true));
- ON_CALL(*this, OnHeaderForStream).WillByDefault(testing::Return(HEADER_OK));
+ ON_CALL(*this, OnHeaderForStream)
+ .WillByDefault(testing::Return(OnHeaderResult::HEADER_OK));
ON_CALL(*this, OnEndHeadersForStream).WillByDefault(testing::Return(true));
ON_CALL(*this, OnDataPaddingLength).WillByDefault(testing::Return(true));
ON_CALL(*this, OnBeginDataForStream).WillByDefault(testing::Return(true));
diff --git a/quiche/http2/adapter/nghttp2_adapter_test.cc b/quiche/http2/adapter/nghttp2_adapter_test.cc
index 073f73c..1e83bbf 100644
--- a/quiche/http2/adapter/nghttp2_adapter_test.cc
+++ b/quiche/http2/adapter/nghttp2_adapter_test.cc
@@ -20,6 +20,7 @@
namespace {
using ConnectionError = Http2VisitorInterface::ConnectionError;
+using OnHeaderResult = ::http2::adapter::Http2VisitorInterface::OnHeaderResult;
using spdy::SpdyFrameType;
using testing::_;
@@ -1521,7 +1522,7 @@
testing::InvokeWithoutArgs([&adapter]() {
adapter->SubmitRst(1, Http2ErrorCode::REFUSED_STREAM);
}),
- testing::Return(Http2VisitorInterface::HEADER_RST_STREAM)));
+ testing::Return(OnHeaderResult::HEADER_RST_STREAM)));
const int64_t stream_result = adapter->ProcessBytes(stream_frames);
EXPECT_EQ(stream_frames.size(), stream_result);
@@ -1592,8 +1593,7 @@
EXPECT_CALL(visitor, OnHeaderForStream(1, "server", "my-fake-server"));
EXPECT_CALL(visitor,
OnHeaderForStream(1, "date", "Tue, 6 Apr 2021 12:54:01 GMT"))
- .WillOnce(
- testing::Return(Http2VisitorInterface::HEADER_CONNECTION_ERROR));
+ .WillOnce(testing::Return(OnHeaderResult::HEADER_CONNECTION_ERROR));
// Translation to nghttp2 treats this error as a general parsing error.
EXPECT_CALL(visitor, OnConnectionError(ConnectionError::kParseError));
@@ -1659,8 +1659,7 @@
EXPECT_CALL(visitor, OnHeaderForStream(1, "server", "my-fake-server"));
EXPECT_CALL(visitor,
OnHeaderForStream(1, "date", "Tue, 6 Apr 2021 12:54:01 GMT"))
- .WillOnce(
- testing::Return(Http2VisitorInterface::HEADER_CONNECTION_ERROR));
+ .WillOnce(testing::Return(OnHeaderResult::HEADER_CONNECTION_ERROR));
// Translation to nghttp2 treats this error as a general parsing error.
EXPECT_CALL(visitor, OnConnectionError(ConnectionError::kParseError));
@@ -4146,7 +4145,7 @@
EXPECT_CALL(visitor, OnBeginHeadersForStream(1));
EXPECT_CALL(visitor, OnHeaderForStream(1, _, _)).Times(5);
EXPECT_CALL(visitor, OnHeaderForStream(1, "header2", _))
- .WillOnce(testing::Return(Http2VisitorInterface::HEADER_RST_STREAM));
+ .WillOnce(testing::Return(OnHeaderResult::HEADER_RST_STREAM));
// The CONTINUATION frame header and header fields are not processed.
int64_t result = adapter->ProcessBytes(frames);
@@ -4927,7 +4926,7 @@
EXPECT_CALL(visitor, OnHeaderForStream(1, ":authority", "example.com"));
EXPECT_CALL(visitor, OnHeaderForStream(1, ":path", "/this/is/request/one"));
EXPECT_CALL(visitor, OnHeaderForStream(1, "accept", "some bogus value!"))
- .WillOnce(testing::Return(Http2VisitorInterface::HEADER_RST_STREAM));
+ .WillOnce(testing::Return(OnHeaderResult::HEADER_RST_STREAM));
EXPECT_CALL(visitor, OnFrameHeader(1, 4, WINDOW_UPDATE, 0));
EXPECT_CALL(visitor, OnWindowUpdate(1, 2000));
// DATA frame is not delivered to the visitor.
@@ -4993,7 +4992,7 @@
EXPECT_CALL(visitor, OnBeginHeadersForStream(1));
EXPECT_CALL(visitor, OnHeaderForStream(1, _, _)).Times(4);
EXPECT_CALL(visitor, OnHeaderForStream(1, "accept", "some bogus value!"))
- .WillOnce(testing::Return(Http2VisitorInterface::HEADER_RST_STREAM));
+ .WillOnce(testing::Return(OnHeaderResult::HEADER_RST_STREAM));
// For the RST_STREAM-marked stream, the control frames and METADATA frame but
// not the DATA frame are delivered to the visitor.
EXPECT_CALL(visitor, OnFrameHeader(1, 4, WINDOW_UPDATE, 0));
diff --git a/quiche/http2/adapter/nghttp2_callbacks.cc b/quiche/http2/adapter/nghttp2_callbacks.cc
index 7a0b795..243495a 100644
--- a/quiche/http2/adapter/nghttp2_callbacks.cc
+++ b/quiche/http2/adapter/nghttp2_callbacks.cc
@@ -18,6 +18,8 @@
namespace adapter {
namespace callbacks {
+using OnHeaderResult = ::http2::adapter::Http2VisitorInterface::OnHeaderResult;
+
ssize_t OnReadyToSend(nghttp2_session* /* session */, const uint8_t* data,
size_t length, int flags, void* user_data) {
QUICHE_CHECK_NE(user_data, nullptr);
@@ -187,18 +189,17 @@
<< "], value=[" << absl::CEscape(ToStringView(value)) << "])";
QUICHE_CHECK_NE(user_data, nullptr);
auto* visitor = static_cast<Http2VisitorInterface*>(user_data);
- const Http2VisitorInterface::OnHeaderResult result =
- visitor->OnHeaderForStream(frame->hd.stream_id, ToStringView(name),
- ToStringView(value));
+ const OnHeaderResult result = visitor->OnHeaderForStream(
+ frame->hd.stream_id, ToStringView(name), ToStringView(value));
switch (result) {
- case Http2VisitorInterface::HEADER_OK:
+ case OnHeaderResult::HEADER_OK:
return 0;
- case Http2VisitorInterface::HEADER_CONNECTION_ERROR:
- case Http2VisitorInterface::HEADER_COMPRESSION_ERROR:
+ case OnHeaderResult::HEADER_CONNECTION_ERROR:
+ case OnHeaderResult::HEADER_COMPRESSION_ERROR:
return NGHTTP2_ERR_CALLBACK_FAILURE;
- case Http2VisitorInterface::HEADER_RST_STREAM:
- case Http2VisitorInterface::HEADER_FIELD_INVALID:
- case Http2VisitorInterface::HEADER_HTTP_MESSAGING:
+ case OnHeaderResult::HEADER_RST_STREAM:
+ case OnHeaderResult::HEADER_FIELD_INVALID:
+ case OnHeaderResult::HEADER_HTTP_MESSAGING:
return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
}
// Unexpected value.
diff --git a/quiche/http2/adapter/oghttp2_adapter_test.cc b/quiche/http2/adapter/oghttp2_adapter_test.cc
index 610809c..e68509a 100644
--- a/quiche/http2/adapter/oghttp2_adapter_test.cc
+++ b/quiche/http2/adapter/oghttp2_adapter_test.cc
@@ -23,6 +23,7 @@
namespace {
using ConnectionError = Http2VisitorInterface::ConnectionError;
+using OnHeaderResult = ::http2::adapter::Http2VisitorInterface::OnHeaderResult;
using spdy::SpdyFrameType;
using testing::_;
@@ -1832,7 +1833,7 @@
testing::InvokeWithoutArgs([&adapter]() {
adapter->SubmitRst(1, Http2ErrorCode::REFUSED_STREAM);
}),
- testing::Return(Http2VisitorInterface::HEADER_RST_STREAM)));
+ testing::Return(OnHeaderResult::HEADER_RST_STREAM)));
const int64_t stream_result = adapter->ProcessBytes(stream_frames);
EXPECT_EQ(stream_frames.size(), static_cast<size_t>(stream_result));
@@ -1910,8 +1911,7 @@
EXPECT_CALL(visitor, OnHeaderForStream(1, "server", "my-fake-server"));
EXPECT_CALL(visitor,
OnHeaderForStream(1, "date", "Tue, 6 Apr 2021 12:54:01 GMT"))
- .WillOnce(
- testing::Return(Http2VisitorInterface::HEADER_CONNECTION_ERROR));
+ .WillOnce(testing::Return(OnHeaderResult::HEADER_CONNECTION_ERROR));
EXPECT_CALL(visitor, OnConnectionError(ConnectionError::kHeaderError));
const int64_t stream_result = adapter->ProcessBytes(stream_frames);
@@ -1985,8 +1985,7 @@
EXPECT_CALL(visitor, OnHeaderForStream(1, "server", "my-fake-server"));
EXPECT_CALL(visitor,
OnHeaderForStream(1, "date", "Tue, 6 Apr 2021 12:54:01 GMT"))
- .WillOnce(
- testing::Return(Http2VisitorInterface::HEADER_CONNECTION_ERROR));
+ .WillOnce(testing::Return(OnHeaderResult::HEADER_CONNECTION_ERROR));
EXPECT_CALL(visitor, OnConnectionError(ConnectionError::kHeaderError));
const int64_t stream_result = adapter->ProcessBytes(stream_frames);
@@ -4913,7 +4912,7 @@
EXPECT_CALL(visitor, OnBeginHeadersForStream(1));
EXPECT_CALL(visitor, OnHeaderForStream(1, _, _)).Times(5);
EXPECT_CALL(visitor, OnHeaderForStream(1, "header2", _))
- .WillOnce(testing::Return(Http2VisitorInterface::HEADER_RST_STREAM));
+ .WillOnce(testing::Return(OnHeaderResult::HEADER_RST_STREAM));
// The CONTINUATION frame header and header fields are not processed.
int64_t result = adapter->ProcessBytes(frames);
@@ -6246,7 +6245,7 @@
EXPECT_CALL(visitor, OnHeaderForStream(1, ":authority", "example.com"));
EXPECT_CALL(visitor, OnHeaderForStream(1, ":path", "/this/is/request/one"));
EXPECT_CALL(visitor, OnHeaderForStream(1, "accept", "some bogus value!"))
- .WillOnce(testing::Return(Http2VisitorInterface::HEADER_RST_STREAM));
+ .WillOnce(testing::Return(OnHeaderResult::HEADER_RST_STREAM));
// Stream WINDOW_UPDATE and DATA frames are not delivered to the visitor.
EXPECT_CALL(visitor, OnFrameHeader(0, 4, WINDOW_UPDATE, 0));
EXPECT_CALL(visitor, OnWindowUpdate(0, 2000));
@@ -6315,7 +6314,7 @@
EXPECT_CALL(visitor, OnBeginHeadersForStream(1));
EXPECT_CALL(visitor, OnHeaderForStream(1, _, _)).Times(4);
EXPECT_CALL(visitor, OnHeaderForStream(1, "accept", "some bogus value!"))
- .WillOnce(testing::Return(Http2VisitorInterface::HEADER_RST_STREAM));
+ .WillOnce(testing::Return(OnHeaderResult::HEADER_RST_STREAM));
// Frames for the RST_STREAM-marked stream are not delivered to the visitor.
// Note: nghttp2 still delivers control frames and metadata for the stream.
EXPECT_CALL(visitor, OnFrameHeader(0, 4, WINDOW_UPDATE, 0));
diff --git a/quiche/http2/adapter/oghttp2_session.cc b/quiche/http2/adapter/oghttp2_session.cc
index 442a4d6..6d9bb13 100644
--- a/quiche/http2/adapter/oghttp2_session.cc
+++ b/quiche/http2/adapter/oghttp2_session.cc
@@ -29,6 +29,7 @@
using ConnectionError = Http2VisitorInterface::ConnectionError;
using DataFrameHeaderInfo = Http2VisitorInterface::DataFrameHeaderInfo;
+using OnHeaderResult = ::http2::adapter::Http2VisitorInterface::OnHeaderResult;
using SpdyFramerError = Http2DecoderAdapter::SpdyFramerError;
using ::spdy::SpdySettingsIR;
@@ -226,23 +227,22 @@
if (!status) {
QUICHE_VLOG(1)
<< "Visitor rejected header block, returning HEADER_CONNECTION_ERROR";
- SetResult(Http2VisitorInterface::HEADER_CONNECTION_ERROR);
+ SetResult(OnHeaderResult::HEADER_CONNECTION_ERROR);
}
validator_->StartHeaderBlock();
}
-Http2VisitorInterface::OnHeaderResult InterpretHeaderStatus(
- HeaderValidator::HeaderStatus status) {
+OnHeaderResult InterpretHeaderStatus(HeaderValidator::HeaderStatus status) {
switch (status) {
case HeaderValidator::HEADER_OK:
case HeaderValidator::HEADER_SKIP:
- return Http2VisitorInterface::HEADER_OK;
+ return OnHeaderResult::HEADER_OK;
case HeaderValidator::HEADER_FIELD_INVALID:
- return Http2VisitorInterface::HEADER_FIELD_INVALID;
+ return OnHeaderResult::HEADER_FIELD_INVALID;
case HeaderValidator::HEADER_FIELD_TOO_LONG:
- return Http2VisitorInterface::HEADER_RST_STREAM;
+ return OnHeaderResult::HEADER_RST_STREAM;
}
- return Http2VisitorInterface::HEADER_CONNECTION_ERROR;
+ return OnHeaderResult::HEADER_CONNECTION_ERROR;
}
void OgHttp2Session::PassthroughHeadersHandler::OnHeader(
@@ -262,7 +262,7 @@
SetResult(InterpretHeaderStatus(validation_result));
return;
}
- const Http2VisitorInterface::OnHeaderResult result =
+ const OnHeaderResult result =
visitor_.OnHeaderForStream(stream_id_, key, value);
SetResult(result);
}
@@ -277,13 +277,13 @@
if (!validator_->FinishHeaderBlock(type_)) {
QUICHE_VLOG(1) << "FinishHeaderBlock returned false; returning "
<< "HEADER_HTTP_MESSAGING";
- SetResult(Http2VisitorInterface::HEADER_HTTP_MESSAGING);
+ SetResult(OnHeaderResult::HEADER_HTTP_MESSAGING);
return;
}
if (frame_contains_fin_ && IsResponse(type_) &&
StatusIs1xx(status_header())) {
QUICHE_VLOG(1) << "Unexpected end of stream without final headers";
- SetResult(Http2VisitorInterface::HEADER_HTTP_MESSAGING);
+ SetResult(OnHeaderResult::HEADER_HTTP_MESSAGING);
return;
}
const bool result = visitor_.OnEndHeadersForStream(stream_id_);
@@ -313,8 +313,8 @@
}
void OgHttp2Session::PassthroughHeadersHandler::SetResult(
- Http2VisitorInterface::OnHeaderResult result) {
- if (result != Http2VisitorInterface::HEADER_OK) {
+ OnHeaderResult result) {
+ if (result != OnHeaderResult::HEADER_OK) {
error_encountered_ = true;
session_.OnHeaderStatus(stream_id_, result);
}
@@ -1641,24 +1641,24 @@
}
}
-void OgHttp2Session::OnHeaderStatus(
- Http2StreamId stream_id, Http2VisitorInterface::OnHeaderResult result) {
- QUICHE_DCHECK_NE(result, Http2VisitorInterface::HEADER_OK);
+void OgHttp2Session::OnHeaderStatus(Http2StreamId stream_id,
+ OnHeaderResult result) {
+ QUICHE_DCHECK(result != OnHeaderResult::HEADER_OK);
QUICHE_VLOG(1) << "OnHeaderStatus(stream_id=" << stream_id
- << ", result=" << result << ")";
+ << ", result=" << static_cast<int>(result) << ")";
const bool should_reset_stream =
- result == Http2VisitorInterface::HEADER_RST_STREAM ||
- result == Http2VisitorInterface::HEADER_FIELD_INVALID ||
- result == Http2VisitorInterface::HEADER_HTTP_MESSAGING;
+ result == OnHeaderResult::HEADER_RST_STREAM ||
+ result == OnHeaderResult::HEADER_FIELD_INVALID ||
+ result == OnHeaderResult::HEADER_HTTP_MESSAGING;
if (should_reset_stream) {
const Http2ErrorCode error_code =
- (result == Http2VisitorInterface::HEADER_RST_STREAM)
+ (result == OnHeaderResult::HEADER_RST_STREAM)
? Http2ErrorCode::INTERNAL_ERROR
: Http2ErrorCode::PROTOCOL_ERROR;
const spdy::SpdyErrorCode spdy_error_code = TranslateErrorCode(error_code);
const Http2VisitorInterface::InvalidFrameError frame_error =
- (result == Http2VisitorInterface::HEADER_RST_STREAM ||
- result == Http2VisitorInterface::HEADER_FIELD_INVALID)
+ (result == OnHeaderResult::HEADER_RST_STREAM ||
+ result == OnHeaderResult::HEADER_FIELD_INVALID)
? Http2VisitorInterface::InvalidFrameError::kHttpHeader
: Http2VisitorInterface::InvalidFrameError::kHttpMessaging;
auto it = streams_reset_.find(stream_id);
@@ -1666,8 +1666,8 @@
EnqueueFrame(
std::make_unique<spdy::SpdyRstStreamIR>(stream_id, spdy_error_code));
- if (result == Http2VisitorInterface::HEADER_FIELD_INVALID ||
- result == Http2VisitorInterface::HEADER_HTTP_MESSAGING) {
+ if (result == OnHeaderResult::HEADER_FIELD_INVALID ||
+ result == OnHeaderResult::HEADER_HTTP_MESSAGING) {
const bool ok = visitor_.OnInvalidFrame(stream_id, frame_error);
if (!ok) {
fatal_visitor_callback_failure_ = true;
@@ -1675,11 +1675,11 @@
}
}
}
- } else if (result == Http2VisitorInterface::HEADER_CONNECTION_ERROR) {
+ } else if (result == OnHeaderResult::HEADER_CONNECTION_ERROR) {
fatal_visitor_callback_failure_ = true;
LatchErrorAndNotify(Http2ErrorCode::INTERNAL_ERROR,
ConnectionError::kHeaderError);
- } else if (result == Http2VisitorInterface::HEADER_COMPRESSION_ERROR) {
+ } else if (result == OnHeaderResult::HEADER_COMPRESSION_ERROR) {
LatchErrorAndNotify(Http2ErrorCode::COMPRESSION_ERROR,
ConnectionError::kHeaderError);
}
diff --git a/quiche/http2/adapter/recording_http2_visitor.cc b/quiche/http2/adapter/recording_http2_visitor.cc
index d1f37b5..a33ce36 100644
--- a/quiche/http2/adapter/recording_http2_visitor.cc
+++ b/quiche/http2/adapter/recording_http2_visitor.cc
@@ -8,6 +8,8 @@
namespace adapter {
namespace test {
+using OnHeaderResult = ::http2::adapter::Http2VisitorInterface::OnHeaderResult;
+
int64_t RecordingHttp2Visitor::OnReadyToSend(absl::string_view serialized) {
events_.push_back(absl::StrFormat("OnReadyToSend %d", serialized.size()));
return serialized.size();
@@ -64,11 +66,11 @@
return true;
}
-Http2VisitorInterface::OnHeaderResult RecordingHttp2Visitor::OnHeaderForStream(
+OnHeaderResult RecordingHttp2Visitor::OnHeaderForStream(
Http2StreamId stream_id, absl::string_view name, absl::string_view value) {
events_.push_back(
absl::StrFormat("OnHeaderForStream %d %s %s", stream_id, name, value));
- return HEADER_OK;
+ return OnHeaderResult::HEADER_OK;
}
bool RecordingHttp2Visitor::OnEndHeadersForStream(Http2StreamId stream_id) {