Makes the Http2Adapter destructor public.

Also adds want_read() and want_write() methods to Http2Adapter.

PiperOrigin-RevId: 398562105
diff --git a/http2/adapter/http2_adapter.h b/http2/adapter/http2_adapter.h
index 5d20f20..8c231d1 100644
--- a/http2/adapter/http2_adapter.h
+++ b/http2/adapter/http2_adapter.h
@@ -26,8 +26,13 @@
   Http2Adapter(const Http2Adapter&) = delete;
   Http2Adapter& operator=(const Http2Adapter&) = delete;
 
+  virtual ~Http2Adapter() {}
+
   virtual bool IsServerSession() const = 0;
 
+  virtual bool want_read() const = 0;
+  virtual bool want_write() const = 0;
+
   // Processes the incoming |bytes| as HTTP/2 and invokes callbacks on the
   // |visitor_| as appropriate.
   virtual int64_t ProcessBytes(absl::string_view bytes) = 0;
@@ -144,7 +149,6 @@
   // Subclasses should expose a public factory method for constructing and
   // initializing (via Initialize()) adapter instances.
   explicit Http2Adapter(Http2VisitorInterface& visitor) : visitor_(visitor) {}
-  virtual ~Http2Adapter() {}
 
   // Accessors. Do not transfer ownership.
   Http2VisitorInterface& visitor() { return visitor_; }
diff --git a/http2/adapter/nghttp2_adapter.h b/http2/adapter/nghttp2_adapter.h
index 4617806..9078278 100644
--- a/http2/adapter/nghttp2_adapter.h
+++ b/http2/adapter/nghttp2_adapter.h
@@ -28,6 +28,8 @@
       Http2VisitorInterface& visitor, const nghttp2_option* options = nullptr);
 
   bool IsServerSession() const override;
+  bool want_read() const override { return session_->want_read(); }
+  bool want_write() const override { return session_->want_write(); }
 
   int64_t ProcessBytes(absl::string_view bytes) override;
   void SubmitSettings(absl::Span<const Http2Setting> settings) override;
@@ -86,10 +88,6 @@
 
   bool ResumeStream(Http2StreamId stream_id) override;
 
-  // TODO(b/181586191): Temporary accessor until equivalent functionality is
-  // available in this adapter class.
-  NgHttp2Session& session() { return *session_; }
-
  private:
   NgHttp2Adapter(Http2VisitorInterface& visitor, Perspective perspective,
                  const nghttp2_option* options);
diff --git a/http2/adapter/nghttp2_adapter_test.cc b/http2/adapter/nghttp2_adapter_test.cc
index d473fc9..a61c55c 100644
--- a/http2/adapter/nghttp2_adapter_test.cc
+++ b/http2/adapter/nghttp2_adapter_test.cc
@@ -50,8 +50,8 @@
   testing::StrictMock<MockHttp2Visitor> visitor;
   auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
   ASSERT_NE(nullptr, adapter);
-  EXPECT_TRUE(adapter->session().want_read());
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_read());
+  EXPECT_FALSE(adapter->want_write());
   EXPECT_FALSE(adapter->IsServerSession());
 }
 
@@ -231,7 +231,7 @@
   EXPECT_EQ(0, adapter->GetHighestReceivedStreamId());
 
   // Even though the client recieved a GOAWAY, streams 1 and 5 are still active.
-  EXPECT_TRUE(adapter->session().want_read());
+  EXPECT_TRUE(adapter->want_read());
 
   EXPECT_CALL(visitor, OnFrameHeader(1, 0, DATA, 1));
   EXPECT_CALL(visitor, OnBeginDataForStream(1, 0));
@@ -250,10 +250,10 @@
 
   // After receiving END_STREAM for 1 and RST_STREAM for 5, the session no
   // longer expects reads.
-  EXPECT_FALSE(adapter->session().want_read());
+  EXPECT_FALSE(adapter->want_read());
 
   // Client will not have anything else to write.
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), testing::IsEmpty());
@@ -329,7 +329,7 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
@@ -409,7 +409,7 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
@@ -483,8 +483,8 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
 
