Use int64_t instead of ssize_t in third_party/http2/adapter.

The motivation is that ssize_t is a POSIX extension that does not seem to
compile in Chromium on Windows.

Exceptions are nghttp2 API, like callback methods, where type should match
exactly.  This is not an issue an nghttp2 parts will not be used in Chrome.

PiperOrigin-RevId: 389881220
diff --git a/http2/adapter/callback_visitor.cc b/http2/adapter/callback_visitor.cc
index d98574b..0e666cb 100644
--- a/http2/adapter/callback_visitor.cc
+++ b/http2/adapter/callback_visitor.cc
@@ -48,11 +48,11 @@
   callbacks_ = MakeCallbacksPtr(c);
 }
 
-ssize_t CallbackVisitor::OnReadyToSend(absl::string_view serialized) {
+int64_t CallbackVisitor::OnReadyToSend(absl::string_view serialized) {
   if (!callbacks_->send_callback) {
     return kSendError;
   }
-  ssize_t result = callbacks_->send_callback(
+  int64_t result = callbacks_->send_callback(
       nullptr, ToUint8Ptr(serialized.data()), serialized.size(), 0, user_data_);
   QUICHE_VLOG(1) << "CallbackVisitor::OnReadyToSend returning " << result;
   if (result > 0) {
@@ -352,7 +352,7 @@
 void CallbackVisitor::OnReadyToSendDataForStream(Http2StreamId /*stream_id*/,
                                                  char* /*destination_buffer*/,
                                                  size_t /*length*/,
-                                                 ssize_t* /*written*/,
+                                                 int64_t* /*written*/,
                                                  bool* /*end_stream*/) {
   QUICHE_LOG(DFATAL) << "Not implemented";
 }
@@ -370,7 +370,7 @@
 void CallbackVisitor::OnReadyToSendMetadataForStream(Http2StreamId stream_id,
                                                      char* buffer,
                                                      size_t length,
-                                                     ssize_t* written) {
+                                                     int64_t* written) {
   if (callbacks_->pack_extension_callback) {
     nghttp2_frame frame;
     frame.hd.type = kMetadataFrameType;
diff --git a/http2/adapter/callback_visitor.h b/http2/adapter/callback_visitor.h
index e69bed1..6d40277 100644
--- a/http2/adapter/callback_visitor.h
+++ b/http2/adapter/callback_visitor.h
@@ -1,6 +1,7 @@
 #ifndef QUICHE_HTTP2_ADAPTER_CALLBACK_VISITOR_H_
 #define QUICHE_HTTP2_ADAPTER_CALLBACK_VISITOR_H_
 
+#include <cstdint>
 #include <memory>
 #include <vector>
 
@@ -21,7 +22,7 @@
                            const nghttp2_session_callbacks& callbacks,
                            void* user_data);
 
-  ssize_t OnReadyToSend(absl::string_view serialized) override;
+  int64_t OnReadyToSend(absl::string_view serialized) override;
   void OnConnectionError() override;
   void OnFrameHeader(Http2StreamId stream_id,
                      size_t length,
@@ -60,15 +61,11 @@
   int OnFrameSent(uint8_t frame_type, Http2StreamId stream_id, size_t length,
                   uint8_t flags, uint32_t error_code) override;
   void OnReadyToSendDataForStream(Http2StreamId stream_id,
-                                  char* destination_buffer,
-                                  size_t length,
-                                  ssize_t* written,
-                                  bool* end_stream) override;
+                                  char* destination_buffer, size_t length,
+                                  int64_t* written, bool* end_stream) override;
   bool OnInvalidFrame(Http2StreamId stream_id, int error_code) override;
-  void OnReadyToSendMetadataForStream(Http2StreamId stream_id,
-                                      char* buffer,
-                                      size_t length,
-                                      ssize_t* written) override;
+  void OnReadyToSendMetadataForStream(Http2StreamId stream_id, char* buffer,
+                                      size_t length, int64_t* written) override;
   void OnBeginMetadataForStream(Http2StreamId stream_id,
                                 size_t payload_length) override;
   bool OnMetadataForStream(Http2StreamId stream_id,
diff --git a/http2/adapter/callback_visitor_test.cc b/http2/adapter/callback_visitor_test.cc
index 2cb31ed..10d6c90 100644
--- a/http2/adapter/callback_visitor_test.cc
+++ b/http2/adapter/callback_visitor_test.cc
@@ -159,7 +159,7 @@
   // Metadata events
   constexpr size_t kMetadataBufferSize = 256;
   char metadata_dest[kMetadataBufferSize];
-  ssize_t written = 0;
+  int64_t written = 0;
 
   const absl::string_view kExampleFrame = "This is supposed to be metadata.";
   EXPECT_CALL(
@@ -169,7 +169,7 @@
                             HasFrameHeaderRef(7, kMetadataFrameType, _))))
       .WillOnce(testing::Invoke(
           [kExampleFrame](uint8_t* buf, size_t /*len*/,
-                          const nghttp2_frame* /*frame*/) -> ssize_t {
+                          const nghttp2_frame* /*frame*/) -> int64_t {
             std::memcpy(buf, kExampleFrame.data(), kExampleFrame.size());
             return kExampleFrame.size();
           }));
@@ -315,7 +315,7 @@
   // Metadata events
   constexpr size_t kMetadataBufferSize = 256;
   char metadata_dest[kMetadataBufferSize];
-  ssize_t written = 0;
+  int64_t written = 0;
 
   const absl::string_view kExampleFrame = "This is supposed to be metadata.";
   EXPECT_CALL(
@@ -325,7 +325,7 @@
                             HasFrameHeaderRef(5, kMetadataFrameType, _))))
       .WillOnce(testing::Invoke(
           [kExampleFrame](uint8_t* buf, size_t /*len*/,
-                          const nghttp2_frame* /*frame*/) -> ssize_t {
+                          const nghttp2_frame* /*frame*/) -> int64_t {
             std::memcpy(buf, kExampleFrame.data(), kExampleFrame.size());
             return kExampleFrame.size();
           }));
diff --git a/http2/adapter/data_source.h b/http2/adapter/data_source.h
index d867141..465aa2f 100644
--- a/http2/adapter/data_source.h
+++ b/http2/adapter/data_source.h
@@ -1,6 +1,7 @@
 #ifndef QUICHE_HTTP2_ADAPTER_DATA_SOURCE_H_
 #define QUICHE_HTTP2_ADAPTER_DATA_SOURCE_H_
 
+#include <cstdint>
 #include <string>
 #include <utility>
 
@@ -15,12 +16,12 @@
  public:
   virtual ~DataFrameSource() {}
 
-  enum : ssize_t { kBlocked = 0, kError = -1 };
+  enum : int64_t { kBlocked = 0, kError = -1 };
 
   // Returns the number of bytes to send in the next DATA frame, and whether
   // this frame indicates the end of the data. Returns {kBlocked, false} if
   // blocked, {kError, false} on error.
-  virtual std::pair<ssize_t, bool> SelectPayloadLength(size_t max_length) = 0;
+  virtual std::pair<int64_t, bool> SelectPayloadLength(size_t max_length) = 0;
 
   // This method is called with a frame header and a payload length to send. The
   // source should send or buffer the entire frame and return true, or return
@@ -41,7 +42,7 @@
   // return the number of payload bytes copied to |dest|, or a negative integer
   // to indicate an error, as well as a boolean indicating whether the metadata
   // has been completely copied.
-  virtual std::pair<ssize_t, bool> Pack(uint8_t* dest, size_t dest_len) = 0;
+  virtual std::pair<int64_t, bool> Pack(uint8_t* dest, size_t dest_len) = 0;
 };
 
 }  // namespace adapter
