diff --git a/quiche/http2/adapter/adapter_impl_comparison_test.cc b/quiche/http2/adapter/adapter_impl_comparison_test.cc
index 841314b..cf2b598 100644
--- a/quiche/http2/adapter/adapter_impl_comparison_test.cc
+++ b/quiche/http2/adapter/adapter_impl_comparison_test.cc
@@ -1,8 +1,7 @@
-#include "quiche/http2/adapter/recording_http2_visitor.h"
-
 #include "quiche/http2/adapter/http2_protocol.h"
 #include "quiche/http2/adapter/nghttp2_adapter.h"
 #include "quiche/http2/adapter/oghttp2_adapter.h"
+#include "quiche/http2/adapter/recording_http2_visitor.h"
 #include "quiche/http2/adapter/test_frame_sequence.h"
 #include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/spdy/core/spdy_protocol.h"
diff --git a/quiche/http2/adapter/callback_visitor.h b/quiche/http2/adapter/callback_visitor.h
index 06e8e0c..217ad62 100644
--- a/quiche/http2/adapter/callback_visitor.h
+++ b/quiche/http2/adapter/callback_visitor.h
@@ -50,8 +50,7 @@
   bool OnCloseStream(Http2StreamId stream_id,
                      Http2ErrorCode error_code) override;
   void OnPriorityForStream(Http2StreamId stream_id,
-                           Http2StreamId parent_stream_id,
-                           int weight,
+                           Http2StreamId parent_stream_id, int weight,
                            bool exclusive) override;
   void OnPing(Http2PingId ping_id, bool is_ack) override;
   void OnPushPromiseForStream(Http2StreamId stream_id,
diff --git a/quiche/http2/adapter/http2_adapter.h b/quiche/http2/adapter/http2_adapter.h
index 310c970..efdbcb7 100644
--- a/quiche/http2/adapter/http2_adapter.h
+++ b/quiche/http2/adapter/http2_adapter.h
@@ -44,8 +44,7 @@
   // Submits a PRIORITY frame for the given stream.
   virtual void SubmitPriorityForStream(Http2StreamId stream_id,
                                        Http2StreamId parent_stream_id,
-                                       int weight,
-                                       bool exclusive) = 0;
+                                       int weight, bool exclusive) = 0;
 
   // Submits a PING on the connection.
   virtual void SubmitPing(Http2PingId ping_id) = 0;
diff --git a/quiche/http2/adapter/mock_http2_visitor.h b/quiche/http2/adapter/mock_http2_visitor.h
index 1754345..d6f437b 100644
--- a/quiche/http2/adapter/mock_http2_visitor.h
+++ b/quiche/http2/adapter/mock_http2_visitor.h
@@ -63,26 +63,20 @@
 
   MOCK_METHOD(void, OnEndStream, (Http2StreamId stream_id), (override));
 
-  MOCK_METHOD(void,
-              OnRstStream,
-              (Http2StreamId stream_id, Http2ErrorCode error_code),
-              (override));
+  MOCK_METHOD(void, OnRstStream,
+              (Http2StreamId stream_id, Http2ErrorCode error_code), (override));
 
   MOCK_METHOD(bool, OnCloseStream,
               (Http2StreamId stream_id, Http2ErrorCode error_code), (override));
 
-  MOCK_METHOD(void,
-              OnPriorityForStream,
-              (Http2StreamId stream_id,
-               Http2StreamId parent_stream_id,
-               int weight,
-               bool exclusive),
+  MOCK_METHOD(void, OnPriorityForStream,
+              (Http2StreamId stream_id, Http2StreamId parent_stream_id,
+               int weight, bool exclusive),
               (override));
 
   MOCK_METHOD(void, OnPing, (Http2PingId ping_id, bool is_ack), (override));
 
-  MOCK_METHOD(void,
-              OnPushPromiseForStream,
+  MOCK_METHOD(void, OnPushPromiseForStream,
               (Http2StreamId stream_id, Http2StreamId promised_stream_id),
               (override));
 
@@ -91,10 +85,8 @@
                absl::string_view opaque_data),
               (override));
 