-  EXPECT_TRUE(adapter->session().want_write());
-  EXPECT_TRUE(adapter->session().want_read());  // Even after an error. Why?
+  EXPECT_TRUE(adapter->want_write());
+  EXPECT_TRUE(adapter->want_read());  // Even after an error. Why?
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
@@ -567,7 +567,7 @@
   EXPECT_CALL(visitor, OnFrameSent(RST_STREAM, stream_id1, 4, 0x0, 1));
   EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::PROTOCOL_ERROR));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS,
@@ -642,7 +642,7 @@
                           static_cast<int>(Http2ErrorCode::REFUSED_STREAM)));
   EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::REFUSED_STREAM));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS,
@@ -710,7 +710,7 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
@@ -773,7 +773,7 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
@@ -844,7 +844,7 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
@@ -872,7 +872,7 @@
   const int64_t initial_result = adapter->ProcessBytes(initial_frames);
   EXPECT_EQ(initial_frames.size(), initial_result);
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
@@ -883,7 +883,7 @@
   visitor.Clear();
 
   EXPECT_EQ(0, adapter->GetHpackEncoderDynamicTableSize());
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
   const char* kSentinel = "";
   const absl::string_view kBody = "This is an example request body.";
   auto body1 = absl::make_unique<TestDataFrameSource>(visitor, true);
@@ -896,7 +896,7 @@
                                         {":path", "/this/is/request/one"}}),
                              std::move(body1), const_cast<char*>(kSentinel));
   EXPECT_GT(stream_id, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, stream_id, _, 0x4));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, stream_id, _, 0x4, 0));
@@ -925,7 +925,7 @@
                                             spdy::SpdyFrameType::DATA}));
   EXPECT_THAT(visitor.data(), testing::HasSubstr(kBody));
   visitor.Clear();
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   stream_id =
       adapter->SubmitRequest(ToHeaders({{":method", "POST"},
@@ -934,7 +934,7 @@
                                         {":path", "/this/is/request/one"}}),
                              nullptr, nullptr);
   EXPECT_GT(stream_id, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   const char* kSentinel2 = "arbitrary pointer 2";
   EXPECT_EQ(nullptr, adapter->GetStreamUserData(stream_id));
   adapter->SetStreamUserData(stream_id, const_cast<char*>(kSentinel2));
@@ -978,7 +978,7 @@
   const int64_t initial_result = adapter->ProcessBytes(initial_frames);
   EXPECT_EQ(initial_frames.size(), initial_result);
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
@@ -988,7 +988,7 @@
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
   visitor.Clear();
 
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
   const absl::string_view kBody = "This is an example request body.";
   // This test will use TestDataSource as the source of the body payload data.
   TestDataSource body1{kBody};
@@ -1007,7 +1007,7 @@
                                         {":path", "/this/is/request/one"}}),
                              std::move(frame_source), nullptr);
   EXPECT_GT(stream_id, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, stream_id, _, 0x4));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, stream_id, _, 0x4, 0));
@@ -1018,7 +1018,7 @@
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::HEADERS,
                                             spdy::SpdyFrameType::DATA}));
   EXPECT_THAT(visitor.data(), testing::HasSubstr(kBody));
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 }
 
 // This test verifies how nghttp2 behaves when a data source becomes
@@ -1046,7 +1046,7 @@
                                         {":path", "/this/is/request/one"}}),
                              std::move(frame_source), nullptr);
   EXPECT_GT(stream_id, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, stream_id, _, 0x4));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, stream_id, _, 0x4, 0));
@@ -1060,23 +1060,23 @@
   serialized.remove_prefix(strlen(spdy::kHttp2ConnectionHeaderPrefix));
   EXPECT_THAT(serialized, EqualsFrames({spdy::SpdyFrameType::HEADERS}));
   visitor.Clear();
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   // Resume the deferred stream.
   body1.set_is_data_available(true);
   EXPECT_TRUE(adapter->ResumeStream(stream_id));
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnFrameSent(DATA, stream_id, _, 0x1, 0));
 
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::DATA}));
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   // Stream data is done, so this stream cannot be resumed.
   EXPECT_FALSE(adapter->ResumeStream(stream_id));
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 }
 
 // This test verifies how nghttp2 behaves when a data source is read block, then
@@ -1104,7 +1104,7 @@
                                         {":path", "/this/is/request/one"}}),
                              std::move(frame_source), nullptr);
   EXPECT_GT(stream_id, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, stream_id, _, 0x4));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, stream_id, _, 0x4, 0));