diff --git a/http2/adapter/http2_adapter.h b/http2/adapter/http2_adapter.h
index 789be98..b044cb6 100644
--- a/http2/adapter/http2_adapter.h
+++ b/http2/adapter/http2_adapter.h
@@ -1,6 +1,8 @@
 #ifndef QUICHE_HTTP2_ADAPTER_HTTP2_ADAPTER_H_
 #define QUICHE_HTTP2_ADAPTER_HTTP2_ADAPTER_H_
 
+#include <cstdint>
+
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
 #include "absl/types/span.h"
@@ -28,7 +30,7 @@
 
   // Processes the incoming |bytes| as HTTP/2 and invokes callbacks on the
   // |visitor_| as appropriate.
-  virtual ssize_t ProcessBytes(absl::string_view bytes) = 0;
+  virtual int64_t ProcessBytes(absl::string_view bytes) = 0;
 
   // Submits the |settings| to be written to the peer, e.g., as part of the
   // HTTP/2 connection preface.
diff --git a/http2/adapter/http2_session.h b/http2/adapter/http2_session.h
index 3b57d8f..e88a555 100644
--- a/http2/adapter/http2_session.h
+++ b/http2/adapter/http2_session.h
@@ -18,7 +18,7 @@
   Http2Session() = default;
   virtual ~Http2Session() {}
 
