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) {