@@ -1118,23 +1118,23 @@
   serialized.remove_prefix(strlen(spdy::kHttp2ConnectionHeaderPrefix));
   EXPECT_THAT(serialized, EqualsFrames({spdy::SpdyFrameType::HEADERS}));
   visitor.Clear();
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   // Resume the deferred stream.
   body1.set_is_data_available(true);
   EXPECT_TRUE(adapter->ResumeStream(stream_id));
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnFrameSent(DATA, stream_id, 0, 0x1, 0));
 
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::DATA}));
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   // Stream data is done, so this stream cannot be resumed.
   EXPECT_FALSE(adapter->ResumeStream(stream_id));
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 }
 
 // This test verifies how nghttp2 behaves when a connection becomes
@@ -1161,13 +1161,13 @@
                                         {":path", "/this/is/request/one"}}),
                              std::move(frame_source), nullptr);
   EXPECT_GT(stream_id, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   visitor.set_is_write_blocked(true);
   int result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), testing::IsEmpty());
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, stream_id, _, 0x4));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, stream_id, _, 0x4, 0));
@@ -1184,7 +1184,7 @@
   serialized.remove_prefix(strlen(spdy::kHttp2ConnectionHeaderPrefix));
   EXPECT_THAT(serialized, EqualsFrames({spdy::SpdyFrameType::HEADERS,
                                         spdy::SpdyFrameType::DATA}));
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 }
 
 TEST(NgHttp2AdapterTest, SubmitMetadata) {
@@ -1194,7 +1194,7 @@
   auto source = absl::make_unique<TestMetadataSource>(ToHeaderBlock(ToHeaders(
       {{"query-cost", "is too darn high"}, {"secret-sauce", "hollandaise"}})));
   adapter->SubmitMetadata(1, 16384u, std::move(source));
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(kMetadataFrameType, 1, _, 0x4));
   EXPECT_CALL(visitor, OnFrameSent(kMetadataFrameType, 1, _, 0x4, 0));
@@ -1208,7 +1208,7 @@
   EXPECT_THAT(
       serialized,
       EqualsFrames({static_cast<spdy::SpdyFrameType>(kMetadataFrameType)}));
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 }
 
 TEST(NgHttp2AdapterTest, SubmitMetadataMultipleFrames) {
@@ -1219,7 +1219,7 @@
   auto source = absl::make_unique<TestMetadataSource>(
       ToHeaderBlock(ToHeaders({{"large-value", kLargeValue}})));
   adapter->SubmitMetadata(1, 16384u, std::move(source));
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   testing::InSequence seq;
   EXPECT_CALL(visitor, OnBeforeFrameSent(kMetadataFrameType, 1, _, 0x0));
@@ -1243,7 +1243,7 @@
                     static_cast<spdy::SpdyFrameType>(kMetadataFrameType),
                     static_cast<spdy::SpdyFrameType>(kMetadataFrameType),
                     static_cast<spdy::SpdyFrameType>(kMetadataFrameType)}));
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 }
 
 TEST(NgHttp2AdapterTest, SubmitConnectionMetadata) {
@@ -1253,7 +1253,7 @@
   auto source = absl::make_unique<TestMetadataSource>(ToHeaderBlock(ToHeaders(
       {{"query-cost", "is too darn high"}, {"secret-sauce", "hollandaise"}})));
   adapter->SubmitMetadata(0, 16384u, std::move(source));
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(kMetadataFrameType, 0, _, 0x4));
   EXPECT_CALL(visitor, OnFrameSent(kMetadataFrameType, 0, _, 0x4, 0));
@@ -1267,7 +1267,7 @@
   EXPECT_THAT(
       serialized,
       EqualsFrames({static_cast<spdy::SpdyFrameType>(kMetadataFrameType)}));
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 }
 
 TEST(NgHttp2AdapterTest, ClientObeysMaxConcurrentStreams) {
@@ -1295,7 +1295,7 @@
   const int64_t initial_result = adapter->ProcessBytes(initial_frames);
   EXPECT_EQ(initial_frames.size(), initial_result);
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
@@ -1305,7 +1305,7 @@
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
   visitor.Clear();
 
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
   const absl::string_view kBody = "This is an example request body.";
   auto body1 = absl::make_unique<TestDataFrameSource>(visitor, true);
   body1->AppendPayload(kBody);
@@ -1317,7 +1317,7 @@
                                         {":path", "/this/is/request/one"}}),
                              std::move(body1), nullptr);
   EXPECT_GT(stream_id, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, stream_id, _, 0x4));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, stream_id, _, 0x4, 0));