-  virtual ssize_t ProcessBytes(absl::string_view bytes) = 0;
+  virtual int64_t ProcessBytes(absl::string_view bytes) = 0;
 
   virtual int Consume(Http2StreamId stream_id, size_t num_bytes) = 0;
 
diff --git a/http2/adapter/http2_visitor_interface.h b/http2/adapter/http2_visitor_interface.h
index 0416168..2de5e5b 100644
--- a/http2/adapter/http2_visitor_interface.h
+++ b/http2/adapter/http2_visitor_interface.h
@@ -1,6 +1,7 @@
 #ifndef QUICHE_HTTP2_ADAPTER_HTTP2_VISITOR_INTERFACE_H_
 #define QUICHE_HTTP2_ADAPTER_HTTP2_VISITOR_INTERFACE_H_
 
+#include <cstdint>
 #include <vector>
 
 #include "absl/strings/string_view.h"
@@ -51,11 +52,11 @@
   Http2VisitorInterface& operator=(const Http2VisitorInterface&) = delete;
   virtual ~Http2VisitorInterface() = default;
 
-  static const ssize_t kSendBlocked = 0;
-  static const ssize_t kSendError = -1;
+  static const int64_t kSendBlocked = 0;
+  static const int64_t kSendError = -1;
   // Called when there are serialized frames to send. Should return how many
   // bytes were actually sent. May return kSendBlocked or kSendError.
-  virtual ssize_t OnReadyToSend(absl::string_view serialized) = 0;
+  virtual int64_t OnReadyToSend(absl::string_view serialized) = 0;
 
   // Called when a connection-level processing error has been encountered.
   virtual void OnConnectionError() = 0;
@@ -169,10 +170,9 @@
   // more data sent on this stream. Sets |written| to the number of bytes
   // written to the |destination_buffer| or a negative value if an error occurs.
   virtual void OnReadyToSendDataForStream(Http2StreamId stream_id,
-                                             char* destination_buffer,
-                                             size_t length,
-                                             ssize_t* written,
-                                             bool* end_stream) = 0;
+                                          char* destination_buffer,
+                                          size_t length, int64_t* written,
+                                          bool* end_stream) = 0;
 
   // Called when the connection receives an invalid frame. |error_code| is a
   // negative integer error code generated by the library. A return value of
@@ -186,7 +186,7 @@
   // of bytes written or a negative value if there was an error.
   virtual void OnReadyToSendMetadataForStream(Http2StreamId stream_id,
                                               char* buffer, size_t length,
-                                              ssize_t* written) = 0;
+                                              int64_t* written) = 0;
 
   // Called when the connection receives the beginning of a METADATA frame
   // (which may itself be the middle of a logical metadata block). The metadata
diff --git a/http2/adapter/mock_http2_visitor.h b/http2/adapter/mock_http2_visitor.h
index b10e892..568549b 100644
--- a/http2/adapter/mock_http2_visitor.h
+++ b/http2/adapter/mock_http2_visitor.h
@@ -1,6 +1,8 @@
 #ifndef QUICHE_HTTP2_ADAPTER_MOCK_HTTP2_VISITOR_INTERFACE_H_
 #define QUICHE_HTTP2_ADAPTER_MOCK_HTTP2_VISITOR_INTERFACE_H_
 
+#include <cstdint>
+
 #include "http2/adapter/http2_visitor_interface.h"
 #include "common/platform/api/quiche_export.h"
 #include "common/platform/api/quiche_test.h"
@@ -21,9 +23,7 @@
     ON_CALL(*this, OnMetadataEndForStream).WillByDefault(testing::Return(true));
   }
 
