Add `payload_length` argument to SpdyFramerVisitorInterface::OnContinuation().

This change is analogous to the `payload_length` addition to
SpdyFramerVisitorInterface::OnHeaders() in cl/449251987.

The goal is to use the new `payload_length` argument in recording the header
bytes for Dapper annotations.

PiperOrigin-RevId: 450006121
diff --git a/quiche/http2/adapter/event_forwarder.cc b/quiche/http2/adapter/event_forwarder.cc
index a18a2cd..716e6bb 100644
--- a/quiche/http2/adapter/event_forwarder.cc
+++ b/quiche/http2/adapter/event_forwarder.cc
@@ -141,9 +141,10 @@
   }
 }
 
-void EventForwarder::OnContinuation(spdy::SpdyStreamId stream_id, bool end) {
+void EventForwarder::OnContinuation(spdy::SpdyStreamId stream_id,
+                                    size_t payload_length, bool end) {
   if (can_forward_()) {
-    receiver_.OnContinuation(stream_id, end);
+    receiver_.OnContinuation(stream_id, payload_length, end);
   }
 }
 
diff --git a/quiche/http2/adapter/event_forwarder.h b/quiche/http2/adapter/event_forwarder.h
index 5f93db0..1147162 100644
--- a/quiche/http2/adapter/event_forwarder.h
+++ b/quiche/http2/adapter/event_forwarder.h
@@ -54,7 +54,8 @@
                       int delta_window_size) override;
   void OnPushPromise(spdy::SpdyStreamId stream_id,
                      spdy::SpdyStreamId promised_stream_id, bool end) override;
-  void OnContinuation(spdy::SpdyStreamId stream_id, bool end) override;
+  void OnContinuation(spdy::SpdyStreamId stream_id, size_t payload_length,
+                      bool end) override;
   void OnAltSvc(spdy::SpdyStreamId stream_id, absl::string_view origin,
                 const spdy::SpdyAltSvcWireFormat::AlternativeServiceVector&
                     altsvc_vector) override;
diff --git a/quiche/http2/adapter/event_forwarder_test.cc b/quiche/http2/adapter/event_forwarder_test.cc
index c3680c8..a3d3bf6 100644
--- a/quiche/http2/adapter/event_forwarder_test.cc
+++ b/quiche/http2/adapter/event_forwarder_test.cc
@@ -104,8 +104,10 @@
   EXPECT_CALL(receiver, OnPushPromise(stream_id, stream_id + 1, /*end=*/true));
   event_forwarder.OnPushPromise(stream_id, stream_id + 1, /*end=*/true);
 
-  EXPECT_CALL(receiver, OnContinuation(stream_id, /*end=*/true));
-  event_forwarder.OnContinuation(stream_id, /*end=*/true);
+  EXPECT_CALL(receiver,
+              OnContinuation(stream_id, /*payload_length=*/42, /*end=*/true));
+  event_forwarder.OnContinuation(stream_id, /*payload_length=*/42,
+                                 /*end=*/true);
 
   const spdy::SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
   EXPECT_CALL(receiver, OnAltSvc(stream_id, some_data, altsvc_vector));
@@ -199,7 +201,8 @@
   event_forwarder.OnPushPromise(stream_id, stream_id + 1, /*end=*/true);
 
   EXPECT_CALL(receiver, OnContinuation).Times(0);
-  event_forwarder.OnContinuation(stream_id, /*end=*/true);
+  event_forwarder.OnContinuation(stream_id, /*payload_length=*/42,
+                                 /*end=*/true);
 
   EXPECT_CALL(receiver, OnAltSvc).Times(0);
   const spdy::SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
diff --git a/quiche/http2/adapter/oghttp2_session.cc b/quiche/http2/adapter/oghttp2_session.cc
index 77fff36..c22f085 100644
--- a/quiche/http2/adapter/oghttp2_session.cc
+++ b/quiche/http2/adapter/oghttp2_session.cc
@@ -1435,8 +1435,8 @@
                       ConnectionError::kInvalidPushPromise);
 }
 
-void OgHttp2Session::OnContinuation(spdy::SpdyStreamId /*stream_id*/, bool
-                                    /*end*/) {}
+void OgHttp2Session::OnContinuation(spdy::SpdyStreamId /*stream_id*/,
+                                    size_t /*payload_length*/, bool /*end*/) {}
 
 void OgHttp2Session::OnAltSvc(spdy::SpdyStreamId /*stream_id*/,
                               absl::string_view /*origin*/,
diff --git a/quiche/http2/adapter/oghttp2_session.h b/quiche/http2/adapter/oghttp2_session.h
index 5bc854b..678cc2f 100644
--- a/quiche/http2/adapter/oghttp2_session.h
+++ b/quiche/http2/adapter/oghttp2_session.h
@@ -188,7 +188,8 @@
                       int delta_window_size) override;
   void OnPushPromise(spdy::SpdyStreamId stream_id,
                      spdy::SpdyStreamId promised_stream_id, bool end) override;