@@ -1330,7 +1330,7 @@
                                             spdy::SpdyFrameType::DATA}));
   EXPECT_THAT(visitor.data(), testing::HasSubstr(kBody));
   visitor.Clear();
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   const int next_stream_id =
       adapter->SubmitRequest(ToHeaders({{":method", "POST"},
@@ -1342,7 +1342,7 @@
   // A new pending stream is created, but because of MAX_CONCURRENT_STREAMS, the
   // session should not want to write it at the moment.
   EXPECT_GT(next_stream_id, stream_id);
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   const std::string stream_frames =
       TestFrameSequence()
@@ -1373,7 +1373,7 @@
   // the next stream.
   const int64_t stream_result = adapter->ProcessBytes(stream_frames);
   EXPECT_EQ(stream_frames.size(), stream_result);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, next_stream_id, _, 0x5));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, next_stream_id, _, 0x5, 0));
@@ -1383,15 +1383,15 @@
 
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::HEADERS}));
   visitor.Clear();
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 }
 
 TEST(NgHttp2AdapterTest, ServerConstruction) {
   testing::StrictMock<MockHttp2Visitor> visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
   ASSERT_NE(nullptr, adapter);
-  EXPECT_TRUE(adapter->session().want_read());
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_read());
+  EXPECT_FALSE(adapter->want_write());
   EXPECT_TRUE(adapter->IsServerSession());
 }
 
@@ -1491,7 +1491,7 @@
 
   EXPECT_EQ(adapter->GetSendWindowSize(), kInitialFlowControlWindowSize + 1000);
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
@@ -1550,7 +1550,7 @@
   const int64_t result = adapter->ProcessBytes(frames);
   EXPECT_EQ(frames.size(), result);
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
@@ -1604,7 +1604,7 @@
   const int64_t result = adapter->ProcessBytes(frames);
   EXPECT_EQ(-902, result);
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
@@ -1649,7 +1649,7 @@
   const int64_t result = adapter->ProcessBytes(frames);
   EXPECT_EQ(-902, result);
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
@@ -1705,7 +1705,7 @@
   const int64_t result = adapter->ProcessBytes(frames);
   EXPECT_EQ(NGHTTP2_ERR_CALLBACK_FAILURE, result);
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
@@ -1761,7 +1761,7 @@
   const int64_t result = adapter->ProcessBytes(frames);
   EXPECT_EQ(NGHTTP2_ERR_CALLBACK_FAILURE, result);
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
@@ -1776,7 +1776,7 @@
 TEST(NgHttp2AdapterTest, ServerSubmitResponse) {
   DataSavingVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   const std::string frames = TestFrameSequence()
                                  .ClientPreface()
@@ -1815,7 +1815,7 @@
   EXPECT_EQ(1, adapter->GetHighestReceivedStreamId());
 
   // Server will want to send a SETTINGS ack.
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
@@ -1827,7 +1827,7 @@
 
   EXPECT_EQ(0, adapter->GetHpackEncoderDynamicTableSize());
 
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
   const absl::string_view kBody = "This is an example response body.";
   // A data fin is not sent so that the stream remains open, and the flow
   // control state can be verified.
@@ -1839,7 +1839,7 @@
                  {"x-comment", "I have no idea what you're talking about."}}),
       std::move(body1));
   EXPECT_EQ(submit_result, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   // Stream user data should have been set successfully after receiving headers.
   EXPECT_EQ(kSentinel1, adapter->GetStreamUserData(1));
@@ -1856,7 +1856,7 @@
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::HEADERS,
                                             spdy::SpdyFrameType::DATA}));
   EXPECT_THAT(visitor.data(), testing::HasSubstr(kBody));
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   // Some data was sent, so the remaining send window size should be less than
   // the default.