-  MOCK_METHOD(ssize_t,
-              OnReadyToSend,
-              (absl::string_view serialized),
+  MOCK_METHOD(int64_t, OnReadyToSend, (absl::string_view serialized),
               (override));
   MOCK_METHOD(void, OnConnectionError, (), (override));
   MOCK_METHOD(
@@ -110,20 +110,15 @@
   MOCK_METHOD(bool, OnInvalidFrame, (Http2StreamId stream_id, int error_code),
               (override));
 
-  MOCK_METHOD(void,
-              OnReadyToSendDataForStream,
-              (Http2StreamId stream_id,
-               char* destination_buffer,
-               size_t length,
-               ssize_t* written,
-               bool* end_stream),
+  MOCK_METHOD(void, OnReadyToSendDataForStream,
+              (Http2StreamId stream_id, char* destination_buffer, size_t length,
+               int64_t* written, bool* end_stream),
               (override));
 
-  MOCK_METHOD(
-      void,
-      OnReadyToSendMetadataForStream,
-      (Http2StreamId stream_id, char* buffer, size_t length, ssize_t* written),
-      (override));
+  MOCK_METHOD(void, OnReadyToSendMetadataForStream,
+              (Http2StreamId stream_id, char* buffer, size_t length,
+               int64_t* written),
+              (override));
 
   MOCK_METHOD(void,
               OnBeginMetadataForStream,
diff --git a/http2/adapter/mock_nghttp2_callbacks.h b/http2/adapter/mock_nghttp2_callbacks.h
index 08d15be..98acad9 100644
--- a/http2/adapter/mock_nghttp2_callbacks.h
+++ b/http2/adapter/mock_nghttp2_callbacks.h
@@ -1,6 +1,8 @@
 #ifndef QUICHE_HTTP2_ADAPTER_MOCK_NGHTTP2_CALLBACKS_H_
 #define QUICHE_HTTP2_ADAPTER_MOCK_NGHTTP2_CALLBACKS_H_
 
+#include <cstdint>
+
 #include "absl/strings/string_view.h"
 #include "http2/adapter/nghttp2_util.h"
 #include "third_party/nghttp2/src/lib/includes/nghttp2/nghttp2.h"
diff --git a/http2/adapter/nghttp2_adapter.cc b/http2/adapter/nghttp2_adapter.cc
index 9b444a3..5696df7 100644
--- a/http2/adapter/nghttp2_adapter.cc
+++ b/http2/adapter/nghttp2_adapter.cc
@@ -34,8 +34,8 @@
   return result > 0;
 }
 
-ssize_t NgHttp2Adapter::ProcessBytes(absl::string_view bytes) {
-  const ssize_t processed_bytes = session_->ProcessBytes(bytes);
+int64_t NgHttp2Adapter::ProcessBytes(absl::string_view bytes) {
+  const int64_t processed_bytes = session_->ProcessBytes(bytes);
   if (processed_bytes < 0) {
     visitor_.OnConnectionError();
   }
diff --git a/http2/adapter/nghttp2_adapter.h b/http2/adapter/nghttp2_adapter.h
index 151f9a7..2da18cf 100644
--- a/http2/adapter/nghttp2_adapter.h
+++ b/http2/adapter/nghttp2_adapter.h
@@ -1,6 +1,8 @@
 #ifndef QUICHE_HTTP2_ADAPTER_NGHTTP2_ADAPTER_H_
 #define QUICHE_HTTP2_ADAPTER_NGHTTP2_ADAPTER_H_
 
+#include <cstdint>
+
 #include "absl/container/flat_hash_map.h"
 #include "http2/adapter/http2_adapter.h"
 #include "http2/adapter/http2_protocol.h"
@@ -27,7 +29,7 @@
 
   bool IsServerSession() const override;
 
-  ssize_t ProcessBytes(absl::string_view bytes) override;
+  int64_t ProcessBytes(absl::string_view bytes) override;
   void SubmitSettings(absl::Span<const Http2Setting> settings) override;
   void SubmitPriorityForStream(Http2StreamId stream_id,
                                Http2StreamId parent_stream_id,
diff --git a/http2/adapter/nghttp2_callbacks.cc b/http2/adapter/nghttp2_callbacks.cc
index 16de2d5..f4b738e 100644
--- a/http2/adapter/nghttp2_callbacks.cc
+++ b/http2/adapter/nghttp2_callbacks.cc
@@ -21,7 +21,7 @@
                       size_t length, int flags, void* user_data) {
   QUICHE_CHECK_NE(user_data, nullptr);
   auto* visitor = static_cast<Http2VisitorInterface*>(user_data);
-  const ssize_t result = visitor->OnReadyToSend(ToStringView(data, length));
+  const int64_t result = visitor->OnReadyToSend(ToStringView(data, length));
   QUICHE_VLOG(1) << "OnReadyToSend(length=" << length << ", flags=" << flags
                  << ") returning " << result;
   if (result > 0) {
@@ -258,7 +258,7 @@
                                 void* user_data) {
   QUICHE_CHECK_NE(user_data, nullptr);
   auto* visitor = static_cast<Http2VisitorInterface*>(user_data);
-  ssize_t written = 0;
+  int64_t written = 0;
   visitor->OnReadyToSendMetadataForStream(
       frame->hd.stream_id, reinterpret_cast<char*>(buf), len, &written);
   return written;
diff --git a/http2/adapter/nghttp2_callbacks.h b/http2/adapter/nghttp2_callbacks.h
index 696b684..75640ed 100644
--- a/http2/adapter/nghttp2_callbacks.h
+++ b/http2/adapter/nghttp2_callbacks.h
@@ -1,6 +1,8 @@
 #ifndef QUICHE_HTTP2_ADAPTER_NGHTTP2_CALLBACKS_H_
 #define QUICHE_HTTP2_ADAPTER_NGHTTP2_CALLBACKS_H_
 
+#include <cstdint>
+
 #include "http2/adapter/http2_protocol.h"
 #include "http2/adapter/nghttp2_util.h"
 #include "third_party/nghttp2/src/lib/includes/nghttp2/nghttp2.h"
diff --git a/http2/adapter/nghttp2_data_provider.h b/http2/adapter/nghttp2_data_provider.h
index 241bab9..680564b 100644
--- a/http2/adapter/nghttp2_data_provider.h
+++ b/http2/adapter/nghttp2_data_provider.h
@@ -1,6 +1,8 @@
 #ifndef QUICHE_HTTP2_ADAPTER_NGHTTP2_DATA_PROVIDER_H_
 #define QUICHE_HTTP2_ADAPTER_NGHTTP2_DATA_PROVIDER_H_
 
+#include <cstdint>
+
 #include "http2/adapter/data_source.h"
 #include "third_party/nghttp2/src/lib/includes/nghttp2/nghttp2.h"
 
diff --git a/http2/adapter/nghttp2_session.cc b/http2/adapter/nghttp2_session.cc
index 9868958..2e1fdfa 100644
--- a/http2/adapter/nghttp2_session.cc
+++ b/http2/adapter/nghttp2_session.cc
@@ -30,7 +30,7 @@
       << " or pending writes: " << pending_writes;
 }
 
-ssize_t NgHttp2Session::ProcessBytes(absl::string_view bytes) {
+int64_t NgHttp2Session::ProcessBytes(absl::string_view bytes) {
   return nghttp2_session_mem_recv(
       session_.get(), reinterpret_cast<const uint8_t*>(bytes.data()),
       bytes.size());
diff --git a/http2/adapter/nghttp2_session.h b/http2/adapter/nghttp2_session.h
index 4339875..f84713f 100644
--- a/http2/adapter/nghttp2_session.h
+++ b/http2/adapter/nghttp2_session.h
@@ -1,6 +1,8 @@
 #ifndef QUICHE_HTTP2_ADAPTER_NGHTTP2_SESSION_H_
 #define QUICHE_HTTP2_ADAPTER_NGHTTP2_SESSION_H_
 
+#include <cstdint>
+
 #include "http2/adapter/http2_session.h"
 #include "http2/adapter/nghttp2_util.h"
 #include "third_party/nghttp2/src/lib/includes/nghttp2/nghttp2.h"
@@ -18,7 +20,7 @@
                  const nghttp2_option* options, void* userdata);
   ~NgHttp2Session() override;
 
-  ssize_t ProcessBytes(absl::string_view bytes) override;
+  int64_t ProcessBytes(absl::string_view bytes) override;
 
   int Consume(Http2StreamId stream_id, size_t num_bytes) override;
 
diff --git a/http2/adapter/nghttp2_test_utils.h b/http2/adapter/nghttp2_test_utils.h
index 9b772ff..abb11dd 100644
--- a/http2/adapter/nghttp2_test_utils.h
+++ b/http2/adapter/nghttp2_test_utils.h
@@ -1,6 +1,7 @@
 #ifndef QUICHE_HTTP2_ADAPTER_NGHTTP2_TEST_UTILS_H_
 #define QUICHE_HTTP2_ADAPTER_NGHTTP2_TEST_UTILS_H_
 
+#include <cstdint>
 #include <vector>
 
 #include "absl/strings/string_view.h"
diff --git a/http2/adapter/nghttp2_util.cc b/http2/adapter/nghttp2_util.cc
index efb811f..566a5e2 100644
--- a/http2/adapter/nghttp2_util.cc
+++ b/http2/adapter/nghttp2_util.cc
@@ -131,11 +131,11 @@
         send_data_(std::move(send_data)),
         user_data_(user_data) {}
 
-  std::pair<ssize_t, bool> SelectPayloadLength(size_t max_length) override {
+  std::pair<int64_t, bool> SelectPayloadLength(size_t max_length) override {
     const int32_t stream_id = 0;
     uint32_t data_flags = 0;
     QUICHE_LOG(INFO) << "Invoking read callback";
-    ssize_t result = provider_.read_callback(
+    int64_t result = provider_.read_callback(
         nullptr /* session */, stream_id, nullptr /* buf */, max_length,
         &data_flags, &provider_.source, nullptr /* user_data */);
     if (result == NGHTTP2_ERR_DEFERRED) {
diff --git a/http2/adapter/oghttp2_adapter.cc b/http2/adapter/oghttp2_adapter.cc
index 27f011e..e027851 100644
--- a/http2/adapter/oghttp2_adapter.cc
+++ b/http2/adapter/oghttp2_adapter.cc
@@ -34,7 +34,7 @@
   return session_->IsServerSession();
 }
 
-ssize_t OgHttp2Adapter::ProcessBytes(absl::string_view bytes) {
+int64_t OgHttp2Adapter::ProcessBytes(absl::string_view bytes) {
   return session_->ProcessBytes(bytes);
 }
 
diff --git a/http2/adapter/oghttp2_adapter.h b/http2/adapter/oghttp2_adapter.h
index 9c7bad3..bcd373a 100644
--- a/http2/adapter/oghttp2_adapter.h
+++ b/http2/adapter/oghttp2_adapter.h
@@ -1,6 +1,7 @@
 #ifndef QUICHE_HTTP2_ADAPTER_OGHTTP2_ADAPTER_H_
 #define QUICHE_HTTP2_ADAPTER_OGHTTP2_ADAPTER_H_
 
+#include <cstdint>
 #include <memory>
 
 #include "http2/adapter/http2_adapter.h"
@@ -21,7 +22,7 @@
 
   // From Http2Adapter.
   bool IsServerSession() const override;
-  ssize_t ProcessBytes(absl::string_view bytes) override;
+  int64_t ProcessBytes(absl::string_view bytes) override;
   void SubmitSettings(absl::Span<const Http2Setting> settings) override;
   void SubmitPriorityForStream(Http2StreamId stream_id,
                                Http2StreamId parent_stream_id,
diff --git a/http2/adapter/oghttp2_session.cc b/http2/adapter/oghttp2_session.cc
index 04f2cfd..7c4593f 100644
--- a/http2/adapter/oghttp2_session.cc
+++ b/http2/adapter/oghttp2_session.cc
@@ -217,8 +217,8 @@
   return decoder == nullptr ? 0 : decoder->GetDynamicTableSize();
 }
 
-ssize_t OgHttp2Session::ProcessBytes(absl::string_view bytes) {
-  ssize_t preface_consumed = 0;
+int64_t OgHttp2Session::ProcessBytes(absl::string_view bytes) {
+  int64_t preface_consumed = 0;
   if (!remaining_preface_.empty()) {
     QUICHE_VLOG(2) << "Preface bytes remaining: " << remaining_preface_.size();
     // decoder_ does not understand the client connection preface.
@@ -240,7 +240,7 @@
     }
     preface_consumed = min_size;
   }
-  ssize_t result = decoder_.ProcessInput(bytes.data(), bytes.size());
+  int64_t result = decoder_.ProcessInput(bytes.data(), bytes.size());
   return result < 0 ? result : result + preface_consumed;
 }
 
@@ -284,7 +284,7 @@
 
 int OgHttp2Session::Send() {
   MaybeSetupPreface();
-  ssize_t result = std::numeric_limits<ssize_t>::max();
+  int64_t result = std::numeric_limits<int64_t>::max();
   // Flush any serialized prefix.
   while (result > 0 && !serialized_prefix_.empty()) {
     result = visitor_.OnReadyToSend(serialized_prefix_);
@@ -322,7 +322,7 @@
     visitor_.OnBeforeFrameSent(c.frame_type(), c.stream_id(), c.length(),
                                c.flags());
     spdy::SpdySerializedFrame frame = framer_.SerializeFrame(*frame_ptr);
-    const ssize_t result = visitor_.OnReadyToSend(absl::string_view(frame));
+    const int64_t result = visitor_.OnReadyToSend(absl::string_view(frame));
     if (result < 0) {
       visitor_.OnConnectionError();
       return false;
@@ -381,7 +381,7 @@
       std::min(connection_send_window_, state.send_window), max_frame_payload_);
   while (connection_can_write && available_window > 0 &&
          state.outbound_body != nullptr) {
-    ssize_t length;
+    int64_t length;
     bool end_data;
     std::tie(length, end_data) =
         state.outbound_body->SelectPayloadLength(available_window);
@@ -449,7 +449,7 @@
   while (!sequence.empty()) {
     MetadataSource& source = *sequence.front();
 
-    ssize_t written;
+    int64_t written;
     bool end_metadata;
     std::tie(written, end_metadata) =
         source.Pack(payload_buffer.get(), kMaxMetadataFrameSize);
diff --git a/http2/adapter/oghttp2_session.h b/http2/adapter/oghttp2_session.h
index 6631409..0d8461b 100644
--- a/http2/adapter/oghttp2_session.h
+++ b/http2/adapter/oghttp2_session.h
@@ -1,6 +1,7 @@
 #ifndef QUICHE_HTTP2_ADAPTER_OGHTTP2_SESSION_H_
 #define QUICHE_HTTP2_ADAPTER_OGHTTP2_SESSION_H_
 
+#include <cstdint>
 #include <list>
 
 #include "http2/adapter/data_source.h"
@@ -84,7 +85,7 @@
   int GetHpackDecoderDynamicTableSize() const;
 
   // From Http2Session.
-  ssize_t ProcessBytes(absl::string_view bytes) override;
+  int64_t ProcessBytes(absl::string_view bytes) override;
   int Consume(Http2StreamId stream_id, size_t num_bytes) override;
   bool want_read() const override {
     return !received_goaway_ && !decoder_.HasError();
diff --git a/http2/adapter/recording_http2_visitor.cc b/http2/adapter/recording_http2_visitor.cc
index 0206219..71083c5 100644
--- a/http2/adapter/recording_http2_visitor.cc
+++ b/http2/adapter/recording_http2_visitor.cc
@@ -7,7 +7,7 @@
 namespace adapter {
 namespace test {
 
-ssize_t RecordingHttp2Visitor::OnReadyToSend(absl::string_view serialized) {
+int64_t RecordingHttp2Visitor::OnReadyToSend(absl::string_view serialized) {
   events_.push_back(absl::StrFormat("OnReadyToSend %d", serialized.size()));
   return serialized.size();
 }
@@ -143,7 +143,7 @@
 
 void RecordingHttp2Visitor::OnReadyToSendDataForStream(
     Http2StreamId stream_id, char* /*destination_buffer*/, size_t length,
-    ssize_t* /*written*/, bool* /*end_stream*/) {
+    int64_t* /*written*/, bool* /*end_stream*/) {
   // TODO(b/181586191): Revisit this. The visitor is expected to write to the
   // |destination_buffer| and set the other pointer values appropriately.
   events_.push_back(
@@ -152,7 +152,7 @@
 
 void RecordingHttp2Visitor::OnReadyToSendMetadataForStream(
     Http2StreamId stream_id, char* /*buffer*/, size_t length,
-    ssize_t* /*written*/) {
+    int64_t* /*written*/) {
   // TODO(b/181586191): Revisit this. The visitor is expected to write to the
   // |buffer| and set *written appropriately.
   events_.push_back(absl::StrFormat("OnReadyToSendMetadataForStream %d %d",
diff --git a/http2/adapter/recording_http2_visitor.h b/http2/adapter/recording_http2_visitor.h
index 82e08ca..fb1532a 100644
--- a/http2/adapter/recording_http2_visitor.h
+++ b/http2/adapter/recording_http2_visitor.h
@@ -1,6 +1,7 @@
 #ifndef QUICHE_HTTP2_ADAPTER_RECORDING_HTTP2_VISITOR_H_
 #define QUICHE_HTTP2_ADAPTER_RECORDING_HTTP2_VISITOR_H_
 
+#include <cstdint>
 #include <list>
 #include <string>
 
@@ -19,7 +20,7 @@
   using EventSequence = std::list<Event>;
 
   // From Http2VisitorInterface
-  ssize_t OnReadyToSend(absl::string_view serialized) override;
+  int64_t OnReadyToSend(absl::string_view serialized) override;
   void OnConnectionError() override;
   void OnFrameHeader(Http2StreamId stream_id,
                      size_t length,
@@ -59,14 +60,10 @@
                   uint8_t flags, uint32_t error_code) override;
   bool OnInvalidFrame(Http2StreamId stream_id, int error_code) override;
   void OnReadyToSendDataForStream(Http2StreamId stream_id,
-                                  char* destination_buffer,
-                                  size_t length,
-                                  ssize_t* written,
-                                  bool* end_stream) override;
-  void OnReadyToSendMetadataForStream(Http2StreamId stream_id,
-                                      char* buffer,
-                                      size_t length,
-                                      ssize_t* written) override;
+                                  char* destination_buffer, size_t length,
+                                  int64_t* written, bool* end_stream) override;
+  void OnReadyToSendMetadataForStream(Http2StreamId stream_id, char* buffer,
+                                      size_t length, int64_t* written) override;
   void OnBeginMetadataForStream(Http2StreamId stream_id,
                                 size_t payload_length) override;
   bool OnMetadataForStream(Http2StreamId stream_id,
diff --git a/http2/adapter/test_frame_sequence.h b/http2/adapter/test_frame_sequence.h
index 99740d3..86cf297 100644
--- a/http2/adapter/test_frame_sequence.h
+++ b/http2/adapter/test_frame_sequence.h
@@ -1,6 +1,7 @@
 #ifndef QUICHE_HTTP2_ADAPTER_TEST_FRAME_SEQUENCE_H_
 #define QUICHE_HTTP2_ADAPTER_TEST_FRAME_SEQUENCE_H_
 
+#include <cstdint>
 #include <memory>
 #include <string>
 #include <vector>
diff --git a/http2/adapter/test_utils.cc b/http2/adapter/test_utils.cc
index b8acddb..43ad61c 100644
--- a/http2/adapter/test_utils.cc
+++ b/http2/adapter/test_utils.cc
@@ -25,14 +25,14 @@
 
 void TestDataFrameSource::EndData() { end_data_ = true; }
 
-std::pair<ssize_t, bool> TestDataFrameSource::SelectPayloadLength(
+std::pair<int64_t, bool> TestDataFrameSource::SelectPayloadLength(
     size_t max_length) {
   // The stream is done if there's no more data, or if |max_length| is at least
   // as large as the remaining data.
   const bool end_data = end_data_ && (current_fragment_.empty() ||
                                       (payload_fragments_.size() == 1 &&
                                        max_length >= current_fragment_.size()));
-  const ssize_t length = std::min(max_length, current_fragment_.size());
+  const int64_t length = std::min(max_length, current_fragment_.size());
   return {length, end_data};
 }
 
@@ -43,7 +43,7 @@
       << " current_fragment_size: " << current_fragment_.size();
   const std::string concatenated =
       absl::StrCat(frame_header, current_fragment_.substr(0, payload_length));
-  const ssize_t result = visitor_.OnReadyToSend(concatenated);
+  const int64_t result = visitor_.OnReadyToSend(concatenated);
   if (result < 0) {
     // Write encountered error.
     visitor_.OnConnectionError();
@@ -87,7 +87,7 @@
   remaining_ = encoded_entries_;
 }
 
-std::pair<ssize_t, bool> TestMetadataSource::Pack(uint8_t* dest,
+std::pair<int64_t, bool> TestMetadataSource::Pack(uint8_t* dest,
                                                   size_t dest_len) {
   const size_t copied = std::min(dest_len, remaining_.size());
   std::memcpy(dest, remaining_.data(), copied);
diff --git a/http2/adapter/test_utils.h b/http2/adapter/test_utils.h
index 115f0e1..1b18890 100644
--- a/http2/adapter/test_utils.h
+++ b/http2/adapter/test_utils.h
@@ -1,6 +1,7 @@
 #ifndef QUICHE_HTTP2_ADAPTER_TEST_UTILS_H_
 #define QUICHE_HTTP2_ADAPTER_TEST_UTILS_H_
 
+#include <cstdint>
 #include <string>
 #include <vector>
 
@@ -21,7 +22,7 @@
 class QUICHE_NO_EXPORT DataSavingVisitor
     : public testing::StrictMock<MockHttp2Visitor> {
  public:
-  ssize_t OnReadyToSend(absl::string_view data) override {
+  int64_t OnReadyToSend(absl::string_view data) override {
     if (is_write_blocked_) {
       return kSendBlocked;
     }
@@ -77,7 +78,7 @@
   void AppendPayload(absl::string_view payload);
   void EndData();
 
-  std::pair<ssize_t, bool> SelectPayloadLength(size_t max_length) override;
+  std::pair<int64_t, bool> SelectPayloadLength(size_t max_length) override;
   bool Send(absl::string_view frame_header, size_t payload_length) override;
   bool send_fin() const override { return has_fin_; }
 
@@ -95,7 +96,7 @@
  public:
   explicit TestMetadataSource(const spdy::SpdyHeaderBlock& entries);
 
-  std::pair<ssize_t, bool> Pack(uint8_t* dest, size_t dest_len) override;
+  std::pair<int64_t, bool> Pack(uint8_t* dest, size_t dest_len) override;
 
  private:
   const std::string encoded_entries_;