-  MOCK_METHOD(void,
-              OnWindowUpdate,
-              (Http2StreamId stream_id, int window_increment),
-              (override));
+  MOCK_METHOD(void, OnWindowUpdate,
+              (Http2StreamId stream_id, int window_increment), (override));
 
   MOCK_METHOD(int, OnBeforeFrameSent,
               (uint8_t frame_type, Http2StreamId stream_id, size_t length,
@@ -109,10 +101,8 @@
   MOCK_METHOD(bool, OnInvalidFrame,
               (Http2StreamId stream_id, InvalidFrameError error), (override));
 
-  MOCK_METHOD(void,
-              OnBeginMetadataForStream,
-              (Http2StreamId stream_id, size_t payload_length),
-              (override));
+  MOCK_METHOD(void, OnBeginMetadataForStream,
+              (Http2StreamId stream_id, size_t payload_length), (override));
 
   MOCK_METHOD(bool, OnMetadataForStream,
               (Http2StreamId stream_id, absl::string_view metadata),
diff --git a/quiche/http2/adapter/mock_nghttp2_callbacks.h b/quiche/http2/adapter/mock_nghttp2_callbacks.h
index 88faf24..1bda756 100644
--- a/quiche/http2/adapter/mock_nghttp2_callbacks.h
+++ b/quiche/http2/adapter/mock_nghttp2_callbacks.h
@@ -22,33 +22,23 @@
   // The caller takes ownership of the |nghttp2_session_callbacks|.
   static nghttp2_session_callbacks_unique_ptr GetCallbacks();
 
-  MOCK_METHOD(ssize_t,
-              Send,
-              (const uint8_t* data, size_t length, int flags),
+  MOCK_METHOD(ssize_t, Send, (const uint8_t* data, size_t length, int flags),
               ());
 
-  MOCK_METHOD(int,
-              SendData,
-              (nghttp2_frame * frame,
-               const uint8_t* framehd,
-               size_t length,
+  MOCK_METHOD(int, SendData,
+              (nghttp2_frame * frame, const uint8_t* framehd, size_t length,
                nghttp2_data_source* source),
               ());
 
   MOCK_METHOD(int, OnBeginHeaders, (const nghttp2_frame* frame), ());
 
-  MOCK_METHOD(int,
-              OnHeader,
-              (const nghttp2_frame* frame,
-               absl::string_view name,
-               absl::string_view value,
-               uint8_t flags),
+  MOCK_METHOD(int, OnHeader,
+              (const nghttp2_frame* frame, absl::string_view name,
+               absl::string_view value, uint8_t flags),
               ());
 
-  MOCK_METHOD(int,
-              OnDataChunkRecv,
-              (uint8_t flags, int32_t stream_id, absl::string_view data),
-              ());
+  MOCK_METHOD(int, OnDataChunkRecv,
+              (uint8_t flags, int32_t stream_id, absl::string_view data), ());
 
   MOCK_METHOD(int, OnBeginFrame, (const nghttp2_frame_hd* hd), ());
 
@@ -60,20 +50,14 @@
 
   MOCK_METHOD(int, OnFrameSend, (const nghttp2_frame* frame), ());
 
-  MOCK_METHOD(int,
-              OnFrameNotSend,
-              (const nghttp2_frame* frame, int lib_error_code),
-              ());
+  MOCK_METHOD(int, OnFrameNotSend,
+              (const nghttp2_frame* frame, int lib_error_code), ());
 
-  MOCK_METHOD(int,
-              OnInvalidFrameRecv,
-              (const nghttp2_frame* frame, int error_code),
-              ());
+  MOCK_METHOD(int, OnInvalidFrameRecv,
+              (const nghttp2_frame* frame, int error_code), ());
 
-  MOCK_METHOD(int,
-              OnErrorCallback2,
-              (int lib_error_code, const char* msg, size_t len),
-              ());
+  MOCK_METHOD(int, OnErrorCallback2,
+              (int lib_error_code, const char* msg, size_t len), ());
 
   MOCK_METHOD(ssize_t, OnPackExtension,
               (uint8_t * buf, size_t len, const nghttp2_frame* frame), ());
diff --git a/quiche/http2/adapter/nghttp2_adapter.cc b/quiche/http2/adapter/nghttp2_adapter.cc
index f68779a..b2cb7c8 100644
--- a/quiche/http2/adapter/nghttp2_adapter.cc
+++ b/quiche/http2/adapter/nghttp2_adapter.cc
@@ -89,8 +89,7 @@
 
 void NgHttp2Adapter::SubmitPriorityForStream(Http2StreamId stream_id,
                                              Http2StreamId parent_stream_id,
-                                             int weight,
-                                             bool exclusive) {
+                                             int weight, bool exclusive) {
   nghttp2_priority_spec priority_spec;
   nghttp2_priority_spec_init(&priority_spec, parent_stream_id, weight,
                              static_cast<int>(exclusive));
diff --git a/quiche/http2/adapter/nghttp2_adapter.h b/quiche/http2/adapter/nghttp2_adapter.h
index 02bb9f0..6e34f74 100644
--- a/quiche/http2/adapter/nghttp2_adapter.h
+++ b/quiche/http2/adapter/nghttp2_adapter.h
@@ -34,8 +34,7 @@
   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,
-                               int weight,
+                               Http2StreamId parent_stream_id, int weight,
                                bool exclusive) override;
 
   // Submits a PING on the connection. Note that nghttp2 automatically submits
diff --git a/quiche/http2/adapter/nghttp2_callbacks.cc b/quiche/http2/adapter/nghttp2_callbacks.cc
index a474c0e..ae6d2d1 100644
--- a/quiche/http2/adapter/nghttp2_callbacks.cc
+++ b/quiche/http2/adapter/nghttp2_callbacks.cc
@@ -33,8 +33,7 @@
   }
 }
 
-int OnBeginFrame(nghttp2_session* /* session */,
-                 const nghttp2_frame_hd* header,
+int OnBeginFrame(nghttp2_session* /* session */, const nghttp2_frame_hd* header,
                  void* user_data) {
   QUICHE_CHECK_NE(user_data, nullptr);
   auto* visitor = static_cast<Http2VisitorInterface*>(user_data);
@@ -51,8 +50,7 @@
   return result ? 0 : NGHTTP2_ERR_CALLBACK_FAILURE;
 }
 
-int OnFrameReceived(nghttp2_session* /* session */,
-                    const nghttp2_frame* frame,
+int OnFrameReceived(nghttp2_session* /* session */, const nghttp2_frame* frame,
                     void* user_data) {
   QUICHE_CHECK_NE(user_data, nullptr);
   auto* visitor = static_cast<Http2VisitorInterface*>(user_data);
@@ -156,8 +154,7 @@
   return 0;
 }
 
-int OnBeginHeaders(nghttp2_session* /* session */,
-                   const nghttp2_frame* frame,
+int OnBeginHeaders(nghttp2_session* /* session */, const nghttp2_frame* frame,
                    void* user_data) {
   QUICHE_CHECK_NE(user_data, nullptr);
   auto* visitor = static_cast<Http2VisitorInterface*>(user_data);
@@ -246,10 +243,8 @@
   return result ? 0 : NGHTTP2_ERR_CALLBACK_FAILURE;
 }
 
-int OnStreamClosed(nghttp2_session* /* session */,
-                   Http2StreamId stream_id,
-                   uint32_t error_code,
-                   void* user_data) {
+int OnStreamClosed(nghttp2_session* /* session */, Http2StreamId stream_id,
+                   uint32_t error_code, void* user_data) {
   QUICHE_CHECK_NE(user_data, nullptr);
   auto* visitor = static_cast<Http2VisitorInterface*>(user_data);
   const bool result =
diff --git a/quiche/http2/adapter/nghttp2_callbacks.h b/quiche/http2/adapter/nghttp2_callbacks.h
index 51f9c74..dfdff06 100644
--- a/quiche/http2/adapter/nghttp2_callbacks.h
+++ b/quiche/http2/adapter/nghttp2_callbacks.h
@@ -16,11 +16,8 @@
 // Http2VisitorInterface.
 
 // Callback once the library is ready to send serialized frames.
-ssize_t OnReadyToSend(nghttp2_session* session,
-                      const uint8_t* data,
-                      size_t length,
-                      int flags,
-                      void* user_data);
+ssize_t OnReadyToSend(nghttp2_session* session, const uint8_t* data,
+                      size_t length, int flags, void* user_data);
 
 // Callback once a frame header has been received.
 int OnBeginFrame(nghttp2_session* session, const nghttp2_frame_hd* header,
@@ -31,8 +28,7 @@
                     void* user_data);
 
 // Callback at the start of a frame carrying headers.
-int OnBeginHeaders(nghttp2_session* session,
-                   const nghttp2_frame* frame,
+int OnBeginHeaders(nghttp2_session* session, const nghttp2_frame* frame,
                    void* user_data);
 
 // Callback once a name-value header has been received.
diff --git a/quiche/http2/adapter/nghttp2_data_provider.cc b/quiche/http2/adapter/nghttp2_data_provider.cc
index 0a22fb3..f10b2b8 100644
--- a/quiche/http2/adapter/nghttp2_data_provider.cc
+++ b/quiche/http2/adapter/nghttp2_data_provider.cc
@@ -12,10 +12,8 @@
 }
 
 ssize_t DataFrameSourceReadCallback(nghttp2_session* /* session */,
-                                    int32_t /* stream_id */,
-                                    uint8_t* /* buf */,
-                                    size_t length,
-                                    uint32_t* data_flags,
+                                    int32_t /* stream_id */, uint8_t* /* buf */,
+                                    size_t length, uint32_t* data_flags,
                                     nghttp2_data_source* source,
                                     void* /* user_data */) {
   *data_flags |= NGHTTP2_DATA_FLAG_NO_COPY;
@@ -37,8 +35,7 @@
 
 int DataFrameSourceSendCallback(nghttp2_session* /* session */,
                                 nghttp2_frame* /* frame */,
-                                const uint8_t* framehd,
-                                size_t length,
+                                const uint8_t* framehd, size_t length,
                                 nghttp2_data_source* source,
                                 void* /* user_data */) {
   auto* frame_source = static_cast<DataFrameSource*>(source->ptr);
diff --git a/quiche/http2/adapter/nghttp2_data_provider.h b/quiche/http2/adapter/nghttp2_data_provider.h
index 5973998..a3f0957 100644
--- a/quiche/http2/adapter/nghttp2_data_provider.h
+++ b/quiche/http2/adapter/nghttp2_data_provider.h
@@ -13,17 +13,14 @@
 
 // Assumes |source| is a DataFrameSource.
 ssize_t DataFrameSourceReadCallback(nghttp2_session* /*session */,
-                                    int32_t /* stream_id */,
-                                    uint8_t* /* buf */,
-                                    size_t length,
-                                    uint32_t* data_flags,
+                                    int32_t /* stream_id */, uint8_t* /* buf */,
+                                    size_t length, uint32_t* data_flags,
                                     nghttp2_data_source* source,
                                     void* /* user_data */);
 
 int DataFrameSourceSendCallback(nghttp2_session* /* session */,
                                 nghttp2_frame* /* frame */,
-                                const uint8_t* framehd,
-                                size_t length,
+                                const uint8_t* framehd, size_t length,
                                 nghttp2_data_source* source,
                                 void* /* user_data */);
 
diff --git a/quiche/http2/adapter/nghttp2_util.cc b/quiche/http2/adapter/nghttp2_util.cc
index faf5dd5..f2abee6 100644
--- a/quiche/http2/adapter/nghttp2_util.cc
+++ b/quiche/http2/adapter/nghttp2_util.cc
@@ -86,8 +86,7 @@
 }
 
 std::vector<nghttp2_nv> GetResponseNghttp2Nvs(
-    const spdy::Http2HeaderBlock& headers,
-    absl::string_view response_code) {
+    const spdy::Http2HeaderBlock& headers, absl::string_view response_code) {
   // Allocate enough for all headers and also the :status pseudoheader.
   const int num_headers = headers.size();
   std::vector<nghttp2_nv> nghttp2_nvs;
@@ -162,8 +161,7 @@
 class Nghttp2DataFrameSource : public DataFrameSource {
  public:
   Nghttp2DataFrameSource(nghttp2_data_provider provider,
-                         nghttp2_send_data_callback send_data,
-                         void* user_data)
+                         nghttp2_send_data_callback send_data, void* user_data)
       : provider_(std::move(provider)),
         send_data_(std::move(send_data)),
         user_data_(user_data) {}
@@ -215,8 +213,7 @@
 };
 
 std::unique_ptr<DataFrameSource> MakeZeroCopyDataFrameSource(
-    nghttp2_data_provider provider,
-    void* user_data,
+    nghttp2_data_provider provider, void* user_data,
     nghttp2_send_data_callback send_data) {
   return absl::make_unique<Nghttp2DataFrameSource>(
       std::move(provider), std::move(send_data), user_data);
diff --git a/quiche/http2/adapter/nghttp2_util.h b/quiche/http2/adapter/nghttp2_util.h
index 5e8b201..15178bf 100644
--- a/quiche/http2/adapter/nghttp2_util.h
+++ b/quiche/http2/adapter/nghttp2_util.h
@@ -49,8 +49,7 @@
 // the :status pseudoheader first based on the given |response_code|. The
 // |response_code| is passed in separately from |headers| for lifetime reasons.
 std::vector<nghttp2_nv> GetResponseNghttp2Nvs(
-    const spdy::Http2HeaderBlock& headers,
-    absl::string_view response_code);
+    const spdy::Http2HeaderBlock& headers, absl::string_view response_code);
 
 // Returns the HTTP/2 error code corresponding to the raw wire value, as defined
 // in RFC 7540 Section 7. Unrecognized error codes are treated as INTERNAL_ERROR
@@ -66,8 +65,7 @@
 // |provider| uses the zero-copy nghttp2_data_source_read_callback API. Unsafe
 // otherwise.
 std::unique_ptr<DataFrameSource> MakeZeroCopyDataFrameSource(
-    nghttp2_data_provider provider,
-    void* user_data,
+    nghttp2_data_provider provider, void* user_data,
     nghttp2_send_data_callback send_data);
 
 void LogBeforeSend(const nghttp2_frame& frame);
diff --git a/quiche/http2/adapter/oghttp2_adapter.cc b/quiche/http2/adapter/oghttp2_adapter.cc
index 9c43c76..a5bf877 100644
--- a/quiche/http2/adapter/oghttp2_adapter.cc
+++ b/quiche/http2/adapter/oghttp2_adapter.cc
@@ -20,8 +20,7 @@
 
 /* static */
 std::unique_ptr<OgHttp2Adapter> OgHttp2Adapter::Create(
-    Http2VisitorInterface& visitor,
-    Options options) {
+    Http2VisitorInterface& visitor, Options options) {
   // Using `new` to access a non-public constructor.
   return absl::WrapUnique(new OgHttp2Adapter(visitor, std::move(options)));
 }
@@ -42,8 +41,7 @@
 
 void OgHttp2Adapter::SubmitPriorityForStream(Http2StreamId stream_id,
                                              Http2StreamId parent_stream_id,
-                                             int weight,
-                                             bool exclusive) {
+                                             int weight, bool exclusive) {
   session_->EnqueueFrame(absl::make_unique<SpdyPriorityIR>(
       stream_id, parent_stream_id, weight, exclusive));
 }
diff --git a/quiche/http2/adapter/oghttp2_adapter.h b/quiche/http2/adapter/oghttp2_adapter.h
index c1534c0..be1cd66 100644
--- a/quiche/http2/adapter/oghttp2_adapter.h
+++ b/quiche/http2/adapter/oghttp2_adapter.h
@@ -27,8 +27,7 @@
   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,
-                               int weight,
+                               Http2StreamId parent_stream_id, int weight,
                                bool exclusive) override;
   void SubmitPing(Http2PingId ping_id) override;
   void SubmitShutdownNotice() override;
diff --git a/quiche/http2/adapter/oghttp2_session.cc b/quiche/http2/adapter/oghttp2_session.cc
index 7d99ab2..af78c76 100644
--- a/quiche/http2/adapter/oghttp2_session.cc
+++ b/quiche/http2/adapter/oghttp2_session.cc
@@ -241,8 +241,7 @@
 }
 
 void OgHttp2Session::PassthroughHeadersHandler::OnHeader(
-    absl::string_view key,
-    absl::string_view value) {
+    absl::string_view key, absl::string_view value) {
   if (result_ != Http2VisitorInterface::HEADER_OK) {
     QUICHE_VLOG(2) << "Early return; status not HEADER_OK";
     return;
@@ -1026,10 +1025,8 @@
   LatchErrorAndNotify(GetHttp2ErrorCode(error), ConnectionError::kParseError);
 }
 
-void OgHttp2Session::OnCommonHeader(spdy::SpdyStreamId stream_id,
-                                    size_t length,
-                                    uint8_t type,
-                                    uint8_t flags) {
+void OgHttp2Session::OnCommonHeader(spdy::SpdyStreamId stream_id, size_t length,
+                                    uint8_t type, uint8_t flags) {
   highest_received_stream_id_ = std::max(static_cast<Http2StreamId>(stream_id),
                                          highest_received_stream_id_);
   if (streams_reset_.contains(stream_id)) {
@@ -1097,8 +1094,7 @@
 }
 
 void OgHttp2Session::OnStreamFrameData(spdy::SpdyStreamId stream_id,
-                                       const char* data,
-                                       size_t len) {
+                                       const char* data, size_t len) {
   // Count the data against flow control, even if the stream is unknown.
   MarkDataBuffered(stream_id, len);
 
@@ -1276,9 +1272,7 @@
   visitor_.OnSetting({id, value});
 }
 
-void OgHttp2Session::OnSettingsEnd() {
-  visitor_.OnSettingsEnd();
-}
+void OgHttp2Session::OnSettingsEnd() { visitor_.OnSettingsEnd(); }
 
 void OgHttp2Session::OnSettingsAck() {
   if (!settings_ack_callbacks_.empty()) {
diff --git a/quiche/http2/adapter/oghttp2_session.h b/quiche/http2/adapter/oghttp2_session.h
index a451079..8757f09 100644
--- a/quiche/http2/adapter/oghttp2_session.h
+++ b/quiche/http2/adapter/oghttp2_session.h
@@ -151,15 +151,11 @@
   // From SpdyFramerVisitorInterface
   void OnError(http2::Http2DecoderAdapter::SpdyFramerError error,
                std::string detailed_error) override;
-  void OnCommonHeader(spdy::SpdyStreamId /*stream_id*/,
-                      size_t /*length*/,
-                      uint8_t /*type*/,
-                      uint8_t /*flags*/) override;
-  void OnDataFrameHeader(spdy::SpdyStreamId stream_id,
-                         size_t length,
+  void OnCommonHeader(spdy::SpdyStreamId /*stream_id*/, size_t /*length*/,
+                      uint8_t /*type*/, uint8_t /*flags*/) override;
+  void OnDataFrameHeader(spdy::SpdyStreamId stream_id, size_t length,
                          bool fin) override;
-  void OnStreamFrameData(spdy::SpdyStreamId stream_id,
-                         const char* data,
+  void OnStreamFrameData(spdy::SpdyStreamId stream_id, const char* data,
                          size_t len) override;
   void OnStreamEnd(spdy::SpdyStreamId stream_id) override;
   void OnStreamPadLength(spdy::SpdyStreamId /*stream_id*/,
@@ -178,25 +174,19 @@
   void OnGoAway(spdy::SpdyStreamId last_accepted_stream_id,
                 spdy::SpdyErrorCode error_code) override;
   bool OnGoAwayFrameData(const char* goaway_data, size_t len) override;
-  void OnHeaders(spdy::SpdyStreamId stream_id,
-                 bool has_priority,
-                 int weight,
-                 spdy::SpdyStreamId parent_stream_id,
-                 bool exclusive,
-                 bool fin,
+  void OnHeaders(spdy::SpdyStreamId stream_id, bool has_priority, int weight,
+                 spdy::SpdyStreamId parent_stream_id, bool exclusive, bool fin,
                  bool end) override;
   void OnWindowUpdate(spdy::SpdyStreamId stream_id,
                       int delta_window_size) override;
   void OnPushPromise(spdy::SpdyStreamId stream_id,
-                     spdy::SpdyStreamId promised_stream_id,
-                     bool end) override;
+                     spdy::SpdyStreamId promised_stream_id, bool end) override;
   void OnContinuation(spdy::SpdyStreamId stream_id, bool end) override;
   void OnAltSvc(spdy::SpdyStreamId /*stream_id*/, absl::string_view /*origin*/,
                 const spdy::SpdyAltSvcWireFormat::
                     AlternativeServiceVector& /*altsvc_vector*/) override;
   void OnPriority(spdy::SpdyStreamId stream_id,
-                  spdy::SpdyStreamId parent_stream_id,
-                  int weight,
+                  spdy::SpdyStreamId parent_stream_id, int weight,
                   bool exclusive) override;
   void OnPriorityUpdate(spdy::SpdyStreamId prioritized_stream_id,
                         absl::string_view priority_field_value) override;
diff --git a/quiche/http2/adapter/recording_http2_visitor.cc b/quiche/http2/adapter/recording_http2_visitor.cc
index fe6e080..6321fd8 100644
--- a/quiche/http2/adapter/recording_http2_visitor.cc
+++ b/quiche/http2/adapter/recording_http2_visitor.cc
@@ -99,8 +99,7 @@
 
 void RecordingHttp2Visitor::OnPriorityForStream(Http2StreamId stream_id,
                                                 Http2StreamId parent_stream_id,
-                                                int weight,
-                                                bool exclusive) {
+                                                int weight, bool exclusive) {
   events_.push_back(absl::StrFormat("OnPriorityForStream %d %d %d %d",
                                     stream_id, parent_stream_id, weight,
                                     exclusive));
@@ -111,8 +110,7 @@
 }
 
 void RecordingHttp2Visitor::OnPushPromiseForStream(
-    Http2StreamId stream_id,
-    Http2StreamId promised_stream_id) {
+    Http2StreamId stream_id, Http2StreamId promised_stream_id) {
   events_.push_back(absl::StrFormat("OnPushPromiseForStream %d %d", stream_id,
                                     promised_stream_id));
 }
diff --git a/quiche/http2/adapter/recording_http2_visitor.h b/quiche/http2/adapter/recording_http2_visitor.h
index 27d98a0..4310e4c 100644
--- a/quiche/http2/adapter/recording_http2_visitor.h
+++ b/quiche/http2/adapter/recording_http2_visitor.h
@@ -44,8 +44,7 @@
   bool OnCloseStream(Http2StreamId stream_id,
                      Http2ErrorCode error_code) override;
   void OnPriorityForStream(Http2StreamId stream_id,
-                           Http2StreamId parent_stream_id,
-                           int weight,
+                           Http2StreamId parent_stream_id, int weight,
                            bool exclusive) override;
   void OnPing(Http2PingId ping_id, bool is_ack) override;
   void OnPushPromiseForStream(Http2StreamId stream_id,
diff --git a/quiche/http2/adapter/test_frame_sequence.cc b/quiche/http2/adapter/test_frame_sequence.cc
index c462c45..b91caf6 100644
--- a/quiche/http2/adapter/test_frame_sequence.cc
+++ b/quiche/http2/adapter/test_frame_sequence.cc
@@ -30,8 +30,7 @@
 }
 
 TestFrameSequence& TestFrameSequence::Data(Http2StreamId stream_id,
-                                           absl::string_view payload,
-                                           bool fin,
+                                           absl::string_view payload, bool fin,
                                            absl::optional<int> padding_length) {
   auto data = absl::make_unique<spdy::SpdyDataIR>(stream_id, payload);
   data->set_fin(fin);
@@ -146,8 +145,7 @@
 
 TestFrameSequence& TestFrameSequence::Priority(Http2StreamId stream_id,
                                                Http2StreamId parent_stream_id,
-                                               int weight,
-                                               bool exclusive) {
+                                               int weight, bool exclusive) {
   frames_.push_back(absl::make_unique<spdy::SpdyPriorityIR>(
       stream_id, parent_stream_id, weight, exclusive));
   return *this;
diff --git a/quiche/http2/adapter/test_frame_sequence.h b/quiche/http2/adapter/test_frame_sequence.h
index e7943fa..e8d5bac 100644
--- a/quiche/http2/adapter/test_frame_sequence.h
+++ b/quiche/http2/adapter/test_frame_sequence.h
@@ -25,8 +25,7 @@
       absl::Span<const Http2Setting> settings = {});
   TestFrameSequence& ServerPreface(
       absl::Span<const Http2Setting> settings = {});
-  TestFrameSequence& Data(Http2StreamId stream_id,
-                          absl::string_view payload,
+  TestFrameSequence& Data(Http2StreamId stream_id, absl::string_view payload,
                           bool fin = false,
                           absl::optional<int> padding_length = absl::nullopt);
   TestFrameSequence& RstStream(Http2StreamId stream_id, Http2ErrorCode error);
@@ -52,8 +51,7 @@
                              bool add_continuation = false);
   TestFrameSequence& WindowUpdate(Http2StreamId stream_id, int32_t delta);
   TestFrameSequence& Priority(Http2StreamId stream_id,
-                              Http2StreamId parent_stream_id,
-                              int weight,
+                              Http2StreamId parent_stream_id, int weight,
                               bool exclusive);
   TestFrameSequence& Metadata(Http2StreamId stream_id,
                               absl::string_view payload,