@@ -1903,7 +1903,7 @@
 
   adapter->SubmitShutdownNotice();
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
@@ -1919,7 +1919,7 @@
 TEST(NgHttp2AdapterTest, ServerSendsTrailers) {
   DataSavingVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   const std::string frames = TestFrameSequence()
                                  .ClientPreface()
@@ -1950,7 +1950,7 @@
   EXPECT_EQ(frames.size(), result);
 
   // Server will want to send a SETTINGS ack.
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
@@ -1960,7 +1960,7 @@
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
   visitor.Clear();
 
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
   const absl::string_view kBody = "This is an example response body.";
 
   // The body source must indicate that the end of the body is not the end of
@@ -1972,7 +1972,7 @@
       1, ToHeaders({{":status", "200"}, {"x-comment", "Sure, sounds good."}}),
       std::move(body1));
   EXPECT_EQ(submit_result, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x4));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x4, 0));
@@ -1984,14 +1984,14 @@
                                             spdy::SpdyFrameType::DATA}));
   EXPECT_THAT(visitor.data(), testing::HasSubstr(kBody));
   visitor.Clear();
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   // The body source has been exhausted by the call to Send() above.
   int trailer_result = adapter->SubmitTrailer(
       1, ToHeaders({{"final-status", "a-ok"},
                     {"x-comment", "trailers sure are cool"}}));
   ASSERT_EQ(trailer_result, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x5));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x5, 0));
@@ -2005,7 +2005,7 @@
 TEST(NgHttp2AdapterTest, ClientSendsContinuation) {
   DataSavingVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   const std::string frames = TestFrameSequence()
                                  .ClientPreface()
@@ -2041,7 +2041,7 @@
 TEST(NgHttp2AdapterTest, ClientSendsMetadataWithContinuation) {
   DataSavingVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   const std::string frames =
       TestFrameSequence()
@@ -2104,7 +2104,7 @@
 TEST(NgHttp2AdapterTest, ServerSendsInvalidTrailers) {
   DataSavingVisitor visitor;
   auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   const std::string frames = TestFrameSequence()
                                  .ClientPreface()
@@ -2145,7 +2145,7 @@
       1, ToHeaders({{":status", "200"}, {"x-comment", "Sure, sounds good."}}),
       std::move(body1));
   EXPECT_EQ(submit_result, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
@@ -2160,13 +2160,13 @@
                                             spdy::SpdyFrameType::DATA}));
   EXPECT_THAT(visitor.data(), testing::HasSubstr(kBody));
   visitor.Clear();
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   // The body source has been exhausted by the call to Send() above.
   int trailer_result =
       adapter->SubmitTrailer(1, ToHeaders({{":final-status", "a-ok"}}));
   ASSERT_EQ(trailer_result, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x5));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x5, 0));
diff --git a/http2/adapter/oghttp2_adapter.cc b/http2/adapter/oghttp2_adapter.cc
index 252e73e..1984173 100644
--- a/http2/adapter/oghttp2_adapter.cc
+++ b/http2/adapter/oghttp2_adapter.cc
@@ -158,10 +158,6 @@
   return session_->ResumeStream(stream_id);
 }
 
-const Http2Session& OgHttp2Adapter::session() const {
-  return *session_;
-}
-
 OgHttp2Adapter::OgHttp2Adapter(Http2VisitorInterface& visitor, Options options)
     : Http2Adapter(visitor),
       session_(absl::make_unique<OgHttp2Session>(visitor, std::move(options))) {
diff --git a/http2/adapter/oghttp2_adapter.h b/http2/adapter/oghttp2_adapter.h
index cc02a6e..0aae5ab 100644
--- a/http2/adapter/oghttp2_adapter.h
+++ b/http2/adapter/oghttp2_adapter.h
@@ -18,10 +18,12 @@
   static std::unique_ptr<OgHttp2Adapter> Create(Http2VisitorInterface& visitor,
                                                 Options options);
 
-  ~OgHttp2Adapter();
+  ~OgHttp2Adapter() override;
 
   // From Http2Adapter.
   bool IsServerSession() const override;
+  bool want_read() const override { return session_->want_read(); }
+  bool want_write() const override { return session_->want_write(); }
   int64_t ProcessBytes(absl::string_view bytes) override;
   void SubmitSettings(absl::Span<const Http2Setting> settings) override;
   void SubmitPriorityForStream(Http2StreamId stream_id,
@@ -62,8 +64,6 @@
   void* GetStreamUserData(Http2StreamId stream_id) override;
   bool ResumeStream(Http2StreamId stream_id) override;
 
-  const Http2Session& session() const;
-
  private:
   OgHttp2Adapter(Http2VisitorInterface& visitor, Options options);
 
diff --git a/http2/adapter/oghttp2_adapter_test.cc b/http2/adapter/oghttp2_adapter_test.cc
index 9877513..0efb679 100644
--- a/http2/adapter/oghttp2_adapter_test.cc
+++ b/http2/adapter/oghttp2_adapter_test.cc
@@ -133,7 +133,7 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
@@ -217,7 +217,7 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
@@ -295,8 +295,8 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
 
-  EXPECT_FALSE(adapter->session().want_read());
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_read());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
@@ -377,7 +377,7 @@
                           static_cast<int>(Http2ErrorCode::REFUSED_STREAM)));
   EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS,
