Rename QUICHE_EXPORT_PRIVATE to QUICHE_EXPORT

We do not distinguish between those in practice, and this is causing confusion, so we should stick to one, and QUICHE_EXPORT is shorter.

PiperOrigin-RevId: 482823752
diff --git a/quiche/balsa/balsa_enums.h b/quiche/balsa/balsa_enums.h
index 34bfd4d..07a46bf 100644
--- a/quiche/balsa/balsa_enums.h
+++ b/quiche/balsa/balsa_enums.h
@@ -9,7 +9,7 @@
 
 namespace quiche {
 
-struct QUICHE_EXPORT_PRIVATE BalsaFrameEnums {
+struct QUICHE_EXPORT BalsaFrameEnums {
   enum ParseState : int {
     ERROR,
     READING_HEADER_AND_FIRSTLINE,
@@ -112,7 +112,7 @@
   static const char* ErrorCodeToString(ErrorCode error_code);
 };
 
-struct QUICHE_EXPORT_PRIVATE BalsaHeadersEnums {
+struct QUICHE_EXPORT BalsaHeadersEnums {
   enum ContentLengthStatus : int {
     INVALID_CONTENT_LENGTH,
     CONTENT_LENGTH_OVERFLOW,
diff --git a/quiche/balsa/balsa_frame.h b/quiche/balsa/balsa_frame.h
index 70d3aaf..a698298 100644
--- a/quiche/balsa/balsa_frame.h
+++ b/quiche/balsa/balsa_frame.h
@@ -28,7 +28,7 @@
 }  // namespace test
 
 // BalsaFrame is a lightweight HTTP framer.
-class QUICHE_EXPORT_PRIVATE BalsaFrame : public FramerInterface {
+class QUICHE_EXPORT BalsaFrame : public FramerInterface {
  public:
   typedef std::vector<std::pair<size_t, size_t> > Lines;
 
diff --git a/quiche/balsa/balsa_headers.h b/quiche/balsa/balsa_headers.h
index 3287cc0..106b3d7 100644
--- a/quiche/balsa/balsa_headers.h
+++ b/quiche/balsa/balsa_headers.h
@@ -75,7 +75,7 @@
 //    - at this point, perhaps just use a vector of strings, and let
 //      the allocator do the right thing.
 //
-class QUICHE_EXPORT_PRIVATE BalsaBuffer {
+class QUICHE_EXPORT BalsaBuffer {
  public:
   static constexpr size_t kDefaultBlocksize = 4096;
 
@@ -85,7 +85,7 @@
   // sizes and bytes free. It *may* be possible to replace this
   // with a vector<char>, but it's unclear whether moving a vector
   // can invalidate pointers into it. LWG issue 2321 proposes to fix this.
-  struct QUICHE_EXPORT_PRIVATE BufferBlock {
+  struct QUICHE_EXPORT BufferBlock {
    public:
     std::unique_ptr<char[]> buffer;
     size_t buffer_size = 0;
@@ -362,13 +362,13 @@
 //
 //  Key comparisons are case-insensitive.
 
-class QUICHE_EXPORT_PRIVATE BalsaHeaders : public HeaderApi {
+class QUICHE_EXPORT BalsaHeaders : public HeaderApi {
  public:
   // Each header line is parsed into a HeaderLineDescription, which maintains
   // pointers into the BalsaBuffer.
   //
   // Succinctly describes one header line as indices into a buffer.
-  struct QUICHE_EXPORT_PRIVATE HeaderLineDescription {
+  struct QUICHE_EXPORT HeaderLineDescription {
     HeaderLineDescription(size_t first_character_index, size_t key_end_index,
                           size_t value_begin_index, size_t last_character_index,
                           size_t buffer_base_index)
@@ -418,7 +418,7 @@
 
   // A simple class that can be used in a range-based for loop.
   template <typename IteratorType>
-  class QUICHE_EXPORT_PRIVATE iterator_range {
+  class QUICHE_EXPORT iterator_range {
    public:
     using iterator = IteratorType;
     using const_iterator = IteratorType;
@@ -1180,7 +1180,7 @@
 
 // Base class for iterating the headers in a BalsaHeaders object, returning a
 // pair of string_view's for each header.
-class QUICHE_EXPORT_PRIVATE BalsaHeaders::iterator_base
+class QUICHE_EXPORT BalsaHeaders::iterator_base
     : public std::iterator<std::forward_iterator_tag,
                            std::pair<absl::string_view, absl::string_view>> {
  public:
@@ -1223,8 +1223,8 @@
   // operator<< work for the classes it sees.  It would be better if there
   // was an additional traits-like system for the gUnit output... but oh
   // well.
-  friend QUICHE_EXPORT_PRIVATE std::ostream& operator<<(
-      std::ostream& os, const iterator_base& it) {
+  friend QUICHE_EXPORT std::ostream& operator<<(std::ostream& os,
+                                                const iterator_base& it) {
     os << "[" << it.headers_ << ", " << it.idx_ << "]";
     return os;
   }
@@ -1276,7 +1276,7 @@
 };
 
 // A const iterator for all the header lines.
-class QUICHE_EXPORT_PRIVATE BalsaHeaders::const_header_lines_iterator
+class QUICHE_EXPORT BalsaHeaders::const_header_lines_iterator
     : public BalsaHeaders::iterator_base {
  public:
   const_header_lines_iterator() : iterator_base() {}
@@ -1295,7 +1295,7 @@
 };
 
 // A const iterator that stops only on header lines for a particular key.
-class QUICHE_EXPORT_PRIVATE BalsaHeaders::const_header_lines_key_iterator
+class QUICHE_EXPORT BalsaHeaders::const_header_lines_key_iterator
     : public BalsaHeaders::iterator_base {
  public:
   const_header_lines_key_iterator& operator++() {
diff --git a/quiche/balsa/balsa_visitor_interface.h b/quiche/balsa/balsa_visitor_interface.h
index 7dc9de7..74aed5c 100644
--- a/quiche/balsa/balsa_visitor_interface.h
+++ b/quiche/balsa/balsa_visitor_interface.h
@@ -21,7 +21,7 @@
 // BalsaFrame, then you should subclass it, and set an instantiation of your
 // subclass as the current visitor for the BalsaFrame class using
 // BalsaFrame::set_visitor().
-class QUICHE_EXPORT_PRIVATE BalsaVisitorInterface {
+class QUICHE_EXPORT BalsaVisitorInterface {
  public:
   virtual ~BalsaVisitorInterface() {}
 
diff --git a/quiche/balsa/framer_interface.h b/quiche/balsa/framer_interface.h
index eaa143b..fdb0f7d 100644
--- a/quiche/balsa/framer_interface.h
+++ b/quiche/balsa/framer_interface.h
@@ -13,7 +13,7 @@
 
 // A minimal interface supported by BalsaFrame and other framer types. For use
 // in HttpReader.
-class QUICHE_EXPORT_PRIVATE FramerInterface {
+class QUICHE_EXPORT FramerInterface {
  public:
   virtual ~FramerInterface() {}
   virtual size_t ProcessInput(const char* input, size_t length) = 0;
diff --git a/quiche/balsa/header_api.h b/quiche/balsa/header_api.h
index 09789f5..889c984 100644
--- a/quiche/balsa/header_api.h
+++ b/quiche/balsa/header_api.h
@@ -36,7 +36,7 @@
 // already lowercaseified. It's faster to avoid converting them to and from
 // lowercase. Additionally, some implementations of ConstHeaderApi might take
 // advantage of a constant-time lookup for inlined headers.
-class QUICHE_EXPORT_PRIVATE ConstHeaderApi {
+class QUICHE_EXPORT ConstHeaderApi {
  public:
   virtual ~ConstHeaderApi() {}
 
@@ -186,7 +186,7 @@
 //
 // Operations on header keys are case-insensitive while operations on header
 // values are case-sensitive.
-class QUICHE_EXPORT_PRIVATE HeaderApi : public virtual ConstHeaderApi {
+class QUICHE_EXPORT HeaderApi : public virtual ConstHeaderApi {
  public:
   // Replaces header entries with key |key| if they exist, or appends
   // a new header if none exist.
diff --git a/quiche/balsa/header_properties.h b/quiche/balsa/header_properties.h
index f94eaa2..cbd5c59 100644
--- a/quiche/balsa/header_properties.h
+++ b/quiche/balsa/header_properties.h
@@ -16,7 +16,7 @@
 // practices) indicates that header can have multiple values. Note that nothing
 // stops clients from sending multiple values of other headers, so this may not
 // be perfectly reliable in practice.
-QUICHE_EXPORT_PRIVATE bool IsMultivaluedHeader(absl::string_view header);
+QUICHE_EXPORT bool IsMultivaluedHeader(absl::string_view header);
 
 // An array of characters that are invalid in HTTP header field names.
 // These are control characters, including \t, \n, \r, as well as space and
@@ -39,11 +39,11 @@
     0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x7F};
 
 // Returns true if the given `c` is invalid in a header field name.
-QUICHE_EXPORT_PRIVATE bool IsInvalidHeaderKeyChar(uint8_t c);
+QUICHE_EXPORT bool IsInvalidHeaderKeyChar(uint8_t c);
 // Returns true if the given `c` is invalid in a header field or the `value` has
 // invalid characters.
-QUICHE_EXPORT_PRIVATE bool IsInvalidHeaderChar(uint8_t c);
-QUICHE_EXPORT_PRIVATE bool HasInvalidHeaderChars(absl::string_view value);
+QUICHE_EXPORT bool IsInvalidHeaderChar(uint8_t c);
+QUICHE_EXPORT bool HasInvalidHeaderChars(absl::string_view value);
 
 }  // namespace quiche::header_properties
 
diff --git a/quiche/balsa/http_validation_policy.h b/quiche/balsa/http_validation_policy.h
index b51b1d5..89926c6 100644
--- a/quiche/balsa/http_validation_policy.h
+++ b/quiche/balsa/http_validation_policy.h
@@ -14,7 +14,7 @@
 // An HttpValidationPolicy captures policy choices affecting parsing of HTTP
 // requests.  It offers individual Boolean member functions to be consulted
 // during the parsing of an HTTP request.
-class QUICHE_EXPORT_PRIVATE HttpValidationPolicy {
+class QUICHE_EXPORT HttpValidationPolicy {
  public:
   HttpValidationPolicy(bool enforce_all);
 
@@ -39,7 +39,7 @@
 
   bool operator==(const HttpValidationPolicy& other) const;
 
-  friend QUICHE_EXPORT_PRIVATE std::ostream& operator<<(
+  friend QUICHE_EXPORT std::ostream& operator<<(
       std::ostream& os, const HttpValidationPolicy& policy) {
     os << "HttpValidationPolicy(enforce_all_=" << policy.enforce_all_ << ")";
     return os;
diff --git a/quiche/balsa/noop_balsa_visitor.h b/quiche/balsa/noop_balsa_visitor.h
index 4045cf8..9555b52 100644
--- a/quiche/balsa/noop_balsa_visitor.h
+++ b/quiche/balsa/noop_balsa_visitor.h
@@ -18,7 +18,7 @@
 // Provides empty BalsaVisitorInterface overrides for convenience.
 // Intended to be used as a base class for BalsaVisitorInterface subclasses that
 // only need to override a small number of methods.
-class QUICHE_EXPORT_PRIVATE NoOpBalsaVisitor : public BalsaVisitorInterface {
+class QUICHE_EXPORT NoOpBalsaVisitor : public BalsaVisitorInterface {
  public:
   NoOpBalsaVisitor() = default;
 
diff --git a/quiche/balsa/simple_buffer.h b/quiche/balsa/simple_buffer.h
index fe81e33..96fd25f 100644
--- a/quiche/balsa/simple_buffer.h
+++ b/quiche/balsa/simple_buffer.h
@@ -18,7 +18,7 @@
 // SimpleBuffer stores data in a contiguous region.  It can grow on demand,
 // which involves moving its data.  It keeps track of a read and a write
 // position.  Reading consumes data.
-class QUICHE_EXPORT_PRIVATE SimpleBuffer {
+class QUICHE_EXPORT SimpleBuffer {
  public:
   SimpleBuffer() = default;
   // Create SimpleBuffer with at least `size` reserved capacity.
diff --git a/quiche/binary_http/binary_http_message.h b/quiche/binary_http/binary_http_message.h
index 70e1dff..250e109 100644
--- a/quiche/binary_http/binary_http_message.h
+++ b/quiche/binary_http/binary_http_message.h
@@ -20,7 +20,7 @@
 // Supports encoding and decoding Binary Http messages.
 // Currently limited to known-length messages.
 // https://www.ietf.org/archive/id/draft-ietf-httpbis-binary-message-06.html
-class QUICHE_EXPORT_PRIVATE BinaryHttpMessage {
+class QUICHE_EXPORT BinaryHttpMessage {
  public:
   // Name value pair of either a header or trailer field.
   struct Field {
@@ -108,7 +108,7 @@
   bool has_host_ = false;
 };
 
-class QUICHE_EXPORT_PRIVATE BinaryHttpRequest : public BinaryHttpMessage {
+class QUICHE_EXPORT BinaryHttpRequest : public BinaryHttpMessage {
  public:
   // HTTP request must have all of the following fields.
   // Some examples are:
@@ -161,10 +161,9 @@
   const ControlData control_data_;
 };
 
-void QUICHE_EXPORT_PRIVATE PrintTo(const BinaryHttpRequest& msg,
-                                   std::ostream* os);
+void QUICHE_EXPORT PrintTo(const BinaryHttpRequest& msg, std::ostream* os);
 
-class QUICHE_EXPORT_PRIVATE BinaryHttpResponse : public BinaryHttpMessage {
+class QUICHE_EXPORT BinaryHttpResponse : public BinaryHttpMessage {
  public:
   // https://www.ietf.org/archive/id/draft-ietf-httpbis-binary-message-06.html#name-response-control-data
   // A response can contain 0 to N informational responses.  Each informational
@@ -259,8 +258,7 @@
   const uint16_t status_code_;
 };
 
-void QUICHE_EXPORT_PRIVATE PrintTo(const BinaryHttpResponse& msg,
-                                   std::ostream* os);
+void QUICHE_EXPORT PrintTo(const BinaryHttpResponse& msg, std::ostream* os);
 }  // namespace quiche
 
 #endif  // QUICHE_BINARY_HTTP_BINARY_HTTP_MESSAGE_H_
diff --git a/quiche/common/masque/connect_udp_datagram_payload.h b/quiche/common/masque/connect_udp_datagram_payload.h
index 8091670..adc0fea 100644
--- a/quiche/common/masque/connect_udp_datagram_payload.h
+++ b/quiche/common/masque/connect_udp_datagram_payload.h
@@ -17,7 +17,7 @@
 
 // UDP-proxying HTTP Datagram payload for use with CONNECT-UDP. See RFC 9298,
 // Section 5.
-class QUICHE_EXPORT_PRIVATE ConnectUdpDatagramPayload {
+class QUICHE_EXPORT ConnectUdpDatagramPayload {
  public:
   using ContextId = uint64_t;
   enum class Type { kUdpPacket, kUnknown };
@@ -54,7 +54,7 @@
 };
 
 // UDP-proxying HTTP Datagram payload that encodes a UDP packet.
-class QUICHE_EXPORT_PRIVATE ConnectUdpDatagramUdpPacketPayload final
+class QUICHE_EXPORT ConnectUdpDatagramUdpPacketPayload final
     : public ConnectUdpDatagramPayload {
  public:
   static constexpr ContextId kContextId = 0;
@@ -75,7 +75,7 @@
   absl::string_view udp_packet_;
 };
 
-class QUICHE_EXPORT_PRIVATE ConnectUdpDatagramUnknownPayload final
+class QUICHE_EXPORT ConnectUdpDatagramUnknownPayload final
     : public ConnectUdpDatagramPayload {
  public:
   // `udp_proxying_payload` represents the inner payload contained by the UDP-
diff --git a/quiche/common/platform/api/quiche_export.h b/quiche/common/platform/api/quiche_export.h
index 4f64819..3f11ccc 100644
--- a/quiche/common/platform/api/quiche_export.h
+++ b/quiche/common/platform/api/quiche_export.h
@@ -7,13 +7,11 @@
 
 #include "quiche_platform_impl/quiche_export_impl.h"
 
-// QUICHE_EXPORT is not meant to be used.
+// QUICHE_EXPORT is meant for QUICHE functionality that is built in
+// Chromium as part of //net/third_party/quiche component, and not fully
+// contained in headers.  It is required for Windows DLL builds to work.
 #define QUICHE_EXPORT QUICHE_EXPORT_IMPL
 
-// QUICHE_EXPORT_PRIVATE is meant for QUICHE functionality that is built in
-// Chromium as part of //net, and not fully contained in headers.
-#define QUICHE_EXPORT_PRIVATE QUICHE_EXPORT_PRIVATE_IMPL
-
 // QUICHE_NO_EXPORT is meant for QUICHE functionality that is either fully
 // defined in a header, or is built in Chromium as part of tests or tools.
 #define QUICHE_NO_EXPORT QUICHE_NO_EXPORT_IMPL
diff --git a/quiche/common/platform/api/quiche_hostname_utils.h b/quiche/common/platform/api/quiche_hostname_utils.h
index 00c611f..10aa399 100644
--- a/quiche/common/platform/api/quiche_hostname_utils.h
+++ b/quiche/common/platform/api/quiche_hostname_utils.h
@@ -12,7 +12,7 @@
 
 namespace quiche {
 
-class QUICHE_EXPORT_PRIVATE QuicheHostnameUtils {
+class QUICHE_EXPORT QuicheHostnameUtils {
  public:
   QuicheHostnameUtils() = delete;
 
diff --git a/quiche/common/platform/api/quiche_mem_slice.h b/quiche/common/platform/api/quiche_mem_slice.h
index 42c3e58..18319f8 100644
--- a/quiche/common/platform/api/quiche_mem_slice.h
+++ b/quiche/common/platform/api/quiche_mem_slice.h
@@ -16,7 +16,7 @@
 
 // QuicheMemSlice is a wrapper around a platform-specific I/O buffer type. It
 // may be reference counted, though QUICHE itself does not rely on that.
-class QUICHE_EXPORT_PRIVATE QuicheMemSlice {
+class QUICHE_EXPORT QuicheMemSlice {
  public:
   // Constructs a empty QuicheMemSlice with no underlying data.
   QuicheMemSlice() = default;
diff --git a/quiche/common/platform/api/quiche_mutex.h b/quiche/common/platform/api/quiche_mutex.h
index ce982bc..11e6287 100644
--- a/quiche/common/platform/api/quiche_mutex.h
+++ b/quiche/common/platform/api/quiche_mutex.h
@@ -21,7 +21,7 @@
 namespace quiche {
 
 // A class representing a non-reentrant mutex in QUIC.
-class QUICHE_LOCKABLE QUICHE_EXPORT_PRIVATE QuicheMutex {
+class QUICHE_LOCKABLE QUICHE_EXPORT QuicheMutex {
  public:
   QuicheMutex() = default;
   QuicheMutex(const QuicheMutex&) = delete;
@@ -50,7 +50,7 @@
 
 // A helper class that acquires the given QuicheMutex shared lock while the
 // QuicheReaderMutexLock is in scope.
-class QUICHE_SCOPED_LOCKABLE QUICHE_EXPORT_PRIVATE QuicheReaderMutexLock {
+class QUICHE_SCOPED_LOCKABLE QUICHE_EXPORT QuicheReaderMutexLock {
  public:
   explicit QuicheReaderMutexLock(QuicheMutex* lock)
       QUICHE_SHARED_LOCK_FUNCTION(lock);
@@ -65,7 +65,7 @@
 
 // A helper class that acquires the given QuicheMutex exclusive lock while the
 // QuicheWriterMutexLock is in scope.
-class QUICHE_SCOPED_LOCKABLE QUICHE_EXPORT_PRIVATE QuicheWriterMutexLock {
+class QUICHE_SCOPED_LOCKABLE QUICHE_EXPORT QuicheWriterMutexLock {
  public:
   explicit QuicheWriterMutexLock(QuicheMutex* lock)
       QUICHE_EXCLUSIVE_LOCK_FUNCTION(lock);
@@ -80,7 +80,7 @@
 
 // A Notification allows threads to receive notification of a single occurrence
 // of a single event.
-class QUICHE_EXPORT_PRIVATE QuicheNotification {
+class QUICHE_EXPORT QuicheNotification {
  public:
   QuicheNotification() = default;
   QuicheNotification(const QuicheNotification&) = delete;
diff --git a/quiche/common/platform/api/quiche_reference_counted.h b/quiche/common/platform/api/quiche_reference_counted.h
index 61016da..226a155 100644
--- a/quiche/common/platform/api/quiche_reference_counted.h
+++ b/quiche/common/platform/api/quiche_reference_counted.h
@@ -11,8 +11,7 @@
 namespace quiche {
 
 // Base class for explicitly reference-counted objects in QUIC.
-class QUICHE_EXPORT_PRIVATE QuicheReferenceCounted
-    : public QuicheReferenceCountedImpl {
+class QUICHE_EXPORT QuicheReferenceCounted : public QuicheReferenceCountedImpl {
  public:
   QuicheReferenceCounted() {}
 
diff --git a/quiche/common/platform/api/quiche_thread.h b/quiche/common/platform/api/quiche_thread.h
index 96a596b..0a15e23 100644
--- a/quiche/common/platform/api/quiche_thread.h
+++ b/quiche/common/platform/api/quiche_thread.h
@@ -13,7 +13,7 @@
 namespace quiche {
 
 // A class representing a thread of execution in QUIC.
-class QUICHE_EXPORT_PRIVATE QuicheThread : public QuicheThreadImpl {
+class QUICHE_EXPORT QuicheThread : public QuicheThreadImpl {
  public:
   QuicheThread(const std::string& string) : QuicheThreadImpl(string) {}
   QuicheThread(const QuicheThread&) = delete;
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_export_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_export_impl.h
index 74018b0..64396f7 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_export_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_export_impl.h
@@ -13,7 +13,6 @@
 #define QUICHE_EXPORT_IMPL
 #endif
 
-#define QUICHE_EXPORT_PRIVATE_IMPL QUICHE_EXPORT_IMPL
 #define QUICHE_NO_EXPORT_IMPL QUICHE_EXPORT_IMPL
 
 #endif  // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_EXPORT_IMPL_H_
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_flags_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_flags_impl.h
index 9e97b26..4565cd8 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_flags_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_flags_impl.h
@@ -13,19 +13,19 @@
 
 #include "quiche/common/platform/api/quiche_export.h"
 
-#define QUIC_FLAG(flag, value) QUICHE_EXPORT_PRIVATE extern bool FLAGS_##flag;
+#define QUIC_FLAG(flag, value) QUICHE_EXPORT extern bool FLAGS_##flag;
 #include "quiche/quic/core/quic_flags_list.h"
 #undef QUIC_FLAG
 
 // Protocol flags.  TODO(bnc): Move to quiche_protocol_flags_list.h.
 #define QUIC_PROTOCOL_FLAG(type, flag, ...) \
-  QUICHE_EXPORT_PRIVATE extern type FLAGS_##flag;
+  QUICHE_EXPORT extern type FLAGS_##flag;
 #include "quiche/quic/core/quic_protocol_flags_list.h"
 #undef QUIC_PROTOCOL_FLAG
 
 // Protocol flags.
 #define QUICHE_PROTOCOL_FLAG(type, flag, ...) \
-  QUICHE_EXPORT_PRIVATE extern type FLAGS_##flag;
+  QUICHE_EXPORT extern type FLAGS_##flag;
 #include "quiche/common/quiche_protocol_flags_list.h"
 #undef QUICHE_PROTOCOL_FLAG
 
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_iovec_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_iovec_impl.h
index 51bebc4..b4ac17f 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_iovec_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_iovec_impl.h
@@ -10,7 +10,7 @@
 #if defined(_WIN32)
 
 // See <https://pubs.opengroup.org/onlinepubs/009604599/basedefs/sys/uio.h.html>
-struct QUICHE_EXPORT_PRIVATE iovec {
+struct QUICHE_EXPORT iovec {
   void* iov_base;
   size_t iov_len;
 };
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_logging_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_logging_impl.h
index c2372ca..7ab2966 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_logging_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_logging_impl.h
@@ -22,7 +22,7 @@
 
 namespace quiche {
 
-class QUICHE_EXPORT_PRIVATE LogStreamVoidHelper {
+class QUICHE_EXPORT LogStreamVoidHelper {
  public:
   // This operator has lower precedence than << but higher than ?:, which is
   // useful for implementing QUICHE_DISREGARD_LOG_STREAM below.
@@ -31,7 +31,7 @@
 
 // NoopLogSink provides a log sink that does not put the data that it logs
 // anywhere.
-class QUICHE_EXPORT_PRIVATE NoopLogSink {
+class QUICHE_EXPORT NoopLogSink {
  public:
   NoopLogSink() {}
 
@@ -52,7 +52,7 @@
 
 // We need to actually implement LOG(FATAL), otherwise some functions will fail
 // to compile due to the "failed to return value from non-void function" error.
-class QUICHE_EXPORT_PRIVATE FatalLogSink : public NoopLogSink {
+class QUICHE_EXPORT FatalLogSink : public NoopLogSink {
  public:
   ABSL_ATTRIBUTE_NORETURN ~FatalLogSink() {
     std::cerr << str() << std::endl;
@@ -61,7 +61,7 @@
   }
 };
 
-class QUICHE_EXPORT_PRIVATE CheckLogSink : public NoopLogSink {
+class QUICHE_EXPORT CheckLogSink : public NoopLogSink {
  public:
   CheckLogSink(bool condition) : condition_(condition) {}
   ~CheckLogSink() {
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_lower_case_string_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_lower_case_string_impl.h
index 856928a..5761012 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_lower_case_string_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_lower_case_string_impl.h
@@ -9,7 +9,7 @@
 
 namespace quiche {
 
-class QUICHE_EXPORT_PRIVATE QuicheLowerCaseStringImpl {
+class QUICHE_EXPORT QuicheLowerCaseStringImpl {
  public:
   QuicheLowerCaseStringImpl(absl::string_view str)
       : str_(absl::AsciiStrToLower(str)) {}
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_mem_slice_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_mem_slice_impl.h
index a40fa94..b422b5c 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_mem_slice_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_mem_slice_impl.h
@@ -7,7 +7,7 @@
 
 namespace quiche {
 
-class QUICHE_EXPORT_PRIVATE QuicheMemSliceImpl {
+class QUICHE_EXPORT QuicheMemSliceImpl {
  public:
   QuicheMemSliceImpl() = default;
 
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.h
index e358c2b..c6f6655 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.h
@@ -19,7 +19,7 @@
 namespace quiche {
 
 // A class wrapping a non-reentrant mutex.
-class ABSL_LOCKABLE QUICHE_EXPORT_PRIVATE QuicheLockImpl {
+class ABSL_LOCKABLE QUICHE_EXPORT QuicheLockImpl {
  public:
   QuicheLockImpl() = default;
   QuicheLockImpl(const QuicheLockImpl&) = delete;
@@ -47,7 +47,7 @@
 
 // A Notification allows threads to receive notification of a single occurrence
 // of a single event.
-class QUICHE_EXPORT_PRIVATE QuicheNotificationImpl {
+class QUICHE_EXPORT QuicheNotificationImpl {
  public:
   QuicheNotificationImpl() = default;
   QuicheNotificationImpl(const QuicheNotificationImpl&) = delete;
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_reference_counted_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_reference_counted_impl.h
index 8f8a514..b568da6 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_reference_counted_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_reference_counted_impl.h
@@ -14,7 +14,7 @@
 
 namespace quiche {
 
-class QUICHE_EXPORT_PRIVATE QuicheReferenceCountedImpl {
+class QUICHE_EXPORT QuicheReferenceCountedImpl {
  public:
   virtual ~QuicheReferenceCountedImpl() { QUICHE_DCHECK_EQ(ref_count_, 0); }
 
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_system_event_loop_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_system_event_loop_impl.h
index c3305c2..f810fa8 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_system_event_loop_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_system_event_loop_impl.h
@@ -12,7 +12,7 @@
 
 inline void QuicheRunSystemEventLoopIterationImpl() {}
 
-class QUICHE_EXPORT_PRIVATE QuicheSystemEventLoopImpl {
+class QUICHE_EXPORT QuicheSystemEventLoopImpl {
  public:
   QuicheSystemEventLoopImpl(std::string context_name) {
     QUICHE_LOG(INFO) << "Starting event loop for " << context_name;
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.h
index dd042a3..45d87e0 100644
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.h
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.h
@@ -19,7 +19,7 @@
 // Parameters are URL-encoded. Collects the names of any expanded variables in
 // |vars_found|. Supports level 1 templates as specified in RFC 6570. Returns
 // true if the template was parseable, false if it was malformed.
-QUICHE_EXPORT_PRIVATE bool ExpandURITemplateImpl(
+QUICHE_EXPORT bool ExpandURITemplateImpl(
     const std::string& uri_template,
     const absl::flat_hash_map<std::string, std::string>& parameters,
     std::string* target,
@@ -27,7 +27,7 @@
 
 // Decodes a URL-encoded string and converts it to ASCII. If the decoded input
 // contains non-ASCII characters, decoding fails and absl::nullopt is returned.
-QUICHE_EXPORT_PRIVATE absl::optional<std::string> AsciiUrlDecodeImpl(
+QUICHE_EXPORT absl::optional<std::string> AsciiUrlDecodeImpl(
     absl::string_view input);
 
 }  // namespace quiche
diff --git a/quiche/common/print_elements.h b/quiche/common/print_elements.h
index 627b4c9..ae69c40 100644
--- a/quiche/common/print_elements.h
+++ b/quiche/common/print_elements.h
@@ -16,7 +16,7 @@
 // Print elements of any iterable container that has cbegin() and cend() methods
 // and the elements have operator<<(ostream) override.
 template <typename T>
-QUICHE_EXPORT_PRIVATE inline std::string PrintElements(const T& container) {
+QUICHE_EXPORT inline std::string PrintElements(const T& container) {
   std::stringstream debug_string;
   debug_string << "{";
   auto it = container.cbegin();
diff --git a/quiche/common/quiche_buffer_allocator.h b/quiche/common/quiche_buffer_allocator.h
index 6bb1af9..0f36842 100644
--- a/quiche/common/quiche_buffer_allocator.h
+++ b/quiche/common/quiche_buffer_allocator.h
@@ -16,7 +16,7 @@
 namespace quiche {
 
 // Abstract base class for classes which allocate and delete buffers.
-class QUICHE_EXPORT_PRIVATE QuicheBufferAllocator {
+class QUICHE_EXPORT QuicheBufferAllocator {
  public:
   virtual ~QuicheBufferAllocator() = default;
 
@@ -38,7 +38,7 @@
 
 // A deleter that can be used to manage ownership of buffers allocated via
 // QuicheBufferAllocator through std::unique_ptr.
-class QUICHE_EXPORT_PRIVATE QuicheBufferDeleter {
+class QUICHE_EXPORT QuicheBufferDeleter {
  public:
   explicit QuicheBufferDeleter(QuicheBufferAllocator* allocator)
       : allocator_(allocator) {}
@@ -62,7 +62,7 @@
 // QuicheMemSlice, except unlike QuicheMemSlice, QuicheBuffer is mutable and is
 // not platform-specific.  Also unlike QuicheMemSlice, QuicheBuffer can be
 // empty.
-class QUICHE_EXPORT_PRIVATE QuicheBuffer {
+class QUICHE_EXPORT QuicheBuffer {
  public:
   QuicheBuffer() : buffer_(nullptr, QuicheBufferDeleter(nullptr)), size_(0) {}
   QuicheBuffer(QuicheBufferAllocator* allocator, size_t size)
diff --git a/quiche/common/quiche_data_reader.h b/quiche/common/quiche_data_reader.h
index ed05b69..9f7dd56 100644
--- a/quiche/common/quiche_data_reader.h
+++ b/quiche/common/quiche_data_reader.h
@@ -26,7 +26,7 @@
 // trusted and it is up to the caller to throw away the failed instance and
 // handle the error as appropriate. None of the Read*() methods should ever be
 // called after failure, as they will also fail immediately.
-class QUICHE_EXPORT_PRIVATE QuicheDataReader {
+class QUICHE_EXPORT QuicheDataReader {
  public:
   // Constructs a reader using NETWORK_BYTE_ORDER endianness.
   // Caller must provide an underlying buffer to work on.
diff --git a/quiche/common/quiche_data_writer.h b/quiche/common/quiche_data_writer.h
index 8035bb2..bb691cd 100644
--- a/quiche/common/quiche_data_writer.h
+++ b/quiche/common/quiche_data_writer.h
@@ -40,7 +40,7 @@
 // The QuicheDataWriter supports appending primitive values (int, string, etc)
 // to a frame instance.  The internal memory buffer is exposed as the "data"
 // of the QuicheDataWriter.
-class QUICHE_EXPORT_PRIVATE QuicheDataWriter {
+class QUICHE_EXPORT QuicheDataWriter {
  public:
   // Creates a QuicheDataWriter where |buffer| is not owned
   // using NETWORK_BYTE_ORDER endianness.
diff --git a/quiche/common/quiche_endian.h b/quiche/common/quiche_endian.h
index 5af28af..2aaa478 100644
--- a/quiche/common/quiche_endian.h
+++ b/quiche/common/quiche_endian.h
@@ -20,7 +20,7 @@
 
 // Provide utility functions that convert from/to network order (big endian)
 // to/from host order (little endian).
-class QUICHE_EXPORT_PRIVATE QuicheEndian {
+class QUICHE_EXPORT QuicheEndian {
  public:
   // Convert |x| from host order (little endian) to network order (big endian).
 #if defined(__clang__) || \
diff --git a/quiche/common/quiche_ip_address.h b/quiche/common/quiche_ip_address.h
index 9267922..a6eeffd 100644
--- a/quiche/common/quiche_ip_address.h
+++ b/quiche/common/quiche_ip_address.h
@@ -25,7 +25,7 @@
 namespace quiche {
 
 // Represents an IP address.
-class QUICHE_EXPORT_PRIVATE QuicheIpAddress {
+class QUICHE_EXPORT QuicheIpAddress {
  public:
   // Sizes of IP addresses of different types, in bytes.
   enum : size_t {
@@ -46,10 +46,10 @@
   explicit QuicheIpAddress(const in6_addr& ipv6_address);
   QuicheIpAddress& operator=(const QuicheIpAddress& other) = default;
   QuicheIpAddress& operator=(QuicheIpAddress&& other) = default;
-  QUICHE_EXPORT_PRIVATE friend bool operator==(QuicheIpAddress lhs,
-                                               QuicheIpAddress rhs);
-  QUICHE_EXPORT_PRIVATE friend bool operator!=(QuicheIpAddress lhs,
-                                               QuicheIpAddress rhs);
+  QUICHE_EXPORT friend bool operator==(QuicheIpAddress lhs,
+                                       QuicheIpAddress rhs);
+  QUICHE_EXPORT friend bool operator!=(QuicheIpAddress lhs,
+                                       QuicheIpAddress rhs);
 
   bool IsInitialized() const;
   IpAddressFamily address_family() const;
@@ -95,7 +95,7 @@
 }
 
 // Represents an IP prefix, which is an IP address and a prefix length in bits.
-class QUICHE_EXPORT_PRIVATE QuicheIpPrefix {
+class QUICHE_EXPORT QuicheIpPrefix {
  public:
   QuicheIpPrefix();
   explicit QuicheIpPrefix(const QuicheIpAddress& address);
@@ -110,10 +110,10 @@
   QuicheIpPrefix(const QuicheIpPrefix& other) = default;
   QuicheIpPrefix& operator=(const QuicheIpPrefix& other) = default;
   QuicheIpPrefix& operator=(QuicheIpPrefix&& other) = default;
-  QUICHE_EXPORT_PRIVATE friend bool operator==(const QuicheIpPrefix& lhs,
-                                               const QuicheIpPrefix& rhs);
-  QUICHE_EXPORT_PRIVATE friend bool operator!=(const QuicheIpPrefix& lhs,
-                                               const QuicheIpPrefix& rhs);
+  QUICHE_EXPORT friend bool operator==(const QuicheIpPrefix& lhs,
+                                       const QuicheIpPrefix& rhs);
+  QUICHE_EXPORT friend bool operator!=(const QuicheIpPrefix& lhs,
+                                       const QuicheIpPrefix& rhs);
 
  private:
   QuicheIpAddress address_;
diff --git a/quiche/common/quiche_mem_slice_storage.h b/quiche/common/quiche_mem_slice_storage.h
index 0b6376a..1439d63 100644
--- a/quiche/common/quiche_mem_slice_storage.h
+++ b/quiche/common/quiche_mem_slice_storage.h
@@ -18,7 +18,7 @@
 
 // QuicheMemSliceStorage is a container class that store QuicheMemSlices for
 // further use cases such as turning into QuicheMemSliceSpan.
-class QUICHE_EXPORT_PRIVATE QuicheMemSliceStorage {
+class QUICHE_EXPORT QuicheMemSliceStorage {
  public:
   QuicheMemSliceStorage(const struct iovec* iov, int iov_count,
                         QuicheBufferAllocator* allocator,
diff --git a/quiche/common/quiche_random.h b/quiche/common/quiche_random.h
index 7ee2995..724bcca 100644
--- a/quiche/common/quiche_random.h
+++ b/quiche/common/quiche_random.h
@@ -9,7 +9,7 @@
 namespace quiche {
 
 // The interface for a random number generator.
-class QUICHE_EXPORT_PRIVATE QuicheRandom {
+class QUICHE_EXPORT QuicheRandom {
  public:
   virtual ~QuicheRandom() {}
 
diff --git a/quiche/common/quiche_text_utils.h b/quiche/common/quiche_text_utils.h
index 2398559..b433718 100644
--- a/quiche/common/quiche_text_utils.h
+++ b/quiche/common/quiche_text_utils.h
@@ -17,7 +17,7 @@
 
 namespace quiche {
 
-struct QUICHE_EXPORT_PRIVATE StringPieceCaseHash {
+struct QUICHE_EXPORT StringPieceCaseHash {
   size_t operator()(absl::string_view data) const {
     std::string lower = absl::AsciiStrToLower(data);
     absl::Hash<absl::string_view> hasher;
@@ -25,14 +25,14 @@
   }
 };
 
-struct QUICHE_EXPORT_PRIVATE StringPieceCaseEqual {
+struct QUICHE_EXPORT StringPieceCaseEqual {
   bool operator()(absl::string_view piece1, absl::string_view piece2) const {
     return absl::EqualsIgnoreCase(piece1, piece2);
   }
 };
 
 // Various utilities for manipulating text.
-class QUICHE_EXPORT_PRIVATE QuicheTextUtils {
+class QUICHE_EXPORT QuicheTextUtils {
  public:
   // Returns a new string in which |data| has been converted to lower case.
   static std::string ToLower(absl::string_view data) {
diff --git a/quiche/common/simple_buffer_allocator.h b/quiche/common/simple_buffer_allocator.h
index d5ed06f..babfa55 100644
--- a/quiche/common/simple_buffer_allocator.h
+++ b/quiche/common/simple_buffer_allocator.h
@@ -13,8 +13,7 @@
 // Provides buffer allocation using operators new[] and delete[] on char arrays.
 // Note that some of the QUICHE code relies on this being the case for deleting
 // new[]-allocated arrays from elsewhere.
-class QUICHE_EXPORT_PRIVATE SimpleBufferAllocator
-    : public QuicheBufferAllocator {
+class QUICHE_EXPORT SimpleBufferAllocator : public QuicheBufferAllocator {
  public:
   static SimpleBufferAllocator* Get() {
     static SimpleBufferAllocator* singleton = new SimpleBufferAllocator();
diff --git a/quiche/common/structured_headers.h b/quiche/common/structured_headers.h
index 8e0520b..c9f2795 100644
--- a/quiche/common/structured_headers.h
+++ b/quiche/common/structured_headers.h
@@ -57,7 +57,7 @@
 // present in Structured Header values, and will cause the entire header to fail
 // to parse.)
 
-class QUICHE_EXPORT_PRIVATE Item {
+class QUICHE_EXPORT Item {
  public:
   enum ItemType {
     kNullType,
@@ -77,8 +77,7 @@
   Item(const char* value, Item::ItemType type = kStringType);
   Item(std::string value, Item::ItemType type = kStringType);
 
-  QUICHE_EXPORT_PRIVATE friend bool operator==(const Item& lhs,
-                                               const Item& rhs);
+  QUICHE_EXPORT friend bool operator==(const Item& lhs, const Item& rhs);
   inline friend bool operator!=(const Item& lhs, const Item& rhs) {
     return !(lhs == rhs);
   }
@@ -145,7 +144,7 @@
 // Holds a ParameterizedIdentifier (draft 9 only). The contained Item must be a
 // Token, and there may be any number of parameters. Parameter ordering is not
 // significant.
-struct QUICHE_EXPORT_PRIVATE ParameterisedIdentifier {
+struct QUICHE_EXPORT ParameterisedIdentifier {
   using Parameters = std::map<std::string, Item>;
 
   Item identifier;
@@ -166,7 +165,7 @@
 
 using Parameters = std::vector<std::pair<std::string, Item>>;
 
-struct QUICHE_EXPORT_PRIVATE ParameterizedItem {
+struct QUICHE_EXPORT ParameterizedItem {
   Item item;
   Parameters params;
 
@@ -190,7 +189,7 @@
 // Holds a ParameterizedMember, which may be either an single Item, or an Inner
 // List of ParameterizedItems, along with any number of parameters. Parameter
 // ordering is significant.
-struct QUICHE_EXPORT_PRIVATE ParameterizedMember {
+struct QUICHE_EXPORT ParameterizedMember {
   std::vector<ParameterizedItem> member;
   // If false, then |member| should only hold one Item.
   bool member_is_inner_list = false;
@@ -218,7 +217,7 @@
 using DictionaryMember = std::pair<std::string, ParameterizedMember>;
 
 // Structured Headers RFC8941 Dictionary.
-class QUICHE_EXPORT_PRIVATE Dictionary {
+class QUICHE_EXPORT Dictionary {
  public:
   using iterator = std::vector<DictionaryMember>::iterator;
   using const_iterator = std::vector<DictionaryMember>::const_iterator;
@@ -277,13 +276,13 @@
 // Returns the result of parsing the header value as an Item, if it can be
 // parsed as one, or nullopt if it cannot. Note that this uses the Draft 15
 // parsing rules, and so applies tighter range limits to integers.
-QUICHE_EXPORT_PRIVATE absl::optional<ParameterizedItem> ParseItem(
+QUICHE_EXPORT absl::optional<ParameterizedItem> ParseItem(
     absl::string_view str);
 
 // Returns the result of parsing the header value as an Item with no parameters,
 // or nullopt if it cannot. Note that this uses the Draft 15 parsing rules, and
 // so applies tighter range limits to integers.
-QUICHE_EXPORT_PRIVATE absl::optional<Item> ParseBareItem(absl::string_view str);
+QUICHE_EXPORT absl::optional<Item> ParseBareItem(absl::string_view str);
 
 // Returns the result of parsing the header value as a Parameterised List, if it
 // can be parsed as one, or nullopt if it cannot. Note that parameter keys will
@@ -291,7 +290,7 @@
 // as well as parameter values, will be returned as Items. This method uses the
 // Draft 09 parsing rules for Items, so integers have the 64-bit int range.
 // Structured-Headers Draft 09 only.
-QUICHE_EXPORT_PRIVATE absl::optional<ParameterisedList> ParseParameterisedList(
+QUICHE_EXPORT absl::optional<ParameterisedList> ParseParameterisedList(
     absl::string_view str);
 
 // Returns the result of parsing the header value as a List of Lists, if it can
@@ -299,28 +298,26 @@
 // as Items. This method uses the Draft 09 parsing rules for Items, so integers
 // have the 64-bit int range.
 // Structured-Headers Draft 09 only.
-QUICHE_EXPORT_PRIVATE absl::optional<ListOfLists> ParseListOfLists(
+QUICHE_EXPORT absl::optional<ListOfLists> ParseListOfLists(
     absl::string_view str);
 
 // Returns the result of parsing the header value as a general List, if it can
 // be parsed as one, or nullopt if it cannot.
 // Structured-Headers Draft 15 only.
-QUICHE_EXPORT_PRIVATE absl::optional<List> ParseList(absl::string_view str);
+QUICHE_EXPORT absl::optional<List> ParseList(absl::string_view str);
 
 // Returns the result of parsing the header value as a general Dictionary, if it
 // can be parsed as one, or nullopt if it cannot. Structured-Headers Draft 15
 // only.
-QUICHE_EXPORT_PRIVATE absl::optional<Dictionary> ParseDictionary(
+QUICHE_EXPORT absl::optional<Dictionary> ParseDictionary(
     const absl::string_view& str);
 
 // Serialization is implemented for Structured-Headers Draft 15 only.
-QUICHE_EXPORT_PRIVATE absl::optional<std::string> SerializeItem(
-    const Item& value);
-QUICHE_EXPORT_PRIVATE absl::optional<std::string> SerializeItem(
+QUICHE_EXPORT absl::optional<std::string> SerializeItem(const Item& value);
+QUICHE_EXPORT absl::optional<std::string> SerializeItem(
     const ParameterizedItem& value);
-QUICHE_EXPORT_PRIVATE absl::optional<std::string> SerializeList(
-    const List& value);
-QUICHE_EXPORT_PRIVATE absl::optional<std::string> SerializeDictionary(
+QUICHE_EXPORT absl::optional<std::string> SerializeList(const List& value);
+QUICHE_EXPORT absl::optional<std::string> SerializeDictionary(
     const Dictionary& value);
 
 }  // namespace structured_headers
diff --git a/quiche/http2/adapter/callback_visitor.h b/quiche/http2/adapter/callback_visitor.h
index 217ad62..7c982e8 100644
--- a/quiche/http2/adapter/callback_visitor.h
+++ b/quiche/http2/adapter/callback_visitor.h
@@ -17,7 +17,7 @@
 
 // This visitor implementation accepts a set of nghttp2 callbacks and a "user
 // data" pointer, and invokes the callbacks according to HTTP/2 events received.
-class QUICHE_EXPORT_PRIVATE CallbackVisitor : public Http2VisitorInterface {
+class QUICHE_EXPORT CallbackVisitor : public Http2VisitorInterface {
  public:
   // Called when the visitor receives a close event for `stream_id`.
   using StreamCloseListener = std::function<void(Http2StreamId stream_id)>;
@@ -79,7 +79,7 @@
   }
 
  private:
-  struct QUICHE_EXPORT_PRIVATE StreamInfo {
+  struct QUICHE_EXPORT StreamInfo {
     bool before_sent_headers = false;
     bool sent_headers = false;
     bool received_headers = false;
diff --git a/quiche/http2/adapter/data_source.h b/quiche/http2/adapter/data_source.h
index 0c40095..ffd78a0 100644
--- a/quiche/http2/adapter/data_source.h
+++ b/quiche/http2/adapter/data_source.h
@@ -12,7 +12,7 @@
 namespace adapter {
 
 // Represents a source of DATA frames for transmission to the peer.
-class QUICHE_EXPORT_PRIVATE DataFrameSource {
+class QUICHE_EXPORT DataFrameSource {
  public:
   virtual ~DataFrameSource() {}
 
@@ -34,7 +34,7 @@
 };
 
 // Represents a source of metadata frames for transmission to the peer.
-class QUICHE_EXPORT_PRIVATE MetadataSource {
+class QUICHE_EXPORT MetadataSource {
  public:
   virtual ~MetadataSource() {}
 
diff --git a/quiche/http2/adapter/event_forwarder.h b/quiche/http2/adapter/event_forwarder.h
index efa1031..74140f9 100644
--- a/quiche/http2/adapter/event_forwarder.h
+++ b/quiche/http2/adapter/event_forwarder.h
@@ -13,8 +13,7 @@
 // provided predicate succeeds. Currently, OnHeaderFrameStart() is always
 // forwarded regardless of the predicate.
 // TODO(diannahu): Add a NoOpHeadersHandler if needed.
-class QUICHE_EXPORT_PRIVATE EventForwarder
-    : public spdy::SpdyFramerVisitorInterface {
+class QUICHE_EXPORT EventForwarder : public spdy::SpdyFramerVisitorInterface {
  public:
   // Whether the forwarder can forward events to the receiver.
   using ForwardPredicate = std::function<bool()>;
diff --git a/quiche/http2/adapter/header_validator.h b/quiche/http2/adapter/header_validator.h
index ca82b08..096f76f 100644
--- a/quiche/http2/adapter/header_validator.h
+++ b/quiche/http2/adapter/header_validator.h
@@ -12,7 +12,7 @@
 namespace http2 {
 namespace adapter {
 
-class QUICHE_EXPORT_PRIVATE HeaderValidator : public HeaderValidatorBase {
+class QUICHE_EXPORT HeaderValidator : public HeaderValidatorBase {
  public:
   HeaderValidator() = default;
 
diff --git a/quiche/http2/adapter/header_validator_base.h b/quiche/http2/adapter/header_validator_base.h
index 9a6787a..23be794 100644
--- a/quiche/http2/adapter/header_validator_base.h
+++ b/quiche/http2/adapter/header_validator_base.h
@@ -23,7 +23,7 @@
   kDisallow,
 };
 
-class QUICHE_EXPORT_PRIVATE HeaderValidatorBase {
+class QUICHE_EXPORT HeaderValidatorBase {
  public:
   HeaderValidatorBase() = default;
   virtual ~HeaderValidatorBase() = default;
diff --git a/quiche/http2/adapter/http2_adapter.h b/quiche/http2/adapter/http2_adapter.h
index efdbcb7..fb9df13 100644
--- a/quiche/http2/adapter/http2_adapter.h
+++ b/quiche/http2/adapter/http2_adapter.h
@@ -21,7 +21,7 @@
 // invokes corresponding callbacks on its passed-in Http2VisitorInterface.
 // Http2Adapter is a base class shared between client-side and server-side
 // implementations.
-class QUICHE_EXPORT_PRIVATE Http2Adapter {
+class QUICHE_EXPORT Http2Adapter {
  public:
   Http2Adapter(const Http2Adapter&) = delete;
   Http2Adapter& operator=(const Http2Adapter&) = delete;
diff --git a/quiche/http2/adapter/http2_protocol.h b/quiche/http2/adapter/http2_protocol.h
index 02a423a..0c2c2c1 100644
--- a/quiche/http2/adapter/http2_protocol.h
+++ b/quiche/http2/adapter/http2_protocol.h
@@ -34,13 +34,12 @@
 using Header = std::pair<HeaderRep, HeaderRep>;
 
 // Represents an HTTP/2 SETTINGS key-value parameter.
-struct QUICHE_EXPORT_PRIVATE Http2Setting {
+struct QUICHE_EXPORT Http2Setting {
   Http2SettingsId id;
   uint32_t value;
 };
 
-QUICHE_EXPORT_PRIVATE bool operator==(const Http2Setting& a,
-                                      const Http2Setting& b);
+QUICHE_EXPORT bool operator==(const Http2Setting& a, const Http2Setting& b);
 
 // The maximum possible stream ID.
 const Http2StreamId kMaxStreamId = 0x7FFFFFFF;
@@ -63,21 +62,15 @@
 
 // The pseudo-header fields as specified in RFC 7540 Section 8.1.2.3 (request)
 // and Section 8.1.2.4 (response).
-ABSL_CONST_INIT QUICHE_EXPORT_PRIVATE extern const char
-    kHttp2MethodPseudoHeader[];
-ABSL_CONST_INIT QUICHE_EXPORT_PRIVATE extern const char
-    kHttp2SchemePseudoHeader[];
-ABSL_CONST_INIT QUICHE_EXPORT_PRIVATE extern const char
-    kHttp2AuthorityPseudoHeader[];
-ABSL_CONST_INIT QUICHE_EXPORT_PRIVATE extern const char
-    kHttp2PathPseudoHeader[];
-ABSL_CONST_INIT QUICHE_EXPORT_PRIVATE extern const char
-    kHttp2StatusPseudoHeader[];
+ABSL_CONST_INIT QUICHE_EXPORT extern const char kHttp2MethodPseudoHeader[];
+ABSL_CONST_INIT QUICHE_EXPORT extern const char kHttp2SchemePseudoHeader[];
+ABSL_CONST_INIT QUICHE_EXPORT extern const char kHttp2AuthorityPseudoHeader[];
+ABSL_CONST_INIT QUICHE_EXPORT extern const char kHttp2PathPseudoHeader[];
+ABSL_CONST_INIT QUICHE_EXPORT extern const char kHttp2StatusPseudoHeader[];
 
-ABSL_CONST_INIT QUICHE_EXPORT_PRIVATE extern const uint8_t kMetadataFrameType;
-ABSL_CONST_INIT QUICHE_EXPORT_PRIVATE extern const uint8_t kMetadataEndFlag;
-ABSL_CONST_INIT QUICHE_EXPORT_PRIVATE extern const uint16_t
-    kMetadataExtensionId;
+ABSL_CONST_INIT QUICHE_EXPORT extern const uint8_t kMetadataFrameType;
+ABSL_CONST_INIT QUICHE_EXPORT extern const uint8_t kMetadataEndFlag;
+ABSL_CONST_INIT QUICHE_EXPORT extern const uint16_t kMetadataExtensionId;
 
 enum class FrameType : uint8_t {
   DATA = 0x0,
diff --git a/quiche/http2/adapter/http2_session.h b/quiche/http2/adapter/http2_session.h
index 0a76726..7b01000 100644
--- a/quiche/http2/adapter/http2_session.h
+++ b/quiche/http2/adapter/http2_session.h
@@ -10,10 +10,10 @@
 namespace http2 {
 namespace adapter {
 
-struct QUICHE_EXPORT_PRIVATE Http2SessionCallbacks {};
+struct QUICHE_EXPORT Http2SessionCallbacks {};
 
 // A class to represent the state of a single HTTP/2 connection.
-class QUICHE_EXPORT_PRIVATE Http2Session {
+class QUICHE_EXPORT Http2Session {
  public:
   Http2Session() = default;
   virtual ~Http2Session() {}
diff --git a/quiche/http2/adapter/http2_util.h b/quiche/http2/adapter/http2_util.h
index 00580a3..12015a3 100644
--- a/quiche/http2/adapter/http2_util.h
+++ b/quiche/http2/adapter/http2_util.h
@@ -11,22 +11,19 @@
 namespace http2 {
 namespace adapter {
 
-QUICHE_EXPORT_PRIVATE spdy::SpdyErrorCode TranslateErrorCode(
-    Http2ErrorCode code);
-QUICHE_EXPORT_PRIVATE Http2ErrorCode
-TranslateErrorCode(spdy::SpdyErrorCode code);
+QUICHE_EXPORT spdy::SpdyErrorCode TranslateErrorCode(Http2ErrorCode code);
+QUICHE_EXPORT Http2ErrorCode TranslateErrorCode(spdy::SpdyErrorCode code);
 
-QUICHE_EXPORT_PRIVATE absl::string_view ConnectionErrorToString(
+QUICHE_EXPORT absl::string_view ConnectionErrorToString(
     Http2VisitorInterface::ConnectionError error);
 
-QUICHE_EXPORT_PRIVATE absl::string_view InvalidFrameErrorToString(
+QUICHE_EXPORT absl::string_view InvalidFrameErrorToString(
     Http2VisitorInterface::InvalidFrameError error);
 
 // A WINDOW_UPDATE sending strategy that returns true if the `delta` to be sent
 // is positive and at least half of the window `limit`.
-QUICHE_EXPORT_PRIVATE bool DeltaAtLeastHalfLimit(int64_t limit,
-                                                 int64_t /*size*/,
-                                                 int64_t delta);
+QUICHE_EXPORT bool DeltaAtLeastHalfLimit(int64_t limit, int64_t /*size*/,
+                                         int64_t delta);
 
 }  // namespace adapter
 }  // namespace http2
diff --git a/quiche/http2/adapter/http2_visitor_interface.h b/quiche/http2/adapter/http2_visitor_interface.h
index 4e6bcb8..77bcd7f 100644
--- a/quiche/http2/adapter/http2_visitor_interface.h
+++ b/quiche/http2/adapter/http2_visitor_interface.h
@@ -46,7 +46,7 @@
 //     - OnCloseStream()
 //
 // More details are at RFC 7540 (go/http2spec).
-class QUICHE_EXPORT_PRIVATE Http2VisitorInterface {
+class QUICHE_EXPORT Http2VisitorInterface {
  public:
   Http2VisitorInterface(const Http2VisitorInterface&) = delete;
   Http2VisitorInterface& operator=(const Http2VisitorInterface&) = delete;
diff --git a/quiche/http2/adapter/nghttp2_adapter.h b/quiche/http2/adapter/nghttp2_adapter.h
index 6e34f74..7ae9645 100644
--- a/quiche/http2/adapter/nghttp2_adapter.h
+++ b/quiche/http2/adapter/nghttp2_adapter.h
@@ -13,7 +13,7 @@
 namespace http2 {
 namespace adapter {
 
-class QUICHE_EXPORT_PRIVATE NgHttp2Adapter : public Http2Adapter {
+class QUICHE_EXPORT NgHttp2Adapter : public Http2Adapter {
  public:
   ~NgHttp2Adapter() override;
 
diff --git a/quiche/http2/adapter/nghttp2_session.h b/quiche/http2/adapter/nghttp2_session.h
index 5837f2f..b07119f 100644
--- a/quiche/http2/adapter/nghttp2_session.h
+++ b/quiche/http2/adapter/nghttp2_session.h
@@ -12,7 +12,7 @@
 namespace adapter {
 
 // A C++ wrapper around common nghttp2_session operations.
-class QUICHE_EXPORT_PRIVATE NgHttp2Session : public Http2Session {
+class QUICHE_EXPORT NgHttp2Session : public Http2Session {
  public:
   // Does not take ownership of |options|.
   NgHttp2Session(Perspective perspective,
diff --git a/quiche/http2/adapter/noop_header_validator.h b/quiche/http2/adapter/noop_header_validator.h
index 52d1791..f6b95e9 100644
--- a/quiche/http2/adapter/noop_header_validator.h
+++ b/quiche/http2/adapter/noop_header_validator.h
@@ -9,7 +9,7 @@
 namespace adapter {
 
 // A validator that does not actually perform any validation.
-class QUICHE_EXPORT_PRIVATE NoopHeaderValidator : public HeaderValidatorBase {
+class QUICHE_EXPORT NoopHeaderValidator : public HeaderValidatorBase {
  public:
   NoopHeaderValidator() = default;
 
diff --git a/quiche/http2/adapter/oghttp2_adapter.h b/quiche/http2/adapter/oghttp2_adapter.h
index be1cd66..76e3b93 100644
--- a/quiche/http2/adapter/oghttp2_adapter.h
+++ b/quiche/http2/adapter/oghttp2_adapter.h
@@ -12,7 +12,7 @@
 namespace http2 {
 namespace adapter {
 
-class QUICHE_EXPORT_PRIVATE OgHttp2Adapter : public Http2Adapter {
+class QUICHE_EXPORT OgHttp2Adapter : public Http2Adapter {
  public:
   using Options = OgHttp2Session::Options;
   static std::unique_ptr<OgHttp2Adapter> Create(Http2VisitorInterface& visitor,
diff --git a/quiche/http2/adapter/oghttp2_session.h b/quiche/http2/adapter/oghttp2_session.h
index e28af7a..342f773 100644
--- a/quiche/http2/adapter/oghttp2_session.h
+++ b/quiche/http2/adapter/oghttp2_session.h
@@ -35,11 +35,10 @@
 namespace adapter {
 
 // This class manages state associated with a single multiplexed HTTP/2 session.
-class QUICHE_EXPORT_PRIVATE OgHttp2Session
-    : public Http2Session,
-      public spdy::SpdyFramerVisitorInterface {
+class QUICHE_EXPORT OgHttp2Session : public Http2Session,
+                                     public spdy::SpdyFramerVisitorInterface {
  public:
-  struct QUICHE_EXPORT_PRIVATE Options {
+  struct QUICHE_EXPORT Options {
     // Returns whether to send a WINDOW_UPDATE based on the window limit, window
     // size, and delta that would be sent in the WINDOW_UPDATE.
     WindowManager::ShouldWindowUpdateFn should_window_update_fn =
@@ -214,7 +213,7 @@
                       Http2VisitorInterface::OnHeaderResult result);
 
  private:
-  struct QUICHE_EXPORT_PRIVATE StreamState {
+  struct QUICHE_EXPORT StreamState {
     StreamState(int32_t stream_receive_window, int32_t stream_send_window,
                 WindowManager::WindowUpdateListener listener,
                 WindowManager::ShouldWindowUpdateFn should_window_update_fn)
@@ -238,13 +237,13 @@
   };
   using StreamStateMap = absl::flat_hash_map<Http2StreamId, StreamState>;
 
-  struct QUICHE_EXPORT_PRIVATE PendingStreamState {
+  struct QUICHE_EXPORT PendingStreamState {
     spdy::Http2HeaderBlock headers;
     std::unique_ptr<DataFrameSource> data_source;
     void* user_data = nullptr;
   };
 
-  class QUICHE_EXPORT_PRIVATE PassthroughHeadersHandler
+  class QUICHE_EXPORT PassthroughHeadersHandler
       : public spdy::SpdyHeadersHandlerInterface {
    public:
     PassthroughHeadersHandler(OgHttp2Session& session,
@@ -293,7 +292,7 @@
     bool frame_contains_fin_ = false;
   };
 
-  struct QUICHE_EXPORT_PRIVATE ProcessBytesResultVisitor;
+  struct QUICHE_EXPORT ProcessBytesResultVisitor;
 
   // Queues the connection preface, if not already done. If not
   // `sending_outbound_settings` and the preface has not yet been queued, this
diff --git a/quiche/http2/adapter/oghttp2_util.h b/quiche/http2/adapter/oghttp2_util.h
index 7d41cbd..0aba100 100644
--- a/quiche/http2/adapter/oghttp2_util.h
+++ b/quiche/http2/adapter/oghttp2_util.h
@@ -9,7 +9,7 @@
 namespace http2 {
 namespace adapter {
 
-QUICHE_EXPORT_PRIVATE spdy::Http2HeaderBlock ToHeaderBlock(
+QUICHE_EXPORT spdy::Http2HeaderBlock ToHeaderBlock(
     absl::Span<const Header> headers);
 
 }  // namespace adapter
diff --git a/quiche/http2/adapter/window_manager.h b/quiche/http2/adapter/window_manager.h
index 272f96c..759a3d3 100644
--- a/quiche/http2/adapter/window_manager.h
+++ b/quiche/http2/adapter/window_manager.h
@@ -16,7 +16,7 @@
 
 // This class keeps track of a HTTP/2 flow control window, notifying a listener
 // when a window update needs to be sent. This class is not thread-safe.
-class QUICHE_EXPORT_PRIVATE WindowManager {
+class QUICHE_EXPORT WindowManager {
  public:
   // A WindowUpdateListener is invoked when it is time to send a window update.
   using WindowUpdateListener = std::function<void(int64_t)>;
diff --git a/quiche/http2/core/http2_trace_logging.h b/quiche/http2/core/http2_trace_logging.h
index 7273770..f7218fe 100644
--- a/quiche/http2/core/http2_trace_logging.h
+++ b/quiche/http2/core/http2_trace_logging.h
@@ -29,8 +29,7 @@
 // Note any new methods in SpdyFramerVisitorInterface MUST be overridden here to
 // properly forward the event. This could be ensured by making every event in
 // SpdyFramerVisitorInterface a pure virtual.
-class QUICHE_EXPORT_PRIVATE Http2TraceLogger
-    : public spdy::SpdyFramerVisitorInterface {
+class QUICHE_EXPORT Http2TraceLogger : public spdy::SpdyFramerVisitorInterface {
  public:
   typedef spdy::SpdyAltSvcWireFormat SpdyAltSvcWireFormat;
   typedef spdy::SpdyErrorCode SpdyErrorCode;
@@ -104,7 +103,7 @@
 };
 
 // Visitor to log control frames that have been written.
-class QUICHE_EXPORT_PRIVATE Http2FrameLogger : public spdy::SpdyFrameVisitor {
+class QUICHE_EXPORT Http2FrameLogger : public spdy::SpdyFrameVisitor {
  public:
   // This class will preface all of its log messages with the value of
   // |connection_id| in hexadecimal.
diff --git a/quiche/http2/core/priority_write_scheduler.h b/quiche/http2/core/priority_write_scheduler.h
index c6d06b2..7335545 100644
--- a/quiche/http2/core/priority_write_scheduler.h
+++ b/quiche/http2/core/priority_write_scheduler.h
@@ -40,7 +40,7 @@
 // I/O event that occurred for a stream of that priority.
 //
 template <typename StreamIdType>
-class QUICHE_EXPORT_PRIVATE PriorityWriteScheduler
+class QUICHE_EXPORT PriorityWriteScheduler
     : public WriteScheduler<StreamIdType> {
  public:
   using typename WriteScheduler<StreamIdType>::StreamPrecedenceType;
@@ -290,7 +290,7 @@
 
   // State kept for all registered streams. All ready streams have ready = true
   // and should be present in priority_infos_[priority].ready_list.
-  struct QUICHE_EXPORT_PRIVATE StreamInfo {
+  struct QUICHE_EXPORT StreamInfo {
     spdy::SpdyPriority priority;
     StreamIdType stream_id;
     bool ready;
@@ -300,7 +300,7 @@
   using ReadyList = quiche::QuicheCircularDeque<StreamInfo*>;
 
   // State kept for each priority level.
-  struct QUICHE_EXPORT_PRIVATE PriorityInfo {
+  struct QUICHE_EXPORT PriorityInfo {
     // IDs of streams that are ready to write.
     ReadyList ready_list;
     // Time of latest write event for stream of this priority, in microseconds.
diff --git a/quiche/http2/core/write_scheduler.h b/quiche/http2/core/write_scheduler.h
index 6086672..ce0ddc1 100644
--- a/quiche/http2/core/write_scheduler.h
+++ b/quiche/http2/core/write_scheduler.h
@@ -32,7 +32,7 @@
 // returned by PopNextReadyStream(); when returned by that method, the stream's
 // state changes to not ready.
 template <typename StreamIdType>
-class QUICHE_EXPORT_PRIVATE WriteScheduler {
+class QUICHE_EXPORT WriteScheduler {
  public:
   typedef spdy::StreamPrecedence<StreamIdType> StreamPrecedenceType;
 
diff --git a/quiche/http2/decoder/decode_buffer.h b/quiche/http2/decoder/decode_buffer.h
index 0824b1f..5c9262f 100644
--- a/quiche/http2/decoder/decode_buffer.h
+++ b/quiche/http2/decoder/decode_buffer.h
@@ -24,7 +24,7 @@
 namespace http2 {
 class DecodeBufferSubset;
 
-class QUICHE_EXPORT_PRIVATE DecodeBuffer {
+class QUICHE_EXPORT DecodeBuffer {
  public:
   // We assume the decode buffers will typically be modest in size (i.e. often a
   // few KB, perhaps as high as 100KB). Let's make sure during testing that we
@@ -134,7 +134,7 @@
 // DecodeBuffer, though they can be nested (i.e. a DecodeBufferSubset's
 // base may itself be a DecodeBufferSubset). This avoids the AdvanceCursor
 // being called erroneously.
-class QUICHE_EXPORT_PRIVATE DecodeBufferSubset : public DecodeBuffer {
+class QUICHE_EXPORT DecodeBufferSubset : public DecodeBuffer {
  public:
   DecodeBufferSubset(DecodeBuffer* base, size_t subset_len)
       : DecodeBuffer(base->cursor(), base->MinLengthRemaining(subset_len)),
diff --git a/quiche/http2/decoder/decode_http2_structures.h b/quiche/http2/decoder/decode_http2_structures.h
index eeb69a9..9740497 100644
--- a/quiche/http2/decoder/decode_http2_structures.h
+++ b/quiche/http2/decoder/decode_http2_structures.h
@@ -17,19 +17,16 @@
 // to end, advancing the cursor by STRUCTURE::EncodedSize(). The decode buffer
 // must be large enough (i.e. b->Remaining() >= STRUCTURE::EncodedSize()).
 
-QUICHE_EXPORT_PRIVATE void DoDecode(Http2FrameHeader* out, DecodeBuffer* b);
-QUICHE_EXPORT_PRIVATE void DoDecode(Http2PriorityFields* out, DecodeBuffer* b);
-QUICHE_EXPORT_PRIVATE void DoDecode(Http2RstStreamFields* out, DecodeBuffer* b);
-QUICHE_EXPORT_PRIVATE void DoDecode(Http2SettingFields* out, DecodeBuffer* b);
-QUICHE_EXPORT_PRIVATE void DoDecode(Http2PushPromiseFields* out,
-                                    DecodeBuffer* b);
-QUICHE_EXPORT_PRIVATE void DoDecode(Http2PingFields* out, DecodeBuffer* b);
-QUICHE_EXPORT_PRIVATE void DoDecode(Http2GoAwayFields* out, DecodeBuffer* b);
-QUICHE_EXPORT_PRIVATE void DoDecode(Http2WindowUpdateFields* out,
-                                    DecodeBuffer* b);
-QUICHE_EXPORT_PRIVATE void DoDecode(Http2AltSvcFields* out, DecodeBuffer* b);
-QUICHE_EXPORT_PRIVATE void DoDecode(Http2PriorityUpdateFields* out,
-                                    DecodeBuffer* b);
+QUICHE_EXPORT void DoDecode(Http2FrameHeader* out, DecodeBuffer* b);
+QUICHE_EXPORT void DoDecode(Http2PriorityFields* out, DecodeBuffer* b);
+QUICHE_EXPORT void DoDecode(Http2RstStreamFields* out, DecodeBuffer* b);
+QUICHE_EXPORT void DoDecode(Http2SettingFields* out, DecodeBuffer* b);
+QUICHE_EXPORT void DoDecode(Http2PushPromiseFields* out, DecodeBuffer* b);
+QUICHE_EXPORT void DoDecode(Http2PingFields* out, DecodeBuffer* b);
+QUICHE_EXPORT void DoDecode(Http2GoAwayFields* out, DecodeBuffer* b);
+QUICHE_EXPORT void DoDecode(Http2WindowUpdateFields* out, DecodeBuffer* b);
+QUICHE_EXPORT void DoDecode(Http2AltSvcFields* out, DecodeBuffer* b);
+QUICHE_EXPORT void DoDecode(Http2PriorityUpdateFields* out, DecodeBuffer* b);
 
 }  // namespace http2
 
diff --git a/quiche/http2/decoder/decode_status.h b/quiche/http2/decoder/decode_status.h
index e59d68a..7571938 100644
--- a/quiche/http2/decoder/decode_status.h
+++ b/quiche/http2/decoder/decode_status.h
@@ -25,8 +25,7 @@
   // an HTTP/2 frame has padding declared to be larger than the payload).
   kDecodeError,
 };
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               DecodeStatus v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out, DecodeStatus v);
 
 }  // namespace http2
 
diff --git a/quiche/http2/decoder/frame_decoder_state.h b/quiche/http2/decoder/frame_decoder_state.h
index 3e01155..39757da 100644
--- a/quiche/http2/decoder/frame_decoder_state.h
+++ b/quiche/http2/decoder/frame_decoder_state.h
@@ -30,7 +30,7 @@
 class FrameDecoderStatePeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE FrameDecoderState {
+class QUICHE_EXPORT FrameDecoderState {
  public:
   FrameDecoderState() {}
 
diff --git a/quiche/http2/decoder/http2_frame_decoder.h b/quiche/http2/decoder/http2_frame_decoder.h
index 1df3d76..3d8f1ac 100644
--- a/quiche/http2/decoder/http2_frame_decoder.h
+++ b/quiche/http2/decoder/http2_frame_decoder.h
@@ -47,7 +47,7 @@
 class Http2FrameDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE Http2FrameDecoder {
+class QUICHE_EXPORT Http2FrameDecoder {
  public:
   explicit Http2FrameDecoder(Http2FrameDecoderListener* listener);
 
@@ -126,8 +126,7 @@
   };
 
   friend class test::Http2FrameDecoderPeer;
-  QUICHE_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& out,
-                                                        State v);
+  QUICHE_EXPORT friend std::ostream& operator<<(std::ostream& out, State v);
 
   DecodeStatus StartDecodingPayload(DecodeBuffer* db);
   DecodeStatus ResumeDecodingPayload(DecodeBuffer* db);
diff --git a/quiche/http2/decoder/http2_frame_decoder_listener.h b/quiche/http2/decoder/http2_frame_decoder_listener.h
index a6839ab..0a98b3d 100644
--- a/quiche/http2/decoder/http2_frame_decoder_listener.h
+++ b/quiche/http2/decoder/http2_frame_decoder_listener.h
@@ -39,7 +39,7 @@
 
 // TODO(jamessynge): Consider sorting the methods by frequency of call, if that
 // helps at all.
-class QUICHE_EXPORT_PRIVATE Http2FrameDecoderListener {
+class QUICHE_EXPORT Http2FrameDecoderListener {
  public:
   Http2FrameDecoderListener() {}
   virtual ~Http2FrameDecoderListener() {}
@@ -315,7 +315,7 @@
 };
 
 // Do nothing for each call. Useful for ignoring a frame that is invalid.
-class QUICHE_EXPORT_PRIVATE Http2FrameDecoderNoOpListener
+class QUICHE_EXPORT Http2FrameDecoderNoOpListener
     : public Http2FrameDecoderListener {
  public:
   Http2FrameDecoderNoOpListener() {}
diff --git a/quiche/http2/decoder/http2_structure_decoder.h b/quiche/http2/decoder/http2_structure_decoder.h
index 77d7fd2..1daee07 100644
--- a/quiche/http2/decoder/http2_structure_decoder.h
+++ b/quiche/http2/decoder/http2_structure_decoder.h
@@ -27,7 +27,7 @@
 class Http2StructureDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE Http2StructureDecoder {
+class QUICHE_EXPORT Http2StructureDecoder {
  public:
   // The caller needs to keep track of whether to call Start or Resume.
   //
diff --git a/quiche/http2/decoder/payload_decoders/altsvc_payload_decoder.h b/quiche/http2/decoder/payload_decoders/altsvc_payload_decoder.h
index 64cf703..2829249 100644
--- a/quiche/http2/decoder/payload_decoders/altsvc_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/altsvc_payload_decoder.h
@@ -18,7 +18,7 @@
 class AltSvcPayloadDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE AltSvcPayloadDecoder {
+class QUICHE_EXPORT AltSvcPayloadDecoder {
  public:
   // States during decoding of a ALTSVC frame.
   enum class PayloadState {
diff --git a/quiche/http2/decoder/payload_decoders/continuation_payload_decoder.h b/quiche/http2/decoder/payload_decoders/continuation_payload_decoder.h
index ba23a56..b599fb5 100644
--- a/quiche/http2/decoder/payload_decoders/continuation_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/continuation_payload_decoder.h
@@ -14,7 +14,7 @@
 
 namespace http2 {
 
-class QUICHE_EXPORT_PRIVATE ContinuationPayloadDecoder {
+class QUICHE_EXPORT ContinuationPayloadDecoder {
  public:
   // Starts the decoding of a CONTINUATION frame's payload, and completes
   // it if the entire payload is in the provided decode buffer.
diff --git a/quiche/http2/decoder/payload_decoders/data_payload_decoder.h b/quiche/http2/decoder/payload_decoders/data_payload_decoder.h
index ffc516f..b0b117d 100644
--- a/quiche/http2/decoder/payload_decoders/data_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/data_payload_decoder.h
@@ -17,7 +17,7 @@
 class DataPayloadDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE DataPayloadDecoder {
+class QUICHE_EXPORT DataPayloadDecoder {
  public:
   // States during decoding of a DATA frame.
   enum class PayloadState {
diff --git a/quiche/http2/decoder/payload_decoders/goaway_payload_decoder.h b/quiche/http2/decoder/payload_decoders/goaway_payload_decoder.h
index 2664642..1f3b69c 100644
--- a/quiche/http2/decoder/payload_decoders/goaway_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/goaway_payload_decoder.h
@@ -21,7 +21,7 @@
 class GoAwayPayloadDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE GoAwayPayloadDecoder {
+class QUICHE_EXPORT GoAwayPayloadDecoder {
  public:
   // States during decoding of a GOAWAY frame.
   enum class PayloadState {
diff --git a/quiche/http2/decoder/payload_decoders/headers_payload_decoder.h b/quiche/http2/decoder/payload_decoders/headers_payload_decoder.h
index e76908b..05979cd 100644
--- a/quiche/http2/decoder/payload_decoders/headers_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/headers_payload_decoder.h
@@ -18,7 +18,7 @@
 class HeadersPayloadDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE HeadersPayloadDecoder {
+class QUICHE_EXPORT HeadersPayloadDecoder {
  public:
   // States during decoding of a HEADERS frame, unless the fast path kicks
   // in, in which case the state machine will be bypassed.
diff --git a/quiche/http2/decoder/payload_decoders/ping_payload_decoder.h b/quiche/http2/decoder/payload_decoders/ping_payload_decoder.h
index 71e4928..0b9e963 100644
--- a/quiche/http2/decoder/payload_decoders/ping_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/ping_payload_decoder.h
@@ -19,7 +19,7 @@
 class PingPayloadDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE PingPayloadDecoder {
+class QUICHE_EXPORT PingPayloadDecoder {
  public:
   // Starts the decoding of a PING frame's payload, and completes it if the
   // entire payload is in the provided decode buffer.
diff --git a/quiche/http2/decoder/payload_decoders/priority_payload_decoder.h b/quiche/http2/decoder/payload_decoders/priority_payload_decoder.h
index 5ee3dc9..2056ff9 100644
--- a/quiche/http2/decoder/payload_decoders/priority_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/priority_payload_decoder.h
@@ -18,7 +18,7 @@
 class PriorityPayloadDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE PriorityPayloadDecoder {
+class QUICHE_EXPORT PriorityPayloadDecoder {
  public:
   // Starts the decoding of a PRIORITY frame's payload, and completes it if
   // the entire payload is in the provided decode buffer.
diff --git a/quiche/http2/decoder/payload_decoders/priority_update_payload_decoder.h b/quiche/http2/decoder/payload_decoders/priority_update_payload_decoder.h
index 9cfba58..39d0817 100644
--- a/quiche/http2/decoder/payload_decoders/priority_update_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/priority_update_payload_decoder.h
@@ -18,7 +18,7 @@
 class PriorityUpdatePayloadDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE PriorityUpdatePayloadDecoder {
+class QUICHE_EXPORT PriorityUpdatePayloadDecoder {
  public:
   // States during decoding of a PRIORITY_UPDATE frame.
   enum class PayloadState {
diff --git a/quiche/http2/decoder/payload_decoders/push_promise_payload_decoder.h b/quiche/http2/decoder/payload_decoders/push_promise_payload_decoder.h
index f5bf53d..c6bf2a2 100644
--- a/quiche/http2/decoder/payload_decoders/push_promise_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/push_promise_payload_decoder.h
@@ -18,7 +18,7 @@
 class PushPromisePayloadDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE PushPromisePayloadDecoder {
+class QUICHE_EXPORT PushPromisePayloadDecoder {
  public:
   // States during decoding of a PUSH_PROMISE frame.
   enum class PayloadState {
diff --git a/quiche/http2/decoder/payload_decoders/rst_stream_payload_decoder.h b/quiche/http2/decoder/payload_decoders/rst_stream_payload_decoder.h
index a263bd2..68e701e 100644
--- a/quiche/http2/decoder/payload_decoders/rst_stream_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/rst_stream_payload_decoder.h
@@ -18,7 +18,7 @@
 class RstStreamPayloadDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE RstStreamPayloadDecoder {
+class QUICHE_EXPORT RstStreamPayloadDecoder {
  public:
   // Starts the decoding of a RST_STREAM frame's payload, and completes it if
   // the entire payload is in the provided decode buffer.
diff --git a/quiche/http2/decoder/payload_decoders/settings_payload_decoder.h b/quiche/http2/decoder/payload_decoders/settings_payload_decoder.h
index a9516ee..c7a6266 100644
--- a/quiche/http2/decoder/payload_decoders/settings_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/settings_payload_decoder.h
@@ -19,7 +19,7 @@
 class SettingsPayloadDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE SettingsPayloadDecoder {
+class QUICHE_EXPORT SettingsPayloadDecoder {
  public:
   // Starts the decoding of a SETTINGS frame's payload, and completes it if
   // the entire payload is in the provided decode buffer.
diff --git a/quiche/http2/decoder/payload_decoders/unknown_payload_decoder.h b/quiche/http2/decoder/payload_decoders/unknown_payload_decoder.h
index 4d4f85a..bdc5d81 100644
--- a/quiche/http2/decoder/payload_decoders/unknown_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/unknown_payload_decoder.h
@@ -17,7 +17,7 @@
 
 namespace http2 {
 
-class QUICHE_EXPORT_PRIVATE UnknownPayloadDecoder {
+class QUICHE_EXPORT UnknownPayloadDecoder {
  public:
   // Starts decoding a payload of unknown type; just passes it to the listener.
   DecodeStatus StartDecodingPayload(FrameDecoderState* state, DecodeBuffer* db);
diff --git a/quiche/http2/decoder/payload_decoders/window_update_payload_decoder.h b/quiche/http2/decoder/payload_decoders/window_update_payload_decoder.h
index c12c347..659a715 100644
--- a/quiche/http2/decoder/payload_decoders/window_update_payload_decoder.h
+++ b/quiche/http2/decoder/payload_decoders/window_update_payload_decoder.h
@@ -18,7 +18,7 @@
 class WindowUpdatePayloadDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE WindowUpdatePayloadDecoder {
+class QUICHE_EXPORT WindowUpdatePayloadDecoder {
  public:
   // Starts decoding a WINDOW_UPDATE frame's payload, and completes it if
   // the entire payload is in the provided decode buffer.
diff --git a/quiche/http2/hpack/decoder/hpack_block_decoder.h b/quiche/http2/hpack/decoder/hpack_block_decoder.h
index 0706067..4eeb6d3 100644
--- a/quiche/http2/hpack/decoder/hpack_block_decoder.h
+++ b/quiche/http2/hpack/decoder/hpack_block_decoder.h
@@ -22,7 +22,7 @@
 
 namespace http2 {
 
-class QUICHE_EXPORT_PRIVATE HpackBlockDecoder {
+class QUICHE_EXPORT HpackBlockDecoder {
  public:
   explicit HpackBlockDecoder(HpackEntryDecoderListener* listener)
       : listener_(listener) {
@@ -61,8 +61,8 @@
   bool before_entry_ = true;
 };
 
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const HpackBlockDecoder& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const HpackBlockDecoder& v);
 
 }  // namespace http2
 
diff --git a/quiche/http2/hpack/decoder/hpack_decoder.h b/quiche/http2/hpack/decoder/hpack_decoder.h
index 393a6ca..9e4b68b 100644
--- a/quiche/http2/hpack/decoder/hpack_decoder.h
+++ b/quiche/http2/hpack/decoder/hpack_decoder.h
@@ -37,7 +37,7 @@
 class HpackDecoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE HpackDecoder {
+class QUICHE_EXPORT HpackDecoder {
  public:
   HpackDecoder(HpackDecoderListener* listener, size_t max_string_size);
   virtual ~HpackDecoder();
diff --git a/quiche/http2/hpack/decoder/hpack_decoder_listener.h b/quiche/http2/hpack/decoder/hpack_decoder_listener.h
index bd87c62..37564a4 100644
--- a/quiche/http2/hpack/decoder/hpack_decoder_listener.h
+++ b/quiche/http2/hpack/decoder/hpack_decoder_listener.h
@@ -14,7 +14,7 @@
 
 namespace http2 {
 
-class QUICHE_EXPORT_PRIVATE HpackDecoderListener {
+class QUICHE_EXPORT HpackDecoderListener {
  public:
   HpackDecoderListener();
   virtual ~HpackDecoderListener();
@@ -41,8 +41,7 @@
 
 // A no-op implementation of HpackDecoderListener, useful for ignoring
 // callbacks once an error is detected.
-class QUICHE_EXPORT_PRIVATE HpackDecoderNoOpListener
-    : public HpackDecoderListener {
+class QUICHE_EXPORT HpackDecoderNoOpListener : public HpackDecoderListener {
  public:
   HpackDecoderNoOpListener();
   ~HpackDecoderNoOpListener() override;
diff --git a/quiche/http2/hpack/decoder/hpack_decoder_state.h b/quiche/http2/hpack/decoder/hpack_decoder_state.h
index 8b4c0fa..4198ef4 100644
--- a/quiche/http2/hpack/decoder/hpack_decoder_state.h
+++ b/quiche/http2/hpack/decoder/hpack_decoder_state.h
@@ -30,7 +30,7 @@
 class HpackDecoderStatePeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE HpackDecoderState : public HpackWholeEntryListener {
+class QUICHE_EXPORT HpackDecoderState : public HpackWholeEntryListener {
  public:
   explicit HpackDecoderState(HpackDecoderListener* listener);
   ~HpackDecoderState() override;
diff --git a/quiche/http2/hpack/decoder/hpack_decoder_string_buffer.h b/quiche/http2/hpack/decoder/hpack_decoder_string_buffer.h
index 3136e8e..a2b8605 100644
--- a/quiche/http2/hpack/decoder/hpack_decoder_string_buffer.h
+++ b/quiche/http2/hpack/decoder/hpack_decoder_string_buffer.h
@@ -20,7 +20,7 @@
 
 namespace http2 {
 
-class QUICHE_EXPORT_PRIVATE HpackDecoderStringBuffer {
+class QUICHE_EXPORT HpackDecoderStringBuffer {
  public:
   enum class State : uint8_t { RESET, COLLECTING, COMPLETE };
   enum class Backing : uint8_t { RESET, UNBUFFERED, BUFFERED, STATIC };
@@ -93,8 +93,8 @@
   Backing backing_;
 };
 
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(
-    std::ostream& out, const HpackDecoderStringBuffer& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const HpackDecoderStringBuffer& v);
 
 }  // namespace http2
 
diff --git a/quiche/http2/hpack/decoder/hpack_decoder_tables.h b/quiche/http2/hpack/decoder/hpack_decoder_tables.h
index e78b91d..38f665d 100644
--- a/quiche/http2/hpack/decoder/hpack_decoder_tables.h
+++ b/quiche/http2/hpack/decoder/hpack_decoder_tables.h
@@ -33,7 +33,7 @@
 class HpackDecoderTablesPeer;
 }  // namespace test
 
-struct QUICHE_EXPORT_PRIVATE HpackStringPair {
+struct QUICHE_EXPORT HpackStringPair {
   HpackStringPair(std::string name, std::string value);
   ~HpackStringPair();
 
@@ -47,13 +47,13 @@
   const std::string value;
 };
 
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
-                                               const HpackStringPair& p);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& os,
+                                       const HpackStringPair& p);
 
 // See http://httpwg.org/specs/rfc7541.html#static.table.definition for the
 // contents, and http://httpwg.org/specs/rfc7541.html#index.address.space for
 // info about accessing the static table.
-class QUICHE_EXPORT_PRIVATE HpackDecoderStaticTable {
+class QUICHE_EXPORT HpackDecoderStaticTable {
  public:
   explicit HpackDecoderStaticTable(const std::vector<HpackStringPair>* table);
   // Uses a global table shared by all threads.
@@ -73,7 +73,7 @@
 // in the dynamic table. See these sections of the RFC:
 //   http://httpwg.org/specs/rfc7541.html#dynamic.table
 //   http://httpwg.org/specs/rfc7541.html#dynamic.table.management
-class QUICHE_EXPORT_PRIVATE HpackDecoderDynamicTable {
+class QUICHE_EXPORT HpackDecoderDynamicTable {
  public:
   HpackDecoderDynamicTable();
   ~HpackDecoderDynamicTable();
@@ -120,7 +120,7 @@
   size_t insert_count_;
 };
 
-class QUICHE_EXPORT_PRIVATE HpackDecoderTables {
+class QUICHE_EXPORT HpackDecoderTables {
  public:
   HpackDecoderTables();
   ~HpackDecoderTables();
diff --git a/quiche/http2/hpack/decoder/hpack_decoding_error.h b/quiche/http2/hpack/decoder/hpack_decoding_error.h
index e24eaf1..538237f 100644
--- a/quiche/http2/hpack/decoder/hpack_decoding_error.h
+++ b/quiche/http2/hpack/decoder/hpack_decoding_error.h
@@ -43,7 +43,7 @@
   kCompressedHeaderSizeExceedsLimit,
 };
 
-QUICHE_EXPORT_PRIVATE absl::string_view HpackDecodingErrorToString(
+QUICHE_EXPORT absl::string_view HpackDecodingErrorToString(
     HpackDecodingError error);
 
 }  // namespace http2
diff --git a/quiche/http2/hpack/decoder/hpack_entry_decoder.h b/quiche/http2/hpack/decoder/hpack_entry_decoder.h
index 75ffbac..85b8a78 100644
--- a/quiche/http2/hpack/decoder/hpack_entry_decoder.h
+++ b/quiche/http2/hpack/decoder/hpack_entry_decoder.h
@@ -24,7 +24,7 @@
 
 namespace http2 {
 
-class QUICHE_EXPORT_PRIVATE HpackEntryDecoder {
+class QUICHE_EXPORT HpackEntryDecoder {
  public:
   enum class EntryDecoderState {
     // Have started decoding the type/varint, but didn't finish on the previous
@@ -80,9 +80,9 @@
   HpackDecodingError error_ = HpackDecodingError::kOk;
 };
 
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const HpackEntryDecoder& v);
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const HpackEntryDecoder& v);
+QUICHE_EXPORT std::ostream& operator<<(
     std::ostream& out, HpackEntryDecoder::EntryDecoderState state);
 
 }  // namespace http2
diff --git a/quiche/http2/hpack/decoder/hpack_entry_decoder_listener.h b/quiche/http2/hpack/decoder/hpack_entry_decoder_listener.h
index 1ba9339..86230df 100644
--- a/quiche/http2/hpack/decoder/hpack_entry_decoder_listener.h
+++ b/quiche/http2/hpack/decoder/hpack_entry_decoder_listener.h
@@ -16,7 +16,7 @@
 
 namespace http2 {
 
-class QUICHE_EXPORT_PRIVATE HpackEntryDecoderListener {
+class QUICHE_EXPORT HpackEntryDecoderListener {
  public:
   virtual ~HpackEntryDecoderListener() {}
 
@@ -64,7 +64,7 @@
   virtual void OnDynamicTableSizeUpdate(size_t size) = 0;
 };
 
-class QUICHE_EXPORT_PRIVATE HpackEntryDecoderVLoggingListener
+class QUICHE_EXPORT HpackEntryDecoderVLoggingListener
     : public HpackEntryDecoderListener {
  public:
   HpackEntryDecoderVLoggingListener() : wrapped_(nullptr) {}
@@ -88,7 +88,7 @@
 };
 
 // A no-op implementation of HpackEntryDecoderListener.
-class QUICHE_EXPORT_PRIVATE HpackEntryDecoderNoOpListener
+class QUICHE_EXPORT HpackEntryDecoderNoOpListener
     : public HpackEntryDecoderListener {
  public:
   ~HpackEntryDecoderNoOpListener() override {}
diff --git a/quiche/http2/hpack/decoder/hpack_entry_type_decoder.h b/quiche/http2/hpack/decoder/hpack_entry_type_decoder.h
index bf6a2c9..2548ef5 100644
--- a/quiche/http2/hpack/decoder/hpack_entry_type_decoder.h
+++ b/quiche/http2/hpack/decoder/hpack_entry_type_decoder.h
@@ -22,7 +22,7 @@
 
 namespace http2 {
 
-class QUICHE_EXPORT_PRIVATE HpackEntryTypeDecoder {
+class QUICHE_EXPORT HpackEntryTypeDecoder {
  public:
   // Only call when the decode buffer has data (i.e. HpackEntryDecoder must
   // not call until there is data).
@@ -50,8 +50,8 @@
   HpackEntryType entry_type_ = HpackEntryType::kIndexedHeader;
 };
 
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const HpackEntryTypeDecoder& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const HpackEntryTypeDecoder& v);
 
 }  // namespace http2
 #endif  // QUICHE_HTTP2_HPACK_DECODER_HPACK_ENTRY_TYPE_DECODER_H_
diff --git a/quiche/http2/hpack/decoder/hpack_string_decoder.h b/quiche/http2/hpack/decoder/hpack_string_decoder.h
index c8b88f3..897ce76 100644
--- a/quiche/http2/hpack/decoder/hpack_string_decoder.h
+++ b/quiche/http2/hpack/decoder/hpack_string_decoder.h
@@ -33,7 +33,7 @@
 // Resume() when more input is available, repeating until kDecodeInProgress is
 // not returned. If kDecodeDone or kDecodeError is returned, then Resume() must
 // not be called until Start() has been called to start decoding a new string.
-class QUICHE_EXPORT_PRIVATE HpackStringDecoder {
+class QUICHE_EXPORT HpackStringDecoder {
  public:
   enum StringDecoderState {
     kStartDecodingLength,
@@ -200,8 +200,8 @@
   bool huffman_encoded_ = false;
 };
 
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const HpackStringDecoder& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const HpackStringDecoder& v);
 
 }  // namespace http2
 #endif  // QUICHE_HTTP2_HPACK_DECODER_HPACK_STRING_DECODER_H_
diff --git a/quiche/http2/hpack/decoder/hpack_string_decoder_listener.h b/quiche/http2/hpack/decoder/hpack_string_decoder_listener.h
index c343d40..9420560 100644
--- a/quiche/http2/hpack/decoder/hpack_string_decoder_listener.h
+++ b/quiche/http2/hpack/decoder/hpack_string_decoder_listener.h
@@ -20,7 +20,7 @@
 // HpackStringDecoder methods require a listener that implements the methods
 // below, but it is NOT necessary to extend this class because the methods
 // are templates.
-class QUICHE_EXPORT_PRIVATE HpackStringDecoderListener {
+class QUICHE_EXPORT HpackStringDecoderListener {
  public:
   virtual ~HpackStringDecoderListener() {}
 
@@ -39,7 +39,7 @@
   virtual void OnStringEnd() = 0;
 };
 
-class QUICHE_EXPORT_PRIVATE HpackStringDecoderVLoggingListener
+class QUICHE_EXPORT HpackStringDecoderVLoggingListener
     : public HpackStringDecoderListener {
  public:
   HpackStringDecoderVLoggingListener() : wrapped_(nullptr) {}
diff --git a/quiche/http2/hpack/decoder/hpack_whole_entry_buffer.h b/quiche/http2/hpack/decoder/hpack_whole_entry_buffer.h
index 0cdde65..b7bd108 100644
--- a/quiche/http2/hpack/decoder/hpack_whole_entry_buffer.h
+++ b/quiche/http2/hpack/decoder/hpack_whole_entry_buffer.h
@@ -24,8 +24,7 @@
 
 // TODO(jamessynge): Consider renaming HpackEntryDecoderListener to
 // HpackEntryPartsListener or HpackEntryFragmentsListener.
-class QUICHE_EXPORT_PRIVATE HpackWholeEntryBuffer
-    : public HpackEntryDecoderListener {
+class QUICHE_EXPORT HpackWholeEntryBuffer : public HpackEntryDecoderListener {
  public:
   // max_string_size specifies the maximum size of an on-the-wire string (name
   // or value, plain or Huffman encoded) that will be accepted. See sections
diff --git a/quiche/http2/hpack/decoder/hpack_whole_entry_listener.h b/quiche/http2/hpack/decoder/hpack_whole_entry_listener.h
index a0776a6..54e4506 100644
--- a/quiche/http2/hpack/decoder/hpack_whole_entry_listener.h
+++ b/quiche/http2/hpack/decoder/hpack_whole_entry_listener.h
@@ -19,7 +19,7 @@
 
 namespace http2 {
 
-class QUICHE_EXPORT_PRIVATE HpackWholeEntryListener {
+class QUICHE_EXPORT HpackWholeEntryListener {
  public:
   virtual ~HpackWholeEntryListener();
 
@@ -55,7 +55,7 @@
 
 // A no-op implementation of HpackWholeEntryDecoderListener, useful for ignoring
 // callbacks once an error is detected.
-class QUICHE_EXPORT_PRIVATE HpackWholeEntryNoOpListener
+class QUICHE_EXPORT HpackWholeEntryNoOpListener
     : public HpackWholeEntryListener {
  public:
   ~HpackWholeEntryNoOpListener() override;
diff --git a/quiche/http2/hpack/http2_hpack_constants.h b/quiche/http2/hpack/http2_hpack_constants.h
index a10b140..1deaf05 100644
--- a/quiche/http2/hpack/http2_hpack_constants.h
+++ b/quiche/http2/hpack/http2_hpack_constants.h
@@ -52,11 +52,10 @@
 };
 
 // Returns the name of the enum member.
-QUICHE_EXPORT_PRIVATE std::string HpackEntryTypeToString(HpackEntryType v);
+QUICHE_EXPORT std::string HpackEntryTypeToString(HpackEntryType v);
 
 // Inserts the name of the enum member into |out|.
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               HpackEntryType v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out, HpackEntryType v);
 
 }  // namespace http2
 
diff --git a/quiche/http2/hpack/huffman/hpack_huffman_decoder.h b/quiche/http2/hpack/huffman/hpack_huffman_decoder.h
index 9befd6c..910aba5 100644
--- a/quiche/http2/hpack/huffman/hpack_huffman_decoder.h
+++ b/quiche/http2/hpack/huffman/hpack_huffman_decoder.h
@@ -38,7 +38,7 @@
 
 // HuffmanBitBuffer stores the leading edge of bits to be decoded. The high
 // order bit of accumulator_ is the next bit to be decoded.
-class QUICHE_EXPORT_PRIVATE HuffmanBitBuffer {
+class QUICHE_EXPORT HuffmanBitBuffer {
  public:
   HuffmanBitBuffer();
 
@@ -85,7 +85,7 @@
   return out << v.DebugString();
 }
 
-class QUICHE_EXPORT_PRIVATE HpackHuffmanDecoder {
+class QUICHE_EXPORT HpackHuffmanDecoder {
  public:
   HpackHuffmanDecoder();
   ~HpackHuffmanDecoder();
diff --git a/quiche/http2/hpack/huffman/hpack_huffman_encoder.h b/quiche/http2/hpack/huffman/hpack_huffman_encoder.h
index 7e73187..e6056c1 100644
--- a/quiche/http2/hpack/huffman/hpack_huffman_encoder.h
+++ b/quiche/http2/hpack/huffman/hpack_huffman_encoder.h
@@ -18,22 +18,20 @@
 
 // Returns the size of the Huffman encoding of |plain|, which may be greater
 // than plain.size().
-QUICHE_EXPORT_PRIVATE size_t HuffmanSize(absl::string_view plain);
+QUICHE_EXPORT size_t HuffmanSize(absl::string_view plain);
 
 // Encode the plain text string |plain| with the Huffman encoding defined in the
 // HPACK RFC, 7541.  |encoded_size| is used to pre-allocate storage and it
 // should be the value returned by HuffmanSize().  Appends the result to
 // |*huffman|.
-QUICHE_EXPORT_PRIVATE void HuffmanEncode(absl::string_view plain,
-                                         size_t encoded_size,
-                                         std::string* huffman);
+QUICHE_EXPORT void HuffmanEncode(absl::string_view plain, size_t encoded_size,
+                                 std::string* huffman);
 
 // Encode |input| with the Huffman encoding defined RFC7541, used in HPACK and
 // QPACK.  |encoded_size| must be the value returned by HuffmanSize().
 // Appends the result to the end of |*output|.
-QUICHE_EXPORT_PRIVATE void HuffmanEncodeFast(absl::string_view input,
-                                             size_t encoded_size,
-                                             std::string* output);
+QUICHE_EXPORT void HuffmanEncodeFast(absl::string_view input,
+                                     size_t encoded_size, std::string* output);
 
 }  // namespace http2
 
diff --git a/quiche/http2/hpack/huffman/huffman_spec_tables.h b/quiche/http2/hpack/huffman/huffman_spec_tables.h
index 1c1b500..7e66fef 100644
--- a/quiche/http2/hpack/huffman/huffman_spec_tables.h
+++ b/quiche/http2/hpack/huffman/huffman_spec_tables.h
@@ -13,7 +13,7 @@
 
 namespace http2 {
 
-struct QUICHE_EXPORT_PRIVATE HuffmanSpecTables {
+struct QUICHE_EXPORT HuffmanSpecTables {
   // Number of bits in the encoding of each symbol (byte).
   static const uint8_t kCodeLengths[257];
 
diff --git a/quiche/http2/hpack/varint/hpack_varint_decoder.h b/quiche/http2/hpack/varint/hpack_varint_decoder.h
index 0036752..af998a2 100644
--- a/quiche/http2/hpack/varint/hpack_varint_decoder.h
+++ b/quiche/http2/hpack/varint/hpack_varint_decoder.h
@@ -55,7 +55,7 @@
 // needed. Start and StartExtended handles the initialization of member
 // variables. This is necessary in order for HpackVarintDecoder to be part
 // of a union.
-class QUICHE_EXPORT_PRIVATE HpackVarintDecoder {
+class QUICHE_EXPORT HpackVarintDecoder {
  public:
   // |prefix_value| is the first byte of the encoded varint.
   // |prefix_length| is number of bits in the first byte that are used for
diff --git a/quiche/http2/hpack/varint/hpack_varint_encoder.h b/quiche/http2/hpack/varint/hpack_varint_encoder.h
index 69acc16..0e16009 100644
--- a/quiche/http2/hpack/varint/hpack_varint_encoder.h
+++ b/quiche/http2/hpack/varint/hpack_varint_encoder.h
@@ -16,7 +16,7 @@
 // HPACK integer encoder class with single static method implementing variable
 // length integer representation defined in RFC7541, Section 5.1:
 // https://httpwg.org/specs/rfc7541.html#integer.representation
-class QUICHE_EXPORT_PRIVATE HpackVarintEncoder {
+class QUICHE_EXPORT HpackVarintEncoder {
  public:
   // Encode |varint|, appending encoded data to |*output|.
   // Appends between 1 and 11 bytes in total.
diff --git a/quiche/http2/http2_constants.h b/quiche/http2/http2_constants.h
index 6395cf1..f4034bd 100644
--- a/quiche/http2/http2_constants.h
+++ b/quiche/http2/http2_constants.h
@@ -57,10 +57,10 @@
 // for each unsupported value. Since these are just used for debugging/error
 // messages, that isn't a cost to we need to worry about. The same applies to
 // the functions later in this file.
-QUICHE_EXPORT_PRIVATE std::string Http2FrameTypeToString(Http2FrameType v);
-QUICHE_EXPORT_PRIVATE std::string Http2FrameTypeToString(uint8_t v);
-QUICHE_EXPORT_PRIVATE inline std::ostream& operator<<(std::ostream& out,
-                                                      Http2FrameType v) {
+QUICHE_EXPORT std::string Http2FrameTypeToString(Http2FrameType v);
+QUICHE_EXPORT std::string Http2FrameTypeToString(uint8_t v);
+QUICHE_EXPORT inline std::ostream& operator<<(std::ostream& out,
+                                              Http2FrameType v) {
   return out << Http2FrameTypeToString(v);
 }
 
@@ -76,10 +76,9 @@
 
 // Formats zero or more flags for the specified type of frame. Returns an
 // empty string if flags==0.
-QUICHE_EXPORT_PRIVATE std::string Http2FrameFlagsToString(Http2FrameType type,
-                                                          uint8_t flags);
-QUICHE_EXPORT_PRIVATE std::string Http2FrameFlagsToString(uint8_t type,
-                                                          uint8_t flags);
+QUICHE_EXPORT std::string Http2FrameFlagsToString(Http2FrameType type,
+                                                  uint8_t flags);
+QUICHE_EXPORT std::string Http2FrameFlagsToString(uint8_t type, uint8_t flags);
 
 // Error codes for GOAWAY and RST_STREAM frames.
 enum class Http2ErrorCode : uint32_t {
@@ -143,10 +142,10 @@
 }
 
 // Format the specified error code.
-QUICHE_EXPORT_PRIVATE std::string Http2ErrorCodeToString(uint32_t v);
-QUICHE_EXPORT_PRIVATE std::string Http2ErrorCodeToString(Http2ErrorCode v);
-QUICHE_EXPORT_PRIVATE inline std::ostream& operator<<(std::ostream& out,
-                                                      Http2ErrorCode v) {
+QUICHE_EXPORT std::string Http2ErrorCodeToString(uint32_t v);
+QUICHE_EXPORT std::string Http2ErrorCodeToString(Http2ErrorCode v);
+QUICHE_EXPORT inline std::ostream& operator<<(std::ostream& out,
+                                              Http2ErrorCode v) {
   return out << Http2ErrorCodeToString(v);
 }
 
@@ -223,8 +222,8 @@
 }
 
 // Format the specified settings parameter.
-QUICHE_EXPORT_PRIVATE std::string Http2SettingsParameterToString(uint32_t v);
-QUICHE_EXPORT_PRIVATE std::string Http2SettingsParameterToString(
+QUICHE_EXPORT std::string Http2SettingsParameterToString(uint32_t v);
+QUICHE_EXPORT std::string Http2SettingsParameterToString(
     Http2SettingsParameter v);
 inline std::ostream& operator<<(std::ostream& out, Http2SettingsParameter v) {
   return out << Http2SettingsParameterToString(v);
@@ -232,7 +231,7 @@
 
 // Information about the initial, minimum and maximum value of settings (not
 // applicable to all settings parameters).
-class QUICHE_EXPORT_PRIVATE Http2SettingsInfo {
+class QUICHE_EXPORT Http2SettingsInfo {
  public:
   // Default value for HEADER_TABLE_SIZE.
   static constexpr uint32_t DefaultHeaderTableSize() { return 4096; }
@@ -264,7 +263,7 @@
                         quiche::StringPieceCaseEqual>;
 
 // Returns all disallowed HTTP/2 headers.
-QUICHE_EXPORT_PRIVATE const InvalidHeaderSet& GetInvalidHttp2HeaderSet();
+QUICHE_EXPORT const InvalidHeaderSet& GetInvalidHttp2HeaderSet();
 
 }  // namespace http2
 
diff --git a/quiche/http2/http2_structures.h b/quiche/http2/http2_structures.h
index 496746b..3e1e4dd 100644
--- a/quiche/http2/http2_structures.h
+++ b/quiche/http2/http2_structures.h
@@ -37,7 +37,7 @@
 
 namespace http2 {
 
-struct QUICHE_EXPORT_PRIVATE Http2FrameHeader {
+struct QUICHE_EXPORT Http2FrameHeader {
   Http2FrameHeader() {}
   Http2FrameHeader(uint32_t payload_length, Http2FrameType type, uint8_t flags,
                    uint32_t stream_id)
@@ -127,18 +127,18 @@
   uint8_t flags;
 };
 
-QUICHE_EXPORT_PRIVATE bool operator==(const Http2FrameHeader& a,
-                                      const Http2FrameHeader& b);
-QUICHE_EXPORT_PRIVATE inline bool operator!=(const Http2FrameHeader& a,
-                                             const Http2FrameHeader& b) {
+QUICHE_EXPORT bool operator==(const Http2FrameHeader& a,
+                              const Http2FrameHeader& b);
+QUICHE_EXPORT inline bool operator!=(const Http2FrameHeader& a,
+                                     const Http2FrameHeader& b) {
   return !(a == b);
 }
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const Http2FrameHeader& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const Http2FrameHeader& v);
 
 // Http2PriorityFields:
 
-struct QUICHE_EXPORT_PRIVATE Http2PriorityFields {
+struct QUICHE_EXPORT Http2PriorityFields {
   Http2PriorityFields() {}
   Http2PriorityFields(uint32_t stream_dependency, uint32_t weight,
                       bool is_exclusive)
@@ -170,18 +170,18 @@
   bool is_exclusive;
 };
 
-QUICHE_EXPORT_PRIVATE bool operator==(const Http2PriorityFields& a,
-                                      const Http2PriorityFields& b);
-QUICHE_EXPORT_PRIVATE inline bool operator!=(const Http2PriorityFields& a,
-                                             const Http2PriorityFields& b) {
+QUICHE_EXPORT bool operator==(const Http2PriorityFields& a,
+                              const Http2PriorityFields& b);
+QUICHE_EXPORT inline bool operator!=(const Http2PriorityFields& a,
+                                     const Http2PriorityFields& b) {
   return !(a == b);
 }
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const Http2PriorityFields& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const Http2PriorityFields& v);
 
 // Http2RstStreamFields:
 
-struct QUICHE_EXPORT_PRIVATE Http2RstStreamFields {
+struct QUICHE_EXPORT Http2RstStreamFields {
   static constexpr size_t EncodedSize() { return 4; }
   bool IsSupportedErrorCode() const {
     return IsSupportedHttp2ErrorCode(error_code);
@@ -190,18 +190,18 @@
   Http2ErrorCode error_code;
 };
 
-QUICHE_EXPORT_PRIVATE bool operator==(const Http2RstStreamFields& a,
-                                      const Http2RstStreamFields& b);
-QUICHE_EXPORT_PRIVATE inline bool operator!=(const Http2RstStreamFields& a,
-                                             const Http2RstStreamFields& b) {
+QUICHE_EXPORT bool operator==(const Http2RstStreamFields& a,
+                              const Http2RstStreamFields& b);
+QUICHE_EXPORT inline bool operator!=(const Http2RstStreamFields& a,
+                                     const Http2RstStreamFields& b) {
   return !(a == b);
 }
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const Http2RstStreamFields& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const Http2RstStreamFields& v);
 
 // Http2SettingFields:
 
-struct QUICHE_EXPORT_PRIVATE Http2SettingFields {
+struct QUICHE_EXPORT Http2SettingFields {
   Http2SettingFields() {}
   Http2SettingFields(Http2SettingsParameter parameter, uint32_t value)
       : parameter(parameter), value(value) {}
@@ -214,52 +214,52 @@
   uint32_t value;
 };
 
-QUICHE_EXPORT_PRIVATE bool operator==(const Http2SettingFields& a,
-                                      const Http2SettingFields& b);
-QUICHE_EXPORT_PRIVATE inline bool operator!=(const Http2SettingFields& a,
-                                             const Http2SettingFields& b) {
+QUICHE_EXPORT bool operator==(const Http2SettingFields& a,
+                              const Http2SettingFields& b);
+QUICHE_EXPORT inline bool operator!=(const Http2SettingFields& a,
+                                     const Http2SettingFields& b) {
   return !(a == b);
 }
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const Http2SettingFields& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const Http2SettingFields& v);
 
 // Http2PushPromiseFields:
 
-struct QUICHE_EXPORT_PRIVATE Http2PushPromiseFields {
+struct QUICHE_EXPORT Http2PushPromiseFields {
   static constexpr size_t EncodedSize() { return 4; }
 
   uint32_t promised_stream_id;
 };
 
-QUICHE_EXPORT_PRIVATE bool operator==(const Http2PushPromiseFields& a,
-                                      const Http2PushPromiseFields& b);
-QUICHE_EXPORT_PRIVATE inline bool operator!=(const Http2PushPromiseFields& a,
-                                             const Http2PushPromiseFields& b) {
+QUICHE_EXPORT bool operator==(const Http2PushPromiseFields& a,
+                              const Http2PushPromiseFields& b);
+QUICHE_EXPORT inline bool operator!=(const Http2PushPromiseFields& a,
+                                     const Http2PushPromiseFields& b) {
   return !(a == b);
 }
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const Http2PushPromiseFields& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const Http2PushPromiseFields& v);
 
 // Http2PingFields:
 
-struct QUICHE_EXPORT_PRIVATE Http2PingFields {
+struct QUICHE_EXPORT Http2PingFields {
   static constexpr size_t EncodedSize() { return 8; }
 
   uint8_t opaque_bytes[8];
 };
 
-QUICHE_EXPORT_PRIVATE bool operator==(const Http2PingFields& a,
-                                      const Http2PingFields& b);
-QUICHE_EXPORT_PRIVATE inline bool operator!=(const Http2PingFields& a,
-                                             const Http2PingFields& b) {
+QUICHE_EXPORT bool operator==(const Http2PingFields& a,
+                              const Http2PingFields& b);
+QUICHE_EXPORT inline bool operator!=(const Http2PingFields& a,
+                                     const Http2PingFields& b) {
   return !(a == b);
 }
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const Http2PingFields& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const Http2PingFields& v);
 
 // Http2GoAwayFields:
 
-struct QUICHE_EXPORT_PRIVATE Http2GoAwayFields {
+struct QUICHE_EXPORT Http2GoAwayFields {
   Http2GoAwayFields() {}
   Http2GoAwayFields(uint32_t last_stream_id, Http2ErrorCode error_code)
       : last_stream_id(last_stream_id), error_code(error_code) {}
@@ -272,18 +272,18 @@
   Http2ErrorCode error_code;
 };
 
-QUICHE_EXPORT_PRIVATE bool operator==(const Http2GoAwayFields& a,
-                                      const Http2GoAwayFields& b);
-QUICHE_EXPORT_PRIVATE inline bool operator!=(const Http2GoAwayFields& a,
-                                             const Http2GoAwayFields& b) {
+QUICHE_EXPORT bool operator==(const Http2GoAwayFields& a,
+                              const Http2GoAwayFields& b);
+QUICHE_EXPORT inline bool operator!=(const Http2GoAwayFields& a,
+                                     const Http2GoAwayFields& b) {
   return !(a == b);
 }
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const Http2GoAwayFields& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const Http2GoAwayFields& v);
 
 // Http2WindowUpdateFields:
 
-struct QUICHE_EXPORT_PRIVATE Http2WindowUpdateFields {
+struct QUICHE_EXPORT Http2WindowUpdateFields {
   static constexpr size_t EncodedSize() { return 4; }
 
   // 31-bit, unsigned increase in the window size (only positive values are
@@ -291,36 +291,36 @@
   uint32_t window_size_increment;
 };
 
-QUICHE_EXPORT_PRIVATE bool operator==(const Http2WindowUpdateFields& a,
-                                      const Http2WindowUpdateFields& b);
-QUICHE_EXPORT_PRIVATE inline bool operator!=(const Http2WindowUpdateFields& a,
-                                             const Http2WindowUpdateFields& b) {
+QUICHE_EXPORT bool operator==(const Http2WindowUpdateFields& a,
+                              const Http2WindowUpdateFields& b);
+QUICHE_EXPORT inline bool operator!=(const Http2WindowUpdateFields& a,
+                                     const Http2WindowUpdateFields& b) {
   return !(a == b);
 }
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(
-    std::ostream& out, const Http2WindowUpdateFields& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const Http2WindowUpdateFields& v);
 
 // Http2AltSvcFields:
 
-struct QUICHE_EXPORT_PRIVATE Http2AltSvcFields {
+struct QUICHE_EXPORT Http2AltSvcFields {
   static constexpr size_t EncodedSize() { return 2; }
 
   // This is the one fixed size portion of the ALTSVC payload.
   uint16_t origin_length;
 };
 
-QUICHE_EXPORT_PRIVATE bool operator==(const Http2AltSvcFields& a,
-                                      const Http2AltSvcFields& b);
-QUICHE_EXPORT_PRIVATE inline bool operator!=(const Http2AltSvcFields& a,
-                                             const Http2AltSvcFields& b) {
+QUICHE_EXPORT bool operator==(const Http2AltSvcFields& a,
+                              const Http2AltSvcFields& b);
+QUICHE_EXPORT inline bool operator!=(const Http2AltSvcFields& a,
+                                     const Http2AltSvcFields& b) {
   return !(a == b);
 }
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const Http2AltSvcFields& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const Http2AltSvcFields& v);
 
 // Http2PriorityUpdateFields:
 
-struct QUICHE_EXPORT_PRIVATE Http2PriorityUpdateFields {
+struct QUICHE_EXPORT Http2PriorityUpdateFields {
   Http2PriorityUpdateFields() {}
   Http2PriorityUpdateFields(uint32_t prioritized_stream_id)
       : prioritized_stream_id(prioritized_stream_id) {}
@@ -333,14 +333,14 @@
   uint32_t prioritized_stream_id;
 };
 
-QUICHE_EXPORT_PRIVATE bool operator==(const Http2PriorityUpdateFields& a,
-                                      const Http2PriorityUpdateFields& b);
-QUICHE_EXPORT_PRIVATE inline bool operator!=(
-    const Http2PriorityUpdateFields& a, const Http2PriorityUpdateFields& b) {
+QUICHE_EXPORT bool operator==(const Http2PriorityUpdateFields& a,
+                              const Http2PriorityUpdateFields& b);
+QUICHE_EXPORT inline bool operator!=(const Http2PriorityUpdateFields& a,
+                                     const Http2PriorityUpdateFields& b) {
   return !(a == b);
 }
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(
-    std::ostream& out, const Http2PriorityUpdateFields& v);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       const Http2PriorityUpdateFields& v);
 
 }  // namespace http2
 
diff --git a/quiche/oblivious_http/buffers/oblivious_http_request.h b/quiche/oblivious_http/buffers/oblivious_http_request.h
index 1aef1f2..1963693 100644
--- a/quiche/oblivious_http/buffers/oblivious_http_request.h
+++ b/quiche/oblivious_http/buffers/oblivious_http_request.h
@@ -16,7 +16,7 @@
 // 2. Handles server side decryption of the payload received in HTTP POST body
 // from Relay.
 // https://www.ietf.org/archive/id/draft-ietf-ohai-ohttp-03.html#name-encapsulation-of-requests
-class QUICHE_EXPORT_PRIVATE ObliviousHttpRequest {
+class QUICHE_EXPORT ObliviousHttpRequest {
  public:
   // Holds the HPKE related data received from request. This context is created
   // during request processing, and subsequently passed into response handling
diff --git a/quiche/oblivious_http/buffers/oblivious_http_response.h b/quiche/oblivious_http/buffers/oblivious_http_response.h
index 3ebd25d..40279fc 100644
--- a/quiche/oblivious_http/buffers/oblivious_http_response.h
+++ b/quiche/oblivious_http/buffers/oblivious_http_response.h
@@ -12,7 +12,7 @@
 
 namespace quiche {
 
-class QUICHE_EXPORT_PRIVATE ObliviousHttpResponse {
+class QUICHE_EXPORT ObliviousHttpResponse {
  public:
   // Parse and decrypt the OHttp response using ObliviousHttpContext context obj
   // that was returned from `CreateClientObliviousRequest` method. On success,
diff --git a/quiche/oblivious_http/common/oblivious_http_header_key_config.h b/quiche/oblivious_http/common/oblivious_http_header_key_config.h
index 6447bab..9c46f81 100644
--- a/quiche/oblivious_http/common/oblivious_http_header_key_config.h
+++ b/quiche/oblivious_http/common/oblivious_http_header_key_config.h
@@ -14,7 +14,7 @@
 
 namespace quiche {
 
-class QUICHE_EXPORT_PRIVATE ObliviousHttpHeaderKeyConfig {
+class QUICHE_EXPORT ObliviousHttpHeaderKeyConfig {
  public:
   // https://www.ietf.org/archive/id/draft-ietf-ohai-ohttp-03.html#section-4.1-4.2
   static constexpr absl::string_view kOhttpRequestLabel =
@@ -109,7 +109,7 @@
 // for details of the "Key Configuration" spec.
 //
 // ObliviousHttpKeyConfigs objects are immutable after construction.
-class QUICHE_EXPORT_PRIVATE ObliviousHttpKeyConfigs {
+class QUICHE_EXPORT ObliviousHttpKeyConfigs {
  public:
   // Parses the "application/ohttp-keys" media type, which is a byte string
   // formatted according to the spec:
diff --git a/quiche/oblivious_http/oblivious_http_client.h b/quiche/oblivious_http/oblivious_http_client.h
index 10a2f60..93cf1a2 100644
--- a/quiche/oblivious_http/oblivious_http_client.h
+++ b/quiche/oblivious_http/oblivious_http_client.h
@@ -25,7 +25,7 @@
 // 4. Handles BoringSSL HPKE context setup and bookkeeping.
 
 // This class is immutable (except moves) and thus trivially thread-safe.
-class QUICHE_EXPORT_PRIVATE ObliviousHttpClient {
+class QUICHE_EXPORT ObliviousHttpClient {
  public:
   static absl::StatusOr<ObliviousHttpClient> Create(
       absl::string_view hpke_public_key,
diff --git a/quiche/oblivious_http/oblivious_http_gateway.h b/quiche/oblivious_http/oblivious_http_gateway.h
index 8f70356..299f2bb 100644
--- a/quiche/oblivious_http/oblivious_http_gateway.h
+++ b/quiche/oblivious_http/oblivious_http_gateway.h
@@ -23,7 +23,7 @@
 // This class is immutable (except moves) and thus trivially thread-safe,
 // assuming the `QuicheRandom* quiche_random` passed in with `Create` is
 // thread-safe. Note that default `QuicheRandom::GetInstance()` is thread-safe.
-class QUICHE_EXPORT_PRIVATE ObliviousHttpGateway {
+class QUICHE_EXPORT ObliviousHttpGateway {
  public:
   // @params: If callers would like to pass in their own `QuicheRandom`
   // instance, they can make use of the param `quiche_random`. Otherwise, the
diff --git a/quiche/quic/bindings/quic_libevent.h b/quiche/quic/bindings/quic_libevent.h
index b06ab4e..82783e9 100644
--- a/quiche/quic/bindings/quic_libevent.h
+++ b/quiche/quic/bindings/quic_libevent.h
@@ -20,7 +20,7 @@
 // Provides a libevent-based implementation of QuicEventLoop.  Since libevent
 // uses relative time for all timeouts, the provided clock does not need to use
 // the UNIX time.
-class QUICHE_EXPORT_PRIVATE LibeventQuicEventLoop : public QuicEventLoop {
+class QUICHE_EXPORT LibeventQuicEventLoop : public QuicEventLoop {
  public:
   explicit LibeventQuicEventLoop(event_base* base, QuicClock* clock);
 
@@ -91,7 +91,7 @@
 };
 
 // RAII-style wrapper around event_base.
-class QUICHE_EXPORT_PRIVATE LibeventLoop {
+class QUICHE_EXPORT LibeventLoop {
  public:
   LibeventLoop(struct event_base* base) : event_base_(base) {}
   ~LibeventLoop() { event_base_free(event_base_); }
@@ -106,7 +106,7 @@
 // that the inheritance order here matters, since otherwise the `event_base` in
 // question will be deleted before the LibeventQuicEventLoop object referencing
 // it.
-class QUICHE_EXPORT_PRIVATE LibeventQuicEventLoopWithOwnership
+class QUICHE_EXPORT LibeventQuicEventLoopWithOwnership
     : public LibeventLoop,
       public LibeventQuicEventLoop {
  public:
@@ -119,8 +119,7 @@
       : LibeventLoop(base), LibeventQuicEventLoop(base, clock) {}
 };
 
-class QUICHE_EXPORT_PRIVATE QuicLibeventEventLoopFactory
-    : public QuicEventLoopFactory {
+class QUICHE_EXPORT QuicLibeventEventLoopFactory : public QuicEventLoopFactory {
  public:
   // Provides the preferred libevent backend.
   static QuicLibeventEventLoopFactory* Get() {
diff --git a/quiche/quic/core/connecting_client_socket.h b/quiche/quic/core/connecting_client_socket.h
index d5f8ee4..0670d91 100644
--- a/quiche/quic/core/connecting_client_socket.h
+++ b/quiche/quic/core/connecting_client_socket.h
@@ -28,7 +28,7 @@
 // handles IO on a single thread, so if making calls from that typical
 // environment, it would be problematic to make a blocking call and block that
 // single thread.
-class QUICHE_EXPORT_PRIVATE ConnectingClientSocket {
+class QUICHE_EXPORT ConnectingClientSocket {
  public:
   class AsyncVisitor {
    public:
diff --git a/quiche/quic/core/io/event_loop_connecting_client_socket.h b/quiche/quic/core/io/event_loop_connecting_client_socket.h
index c85911c..a7fb32c 100644
--- a/quiche/quic/core/io/event_loop_connecting_client_socket.h
+++ b/quiche/quic/core/io/event_loop_connecting_client_socket.h
@@ -23,7 +23,7 @@
 
 // A connection-based client socket implemented using an underlying
 // QuicEventLoop.
-class QUICHE_EXPORT_PRIVATE EventLoopConnectingClientSocket
+class QUICHE_EXPORT EventLoopConnectingClientSocket
     : public ConnectingClientSocket,
       public QuicSocketEventListener {
  public:
diff --git a/quiche/quic/core/io/event_loop_socket_factory.h b/quiche/quic/core/io/event_loop_socket_factory.h
index ee9a9f3..8edf020 100644
--- a/quiche/quic/core/io/event_loop_socket_factory.h
+++ b/quiche/quic/core/io/event_loop_socket_factory.h
@@ -19,7 +19,7 @@
 
 // A socket factory that creates sockets implemented using an underlying
 // QuicEventLoop.
-class QUICHE_EXPORT_PRIVATE EventLoopSocketFactory : public SocketFactory {
+class QUICHE_EXPORT EventLoopSocketFactory : public SocketFactory {
  public:
   // `event_loop` and `buffer_allocator` must outlive the created factory.
   EventLoopSocketFactory(QuicEventLoop* event_loop,
diff --git a/quiche/quic/core/io/socket.h b/quiche/quic/core/io/socket.h
index 8d32bc3..7298f7e 100644
--- a/quiche/quic/core/io/socket.h
+++ b/quiche/quic/core/io/socket.h
@@ -51,7 +51,7 @@
   return "unknown";
 }
 
-struct QUICHE_EXPORT_PRIVATE AcceptResult {
+struct QUICHE_EXPORT AcceptResult {
   // Socket for interacting with the accepted connection.
   SocketFd fd;
 
diff --git a/quiche/quic/core/socket_factory.h b/quiche/quic/core/socket_factory.h
index d37499d..708ff7d 100644
--- a/quiche/quic/core/socket_factory.h
+++ b/quiche/quic/core/socket_factory.h
@@ -15,7 +15,7 @@
 namespace quic {
 
 // A factory to create objects of type Socket and derived interfaces.
-class QUICHE_EXPORT_PRIVATE SocketFactory {
+class QUICHE_EXPORT SocketFactory {
  public:
   virtual ~SocketFactory() = default;
 
diff --git a/quiche/quic/platform/api/quic_export.h b/quiche/quic/platform/api/quic_export.h
index 5edb835..13e43ca 100644
--- a/quiche/quic/platform/api/quic_export.h
+++ b/quiche/quic/platform/api/quic_export.h
@@ -12,7 +12,7 @@
 
 // QUIC_EXPORT_PRIVATE is meant for QUIC functionality that is built in Chromium
 // as part of //net, and not fully contained in headers.
-#define QUIC_EXPORT_PRIVATE QUICHE_EXPORT_PRIVATE
+#define QUIC_EXPORT_PRIVATE QUICHE_EXPORT
 
 // QUIC_NO_EXPORT is meant for QUIC functionality that is either fully defined
 // in a header, or is built in Chromium as part of tests or tools.
diff --git a/quiche/spdy/core/array_output_buffer.h b/quiche/spdy/core/array_output_buffer.h
index 002c30a..edce72c 100644
--- a/quiche/spdy/core/array_output_buffer.h
+++ b/quiche/spdy/core/array_output_buffer.h
@@ -12,7 +12,7 @@
 
 namespace spdy {
 
-class QUICHE_EXPORT_PRIVATE ArrayOutputBuffer : public ZeroCopyOutputBuffer {
+class QUICHE_EXPORT ArrayOutputBuffer : public ZeroCopyOutputBuffer {
  public:
   // |buffer| is pointed to the output to write to, and |size| is the capacity
   // of the output.
diff --git a/quiche/spdy/core/header_byte_listener_interface.h b/quiche/spdy/core/header_byte_listener_interface.h
index 7b738af..308110f 100644
--- a/quiche/spdy/core/header_byte_listener_interface.h
+++ b/quiche/spdy/core/header_byte_listener_interface.h
@@ -8,7 +8,7 @@
 namespace spdy {
 
 // Listens for the receipt of uncompressed header bytes.
-class QUICHE_EXPORT_PRIVATE HeaderByteListenerInterface {
+class QUICHE_EXPORT HeaderByteListenerInterface {
  public:
   virtual ~HeaderByteListenerInterface() {}
 
diff --git a/quiche/spdy/core/hpack/hpack_constants.h b/quiche/spdy/core/hpack/hpack_constants.h
index ca57ea0..1220a38 100644
--- a/quiche/spdy/core/hpack/hpack_constants.h
+++ b/quiche/spdy/core/hpack/hpack_constants.h
@@ -19,13 +19,13 @@
 
 // An HpackPrefix signifies |bits| stored in the top |bit_size| bits
 // of an octet.
-struct QUICHE_EXPORT_PRIVATE HpackPrefix {
+struct QUICHE_EXPORT HpackPrefix {
   uint8_t bits;
   size_t bit_size;
 };
 
 // Represents a symbol and its Huffman code (stored in most-significant bits).
-struct QUICHE_EXPORT_PRIVATE HpackHuffmanSymbol {
+struct QUICHE_EXPORT HpackHuffmanSymbol {
   uint32_t code;
   uint8_t length;
   uint16_t id;
@@ -33,7 +33,7 @@
 
 // An entry in the static table. Must be a POD in order to avoid static
 // initializers, i.e. no user-defined constructors or destructors.
-struct QUICHE_EXPORT_PRIVATE HpackStaticEntry {
+struct QUICHE_EXPORT HpackStaticEntry {
   const char* const name;
   const size_t name_len;
   const char* const value;
@@ -70,17 +70,15 @@
 const HpackPrefix kHeaderTableSizeUpdateOpcode = {0b001, 3};
 
 // RFC 7541, Appendix B: Huffman Code.
-QUICHE_EXPORT_PRIVATE const std::vector<HpackHuffmanSymbol>&
-HpackHuffmanCodeVector();
+QUICHE_EXPORT const std::vector<HpackHuffmanSymbol>& HpackHuffmanCodeVector();
 
 // RFC 7541, Appendix A: Static Table Definition.
-QUICHE_EXPORT_PRIVATE const std::vector<HpackStaticEntry>&
-HpackStaticTableVector();
+QUICHE_EXPORT const std::vector<HpackStaticEntry>& HpackStaticTableVector();
 
 // Returns a HpackStaticTable instance initialized with |kHpackStaticTable|.
 // The instance is read-only, has static lifetime, and is safe to share amoung
 // threads. This function is thread-safe.
-QUICHE_EXPORT_PRIVATE const HpackStaticTable& ObtainHpackStaticTable();
+QUICHE_EXPORT const HpackStaticTable& ObtainHpackStaticTable();
 
 // RFC 7541, 8.1.2.1: Pseudo-headers start with a colon.
 const char kPseudoHeaderPrefix = ':';
diff --git a/quiche/spdy/core/hpack/hpack_decoder_adapter.h b/quiche/spdy/core/hpack/hpack_decoder_adapter.h
index 5cd16fc..d5685a5 100644
--- a/quiche/spdy/core/hpack/hpack_decoder_adapter.h
+++ b/quiche/spdy/core/hpack/hpack_decoder_adapter.h
@@ -28,7 +28,7 @@
 class HpackDecoderAdapterPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE HpackDecoderAdapter {
+class QUICHE_EXPORT HpackDecoderAdapter {
  public:
   friend test::HpackDecoderAdapterPeer;
   HpackDecoderAdapter();
@@ -91,8 +91,7 @@
   std::string detailed_error() const { return detailed_error_; }
 
  private:
-  class QUICHE_EXPORT_PRIVATE ListenerAdapter
-      : public http2::HpackDecoderListener {
+  class QUICHE_EXPORT ListenerAdapter : public http2::HpackDecoderListener {
    public:
     ListenerAdapter();
     ~ListenerAdapter() override;
diff --git a/quiche/spdy/core/hpack/hpack_encoder.h b/quiche/spdy/core/hpack/hpack_encoder.h
index d63c9f2..50e4711 100644
--- a/quiche/spdy/core/hpack/hpack_encoder.h
+++ b/quiche/spdy/core/hpack/hpack_encoder.h
@@ -30,7 +30,7 @@
 class HpackEncoderPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE HpackEncoder {
+class QUICHE_EXPORT HpackEncoder {
  public:
   using Representation = std::pair<absl::string_view, absl::string_view>;
   using Representations = std::vector<Representation>;
@@ -53,7 +53,7 @@
   // Encodes and returns the given header set as a string.
   std::string EncodeHeaderBlock(const Http2HeaderBlock& header_set);
 
-  class QUICHE_EXPORT_PRIVATE ProgressiveEncoder {
+  class QUICHE_EXPORT ProgressiveEncoder {
    public:
     virtual ~ProgressiveEncoder() {}
 
diff --git a/quiche/spdy/core/hpack/hpack_entry.h b/quiche/spdy/core/hpack/hpack_entry.h
index 26eeb6a..b57203d 100644
--- a/quiche/spdy/core/hpack/hpack_entry.h
+++ b/quiche/spdy/core/hpack/hpack_entry.h
@@ -23,7 +23,7 @@
 constexpr size_t kHpackEntrySizeOverhead = 32;
 
 // A structure for looking up entries in the static and dynamic tables.
-struct QUICHE_EXPORT_PRIVATE HpackLookupEntry {
+struct QUICHE_EXPORT HpackLookupEntry {
   absl::string_view name;
   absl::string_view value;
 
@@ -40,7 +40,7 @@
 
 // A structure for an entry in the static table (3.3.1)
 // and the header table (3.3.2).
-class QUICHE_EXPORT_PRIVATE HpackEntry {
+class QUICHE_EXPORT HpackEntry {
  public:
   HpackEntry(std::string name, std::string value);
 
diff --git a/quiche/spdy/core/hpack/hpack_header_table.h b/quiche/spdy/core/hpack/hpack_header_table.h
index 7886dde..a22b762 100644
--- a/quiche/spdy/core/hpack/hpack_header_table.h
+++ b/quiche/spdy/core/hpack/hpack_header_table.h
@@ -33,7 +33,7 @@
 constexpr size_t kHpackEntryNotFound = 0;
 
 // A data structure for the static table (2.3.1) and the dynamic table (2.3.2).
-class QUICHE_EXPORT_PRIVATE HpackHeaderTable {
+class QUICHE_EXPORT HpackHeaderTable {
  public:
   friend class test::HpackHeaderTablePeer;
 
diff --git a/quiche/spdy/core/hpack/hpack_output_stream.h b/quiche/spdy/core/hpack/hpack_output_stream.h
index cd8ce46..0d3bf8c 100644
--- a/quiche/spdy/core/hpack/hpack_output_stream.h
+++ b/quiche/spdy/core/hpack/hpack_output_stream.h
@@ -20,7 +20,7 @@
 
 // An HpackOutputStream handles all the low-level details of encoding
 // header fields.
-class QUICHE_EXPORT_PRIVATE HpackOutputStream {
+class QUICHE_EXPORT HpackOutputStream {
  public:
   HpackOutputStream();
   HpackOutputStream(const HpackOutputStream&) = delete;
diff --git a/quiche/spdy/core/hpack/hpack_static_table.h b/quiche/spdy/core/hpack/hpack_static_table.h
index fda34d1..278c242 100644
--- a/quiche/spdy/core/hpack/hpack_static_table.h
+++ b/quiche/spdy/core/hpack/hpack_static_table.h
@@ -19,7 +19,7 @@
 // encoding and decoding contexts.  Once initialized, an instance is read only
 // and may be accessed only through its const interface.  Such an instance may
 // be shared accross multiple HPACK contexts.
-class QUICHE_EXPORT_PRIVATE HpackStaticTable {
+class QUICHE_EXPORT HpackStaticTable {
  public:
   HpackStaticTable();
   ~HpackStaticTable();
diff --git a/quiche/spdy/core/http2_frame_decoder_adapter.h b/quiche/spdy/core/http2_frame_decoder_adapter.h
index f185713..adfb14c 100644
--- a/quiche/spdy/core/http2_frame_decoder_adapter.h
+++ b/quiche/spdy/core/http2_frame_decoder_adapter.h
@@ -33,7 +33,7 @@
 namespace http2 {
 
 // Adapts SpdyFramer interface to use Http2FrameDecoder.
-class QUICHE_EXPORT_PRIVATE Http2DecoderAdapter
+class QUICHE_EXPORT Http2DecoderAdapter
     : public http2::Http2FrameDecoderListener {
  public:
   // HTTP2 states.
@@ -363,7 +363,7 @@
 //      been delivered for the control frame.
 // During step 2, if the visitor is not interested in accepting the header data,
 // it should return a no-op implementation of SpdyHeadersHandlerInterface.
-class QUICHE_EXPORT_PRIVATE SpdyFramerVisitorInterface {
+class QUICHE_EXPORT SpdyFramerVisitorInterface {
  public:
   virtual ~SpdyFramerVisitorInterface() {}
 
@@ -542,7 +542,7 @@
                                      absl::string_view payload) = 0;
 };
 
-class QUICHE_EXPORT_PRIVATE ExtensionVisitorInterface {
+class QUICHE_EXPORT ExtensionVisitorInterface {
  public:
   virtual ~ExtensionVisitorInterface() {}
 
diff --git a/quiche/spdy/core/http2_header_block.h b/quiche/spdy/core/http2_header_block.h
index 867a566..e0da8f5 100644
--- a/quiche/spdy/core/http2_header_block.h
+++ b/quiche/spdy/core/http2_header_block.h
@@ -46,11 +46,11 @@
 //
 // This implementation does not make much of an effort to minimize wasted space.
 // It's expected that keys are rarely deleted from a Http2HeaderBlock.
-class QUICHE_EXPORT_PRIVATE Http2HeaderBlock {
+class QUICHE_EXPORT Http2HeaderBlock {
  private:
   // Stores a list of value fragments that can be joined later with a
   // key-dependent separator.
-  class QUICHE_EXPORT_PRIVATE HeaderValue {
+  class QUICHE_EXPORT HeaderValue {
    public:
     HeaderValue(Http2HeaderStorage* storage, absl::string_view key,
                 absl::string_view initial_value);
@@ -102,7 +102,7 @@
   // absl::string_view>, even though the underlying MapType::value_type is
   // different. Dereferencing the iterator will result in memory allocation for
   // multi-value headers.
-  class QUICHE_EXPORT_PRIVATE iterator {
+  class QUICHE_EXPORT iterator {
    public:
     // The following type definitions fulfill the requirements for iterator
     // implementations.
@@ -205,7 +205,7 @@
   // be nearly a drop-in replacement for
   // SpdyLinkedHashMap<std::string, std::string>.
   // It reads data from or writes data to a Http2HeaderStorage.
-  class QUICHE_EXPORT_PRIVATE ValueProxy {
+  class QUICHE_EXPORT ValueProxy {
    public:
     ~ValueProxy();
 
diff --git a/quiche/spdy/core/http2_header_block_hpack_listener.h b/quiche/spdy/core/http2_header_block_hpack_listener.h
index 598ec96..2733a85 100644
--- a/quiche/spdy/core/http2_header_block_hpack_listener.h
+++ b/quiche/spdy/core/http2_header_block_hpack_listener.h
@@ -11,7 +11,7 @@
 
 // This class simply gathers the key-value pairs emitted by an HpackDecoder in
 // a Http2HeaderBlock.
-class QUICHE_EXPORT_PRIVATE Http2HeaderBlockHpackListener
+class QUICHE_EXPORT Http2HeaderBlockHpackListener
     : public http2::HpackDecoderListener {
  public:
   Http2HeaderBlockHpackListener() {}
diff --git a/quiche/spdy/core/http2_header_storage.h b/quiche/spdy/core/http2_header_storage.h
index fd49cc3..bc275b3 100644
--- a/quiche/spdy/core/http2_header_storage.h
+++ b/quiche/spdy/core/http2_header_storage.h
@@ -16,7 +16,7 @@
 // Write operations always append to the last block. If there is not enough
 // space to perform the write, a new block is allocated, and any unused space
 // is wasted.
-class QUICHE_EXPORT_PRIVATE Http2HeaderStorage {
+class QUICHE_EXPORT Http2HeaderStorage {
  public:
   Http2HeaderStorage();
 
@@ -49,9 +49,9 @@
 
 // Writes |fragments| to |dst|, joined by |separator|. |dst| must be large
 // enough to hold the result. Returns the number of bytes written.
-QUICHE_EXPORT_PRIVATE size_t
-Join(char* dst, const std::vector<absl::string_view>& fragments,
-     absl::string_view separator);
+QUICHE_EXPORT size_t Join(char* dst,
+                          const std::vector<absl::string_view>& fragments,
+                          absl::string_view separator);
 
 }  // namespace spdy
 
diff --git a/quiche/spdy/core/metadata_extension.h b/quiche/spdy/core/metadata_extension.h
index a749904..9ac2b91 100644
--- a/quiche/spdy/core/metadata_extension.h
+++ b/quiche/spdy/core/metadata_extension.h
@@ -21,8 +21,7 @@
 // a setting with a setting ID of kMetadataExtensionId and a value of 1.
 //
 // Metadata is represented as a HPACK header block with literal encoding.
-class QUICHE_EXPORT_PRIVATE MetadataVisitor
-    : public spdy::ExtensionVisitorInterface {
+class QUICHE_EXPORT MetadataVisitor : public spdy::ExtensionVisitorInterface {
  public:
   using MetadataPayload = spdy::Http2HeaderBlock;
 
@@ -93,7 +92,7 @@
 
 // This class uses an HpackEncoder to serialize a METADATA block as a series of
 // METADATA frames.
-class QUICHE_EXPORT_PRIVATE MetadataFrameSequence {
+class QUICHE_EXPORT MetadataFrameSequence {
  public:
   MetadataFrameSequence(SpdyStreamId stream_id, spdy::Http2HeaderBlock payload);
 
diff --git a/quiche/spdy/core/no_op_headers_handler.h b/quiche/spdy/core/no_op_headers_handler.h
index 9db36d2..2e0c82f 100644
--- a/quiche/spdy/core/no_op_headers_handler.h
+++ b/quiche/spdy/core/no_op_headers_handler.h
@@ -9,8 +9,7 @@
 
 // Drops all header data, but passes information about header bytes parsed to
 // a listener.
-class QUICHE_EXPORT_PRIVATE NoOpHeadersHandler
-    : public SpdyHeadersHandlerInterface {
+class QUICHE_EXPORT NoOpHeadersHandler : public SpdyHeadersHandlerInterface {
  public:
   // Does not take ownership of listener.
   explicit NoOpHeadersHandler(HeaderByteListenerInterface* listener)
diff --git a/quiche/spdy/core/recording_headers_handler.h b/quiche/spdy/core/recording_headers_handler.h
index a605944..54165eb 100644
--- a/quiche/spdy/core/recording_headers_handler.h
+++ b/quiche/spdy/core/recording_headers_handler.h
@@ -18,7 +18,7 @@
 
 // RecordingHeadersHandler copies the headers emitted from the deframer, and
 // when needed can forward events to another wrapped handler.
-class QUICHE_EXPORT_PRIVATE RecordingHeadersHandler
+class QUICHE_EXPORT RecordingHeadersHandler
     : public SpdyHeadersHandlerInterface {
  public:
   explicit RecordingHeadersHandler(
diff --git a/quiche/spdy/core/spdy_alt_svc_wire_format.h b/quiche/spdy/core/spdy_alt_svc_wire_format.h
index 66e54c7..ec0c124 100644
--- a/quiche/spdy/core/spdy_alt_svc_wire_format.h
+++ b/quiche/spdy/core/spdy_alt_svc_wire_format.h
@@ -24,11 +24,11 @@
 class SpdyAltSvcWireFormatPeer;
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE SpdyAltSvcWireFormat {
+class QUICHE_EXPORT SpdyAltSvcWireFormat {
  public:
   using VersionVector = absl::InlinedVector<uint32_t, 8>;
 
-  struct QUICHE_EXPORT_PRIVATE AlternativeService {
+  struct QUICHE_EXPORT AlternativeService {
     std::string protocol_id;
     std::string host;
 
diff --git a/quiche/spdy/core/spdy_frame_builder.h b/quiche/spdy/core/spdy_frame_builder.h
index 8fec09b..69cf352 100644
--- a/quiche/spdy/core/spdy_frame_builder.h
+++ b/quiche/spdy/core/spdy_frame_builder.h
@@ -29,7 +29,7 @@
 // to a frame instance.  The SpdyFrameBuilder grows its internal memory buffer
 // dynamically to hold the sequence of primitive values.   The internal memory
 // buffer is exposed as the "data" of the SpdyFrameBuilder.
-class QUICHE_EXPORT_PRIVATE SpdyFrameBuilder {
+class QUICHE_EXPORT SpdyFrameBuilder {
  public:
   // Initializes a SpdyFrameBuilder with a buffer of given size
   explicit SpdyFrameBuilder(size_t size);
diff --git a/quiche/spdy/core/spdy_frame_builder_test.cc b/quiche/spdy/core/spdy_frame_builder_test.cc
index b981a58..293d7d8 100644
--- a/quiche/spdy/core/spdy_frame_builder_test.cc
+++ b/quiche/spdy/core/spdy_frame_builder_test.cc
@@ -16,7 +16,7 @@
 
 namespace test {
 
-class QUICHE_EXPORT_PRIVATE SpdyFrameBuilderPeer {
+class QUICHE_EXPORT SpdyFrameBuilderPeer {
  public:
   static char* GetWritableBuffer(SpdyFrameBuilder* builder, size_t length) {
     return builder->GetWritableBuffer(length);
diff --git a/quiche/spdy/core/spdy_framer.h b/quiche/spdy/core/spdy_framer.h
index db8a64a..ea886ca 100644
--- a/quiche/spdy/core/spdy_framer.h
+++ b/quiche/spdy/core/spdy_framer.h
@@ -32,7 +32,7 @@
 
 }  // namespace test
 
-class QUICHE_EXPORT_PRIVATE SpdyFrameSequence {
+class QUICHE_EXPORT SpdyFrameSequence {
  public:
   virtual ~SpdyFrameSequence() {}
 
@@ -47,7 +47,7 @@
   virtual const SpdyFrameIR& GetIR() const = 0;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyFramer {
+class QUICHE_EXPORT SpdyFramer {
  public:
   enum CompressionOption {
     ENABLE_COMPRESSION,
@@ -252,7 +252,7 @@
   //     // Write failed;
   //   }
   // }
-  class QUICHE_EXPORT_PRIVATE SpdyFrameIterator : public SpdyFrameSequence {
+  class QUICHE_EXPORT SpdyFrameIterator : public SpdyFrameSequence {
    public:
     // Creates an iterator with the provided framer.
     // Does not take ownership of |framer|.
@@ -295,8 +295,7 @@
   // Iteratively converts a SpdyHeadersIR (with a possibly huge
   // Http2HeaderBlock) into an appropriate sequence of SpdySerializedFrames, and
   // write to the output.
-  class QUICHE_EXPORT_PRIVATE SpdyHeaderFrameIterator
-      : public SpdyFrameIterator {
+  class QUICHE_EXPORT SpdyHeaderFrameIterator : public SpdyFrameIterator {
    public:
     // Does not take ownership of |framer|. Take ownership of |headers_ir|.
     SpdyHeaderFrameIterator(SpdyFramer* framer,
@@ -316,8 +315,7 @@
   // Iteratively converts a SpdyPushPromiseIR (with a possibly huge
   // Http2HeaderBlock) into an appropriate sequence of SpdySerializedFrames, and
   // write to the output.
-  class QUICHE_EXPORT_PRIVATE SpdyPushPromiseFrameIterator
-      : public SpdyFrameIterator {
+  class QUICHE_EXPORT SpdyPushPromiseFrameIterator : public SpdyFrameIterator {
    public:
     // Does not take ownership of |framer|. Take ownership of |push_promise_ir|.
     SpdyPushPromiseFrameIterator(
@@ -337,8 +335,7 @@
 
   // Converts a SpdyFrameIR into one Spdy frame (a sequence of length 1), and
   // write it to the output.
-  class QUICHE_EXPORT_PRIVATE SpdyControlFrameIterator
-      : public SpdyFrameSequence {
+  class QUICHE_EXPORT SpdyControlFrameIterator : public SpdyFrameSequence {
    public:
     SpdyControlFrameIterator(SpdyFramer* framer,
                              std::unique_ptr<const SpdyFrameIR> frame_ir);
diff --git a/quiche/spdy/core/spdy_headers_handler_interface.h b/quiche/spdy/core/spdy_headers_handler_interface.h
index 00f95da..6298741 100644
--- a/quiche/spdy/core/spdy_headers_handler_interface.h
+++ b/quiche/spdy/core/spdy_headers_handler_interface.h
@@ -14,7 +14,7 @@
 
 // This interface defines how an object that accepts header data should behave.
 // It is used by both SpdyHeadersBlockParser and HpackDecoder.
-class QUICHE_EXPORT_PRIVATE SpdyHeadersHandlerInterface {
+class QUICHE_EXPORT SpdyHeadersHandlerInterface {
  public:
   virtual ~SpdyHeadersHandlerInterface() {}
 
diff --git a/quiche/spdy/core/spdy_intrusive_list.h b/quiche/spdy/core/spdy_intrusive_list.h
index bbced57..bdf1614 100644
--- a/quiche/spdy/core/spdy_intrusive_list.h
+++ b/quiche/spdy/core/spdy_intrusive_list.h
@@ -97,7 +97,7 @@
 class SpdyIntrusiveList;
 
 template <typename T, typename ListID = void>
-class QUICHE_EXPORT_PRIVATE SpdyIntrusiveLink {
+class QUICHE_EXPORT SpdyIntrusiveLink {
  protected:
   // We declare the constructor protected so that only derived types and the
   // befriended list can construct this.
@@ -122,7 +122,7 @@
 };
 
 template <typename T, typename ListID = void>
-class QUICHE_EXPORT_PRIVATE SpdyIntrusiveList {
+class QUICHE_EXPORT SpdyIntrusiveList {
   template <typename QualifiedT, typename QualifiedLinkT>
   class iterator_impl;
 
@@ -268,7 +268,7 @@
   // variant of T and the matching qualified link type. Essentially, QualifiedT
   // will either be 'T' or 'const T', the latter for a const_iterator.
   template <typename QualifiedT, typename QualifiedLinkT>
-  class QUICHE_EXPORT_PRIVATE iterator_impl {
+  class QUICHE_EXPORT iterator_impl {
    public:
     using iterator_category = std::bidirectional_iterator_tag;
     using value_type = QualifiedT;
diff --git a/quiche/spdy/core/spdy_no_op_visitor.h b/quiche/spdy/core/spdy_no_op_visitor.h
index e8fd79d..b20c9c3 100644
--- a/quiche/spdy/core/spdy_no_op_visitor.h
+++ b/quiche/spdy/core/spdy_no_op_visitor.h
@@ -18,10 +18,9 @@
 
 namespace spdy {
 
-class QUICHE_EXPORT_PRIVATE SpdyNoOpVisitor
-    : public SpdyFramerVisitorInterface,
-      public SpdyFramerDebugVisitorInterface,
-      public SpdyHeadersHandlerInterface {
+class QUICHE_EXPORT SpdyNoOpVisitor : public SpdyFramerVisitorInterface,
+                                      public SpdyFramerDebugVisitorInterface,
+                                      public SpdyHeadersHandlerInterface {
  public:
   SpdyNoOpVisitor();
   ~SpdyNoOpVisitor() override;
diff --git a/quiche/spdy/core/spdy_pinnable_buffer_piece.h b/quiche/spdy/core/spdy_pinnable_buffer_piece.h
index 1b1bd32..d73a400 100644
--- a/quiche/spdy/core/spdy_pinnable_buffer_piece.h
+++ b/quiche/spdy/core/spdy_pinnable_buffer_piece.h
@@ -20,7 +20,7 @@
 // Represents a piece of consumed buffer which may (or may not) own its
 // underlying storage. Users may "pin" the buffer at a later time to ensure
 // a SpdyPinnableBufferPiece owns and retains storage of the buffer.
-struct QUICHE_EXPORT_PRIVATE SpdyPinnableBufferPiece {
+struct QUICHE_EXPORT SpdyPinnableBufferPiece {
  public:
   SpdyPinnableBufferPiece();
   ~SpdyPinnableBufferPiece();
diff --git a/quiche/spdy/core/spdy_prefixed_buffer_reader.h b/quiche/spdy/core/spdy_prefixed_buffer_reader.h
index d0d3956..c102ee6 100644
--- a/quiche/spdy/core/spdy_prefixed_buffer_reader.h
+++ b/quiche/spdy/core/spdy_prefixed_buffer_reader.h
@@ -14,7 +14,7 @@
 
 // Reader class which simplifies reading contiguously from
 // from a disjoint buffer prefix & suffix.
-class QUICHE_EXPORT_PRIVATE SpdyPrefixedBufferReader {
+class QUICHE_EXPORT SpdyPrefixedBufferReader {
  public:
   SpdyPrefixedBufferReader(const char* prefix, size_t prefix_length,
                            const char* suffix, size_t suffix_length);
diff --git a/quiche/spdy/core/spdy_protocol.h b/quiche/spdy/core/spdy_protocol.h
index 1166125..d475cb0 100644
--- a/quiche/spdy/core/spdy_protocol.h
+++ b/quiche/spdy/core/spdy_protocol.h
@@ -81,7 +81,7 @@
 // defined as a string literal with a null terminator, the actual connection
 // preface is only the first |kHttp2ConnectionHeaderPrefixSize| bytes, which
 // excludes the null terminator.
-QUICHE_EXPORT_PRIVATE extern const char* const kHttp2ConnectionHeaderPrefix;
+QUICHE_EXPORT extern const char* const kHttp2ConnectionHeaderPrefix;
 const int kHttp2ConnectionHeaderPrefixSize = 24;
 
 // Wire values for HTTP2 frame types.
@@ -163,13 +163,13 @@
 
 // This explicit operator is needed, otherwise compiler finds
 // overloaded operator to be ambiguous.
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               SpdyKnownSettingsId id);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       SpdyKnownSettingsId id);
 
 // This operator is needed, because SpdyFrameType is an enum class,
 // therefore implicit conversion to underlying integer type is not allowed.
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               SpdyFrameType frame_type);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& out,
+                                       SpdyFrameType frame_type);
 
 using SettingsMap = std::map<SpdySettingsId, uint32_t>;
 
@@ -211,7 +211,7 @@
 const SpdyPriority kV3LowestPriority = 7;
 
 // Returns SPDY 3.x priority value clamped to the valid range of [0, 7].
-QUICHE_EXPORT_PRIVATE SpdyPriority ClampSpdy3Priority(SpdyPriority priority);
+QUICHE_EXPORT SpdyPriority ClampSpdy3Priority(SpdyPriority priority);
 
 // HTTP/2 stream weights are integers in range [1, 256], as specified in RFC
 // 7540 section 5.3.2. Default stream weight is defined in section 5.3.5.
@@ -220,19 +220,19 @@
 const int kHttp2DefaultStreamWeight = 16;
 
 // Returns HTTP/2 weight clamped to the valid range of [1, 256].
-QUICHE_EXPORT_PRIVATE int ClampHttp2Weight(int weight);
+QUICHE_EXPORT int ClampHttp2Weight(int weight);
 
 // Maps SPDY 3.x priority value in range [0, 7] to HTTP/2 weight value in range
 // [1, 256], where priority 0 (i.e. highest precedence) corresponds to maximum
 // weight 256 and priority 7 (lowest precedence) corresponds to minimum weight
 // 1.
-QUICHE_EXPORT_PRIVATE int Spdy3PriorityToHttp2Weight(SpdyPriority priority);
+QUICHE_EXPORT int Spdy3PriorityToHttp2Weight(SpdyPriority priority);
 
 // Maps HTTP/2 weight value in range [1, 256] to SPDY 3.x priority value in
 // range [0, 7], where minimum weight 1 corresponds to priority 7 (lowest
 // precedence) and maximum weight 256 corresponds to priority 0 (highest
 // precedence).
-QUICHE_EXPORT_PRIVATE SpdyPriority Http2WeightToSpdy3Priority(int weight);
+QUICHE_EXPORT SpdyPriority Http2WeightToSpdy3Priority(int weight);
 
 // Reserved ID for root stream of HTTP/2 stream dependency tree, as specified
 // in RFC 7540 section 5.3.1.
@@ -242,47 +242,46 @@
 
 // Returns true if a given on-the-wire enumeration of a frame type is defined
 // in a standardized HTTP/2 specification, false otherwise.
-QUICHE_EXPORT_PRIVATE bool IsDefinedFrameType(uint8_t frame_type_field);
+QUICHE_EXPORT bool IsDefinedFrameType(uint8_t frame_type_field);
 
 // Parses a frame type from an on-the-wire enumeration.
 // Behavior is undefined for invalid frame type fields; consumers should first
 // use IsValidFrameType() to verify validity of frame type fields.
-QUICHE_EXPORT_PRIVATE SpdyFrameType ParseFrameType(uint8_t frame_type_field);
+QUICHE_EXPORT SpdyFrameType ParseFrameType(uint8_t frame_type_field);
 
 // Serializes a frame type to the on-the-wire value.
-QUICHE_EXPORT_PRIVATE uint8_t SerializeFrameType(SpdyFrameType frame_type);
+QUICHE_EXPORT uint8_t SerializeFrameType(SpdyFrameType frame_type);
 
 // (HTTP/2) All standard frame types except WINDOW_UPDATE are
 // (stream-specific xor connection-level). Returns false iff we know
 // the given frame type does not align with the given streamID.
-QUICHE_EXPORT_PRIVATE bool IsValidHTTP2FrameStreamId(
+QUICHE_EXPORT bool IsValidHTTP2FrameStreamId(
     SpdyStreamId current_frame_stream_id, SpdyFrameType frame_type_field);
 
 // Serialize |frame_type| to string for logging/debugging.
-QUICHE_EXPORT_PRIVATE const char* FrameTypeToString(SpdyFrameType frame_type);
+QUICHE_EXPORT const char* FrameTypeToString(SpdyFrameType frame_type);
 
 // If |wire_setting_id| is the on-the-wire representation of a defined SETTINGS
 // parameter, parse it to |*setting_id| and return true.
-QUICHE_EXPORT_PRIVATE bool ParseSettingsId(SpdySettingsId wire_setting_id,
-                                           SpdyKnownSettingsId* setting_id);
+QUICHE_EXPORT bool ParseSettingsId(SpdySettingsId wire_setting_id,
+                                   SpdyKnownSettingsId* setting_id);
 
 // Returns a string representation of the |id| for logging/debugging. Returns
 // the |id| prefixed with "SETTINGS_UNKNOWN_" for unknown SETTINGS IDs. To parse
 // the |id| into a SpdyKnownSettingsId (if applicable), use ParseSettingsId().
-QUICHE_EXPORT_PRIVATE std::string SettingsIdToString(SpdySettingsId id);
+QUICHE_EXPORT std::string SettingsIdToString(SpdySettingsId id);
 
 // Parse |wire_error_code| to a SpdyErrorCode.
 // Treat unrecognized error codes as INTERNAL_ERROR
 // as recommended by the HTTP/2 specification.
-QUICHE_EXPORT_PRIVATE SpdyErrorCode ParseErrorCode(uint32_t wire_error_code);
+QUICHE_EXPORT SpdyErrorCode ParseErrorCode(uint32_t wire_error_code);
 
 // Serialize RST_STREAM or GOAWAY frame error code to string
 // for logging/debugging.
-QUICHE_EXPORT_PRIVATE const char* ErrorCodeToString(SpdyErrorCode error_code);
+QUICHE_EXPORT const char* ErrorCodeToString(SpdyErrorCode error_code);
 
 // Serialize |type| to string for logging/debugging.
-QUICHE_EXPORT_PRIVATE const char* WriteSchedulerTypeToString(
-    WriteSchedulerType type);
+QUICHE_EXPORT const char* WriteSchedulerTypeToString(WriteSchedulerType type);
 
 // Minimum size of a frame, in octets.
 const size_t kFrameMinimumSize = kFrameHeaderSize;
@@ -327,30 +326,30 @@
 // Initial window size for a session in bytes.
 const int32_t kInitialSessionWindowSize = 64 * 1024 - 1;
 // The NPN string for HTTP2, "h2".
-QUICHE_EXPORT_PRIVATE extern const char* const kHttp2Npn;
+QUICHE_EXPORT extern const char* const kHttp2Npn;
 // An estimate size of the HPACK overhead for each header field. 1 bytes for
 // indexed literal, 1 bytes for key literal and length encoding, and 2 bytes for
 // value literal and length encoding.
 const size_t kPerHeaderHpackOverhead = 4;
 
 // Names of pseudo-headers defined for HTTP/2 requests.
-QUICHE_EXPORT_PRIVATE extern const char* const kHttp2AuthorityHeader;
-QUICHE_EXPORT_PRIVATE extern const char* const kHttp2MethodHeader;
-QUICHE_EXPORT_PRIVATE extern const char* const kHttp2PathHeader;
-QUICHE_EXPORT_PRIVATE extern const char* const kHttp2SchemeHeader;
-QUICHE_EXPORT_PRIVATE extern const char* const kHttp2ProtocolHeader;
+QUICHE_EXPORT extern const char* const kHttp2AuthorityHeader;
+QUICHE_EXPORT extern const char* const kHttp2MethodHeader;
+QUICHE_EXPORT extern const char* const kHttp2PathHeader;
+QUICHE_EXPORT extern const char* const kHttp2SchemeHeader;
+QUICHE_EXPORT extern const char* const kHttp2ProtocolHeader;
 
 // Name of pseudo-header defined for HTTP/2 responses.
-QUICHE_EXPORT_PRIVATE extern const char* const kHttp2StatusHeader;
+QUICHE_EXPORT extern const char* const kHttp2StatusHeader;
 
-QUICHE_EXPORT_PRIVATE size_t GetNumberRequiredContinuationFrames(size_t size);
+QUICHE_EXPORT size_t GetNumberRequiredContinuationFrames(size_t size);
 
 // Variant type (i.e. tagged union) that is either a SPDY 3.x priority value,
 // or else an HTTP/2 stream dependency tuple {parent stream ID, weight,
 // exclusive bit}. Templated to allow for use by QUIC code; SPDY and HTTP/2
 // code should use the concrete type instantiation SpdyStreamPrecedence.
 template <typename StreamIdType>
-class QUICHE_EXPORT_PRIVATE StreamPrecedence {
+class QUICHE_EXPORT StreamPrecedence {
  public:
   // Constructs instance that is a SPDY 3.x priority. Clamps priority value to
   // the valid range [0, 7].
@@ -426,7 +425,7 @@
   }
 
  private:
-  struct QUICHE_EXPORT_PRIVATE Http2StreamDependency {
+  struct QUICHE_EXPORT Http2StreamDependency {
     StreamIdType parent_id;
     int weight;
     bool is_exclusive;
@@ -444,7 +443,7 @@
 class SpdyFrameVisitor;
 
 // Intermediate representation for HTTP2 frames.
-class QUICHE_EXPORT_PRIVATE SpdyFrameIR {
+class QUICHE_EXPORT SpdyFrameIR {
  public:
   virtual ~SpdyFrameIR() {}
 
@@ -472,7 +471,7 @@
 
 // Abstract class intended to be inherited by IRs that have the option of a FIN
 // flag.
-class QUICHE_EXPORT_PRIVATE SpdyFrameWithFinIR : public SpdyFrameIR {
+class QUICHE_EXPORT SpdyFrameWithFinIR : public SpdyFrameIR {
  public:
   ~SpdyFrameWithFinIR() override {}
   bool fin() const override;
@@ -490,8 +489,7 @@
 
 // Abstract class intended to be inherited by IRs that contain a header
 // block. Implies SpdyFrameWithFinIR.
-class QUICHE_EXPORT_PRIVATE SpdyFrameWithHeaderBlockIR
-    : public SpdyFrameWithFinIR {
+class QUICHE_EXPORT SpdyFrameWithHeaderBlockIR : public SpdyFrameWithFinIR {
  public:
   ~SpdyFrameWithHeaderBlockIR() override;
 
@@ -515,7 +513,7 @@
   Http2HeaderBlock header_block_;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyDataIR : public SpdyFrameWithFinIR {
+class QUICHE_EXPORT SpdyDataIR : public SpdyFrameWithFinIR {
  public:
   // Performs a deep copy on data.
   SpdyDataIR(SpdyStreamId stream_id, absl::string_view data);
@@ -589,7 +587,7 @@
   int padding_payload_len_;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyRstStreamIR : public SpdyFrameIR {
+class QUICHE_EXPORT SpdyRstStreamIR : public SpdyFrameIR {
  public:
   SpdyRstStreamIR(SpdyStreamId stream_id, SpdyErrorCode error_code);
   SpdyRstStreamIR(const SpdyRstStreamIR&) = delete;
@@ -610,7 +608,7 @@
   SpdyErrorCode error_code_;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdySettingsIR : public SpdyFrameIR {
+class QUICHE_EXPORT SpdySettingsIR : public SpdyFrameIR {
  public:
   SpdySettingsIR();
   SpdySettingsIR(const SpdySettingsIR&) = delete;
@@ -635,7 +633,7 @@
   bool is_ack_;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyPingIR : public SpdyFrameIR {
+class QUICHE_EXPORT SpdyPingIR : public SpdyFrameIR {
  public:
   explicit SpdyPingIR(SpdyPingId id) : id_(id), is_ack_(false) {}
   SpdyPingIR(const SpdyPingIR&) = delete;
@@ -656,7 +654,7 @@
   bool is_ack_;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyGoAwayIR : public SpdyFrameIR {
+class QUICHE_EXPORT SpdyGoAwayIR : public SpdyFrameIR {
  public:
   // References description, doesn't copy it, so description must outlast
   // this SpdyGoAwayIR.
@@ -703,7 +701,7 @@
   const absl::string_view description_;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithHeaderBlockIR {
+class QUICHE_EXPORT SpdyHeadersIR : public SpdyFrameWithHeaderBlockIR {
  public:
   explicit SpdyHeadersIR(SpdyStreamId stream_id)
       : SpdyHeadersIR(stream_id, Http2HeaderBlock()) {}
@@ -745,7 +743,7 @@
   int padding_payload_len_ = 0;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyWindowUpdateIR : public SpdyFrameIR {
+class QUICHE_EXPORT SpdyWindowUpdateIR : public SpdyFrameIR {
  public:
   SpdyWindowUpdateIR(SpdyStreamId stream_id, int32_t delta)
       : SpdyFrameIR(stream_id) {
@@ -771,8 +769,7 @@
   int32_t delta_;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyPushPromiseIR
-    : public SpdyFrameWithHeaderBlockIR {
+class QUICHE_EXPORT SpdyPushPromiseIR : public SpdyFrameWithHeaderBlockIR {
  public:
   SpdyPushPromiseIR(SpdyStreamId stream_id, SpdyStreamId promised_stream_id)
       : SpdyPushPromiseIR(stream_id, promised_stream_id, Http2HeaderBlock()) {}
@@ -809,7 +806,7 @@
   int padding_payload_len_;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyContinuationIR : public SpdyFrameIR {
+class QUICHE_EXPORT SpdyContinuationIR : public SpdyFrameIR {
  public:
   explicit SpdyContinuationIR(SpdyStreamId stream_id);
   SpdyContinuationIR(const SpdyContinuationIR&) = delete;
@@ -831,7 +828,7 @@
   bool end_headers_;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyAltSvcIR : public SpdyFrameIR {
+class QUICHE_EXPORT SpdyAltSvcIR : public SpdyFrameIR {
  public:
   explicit SpdyAltSvcIR(SpdyStreamId stream_id);
   SpdyAltSvcIR(const SpdyAltSvcIR&) = delete;
@@ -859,7 +856,7 @@
   SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector_;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyPriorityIR : public SpdyFrameIR {
+class QUICHE_EXPORT SpdyPriorityIR : public SpdyFrameIR {
  public:
   SpdyPriorityIR(SpdyStreamId stream_id, SpdyStreamId parent_stream_id,
                  int weight, bool exclusive)
@@ -885,7 +882,7 @@
   bool exclusive_;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyPriorityUpdateIR : public SpdyFrameIR {
+class QUICHE_EXPORT SpdyPriorityUpdateIR : public SpdyFrameIR {
  public:
   SpdyPriorityUpdateIR(SpdyStreamId stream_id,
                        SpdyStreamId prioritized_stream_id,
@@ -911,7 +908,7 @@
   std::string priority_field_value_;
 };
 
-struct QUICHE_EXPORT_PRIVATE AcceptChOriginValuePair {
+struct QUICHE_EXPORT AcceptChOriginValuePair {
   std::string origin;
   std::string value;
   bool operator==(const AcceptChOriginValuePair& rhs) const {
@@ -919,7 +916,7 @@
   }
 };
 
-class QUICHE_EXPORT_PRIVATE SpdyAcceptChIR : public SpdyFrameIR {
+class QUICHE_EXPORT SpdyAcceptChIR : public SpdyFrameIR {
  public:
   SpdyAcceptChIR(std::vector<AcceptChOriginValuePair> entries)
       : entries_(std::move(entries)) {}
@@ -941,7 +938,7 @@
 };
 
 // Represents a frame of unrecognized type.
-class QUICHE_EXPORT_PRIVATE SpdyUnknownIR : public SpdyFrameIR {
+class QUICHE_EXPORT SpdyUnknownIR : public SpdyFrameIR {
  public:
   SpdyUnknownIR(SpdyStreamId stream_id, uint8_t type, uint8_t flags,
                 std::string payload)
@@ -976,7 +973,7 @@
   const std::string payload_;
 };
 
-class QUICHE_EXPORT_PRIVATE SpdySerializedFrame {
+class QUICHE_EXPORT SpdySerializedFrame {
  public:
   SpdySerializedFrame()
       : frame_(const_cast<char*>("")), size_(0), owns_buffer_(false) {}
@@ -1062,7 +1059,7 @@
 // having to know what type they are.  An instance of this interface can be
 // passed to a SpdyFrameIR's Visit method, and the appropriate type-specific
 // method of this class will be called.
-class QUICHE_EXPORT_PRIVATE SpdyFrameVisitor {
+class QUICHE_EXPORT SpdyFrameVisitor {
  public:
   SpdyFrameVisitor() {}
   SpdyFrameVisitor(const SpdyFrameVisitor&) = delete;
@@ -1094,7 +1091,7 @@
 // operates.
 //
 // Most HTTP2 implementations need not bother with this interface at all.
-class QUICHE_EXPORT_PRIVATE SpdyFramerDebugVisitorInterface {
+class QUICHE_EXPORT SpdyFramerDebugVisitorInterface {
  public:
   virtual ~SpdyFramerDebugVisitorInterface() {}
 
diff --git a/quiche/spdy/core/spdy_simple_arena.h b/quiche/spdy/core/spdy_simple_arena.h
index a423a79..dae6879 100644
--- a/quiche/spdy/core/spdy_simple_arena.h
+++ b/quiche/spdy/core/spdy_simple_arena.h
@@ -14,9 +14,9 @@
 
 // Allocates large blocks of memory, and doles them out in smaller chunks.
 // Not thread-safe.
-class QUICHE_EXPORT_PRIVATE SpdySimpleArena {
+class QUICHE_EXPORT SpdySimpleArena {
  public:
-  class QUICHE_EXPORT_PRIVATE Status {
+  class QUICHE_EXPORT Status {
    private:
     friend class SpdySimpleArena;
     size_t bytes_allocated_;
@@ -52,7 +52,7 @@
   Status status() const { return status_; }
 
  private:
-  struct QUICHE_EXPORT_PRIVATE Block {
+  struct QUICHE_EXPORT Block {
     std::unique_ptr<char[]> data;
     size_t size = 0;
     size_t used = 0;
diff --git a/quiche/spdy/core/zero_copy_output_buffer.h b/quiche/spdy/core/zero_copy_output_buffer.h
index 2536979..2ab92ed 100644
--- a/quiche/spdy/core/zero_copy_output_buffer.h
+++ b/quiche/spdy/core/zero_copy_output_buffer.h
@@ -11,7 +11,7 @@
 
 namespace spdy {
 
-class QUICHE_EXPORT_PRIVATE ZeroCopyOutputBuffer {
+class QUICHE_EXPORT ZeroCopyOutputBuffer {
  public:
   virtual ~ZeroCopyOutputBuffer() {}