-  void OnContinuation(spdy::SpdyStreamId stream_id, bool end) override;
+  void OnContinuation(spdy::SpdyStreamId stream_id, size_t payload_length,
+                      bool end) override;
   void OnAltSvc(spdy::SpdyStreamId /*stream_id*/, absl::string_view /*origin*/,
                 const spdy::SpdyAltSvcWireFormat::
                     AlternativeServiceVector& /*altsvc_vector*/) override;
diff --git a/quiche/http2/core/http2_trace_logging.cc b/quiche/http2/core/http2_trace_logging.cc
index 10ff163..554bd5c 100644
--- a/quiche/http2/core/http2_trace_logging.cc
+++ b/quiche/http2/core/http2_trace_logging.cc
@@ -288,11 +288,12 @@
   wrapped_->OnPushPromise(original_stream_id, promised_stream_id, end);
 }
 
-void Http2TraceLogger::OnContinuation(SpdyStreamId stream_id, bool end) {
+void Http2TraceLogger::OnContinuation(SpdyStreamId stream_id,
+                                      size_t payload_length, bool end) {
   HTTP2_TRACE_LOG(perspective_, is_enabled_)
       << "OnContinuation:" << FORMAT_ARG(connection_id_)
-      << FORMAT_ARG(stream_id) << FORMAT_ARG(end);
-  wrapped_->OnContinuation(stream_id, end);
+      << FORMAT_ARG(stream_id) << FORMAT_ARG(payload_length) << FORMAT_ARG(end);
+  wrapped_->OnContinuation(stream_id, payload_length, end);
 }
 
 void Http2TraceLogger::OnAltSvc(
diff --git a/quiche/http2/core/http2_trace_logging.h b/quiche/http2/core/http2_trace_logging.h
index 1bde7ee..deeeee1 100644
--- a/quiche/http2/core/http2_trace_logging.h
+++ b/quiche/http2/core/http2_trace_logging.h
@@ -77,7 +77,8 @@
   void OnWindowUpdate(SpdyStreamId stream_id, int delta_window_size) override;
   void OnPushPromise(SpdyStreamId stream_id, SpdyStreamId promised_stream_id,
                      bool end) override;
-  void OnContinuation(SpdyStreamId stream_id, bool end) override;
+  void OnContinuation(SpdyStreamId stream_id, size_t payload_length,
+                      bool end) override;
   void OnAltSvc(SpdyStreamId stream_id, absl::string_view origin,
                 const SpdyAltSvcWireFormat::AlternativeServiceVector&
                     altsvc_vector) override;
diff --git a/quiche/quic/core/http/quic_headers_stream_test.cc b/quiche/quic/core/http/quic_headers_stream_test.cc
index 9b8ffb4..76083f3 100644
--- a/quiche/quic/core/http/quic_headers_stream_test.cc
+++ b/quiche/quic/core/http/quic_headers_stream_test.cc
@@ -111,7 +111,8 @@
               (SpdyStreamId stream_id, SpdyStreamId promised_stream_id,
                bool end),
               (override));
-  MOCK_METHOD(void, OnContinuation, (SpdyStreamId stream_id, bool end),
+  MOCK_METHOD(void, OnContinuation,
+              (SpdyStreamId stream_id, size_t payload_size, bool end),
               (override));
   MOCK_METHOD(
       void, OnAltSvc,
diff --git a/quiche/quic/core/http/quic_spdy_session.cc b/quiche/quic/core/http/quic_spdy_session.cc
index f0aa6d5..e54c846 100644
--- a/quiche/quic/core/http/quic_spdy_session.cc
+++ b/quiche/quic/core/http/quic_spdy_session.cc
@@ -363,7 +363,8 @@
     session_->OnPushPromise(stream_id, promised_stream_id);
   }
 
-  void OnContinuation(SpdyStreamId /*stream_id*/, bool /*end*/) override {}
+  void OnContinuation(SpdyStreamId /*stream_id*/, size_t /*payload_size*/,
+                      bool /*end*/) override {}
 
   void OnPriority(SpdyStreamId stream_id, SpdyStreamId /* parent_id */,
                   int weight, bool /* exclusive */) override {
diff --git a/quiche/spdy/core/http2_frame_decoder_adapter.cc b/quiche/spdy/core/http2_frame_decoder_adapter.cc
index 780342e..89ea6e8 100644
--- a/quiche/spdy/core/http2_frame_decoder_adapter.cc
+++ b/quiche/spdy/core/http2_frame_decoder_adapter.cc
@@ -506,7 +506,8 @@
     frame_header_ = header;
     has_frame_header_ = true;
     ReportReceiveCompressedFrame(header);
-    visitor()->OnContinuation(header.stream_id, header.IsEndHeaders());
+    visitor()->OnContinuation(header.stream_id, header.payload_length,
+                              header.IsEndHeaders());
   }
 }
 
diff --git a/quiche/spdy/core/http2_frame_decoder_adapter.h b/quiche/spdy/core/http2_frame_decoder_adapter.h
index fbdfd5b..e0dfbd9 100644
--- a/quiche/spdy/core/http2_frame_decoder_adapter.h
+++ b/quiche/spdy/core/http2_frame_decoder_adapter.h
@@ -485,7 +485,12 @@
 
   // Called when a CONTINUATION frame is received.
   // Note that header block data is not included. See OnHeaderFrameStart().
-  virtual void OnContinuation(SpdyStreamId stream_id, bool end) = 0;
+  // |stream_id| The stream receiving the CONTINUATION.
+  // |payload_length| The length of the payload in this CONTINUATION frame.
+  // |end| True if this CONTINUATION frame will not be followed by another
+  //     CONTINUATION frame.
+  virtual void OnContinuation(SpdyStreamId stream_id, size_t payload_length,
+                              bool end) = 0;
 
   // Called when an ALTSVC frame has been parsed.
   virtual void OnAltSvc(
diff --git a/quiche/spdy/core/spdy_framer_test.cc b/quiche/spdy/core/spdy_framer_test.cc
index 1b3c421..909f43a 100644
--- a/quiche/spdy/core/spdy_framer_test.cc
+++ b/quiche/spdy/core/spdy_framer_test.cc
@@ -387,8 +387,10 @@
     last_push_promise_promised_stream_ = promised_stream_id;
   }
 
-  void OnContinuation(SpdyStreamId stream_id, bool end) override {
-    QUICHE_VLOG(1) << "OnContinuation(" << stream_id << ", " << end << ")";
+  void OnContinuation(SpdyStreamId stream_id, size_t payload_size,
+                      bool end) override {
+    QUICHE_VLOG(1) << "OnContinuation(" << stream_id << ", " << payload_size
+                   << ", " << end << ")";
     ++continuation_count_;
   }
 
@@ -4368,7 +4370,8 @@
     EXPECT_CALL(debug_visitor,
                 OnReceiveCompressedFrame(42, SpdyFrameType::CONTINUATION, _));
     EXPECT_CALL(visitor, OnCommonHeader(42, _, 0x9, flags));
-    EXPECT_CALL(visitor, OnContinuation(42, flags & HEADERS_FLAG_END_HEADERS));
+    EXPECT_CALL(visitor,
+                OnContinuation(42, _, flags & HEADERS_FLAG_END_HEADERS));
     bool end = flags & HEADERS_FLAG_END_HEADERS;
     if (end) {
       EXPECT_CALL(visitor, OnHeaderFrameEnd(42)).Times(1);
diff --git a/quiche/spdy/core/spdy_no_op_visitor.h b/quiche/spdy/core/spdy_no_op_visitor.h
index 3bb47be..78fe2d1 100644
--- a/quiche/spdy/core/spdy_no_op_visitor.h
+++ b/quiche/spdy/core/spdy_no_op_visitor.h
@@ -55,7 +55,8 @@
   void OnPushPromise(SpdyStreamId /*stream_id*/,
                      SpdyStreamId /*promised_stream_id*/,
                      bool /*end*/) override {}
-  void OnContinuation(SpdyStreamId /*stream_id*/, bool /*end*/) override {}
+  void OnContinuation(SpdyStreamId /*stream_id*/, size_t /*payload_size*/,
+                      bool /*end*/) override {}
   void OnAltSvc(SpdyStreamId /*stream_id*/, absl::string_view /*origin*/,
                 const SpdyAltSvcWireFormat::AlternativeServiceVector&
                 /*altsvc_vector*/) override {}
diff --git a/quiche/spdy/test_tools/mock_spdy_framer_visitor.h b/quiche/spdy/test_tools/mock_spdy_framer_visitor.h
index 5d721c6..373a2db 100644
--- a/quiche/spdy/test_tools/mock_spdy_framer_visitor.h
+++ b/quiche/spdy/test_tools/mock_spdy_framer_visitor.h
@@ -69,7 +69,8 @@
               (SpdyStreamId stream_id, SpdyStreamId promised_stream_id,
                bool end),
               (override));
-  MOCK_METHOD(void, OnContinuation, (SpdyStreamId stream_id, bool end),
+  MOCK_METHOD(void, OnContinuation,
+              (SpdyStreamId stream_id, size_t payload_length, bool end),
               (override));
   MOCK_METHOD(
       void, OnAltSvc,