@@ -454,7 +454,7 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
@@ -526,7 +526,7 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
@@ -609,7 +609,7 @@
   EXPECT_CALL(visitor, OnFrameSent(RST_STREAM, stream_id1, 4, 0x0, 1));
   EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::PROTOCOL_ERROR));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS,
@@ -686,7 +686,7 @@
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
   result = adapter->Send();
   EXPECT_EQ(0, result);
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
@@ -697,7 +697,7 @@
   OgHttp2Adapter::Options options{.perspective = Perspective::kClient};
   auto adapter = OgHttp2Adapter::Create(visitor, options);
 
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
@@ -733,7 +733,7 @@
   EXPECT_EQ(initial_frames.size(), static_cast<size_t>(initial_result));
 
   // Session will want to write a SETTINGS ack.
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x1));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
@@ -754,7 +754,7 @@
                                         {":path", "/this/is/request/one"}}),
                              std::move(body1), nullptr);
   EXPECT_GT(stream_id, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, stream_id, _, 0x4));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, stream_id, _, 0x4, 0));
@@ -766,7 +766,7 @@
                                             spdy::SpdyFrameType::DATA}));
   EXPECT_THAT(visitor.data(), testing::HasSubstr(kBody));
   visitor.Clear();
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   const int next_stream_id =
       adapter->SubmitRequest(ToHeaders({{":method", "POST"},
@@ -778,7 +778,7 @@
   // A new pending stream is created, but because of MAX_CONCURRENT_STREAMS, the
   // session should not want to write it at the moment.
   EXPECT_GT(next_stream_id, stream_id);
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   const std::string stream_frames =
       TestFrameSequence()
@@ -809,7 +809,7 @@
   // the next stream.
   const int64_t stream_result = adapter->ProcessBytes(stream_frames);
   EXPECT_EQ(stream_frames.size(), static_cast<size_t>(stream_result));
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, next_stream_id, _, 0x5));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, next_stream_id, _, 0x5, 0));
@@ -819,14 +819,14 @@
 
   EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::HEADERS}));
   visitor.Clear();
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 }
 
 TEST_F(OgHttp2AdapterTest, SubmitMetadata) {
   auto source = absl::make_unique<TestMetadataSource>(ToHeaderBlock(ToHeaders(
       {{"query-cost", "is too darn high"}, {"secret-sauce", "hollandaise"}})));
   adapter_->SubmitMetadata(1, 16384u, std::move(source));
-  EXPECT_TRUE(adapter_->session().want_write());
+  EXPECT_TRUE(adapter_->want_write());
 
   EXPECT_CALL(http2_visitor_, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
   EXPECT_CALL(http2_visitor_, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
@@ -839,7 +839,7 @@
       http2_visitor_.data(),
       EqualsFrames({spdy::SpdyFrameType::SETTINGS,
                     static_cast<spdy::SpdyFrameType>(kMetadataFrameType)}));
-  EXPECT_FALSE(adapter_->session().want_write());
+  EXPECT_FALSE(adapter_->want_write());
 }
 
 TEST_F(OgHttp2AdapterTest, SubmitMetadataMultipleFrames) {
@@ -847,7 +847,7 @@
   auto source = absl::make_unique<TestMetadataSource>(
       ToHeaderBlock(ToHeaders({{"large-value", kLargeValue}})));
   adapter_->SubmitMetadata(1, 16384u, std::move(source));
-  EXPECT_TRUE(adapter_->session().want_write());
+  EXPECT_TRUE(adapter_->want_write());
 
   testing::InSequence seq;
   EXPECT_CALL(http2_visitor_, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
@@ -871,14 +871,14 @@
                     static_cast<spdy::SpdyFrameType>(kMetadataFrameType),
                     static_cast<spdy::SpdyFrameType>(kMetadataFrameType),
                     static_cast<spdy::SpdyFrameType>(kMetadataFrameType)}));
