Remove Http2DecoderAdapter::Reset() and ResetInternal().
These methods were only called in tests and the Http2DecoderAdapter
constructor. This CL removes the test calls, instead replacing them with
std::unique_ptr re-creation where needed, and inlines the body of
ResetInternal() into the Http2DecoderAdapter constructor.
PiperOrigin-RevId: 434591645
diff --git a/spdy/core/http2_frame_decoder_adapter.cc b/spdy/core/http2_frame_decoder_adapter.cc
index 320befa..e79234f 100644
--- a/spdy/core/http2_frame_decoder_adapter.cc
+++ b/spdy/core/http2_frame_decoder_adapter.cc
@@ -244,7 +244,22 @@
Http2DecoderAdapter::Http2DecoderAdapter() {
QUICHE_DVLOG(1) << "Http2DecoderAdapter ctor";
- ResetInternal();
+
+ set_spdy_state(SpdyState::SPDY_READY_FOR_FRAME);
+ spdy_framer_error_ = SpdyFramerError::SPDY_NO_ERROR;
+
+ decoded_frame_header_ = false;
+ has_frame_header_ = false;
+ on_headers_called_ = false;
+ on_hpack_fragment_called_ = false;
+ latched_probable_http_response_ = false;
+ has_expected_frame_type_ = false;
+
+ CorruptFrameHeader(&frame_header_);
+ CorruptFrameHeader(&hpack_first_frame_header_);
+
+ frame_decoder_ = std::make_unique<Http2FrameDecoder>(this);
+ hpack_decoder_ = nullptr;
}
Http2DecoderAdapter::~Http2DecoderAdapter() = default;
@@ -287,10 +302,6 @@
return total_processed;
}
-void Http2DecoderAdapter::Reset() {
- ResetInternal();
-}
-
Http2DecoderAdapter::SpdyState Http2DecoderAdapter::state() const {
return spdy_state_;
}
@@ -889,26 +900,6 @@
set_spdy_state(SpdyState::SPDY_READY_FOR_FRAME);
}
-// ResetInternal is called from the constructor, and during tests, but not
-// otherwise (i.e. not between every frame).
-void Http2DecoderAdapter::ResetInternal() {
- set_spdy_state(SpdyState::SPDY_READY_FOR_FRAME);
- spdy_framer_error_ = SpdyFramerError::SPDY_NO_ERROR;
-
- decoded_frame_header_ = false;
- has_frame_header_ = false;
- on_headers_called_ = false;
- on_hpack_fragment_called_ = false;
- latched_probable_http_response_ = false;
- has_expected_frame_type_ = false;
-
- CorruptFrameHeader(&frame_header_);
- CorruptFrameHeader(&hpack_first_frame_header_);
-
- frame_decoder_ = std::make_unique<Http2FrameDecoder>(this);
- hpack_decoder_ = nullptr;
-}
-
void Http2DecoderAdapter::set_spdy_state(SpdyState v) {
QUICHE_DVLOG(2) << "set_spdy_state(" << StateToString(v) << ")";
spdy_state_ = v;
diff --git a/spdy/core/http2_frame_decoder_adapter.h b/spdy/core/http2_frame_decoder_adapter.h
index 259924c..3ed18f2 100644
--- a/spdy/core/http2_frame_decoder_adapter.h
+++ b/spdy/core/http2_frame_decoder_adapter.h
@@ -103,6 +103,9 @@
Http2DecoderAdapter();
~Http2DecoderAdapter() override;
+ Http2DecoderAdapter(const Http2DecoderAdapter&) = delete;
+ Http2DecoderAdapter& operator=(const Http2DecoderAdapter&) = delete;
+
// Set callbacks to be called from the framer. A visitor must be set, or
// else the framer will likely crash. It is acceptable for the visitor
// to do nothing. If this is called multiple times, only the last visitor
@@ -137,9 +140,6 @@
// is guaranteed to be called exactly once, with the entire payload or field.
size_t ProcessInput(const char* data, size_t len);
- // Reset the decoder (used just for tests at this time).
- void Reset();
-
// Current state of the decoder.
SpdyState state() const;
@@ -224,10 +224,6 @@
void DetermineSpdyState(DecodeStatus status);
void ResetBetweenFrames();
- // ResetInternal is called from the constructor, and during tests, but not
- // otherwise (i.e. not between every frame).
- void ResetInternal();
-
void set_spdy_state(SpdyState v);
void SetSpdyErrorAndNotify(SpdyFramerError error, std::string detailed_error);
@@ -296,8 +292,7 @@
// clearing if the adapter is to be used for another connection.
std::unique_ptr<spdy::HpackDecoderAdapter> hpack_decoder_ = nullptr;
- // The HTTP/2 frame decoder. Accessed via a unique_ptr to allow replacement
- // (e.g. in tests) when Reset() is called.
+ // The HTTP/2 frame decoder.
std::unique_ptr<Http2FrameDecoder> frame_decoder_;
// Next frame type expected. Currently only used for CONTINUATION frames,
diff --git a/spdy/core/spdy_framer_test.cc b/spdy/core/spdy_framer_test.cc
index 1b20d9b..80e6256 100644
--- a/spdy/core/spdy_framer_test.cc
+++ b/spdy/core/spdy_framer_test.cc
@@ -18,6 +18,7 @@
#include "common/platform/api/quiche_test.h"
#include "common/quiche_text_utils.h"
#include "spdy/core/array_output_buffer.h"
+#include "spdy/core/http2_frame_decoder_adapter.h"
#include "spdy/core/mock_spdy_framer_visitor.h"
#include "spdy/core/recording_headers_handler.h"
#include "spdy/core/spdy_bitmasks.h"
@@ -591,7 +592,8 @@
public:
SpdyFramerTest()
: output_(output_buffer, kSize),
- framer_(SpdyFramer::ENABLE_COMPRESSION) {}
+ framer_(SpdyFramer::ENABLE_COMPRESSION),
+ deframer_(absl::make_unique<Http2DecoderAdapter>()) {}
protected:
void SetUp() override {
@@ -620,7 +622,7 @@
bool use_output_ = false;
ArrayOutputBuffer output_;
SpdyFramer framer_;
- Http2DecoderAdapter deframer_;
+ std::unique_ptr<Http2DecoderAdapter> deframer_;
};
INSTANTIATE_TEST_SUITE_P(SpdyFramerTests,
@@ -697,7 +699,7 @@
// max size, we do not set an error in ProcessInput.
TEST_P(SpdyFramerTest, AcceptMaxFrameSizeSetting) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
// DATA frame with maximum allowed payload length.
unsigned char kH2FrameData[] = {
@@ -714,15 +716,15 @@
EXPECT_CALL(visitor, OnCommonHeader(1, 16384, 0x0, 0x0));
EXPECT_CALL(visitor, OnDataFrameHeader(1, 1 << 14, false));
EXPECT_CALL(visitor, OnStreamFrameData(1, _, 4));
- deframer_.ProcessInput(frame.data(), frame.size());
- EXPECT_FALSE(deframer_.HasError());
+ deframer_->ProcessInput(frame.data(), frame.size());
+ EXPECT_FALSE(deframer_->HasError());
}
// Test that if we receive a frame with a payload length larger than the default
// max size, we set an error of SPDY_INVALID_CONTROL_FRAME_SIZE.
TEST_P(SpdyFramerTest, ExceedMaxFrameSizeSetting) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
// DATA frame with too large payload length.
unsigned char kH2FrameData[] = {
@@ -738,22 +740,22 @@
EXPECT_CALL(visitor, OnCommonHeader(1, 16385, 0x0, 0x0));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_OVERSIZED_PAYLOAD, _));
- deframer_.ProcessInput(frame.data(), frame.size());
- EXPECT_TRUE(deframer_.HasError());
+ deframer_->ProcessInput(frame.data(), frame.size());
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_OVERSIZED_PAYLOAD,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we set a larger max frame size and then receive a frame with a
// payload length at that larger size, we do not set an error in ProcessInput.
TEST_P(SpdyFramerTest, AcceptLargerMaxFrameSizeSetting) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
const size_t big_frame_size = (1 << 14) + 1;
- deframer_.SetMaxFrameSize(big_frame_size);
+ deframer_->SetMaxFrameSize(big_frame_size);
// DATA frame with larger-than-default but acceptable payload length.
unsigned char kH2FrameData[] = {
@@ -770,15 +772,15 @@
EXPECT_CALL(visitor, OnCommonHeader(1, big_frame_size, 0x0, 0x0));
EXPECT_CALL(visitor, OnDataFrameHeader(1, big_frame_size, false));
EXPECT_CALL(visitor, OnStreamFrameData(1, _, 4));
- deframer_.ProcessInput(frame.data(), frame.size());
- EXPECT_FALSE(deframer_.HasError());
+ deframer_->ProcessInput(frame.data(), frame.size());
+ EXPECT_FALSE(deframer_->HasError());
}
// Test that if we receive a DATA frame with padding length larger than the
// payload length, we set an error of SPDY_INVALID_PADDING
TEST_P(SpdyFramerTest, OversizedDataPaddingError) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
// DATA frame with invalid padding length.
// |kH2FrameData| has to be |unsigned char|, because Chromium on Windows uses
@@ -803,12 +805,12 @@
EXPECT_CALL(visitor, OnStreamPadding(1, 1));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_INVALID_PADDING, _));
}
- EXPECT_GT(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_TRUE(deframer_.HasError());
+ EXPECT_GT(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_PADDING,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we receive a DATA frame with padding length not larger than the
@@ -816,7 +818,7 @@
TEST_P(SpdyFramerTest, CorrectlySizedDataPaddingNoError) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
// DATA frame with valid Padding length
char kH2FrameData[] = {
@@ -841,11 +843,11 @@
EXPECT_CALL(visitor, OnStreamPadding(1, 4));
}
- EXPECT_EQ(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_FALSE(deframer_.HasError());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ EXPECT_EQ(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_FALSE(deframer_->HasError());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we receive a HEADERS frame with padding length larger than the
@@ -853,7 +855,7 @@
TEST_P(SpdyFramerTest, OversizedHeadersPaddingError) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
// HEADERS frame with invalid padding length.
// |kH2FrameData| has to be |unsigned char|, because Chromium on Windows uses
@@ -875,12 +877,12 @@
EXPECT_CALL(visitor, OnHeaders(1, false, 0, 0, false, false, false));
EXPECT_CALL(visitor, OnHeaderFrameStart(1)).Times(1);
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_INVALID_PADDING, _));
- EXPECT_EQ(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_TRUE(deframer_.HasError());
+ EXPECT_EQ(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_PADDING,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we receive a HEADERS frame with padding length not larger
@@ -888,7 +890,7 @@
TEST_P(SpdyFramerTest, CorrectlySizedHeadersPaddingNoError) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
// HEADERS frame with invalid Padding length
char kH2FrameData[] = {
@@ -906,11 +908,11 @@
EXPECT_CALL(visitor, OnHeaders(1, false, 0, 0, false, false, false));
EXPECT_CALL(visitor, OnHeaderFrameStart(1)).Times(1);
- EXPECT_EQ(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_FALSE(deframer_.HasError());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ EXPECT_EQ(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_FALSE(deframer_->HasError());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we receive a DATA with stream ID zero, we signal an error
@@ -918,7 +920,7 @@
TEST_P(SpdyFramerTest, DataWithStreamIdZero) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
const char bytes[] = "hello";
SpdyDataIR data_ir(/* stream_id = */ 0, bytes);
@@ -927,12 +929,12 @@
// We shouldn't have to read the whole frame before we signal an error.
EXPECT_CALL(visitor, OnCommonHeader(0, _, 0x0, _));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID, _));
- EXPECT_GT(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_TRUE(deframer_.HasError());
+ EXPECT_GT(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we receive a HEADERS with stream ID zero, we signal an error
@@ -940,7 +942,7 @@
TEST_P(SpdyFramerTest, HeadersWithStreamIdZero) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdyHeadersIR headers(/* stream_id = */ 0);
headers.SetHeader("alpha", "beta");
@@ -950,12 +952,12 @@
// We shouldn't have to read the whole frame before we signal an error.
EXPECT_CALL(visitor, OnCommonHeader(0, _, 0x1, _));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID, _));
- EXPECT_GT(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_TRUE(deframer_.HasError());
+ EXPECT_GT(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we receive a PRIORITY with stream ID zero, we signal an error
@@ -963,7 +965,7 @@
TEST_P(SpdyFramerTest, PriorityWithStreamIdZero) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdyPriorityIR priority_ir(/* stream_id = */ 0,
/* parent_stream_id = */ 1,
@@ -978,12 +980,12 @@
// We shouldn't have to read the whole frame before we signal an error.
EXPECT_CALL(visitor, OnCommonHeader(0, _, 0x2, _));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID, _));
- EXPECT_GT(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_TRUE(deframer_.HasError());
+ EXPECT_GT(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we receive a RST_STREAM with stream ID zero, we signal an error
@@ -991,7 +993,7 @@
TEST_P(SpdyFramerTest, RstStreamWithStreamIdZero) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdyRstStreamIR rst_stream_ir(/* stream_id = */ 0, ERROR_CODE_PROTOCOL_ERROR);
SpdySerializedFrame frame(framer_.SerializeRstStream(rst_stream_ir));
@@ -1003,12 +1005,12 @@
// We shouldn't have to read the whole frame before we signal an error.
EXPECT_CALL(visitor, OnCommonHeader(0, _, 0x3, _));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID, _));
- EXPECT_GT(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_TRUE(deframer_.HasError());
+ EXPECT_GT(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we receive a SETTINGS with stream ID other than zero,
@@ -1016,7 +1018,7 @@
TEST_P(SpdyFramerTest, SettingsWithStreamIdNotZero) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
// Settings frame with invalid StreamID of 0x01
char kH2FrameData[] = {
@@ -1033,12 +1035,12 @@
// We shouldn't have to read the whole frame before we signal an error.
EXPECT_CALL(visitor, OnCommonHeader(1, 6, 0x4, 0x0));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID, _));
- EXPECT_GT(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_TRUE(deframer_.HasError());
+ EXPECT_GT(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we receive a GOAWAY with stream ID other than zero,
@@ -1046,7 +1048,7 @@
TEST_P(SpdyFramerTest, GoawayWithStreamIdNotZero) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
// GOAWAY frame with invalid StreamID of 0x01
char kH2FrameData[] = {
@@ -1064,12 +1066,12 @@
// We shouldn't have to read the whole frame before we signal an error.
EXPECT_CALL(visitor, OnCommonHeader(1, 10, 0x7, 0x0));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID, _));
- EXPECT_GT(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_TRUE(deframer_.HasError());
+ EXPECT_GT(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we receive a CONTINUATION with stream ID zero, we signal
@@ -1077,7 +1079,7 @@
TEST_P(SpdyFramerTest, ContinuationWithStreamIdZero) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdyContinuationIR continuation(/* stream_id = */ 0);
std::string some_nonsense_encoding = "some nonsense encoding";
@@ -1092,12 +1094,12 @@
// We shouldn't have to read the whole frame before we signal an error.
EXPECT_CALL(visitor, OnCommonHeader(0, _, 0x9, _));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID, _));
- EXPECT_GT(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_TRUE(deframer_.HasError());
+ EXPECT_GT(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we receive a PUSH_PROMISE with stream ID zero, we signal
@@ -1105,7 +1107,7 @@
TEST_P(SpdyFramerTest, PushPromiseWithStreamIdZero) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdyPushPromiseIR push_promise(/* stream_id = */ 0,
/* promised_stream_id = */ 4);
@@ -1116,12 +1118,12 @@
// We shouldn't have to read the whole frame before we signal an error.
EXPECT_CALL(visitor, OnCommonHeader(0, _, 0x5, _));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID, _));
- EXPECT_GT(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_TRUE(deframer_.HasError());
+ EXPECT_GT(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test that if we receive a PUSH_PROMISE with promised stream ID zero, we
@@ -1129,7 +1131,7 @@
TEST_P(SpdyFramerTest, PushPromiseWithPromisedStreamIdZero) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdyPushPromiseIR push_promise(/* stream_id = */ 3,
/* promised_stream_id = */ 0);
@@ -1140,12 +1142,12 @@
EXPECT_CALL(visitor, OnCommonHeader(3, _, 0x5, _));
EXPECT_CALL(visitor,
OnError(Http2DecoderAdapter::SPDY_INVALID_CONTROL_FRAME, _));
- deframer_.ProcessInput(frame.data(), frame.size());
- EXPECT_TRUE(deframer_.HasError());
+ deframer_->ProcessInput(frame.data(), frame.size());
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_CONTROL_FRAME,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
TEST_P(SpdyFramerTest, MultiValueHeader) {
@@ -1332,7 +1334,7 @@
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
testing::InSequence s;
EXPECT_CALL(visitor, OnCommonHeader(1, 1, 0x1, 0x4));
@@ -1348,15 +1350,15 @@
EXPECT_CALL(visitor, OnHeaderFrameEnd(3));
EXPECT_CALL(visitor, OnCommonHeader(3, 8, 0x0, 0x0));
EXPECT_CALL(visitor, OnDataFrameHeader(3, 8, false))
- .WillOnce(
- testing::InvokeWithoutArgs([this]() { deframer_.StopProcessing(); }));
+ .WillOnce(testing::InvokeWithoutArgs(
+ [this]() { deframer_->StopProcessing(); }));
// Remaining frames are not processed due to the error.
EXPECT_CALL(
visitor,
OnError(http2::Http2DecoderAdapter::SpdyFramerError::SPDY_STOP_PROCESSING,
"Ignoring further events on this connection."));
- size_t processed = deframer_.ProcessInput(
+ size_t processed = deframer_->ProcessInput(
reinterpret_cast<const char*>(kH2Input), sizeof(kH2Input));
EXPECT_LT(processed, sizeof(kH2Input));
}
@@ -2467,7 +2469,7 @@
TEST_P(SpdyFramerTest, SendUnexpectedContinuation) {
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
// frame-format off
char kH2FrameData[] = {
@@ -2495,12 +2497,12 @@
// We shouldn't have to read the whole frame before we signal an error.
EXPECT_CALL(visitor, OnCommonHeader(42, 18, 0x9, 0x4));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_UNEXPECTED_FRAME, _));
- EXPECT_GT(frame.size(), deframer_.ProcessInput(frame.data(), frame.size()));
- EXPECT_TRUE(deframer_.HasError());
+ EXPECT_GT(frame.size(), deframer_->ProcessInput(frame.data(), frame.size()));
+ EXPECT_TRUE(deframer_->HasError());
EXPECT_EQ(Http2DecoderAdapter::SPDY_UNEXPECTED_FRAME,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
TEST_P(SpdyFramerTest, CreatePushPromiseThenContinuationUncompressed) {
@@ -3309,7 +3311,7 @@
const char data_payload[] = "hello";
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdyDataIR data_ir(/* stream_id = */ 1, data_payload);
data_ir.set_padding_len(kPaddingLen);
@@ -3323,54 +3325,60 @@
EXPECT_CALL(visitor,
OnDataFrameHeader(1, kPaddingLen + strlen(data_payload), false));
QUICHE_CHECK_EQ(kDataFrameMinimumSize,
- deframer_.ProcessInput(frame.data(), kDataFrameMinimumSize));
- QUICHE_CHECK_EQ(deframer_.state(),
+ deframer_->ProcessInput(frame.data(), kDataFrameMinimumSize));
+ QUICHE_CHECK_EQ(deframer_->state(),
Http2DecoderAdapter::SPDY_READ_DATA_FRAME_PADDING_LENGTH);
- QUICHE_CHECK_EQ(deframer_.spdy_framer_error(),
+ QUICHE_CHECK_EQ(deframer_->spdy_framer_error(),
Http2DecoderAdapter::SPDY_NO_ERROR);
bytes_consumed += kDataFrameMinimumSize;
// Send the padding length field.
EXPECT_CALL(visitor, OnStreamPadLength(1, kPaddingLen - 1));
- QUICHE_CHECK_EQ(1u, deframer_.ProcessInput(frame.data() + bytes_consumed, 1));
- QUICHE_CHECK_EQ(deframer_.state(),
+ QUICHE_CHECK_EQ(1u,
+ deframer_->ProcessInput(frame.data() + bytes_consumed, 1));
+ QUICHE_CHECK_EQ(deframer_->state(),
Http2DecoderAdapter::SPDY_FORWARD_STREAM_FRAME);
- QUICHE_CHECK_EQ(deframer_.spdy_framer_error(),
+ QUICHE_CHECK_EQ(deframer_->spdy_framer_error(),
Http2DecoderAdapter::SPDY_NO_ERROR);
bytes_consumed += 1;
// Send the first two bytes of the data payload, i.e., "he".
EXPECT_CALL(visitor, OnStreamFrameData(1, _, 2));
- QUICHE_CHECK_EQ(2u, deframer_.ProcessInput(frame.data() + bytes_consumed, 2));
- QUICHE_CHECK_EQ(deframer_.state(),
+ QUICHE_CHECK_EQ(2u,
+ deframer_->ProcessInput(frame.data() + bytes_consumed, 2));
+ QUICHE_CHECK_EQ(deframer_->state(),
Http2DecoderAdapter::SPDY_FORWARD_STREAM_FRAME);
- QUICHE_CHECK_EQ(deframer_.spdy_framer_error(),
+ QUICHE_CHECK_EQ(deframer_->spdy_framer_error(),
Http2DecoderAdapter::SPDY_NO_ERROR);
bytes_consumed += 2;
// Send the rest three bytes of the data payload, i.e., "llo".
EXPECT_CALL(visitor, OnStreamFrameData(1, _, 3));
- QUICHE_CHECK_EQ(3u, deframer_.ProcessInput(frame.data() + bytes_consumed, 3));
- QUICHE_CHECK_EQ(deframer_.state(), Http2DecoderAdapter::SPDY_CONSUME_PADDING);
- QUICHE_CHECK_EQ(deframer_.spdy_framer_error(),
+ QUICHE_CHECK_EQ(3u,
+ deframer_->ProcessInput(frame.data() + bytes_consumed, 3));
+ QUICHE_CHECK_EQ(deframer_->state(),
+ Http2DecoderAdapter::SPDY_CONSUME_PADDING);
+ QUICHE_CHECK_EQ(deframer_->spdy_framer_error(),
Http2DecoderAdapter::SPDY_NO_ERROR);
bytes_consumed += 3;
// Send the first 100 bytes of the padding payload.
EXPECT_CALL(visitor, OnStreamPadding(1, 100));
QUICHE_CHECK_EQ(100u,
- deframer_.ProcessInput(frame.data() + bytes_consumed, 100));
- QUICHE_CHECK_EQ(deframer_.state(), Http2DecoderAdapter::SPDY_CONSUME_PADDING);
- QUICHE_CHECK_EQ(deframer_.spdy_framer_error(),
+ deframer_->ProcessInput(frame.data() + bytes_consumed, 100));
+ QUICHE_CHECK_EQ(deframer_->state(),
+ Http2DecoderAdapter::SPDY_CONSUME_PADDING);
+ QUICHE_CHECK_EQ(deframer_->spdy_framer_error(),
Http2DecoderAdapter::SPDY_NO_ERROR);
bytes_consumed += 100;
// Send rest of the padding payload.
EXPECT_CALL(visitor, OnStreamPadding(1, 18));
QUICHE_CHECK_EQ(18u,
- deframer_.ProcessInput(frame.data() + bytes_consumed, 18));
- QUICHE_CHECK_EQ(deframer_.state(), Http2DecoderAdapter::SPDY_READY_FOR_FRAME);
- QUICHE_CHECK_EQ(deframer_.spdy_framer_error(),
+ deframer_->ProcessInput(frame.data() + bytes_consumed, 18));
+ QUICHE_CHECK_EQ(deframer_->state(),
+ Http2DecoderAdapter::SPDY_READY_FOR_FRAME);
+ QUICHE_CHECK_EQ(deframer_->spdy_framer_error(),
Http2DecoderAdapter::SPDY_NO_ERROR);
}
@@ -3604,7 +3612,7 @@
TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
// Assume the unknown frame is allowed
visitor.on_unknown_frame_result_ = true;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
visitor.SimulateInFramer(kInput, sizeof(kInput));
EXPECT_EQ(1, visitor.error_count_);
@@ -3644,7 +3652,7 @@
TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
TestExtension extension;
visitor.set_extension_visitor(&extension);
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
visitor.SimulateInFramer(kInput, sizeof(kInput));
EXPECT_EQ(1, visitor.error_count_);
@@ -3680,7 +3688,7 @@
};
TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
visitor.SimulateInFramer(kInput, sizeof(kInput));
EXPECT_EQ(1, visitor.error_count_);
@@ -3706,7 +3714,7 @@
};
TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
visitor.SimulateInFramer(kInput, sizeof(kInput));
EXPECT_EQ(1, visitor.error_count_);
@@ -3738,7 +3746,7 @@
};
TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
visitor.SimulateInFramer(kInput, sizeof(kInput));
EXPECT_EQ(1, visitor.error_count_);
@@ -3774,7 +3782,7 @@
};
TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
visitor.SimulateInFramer(kInput, sizeof(kInput));
EXPECT_EQ(1, visitor.error_count_);
@@ -4008,7 +4016,7 @@
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdyDataIR data_ir(/* stream_id = */ 1, "hello");
SpdySerializedFrame frame(framer_.SerializeData(data_ir));
@@ -4033,27 +4041,27 @@
}
}
- deframer_.ProcessInput(frame.data(), frame.size());
+ deframer_->ProcessInput(frame.data(), frame.size());
if (flags & ~valid_data_flags) {
- EXPECT_EQ(Http2DecoderAdapter::SPDY_ERROR, deframer_.state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_ERROR, deframer_->state());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_DATA_FRAME_FLAGS,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
} else if (flags & DATA_FLAG_PADDED) {
- EXPECT_EQ(Http2DecoderAdapter::SPDY_ERROR, deframer_.state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_ERROR, deframer_->state());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_PADDING,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
} else {
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
- deframer_.Reset();
+ deframer_ = absl::make_unique<Http2DecoderAdapter>();
} while (++flags != 0);
}
@@ -4064,7 +4072,7 @@
<< "Flags " << std::hex << static_cast<int>(flags));
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdyRstStreamIR rst_stream(/* stream_id = */ 13, ERROR_CODE_CANCEL);
SpdySerializedFrame frame(framer_.SerializeRstStream(rst_stream));
@@ -4078,12 +4086,13 @@
EXPECT_CALL(visitor, OnCommonHeader(13, 4, 0x3, flags));
EXPECT_CALL(visitor, OnRstStream(13, ERROR_CODE_CANCEL));
- deframer_.ProcessInput(frame.data(), frame.size());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ deframer_->ProcessInput(frame.data(), frame.size());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR,
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
- deframer_.Reset();
+ deframer_->spdy_framer_error());
+ deframer_ = absl::make_unique<Http2DecoderAdapter>();
} while (++flags != 0);
}
@@ -4094,7 +4103,7 @@
<< "Flags " << std::hex << static_cast<int>(flags));
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdySettingsIR settings_ir;
settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 16);
@@ -4115,22 +4124,22 @@
EXPECT_CALL(visitor, OnSettingsEnd());
}
- deframer_.ProcessInput(frame.data(), frame.size());
+ deframer_->ProcessInput(frame.data(), frame.size());
if (flags & SETTINGS_FLAG_ACK) {
// The frame is invalid because ACK frames should have no payload.
- EXPECT_EQ(Http2DecoderAdapter::SPDY_ERROR, deframer_.state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_ERROR, deframer_->state());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_CONTROL_FRAME_SIZE,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
} else {
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
- deframer_.Reset();
+ deframer_ = absl::make_unique<Http2DecoderAdapter>();
} while (++flags != 0);
}
@@ -4142,7 +4151,7 @@
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdyGoAwayIR goaway_ir(/* last_good_stream_id = */ 97, ERROR_CODE_NO_ERROR,
"test");
@@ -4159,12 +4168,13 @@
EXPECT_CALL(visitor, OnGoAwayFrameData)
.WillRepeatedly(testing::Return(true));
- deframer_.ProcessInput(frame.data(), frame.size());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ deframer_->ProcessInput(frame.data(), frame.size());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR,
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
- deframer_.Reset();
+ deframer_->spdy_framer_error());
+ deframer_ = absl::make_unique<Http2DecoderAdapter>();
} while (++flags != 0);
}
@@ -4225,7 +4235,6 @@
EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer.spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
deframer.spdy_framer_error());
- deframer.Reset();
} while (++flags != 0);
}
@@ -4236,7 +4245,7 @@
<< "Flags " << std::hex << static_cast<int>(flags));
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdySerializedFrame frame(framer_.SerializePing(SpdyPingIR(42)));
SetFrameFlags(&frame, flags);
@@ -4244,12 +4253,13 @@
EXPECT_CALL(visitor, OnCommonHeader(0, 8, 0x6, flags));
EXPECT_CALL(visitor, OnPing(42, flags & PING_FLAG_ACK));
- deframer_.ProcessInput(frame.data(), frame.size());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ deframer_->ProcessInput(frame.data(), frame.size());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR,
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
- deframer_.Reset();
+ deframer_->spdy_framer_error());
+ deframer_ = absl::make_unique<Http2DecoderAdapter>();
} while (++flags != 0);
}
@@ -4261,7 +4271,7 @@
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdySerializedFrame frame(framer_.SerializeWindowUpdate(
SpdyWindowUpdateIR(/* stream_id = */ 4, /* delta = */ 1024)));
@@ -4270,12 +4280,13 @@
EXPECT_CALL(visitor, OnCommonHeader(4, 4, 0x8, flags));
EXPECT_CALL(visitor, OnWindowUpdate(4, 1024));
- deframer_.ProcessInput(frame.data(), frame.size());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ deframer_->ProcessInput(frame.data(), frame.size());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR,
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
- deframer_.Reset();
+ deframer_->spdy_framer_error());
+ deframer_ = absl::make_unique<Http2DecoderAdapter>();
} while (++flags != 0);
}
@@ -4412,27 +4423,28 @@
};
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
EXPECT_CALL(visitor, OnCommonHeader(1, 4, 0x3, 0x0));
EXPECT_CALL(visitor, OnRstStream(1, ERROR_CODE_NO_ERROR));
- deframer_.ProcessInput(reinterpret_cast<const char*>(kH2RstStreamInvalid),
- ABSL_ARRAYSIZE(kH2RstStreamInvalid));
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ deframer_->ProcessInput(reinterpret_cast<const char*>(kH2RstStreamInvalid),
+ ABSL_ARRAYSIZE(kH2RstStreamInvalid));
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
- deframer_.Reset();
+ deframer_->spdy_framer_error());
+ deframer_ = absl::make_unique<Http2DecoderAdapter>();
+ deframer_->set_visitor(&visitor);
EXPECT_CALL(visitor, OnCommonHeader(1, 4, 0x3, 0x0));
EXPECT_CALL(visitor, OnRstStream(1, ERROR_CODE_INTERNAL_ERROR));
- deframer_.ProcessInput(
+ deframer_->ProcessInput(
reinterpret_cast<const char*>(kH2RstStreamNumStatusCodes),
ABSL_ARRAYSIZE(kH2RstStreamNumStatusCodes));
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Test handling of GOAWAY frames with out-of-bounds status code.
@@ -4447,17 +4459,17 @@
0x47, 0x41, // Description
};
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
EXPECT_CALL(visitor, OnCommonHeader(0, 10, 0x7, 0x0));
EXPECT_CALL(visitor, OnGoAway(1, ERROR_CODE_INTERNAL_ERROR));
EXPECT_CALL(visitor, OnGoAwayFrameData).WillRepeatedly(testing::Return(true));
- deframer_.ProcessInput(reinterpret_cast<const char*>(kH2FrameData),
- ABSL_ARRAYSIZE(kH2FrameData));
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ deframer_->ProcessInput(reinterpret_cast<const char*>(kH2FrameData),
+ ABSL_ARRAYSIZE(kH2FrameData));
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Tests handling of a GOAWAY frame with out-of-bounds stream ID.
@@ -4473,17 +4485,17 @@
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
EXPECT_CALL(visitor, OnCommonHeader(0, 8, 0x7, 0x0));
EXPECT_CALL(visitor, OnGoAway(0x7fffffff, ERROR_CODE_NO_ERROR));
EXPECT_CALL(visitor, OnGoAwayFrameData).WillRepeatedly(testing::Return(true));
- deframer_.ProcessInput(reinterpret_cast<const char*>(kH2FrameData),
- ABSL_ARRAYSIZE(kH2FrameData));
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ deframer_->ProcessInput(reinterpret_cast<const char*>(kH2FrameData),
+ ABSL_ARRAYSIZE(kH2FrameData));
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
TEST_P(SpdyFramerTest, OnAltSvcWithOrigin) {
@@ -4491,7 +4503,7 @@
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdyAltSvcWireFormat::AlternativeService altsvc1(
"pid1", "host", 443, 5, SpdyAltSvcWireFormat::VersionVector());
@@ -4514,12 +4526,12 @@
EXPECT_EQ(framer_.SerializeFrame(altsvc_ir, &output_), frame.size());
frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
}
- deframer_.ProcessInput(frame.data(), frame.size());
+ deframer_->ProcessInput(frame.data(), frame.size());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
TEST_P(SpdyFramerTest, OnAltSvcNoOrigin) {
@@ -4527,7 +4539,7 @@
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
SpdyAltSvcWireFormat::AlternativeService altsvc1(
"pid1", "host", 443, 5, SpdyAltSvcWireFormat::VersionVector());
@@ -4544,12 +4556,12 @@
altsvc_ir.add_altsvc(altsvc1);
altsvc_ir.add_altsvc(altsvc2);
SpdySerializedFrame frame(framer_.SerializeFrame(altsvc_ir));
- deframer_.ProcessInput(frame.data(), frame.size());
+ deframer_->ProcessInput(frame.data(), frame.size());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
TEST_P(SpdyFramerTest, OnAltSvcEmptyProtocolId) {
@@ -4557,7 +4569,7 @@
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
EXPECT_CALL(visitor, OnCommonHeader(kStreamId, _, 0x0A, 0x0));
EXPECT_CALL(visitor,
@@ -4575,13 +4587,13 @@
EXPECT_EQ(framer_.SerializeFrame(altsvc_ir, &output_), frame.size());
frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
}
- deframer_.ProcessInput(frame.data(), frame.size());
+ deframer_->ProcessInput(frame.data(), frame.size());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_ERROR, deframer_.state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_ERROR, deframer_->state());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_CONTROL_FRAME,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
TEST_P(SpdyFramerTest, OnAltSvcBadLengths) {
@@ -4593,7 +4605,7 @@
TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION);
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
visitor.SimulateInFramer(kFrameDataOriginLenLargerThanFrame,
sizeof(kFrameDataOriginLenLargerThanFrame));
@@ -4655,15 +4667,16 @@
SpdySerializedFrame frame(framer_.SerializeAltSvc(altsvc_ir));
TestSpdyVisitor visitor(SpdyFramer::ENABLE_COMPRESSION);
- deframer_.set_visitor(&visitor);
- deframer_.ProcessInput(frame.data(), frame.size());
+ deframer_->set_visitor(&visitor);
+ deframer_->ProcessInput(frame.data(), frame.size());
EXPECT_EQ(0, visitor.error_count_);
EXPECT_EQ(1, visitor.altsvc_count_);
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR,
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
}
@@ -4683,16 +4696,16 @@
};
TestSpdyVisitor visitor(SpdyFramer::ENABLE_COMPRESSION);
- deframer_.set_visitor(&visitor);
- deframer_.ProcessInput(kFrameData, sizeof(kFrameData));
+ deframer_->set_visitor(&visitor);
+ deframer_->ProcessInput(kFrameData, sizeof(kFrameData));
EXPECT_EQ(1, visitor.error_count_);
EXPECT_EQ(0, visitor.altsvc_count_);
- EXPECT_EQ(Http2DecoderAdapter::SPDY_ERROR, deframer_.state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_ERROR, deframer_->state());
EXPECT_EQ(Http2DecoderAdapter::SPDY_INVALID_CONTROL_FRAME,
- deframer_.spdy_framer_error())
+ deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
TEST_P(SpdyFramerTest, ReadPriorityUpdateFrame) {
@@ -4706,12 +4719,12 @@
};
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
EXPECT_CALL(visitor, OnCommonHeader(0, 7, 0x10, 0x0));
EXPECT_CALL(visitor, OnPriorityUpdate(3, "foo"));
- deframer_.ProcessInput(kFrameData, sizeof(kFrameData));
- EXPECT_FALSE(deframer_.HasError());
+ deframer_->ProcessInput(kFrameData, sizeof(kFrameData));
+ EXPECT_FALSE(deframer_->HasError());
}
TEST_P(SpdyFramerTest, ReadPriorityUpdateFrameWithEmptyPriorityFieldValue) {
@@ -4724,12 +4737,12 @@
};
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
EXPECT_CALL(visitor, OnCommonHeader(0, 4, 0x10, 0x0));
EXPECT_CALL(visitor, OnPriorityUpdate(3, ""));
- deframer_.ProcessInput(kFrameData, sizeof(kFrameData));
- EXPECT_FALSE(deframer_.HasError());
+ deframer_->ProcessInput(kFrameData, sizeof(kFrameData));
+ EXPECT_FALSE(deframer_->HasError());
}
TEST_P(SpdyFramerTest, PriorityUpdateFrameWithEmptyPayload) {
@@ -4741,13 +4754,13 @@
};
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
EXPECT_CALL(visitor, OnCommonHeader(0, 0, 0x10, 0x0));
EXPECT_CALL(visitor,
OnError(Http2DecoderAdapter::SPDY_INVALID_CONTROL_FRAME_SIZE, _));
- deframer_.ProcessInput(kFrameData, sizeof(kFrameData));
- EXPECT_TRUE(deframer_.HasError());
+ deframer_->ProcessInput(kFrameData, sizeof(kFrameData));
+ EXPECT_TRUE(deframer_->HasError());
}
TEST_P(SpdyFramerTest, PriorityUpdateFrameWithShortPayload) {
@@ -4761,13 +4774,13 @@
};
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
EXPECT_CALL(visitor, OnCommonHeader(0, 2, 0x10, 0x0));
EXPECT_CALL(visitor,
OnError(Http2DecoderAdapter::SPDY_INVALID_CONTROL_FRAME_SIZE, _));
- deframer_.ProcessInput(kFrameData, sizeof(kFrameData));
- EXPECT_TRUE(deframer_.HasError());
+ deframer_->ProcessInput(kFrameData, sizeof(kFrameData));
+ EXPECT_TRUE(deframer_->HasError());
}
TEST_P(SpdyFramerTest, PriorityUpdateFrameOnIncorrectStream) {
@@ -4780,12 +4793,12 @@
};
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
EXPECT_CALL(visitor, OnCommonHeader(1, 4, 0x10, 0x0));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID, _));
- deframer_.ProcessInput(kFrameData, sizeof(kFrameData));
- EXPECT_TRUE(deframer_.HasError());
+ deframer_->ProcessInput(kFrameData, sizeof(kFrameData));
+ EXPECT_TRUE(deframer_->HasError());
}
TEST_P(SpdyFramerTest, PriorityUpdateFramePrioritizingIncorrectStream) {
@@ -4798,12 +4811,12 @@
};
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
EXPECT_CALL(visitor, OnCommonHeader(0, 4, 0x10, 0x0));
EXPECT_CALL(visitor, OnError(Http2DecoderAdapter::SPDY_INVALID_STREAM_ID, _));
- deframer_.ProcessInput(kFrameData, sizeof(kFrameData));
- EXPECT_TRUE(deframer_.HasError());
+ deframer_->ProcessInput(kFrameData, sizeof(kFrameData));
+ EXPECT_TRUE(deframer_->HasError());
}
// Tests handling of PRIORITY frames.
@@ -4819,15 +4832,15 @@
frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
}
testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
- deframer_.set_visitor(&visitor);
+ deframer_->set_visitor(&visitor);
EXPECT_CALL(visitor, OnCommonHeader(3, 5, 0x2, 0x0));
EXPECT_CALL(visitor, OnPriority(3, 1, 256, false));
- deframer_.ProcessInput(frame.data(), frame.size());
+ deframer_->ProcessInput(frame.data(), frame.size());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
- EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_.spdy_framer_error())
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_NO_ERROR, deframer_->spdy_framer_error())
<< Http2DecoderAdapter::SpdyFramerErrorToString(
- deframer_.spdy_framer_error());
+ deframer_->spdy_framer_error());
}
// Tests handling of PRIORITY frame with incorrect size.
@@ -4940,7 +4953,7 @@
TEST_P(SpdyFramerTest, ProcessAllInput) {
auto visitor =
std::make_unique<TestSpdyVisitor>(SpdyFramer::DISABLE_COMPRESSION);
- deframer_.set_visitor(visitor.get());
+ deframer_->set_visitor(visitor.get());
// Create two input frames.
SpdyHeadersIR headers(/* stream_id = */ 1);
@@ -4974,9 +4987,9 @@
QUICHE_VLOG(1) << "buf_size = " << buf_size;
- size_t processed = deframer_.ProcessInput(buf, buf_size);
+ size_t processed = deframer_->ProcessInput(buf, buf_size);
EXPECT_EQ(buf_size, processed);
- EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_.state());
+ EXPECT_EQ(Http2DecoderAdapter::SPDY_READY_FOR_FRAME, deframer_->state());
EXPECT_EQ(1, visitor->headers_frame_count_);
EXPECT_EQ(1, visitor->data_frame_count_);
EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_));