-  EXPECT_FALSE(adapter_->session().want_write());
+  EXPECT_FALSE(adapter_->want_write());
 }
 
 TEST_F(OgHttp2AdapterTest, SubmitConnectionMetadata) {
   auto source = absl::make_unique<TestMetadataSource>(ToHeaderBlock(ToHeaders(
       {{"query-cost", "is too darn high"}, {"secret-sauce", "hollandaise"}})));
   adapter_->SubmitMetadata(0, 16384u, std::move(source));
-  EXPECT_TRUE(adapter_->session().want_write());
+  EXPECT_TRUE(adapter_->want_write());
 
   EXPECT_CALL(http2_visitor_, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
   EXPECT_CALL(http2_visitor_, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
@@ -891,7 +891,7 @@
       http2_visitor_.data(),
       EqualsFrames({spdy::SpdyFrameType::SETTINGS,
                     static_cast<spdy::SpdyFrameType>(kMetadataFrameType)}));
-  EXPECT_FALSE(adapter_->session().want_write());
+  EXPECT_FALSE(adapter_->want_write());
 }
 
 TEST_F(OgHttp2AdapterTest, GetSendWindowSize) {
@@ -905,19 +905,19 @@
 }
 
 TEST_F(OgHttp2AdapterTest, TestSerialize) {
-  EXPECT_TRUE(adapter_->session().want_read());
-  EXPECT_FALSE(adapter_->session().want_write());
+  EXPECT_TRUE(adapter_->want_read());
+  EXPECT_FALSE(adapter_->want_write());
 
   adapter_->SubmitSettings(
       {{HEADER_TABLE_SIZE, 128}, {MAX_FRAME_SIZE, 128 << 10}});
-  EXPECT_TRUE(adapter_->session().want_write());
+  EXPECT_TRUE(adapter_->want_write());
 
   adapter_->SubmitPriorityForStream(3, 1, 255, true);
   adapter_->SubmitRst(3, Http2ErrorCode::CANCEL);
   adapter_->SubmitPing(42);
   adapter_->SubmitGoAway(13, Http2ErrorCode::NO_ERROR, "");
   adapter_->SubmitWindowUpdate(3, 127);
-  EXPECT_TRUE(adapter_->session().want_write());
+  EXPECT_TRUE(adapter_->want_write());
 
   EXPECT_CALL(http2_visitor_, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
   EXPECT_CALL(http2_visitor_, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
@@ -940,34 +940,34 @@
       EqualsFrames({SpdyFrameType::SETTINGS, SpdyFrameType::PRIORITY,
                     SpdyFrameType::RST_STREAM, SpdyFrameType::PING,
                     SpdyFrameType::GOAWAY, SpdyFrameType::WINDOW_UPDATE}));
-  EXPECT_FALSE(adapter_->session().want_write());
+  EXPECT_FALSE(adapter_->want_write());
 }
 
 TEST_F(OgHttp2AdapterTest, TestPartialSerialize) {
-  EXPECT_FALSE(adapter_->session().want_write());
+  EXPECT_FALSE(adapter_->want_write());
 
   adapter_->SubmitSettings(
       {{HEADER_TABLE_SIZE, 128}, {MAX_FRAME_SIZE, 128 << 10}});
   adapter_->SubmitGoAway(13, Http2ErrorCode::NO_ERROR, "And don't come back!");
   adapter_->SubmitPing(42);
-  EXPECT_TRUE(adapter_->session().want_write());
+  EXPECT_TRUE(adapter_->want_write());
 
   http2_visitor_.set_send_limit(20);
   EXPECT_CALL(http2_visitor_, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
   EXPECT_CALL(http2_visitor_, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
   int result = adapter_->Send();
   EXPECT_EQ(0, result);
-  EXPECT_TRUE(adapter_->session().want_write());
+  EXPECT_TRUE(adapter_->want_write());
   EXPECT_CALL(http2_visitor_, OnBeforeFrameSent(GOAWAY, 0, _, 0x0));
   EXPECT_CALL(http2_visitor_, OnFrameSent(GOAWAY, 0, _, 0x0, 0));
   result = adapter_->Send();
   EXPECT_EQ(0, result);
-  EXPECT_TRUE(adapter_->session().want_write());
+  EXPECT_TRUE(adapter_->want_write());
   EXPECT_CALL(http2_visitor_, OnBeforeFrameSent(PING, 0, _, 0x0));
   EXPECT_CALL(http2_visitor_, OnFrameSent(PING, 0, _, 0x0, 0));
   result = adapter_->Send();
   EXPECT_EQ(0, result);
-  EXPECT_FALSE(adapter_->session().want_write());
+  EXPECT_FALSE(adapter_->want_write());
   EXPECT_THAT(http2_visitor_.data(),
               EqualsFrames({SpdyFrameType::SETTINGS, SpdyFrameType::GOAWAY,
                             SpdyFrameType::PING}));
@@ -977,7 +977,7 @@
   DataSavingVisitor visitor;
   OgHttp2Adapter::Options options{.perspective = Perspective::kServer};
   auto adapter = OgHttp2Adapter::Create(visitor, options);
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   const std::string frames = TestFrameSequence()
                                  .ClientPreface()
@@ -1014,7 +1014,7 @@
   DataSavingVisitor visitor;
   OgHttp2Adapter::Options options{.perspective = Perspective::kServer};
   auto adapter = OgHttp2Adapter::Create(visitor, options);
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   const std::string frames =
       TestFrameSequence()
@@ -1078,7 +1078,7 @@
   DataSavingVisitor visitor;
   OgHttp2Adapter::Options options{.perspective = Perspective::kServer};
   auto adapter = OgHttp2Adapter::Create(visitor, options);
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   const std::string frames = TestFrameSequence()
                                  .ClientPreface()
@@ -1119,7 +1119,7 @@
       1, ToHeaders({{":status", "200"}, {"x-comment", "Sure, sounds good."}}),
       std::move(body1));
   EXPECT_EQ(submit_result, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
@@ -1137,14 +1137,14 @@
                    spdy::SpdyFrameType::HEADERS, spdy::SpdyFrameType::DATA}));
   EXPECT_THAT(visitor.data(), testing::HasSubstr(kBody));
   visitor.Clear();
-  EXPECT_FALSE(adapter->session().want_write());
+  EXPECT_FALSE(adapter->want_write());
 
   // The body source has been exhausted by the call to Send() above.
   EXPECT_CALL(visitor, OnCloseStream(1, Http2ErrorCode::NO_ERROR));
   int trailer_result =
       adapter->SubmitTrailer(1, ToHeaders({{":final-status", "a-ok"}}));
   ASSERT_EQ(trailer_result, 0);
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x5));
   EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x5, 0));
@@ -1198,7 +1198,7 @@
   const int64_t result = adapter->ProcessBytes(frames);
   EXPECT_EQ(frames.size(), static_cast<size_t>(result));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
@@ -1257,7 +1257,7 @@
   EXPECT_GT(result, 0);
   EXPECT_LT(result, static_cast<int64_t>(frames.size()));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x0));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x0, 0));
@@ -1307,7 +1307,7 @@
   EXPECT_GT(result, 0);
   EXPECT_LT(result, static_cast<int64_t>(frames.size()));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x0));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x0, 0));
@@ -1368,7 +1368,7 @@
   EXPECT_GT(result, 0);
   EXPECT_LT(result, static_cast<int64_t>(frames.size()));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x0));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x0, 0));
@@ -1429,7 +1429,7 @@
   EXPECT_GT(result, 0);
   EXPECT_LT(result, static_cast<int64_t>(frames.size()));
 
-  EXPECT_TRUE(adapter->session().want_write());
+  EXPECT_TRUE(adapter->want_write());
 
   EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x0));
   EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x0, 0));