diff --git a/net/base/ip_address.cc b/net/base/ip_address.cc
index f9565e5ad..170be40 100644
--- a/net/base/ip_address.cc
+++ b/net/base/ip_address.cc
@@ -17,6 +17,8 @@
 
 IPAddress::IPAddress(const IPAddressNumber& address) : ip_address_(address) {}
 
+IPAddress::IPAddress(const IPAddress& other) = default;
+
 IPAddress::IPAddress(const uint8_t* address, size_t address_len)
     : ip_address_(address, address + address_len) {}
 
diff --git a/net/base/ip_address.h b/net/base/ip_address.h
index f46eadb..f1f7480 100644
--- a/net/base/ip_address.h
+++ b/net/base/ip_address.h
@@ -29,6 +29,8 @@
   // Creates an IP address from a deprecated IPAddressNumber.
   explicit IPAddress(const IPAddressNumber& address);
 
+  IPAddress(const IPAddress& other);
+
   // Copies the input address to |ip_address_|. The input is expected to be in
   // network byte order.
   template <size_t N>
diff --git a/net/base/load_timing_info.cc b/net/base/load_timing_info.cc
index ce4df2d..309e7b3 100644
--- a/net/base/load_timing_info.cc
+++ b/net/base/load_timing_info.cc
@@ -16,6 +16,8 @@
                                    socket_log_id(NetLog::Source::kInvalidId) {
 }
 
+LoadTimingInfo::LoadTimingInfo(const LoadTimingInfo& other) = default;
+
 LoadTimingInfo::~LoadTimingInfo() {}
 
 }  // namespace net
diff --git a/net/base/load_timing_info.h b/net/base/load_timing_info.h
index 22a59082..8ee5a22 100644
--- a/net/base/load_timing_info.h
+++ b/net/base/load_timing_info.h
@@ -93,6 +93,7 @@
   };
 
   LoadTimingInfo();
+  LoadTimingInfo(const LoadTimingInfo& other);
   ~LoadTimingInfo();
 
   // True if the socket was reused.  When true, DNS, connect, and SSL times
diff --git a/net/base/network_interfaces.cc b/net/base/network_interfaces.cc
index 6792fca..96a9ef4d 100644
--- a/net/base/network_interfaces.cc
+++ b/net/base/network_interfaces.cc
@@ -37,6 +37,8 @@
       ip_address_attributes(ip_address_attributes) {
 }
 
+NetworkInterface::NetworkInterface(const NetworkInterface& other) = default;
+
 NetworkInterface::~NetworkInterface() {
 }
 
diff --git a/net/base/network_interfaces.h b/net/base/network_interfaces.h
index 09a085f..a4246e2 100644
--- a/net/base/network_interfaces.h
+++ b/net/base/network_interfaces.h
@@ -47,6 +47,7 @@
                    const IPAddressNumber& address,
                    uint32_t prefix_length,
                    int ip_address_attributes);
+  NetworkInterface(const NetworkInterface& other);
   ~NetworkInterface();
 
   std::string name;
diff --git a/net/base/prioritized_dispatcher.cc b/net/base/prioritized_dispatcher.cc
index b72f7a50..a6125a0 100644
--- a/net/base/prioritized_dispatcher.cc
+++ b/net/base/prioritized_dispatcher.cc
@@ -12,6 +12,8 @@
                                       size_t total_jobs)
     : total_jobs(total_jobs), reserved_slots(num_priorities) {}
 
+PrioritizedDispatcher::Limits::Limits(const Limits& other) = default;
+
 PrioritizedDispatcher::Limits::~Limits() {}
 
 PrioritizedDispatcher::PrioritizedDispatcher(const Limits& limits)
diff --git a/net/base/prioritized_dispatcher.h b/net/base/prioritized_dispatcher.h
index 8da8a1a..a0716cc 100644
--- a/net/base/prioritized_dispatcher.h
+++ b/net/base/prioritized_dispatcher.h
@@ -40,6 +40,7 @@
   // for priority 3 or above.
   struct NET_EXPORT_PRIVATE Limits {
     Limits(Priority num_priorities, size_t total_jobs);
+    Limits(const Limits& other);
     ~Limits();
 
     // Total allowed running jobs.
diff --git a/net/cert/cert_verify_result.cc b/net/cert/cert_verify_result.cc
index 2a41893..7a1082e 100644
--- a/net/cert/cert_verify_result.cc
+++ b/net/cert/cert_verify_result.cc
@@ -12,6 +12,8 @@
   Reset();
 }
 
+CertVerifyResult::CertVerifyResult(const CertVerifyResult& other) = default;
+
 CertVerifyResult::~CertVerifyResult() {
 }
 
diff --git a/net/cert/cert_verify_result.h b/net/cert/cert_verify_result.h
index 1f81da2..1cfb8fa5 100644
--- a/net/cert/cert_verify_result.h
+++ b/net/cert/cert_verify_result.h
@@ -20,6 +20,7 @@
 class NET_EXPORT CertVerifyResult {
  public:
   CertVerifyResult();
+  CertVerifyResult(const CertVerifyResult& other);
   ~CertVerifyResult();
 
   void Reset();
diff --git a/net/cert/ct_verify_result.cc b/net/cert/ct_verify_result.cc
index b323040a..de5bea0d 100644
--- a/net/cert/ct_verify_result.cc
+++ b/net/cert/ct_verify_result.cc
@@ -16,6 +16,8 @@
           ct::CertPolicyCompliance::CERT_POLICY_COMPLIES_VIA_SCTS),
       ev_policy_compliance(ct::EVPolicyCompliance::EV_POLICY_DOES_NOT_APPLY) {}
 
+CTVerifyResult::CTVerifyResult(const CTVerifyResult& other) = default;
+
 CTVerifyResult::~CTVerifyResult() {}
 
 }  // namespace ct
diff --git a/net/cert/ct_verify_result.h b/net/cert/ct_verify_result.h
index f2cdd13..ca16358 100644
--- a/net/cert/ct_verify_result.h
+++ b/net/cert/ct_verify_result.h
@@ -24,6 +24,7 @@
 // connection.
 struct NET_EXPORT CTVerifyResult {
   CTVerifyResult();
+  CTVerifyResult(const CTVerifyResult& other);
   ~CTVerifyResult();
 
   // SCTs from known logs where the signature verified correctly.
diff --git a/net/cert/multi_threaded_cert_verifier.cc b/net/cert/multi_threaded_cert_verifier.cc
index 23f1d87..714b291 100644
--- a/net/cert/multi_threaded_cert_verifier.cc
+++ b/net/cert/multi_threaded_cert_verifier.cc
@@ -497,6 +497,9 @@
     hash_values.push_back(additional_trust_anchors[i]->fingerprint());
 }
 
+MultiThreadedCertVerifier::RequestParams::RequestParams(
+    const RequestParams& other) = default;
+
 MultiThreadedCertVerifier::RequestParams::~RequestParams() {}
 
 bool MultiThreadedCertVerifier::RequestParams::operator<(
diff --git a/net/cert/multi_threaded_cert_verifier.h b/net/cert/multi_threaded_cert_verifier.h
index 30234ff9..83d00dd 100644
--- a/net/cert/multi_threaded_cert_verifier.h
+++ b/net/cert/multi_threaded_cert_verifier.h
@@ -92,6 +92,7 @@
                   const std::string& ocsp_response_arg,
                   int flags_arg,
                   const CertificateList& additional_trust_anchors);
+    RequestParams(const RequestParams& other);
     ~RequestParams();
 
     bool operator<(const RequestParams& other) const;
diff --git a/net/cert/nss_cert_database.cc b/net/cert/nss_cert_database.cc
index 53ea7c7..e85ce3ba 100644
--- a/net/cert/nss_cert_database.cc
+++ b/net/cert/nss_cert_database.cc
@@ -78,6 +78,9 @@
     int err)
     : certificate(cert), net_error(err) {}
 
+NSSCertDatabase::ImportCertFailure::ImportCertFailure(
+    const ImportCertFailure& other) = default;
+
 NSSCertDatabase::ImportCertFailure::~ImportCertFailure() {}
 
 NSSCertDatabase::NSSCertDatabase(crypto::ScopedPK11Slot public_slot,
diff --git a/net/cert/nss_cert_database.h b/net/cert/nss_cert_database.h
index ff96af0..de783eb4 100644
--- a/net/cert/nss_cert_database.h
+++ b/net/cert/nss_cert_database.h
@@ -65,6 +65,7 @@
   struct NET_EXPORT ImportCertFailure {
    public:
     ImportCertFailure(const scoped_refptr<X509Certificate>& cert, int err);
+    ImportCertFailure(const ImportCertFailure& other);
     ~ImportCertFailure();
 
     scoped_refptr<X509Certificate> certificate;
diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc
index cdd011f..fff3fa44 100644
--- a/net/cookies/canonical_cookie.cc
+++ b/net/cookies/canonical_cookie.cc
@@ -176,6 +176,8 @@
   domain_ = cookie_domain;
 }
 
+CanonicalCookie::CanonicalCookie(const CanonicalCookie& other) = default;
+
 CanonicalCookie::~CanonicalCookie() {
 }
 
diff --git a/net/cookies/canonical_cookie.h b/net/cookies/canonical_cookie.h
index fbca57fa..6f43d9e 100644
--- a/net/cookies/canonical_cookie.h
+++ b/net/cookies/canonical_cookie.h
@@ -46,6 +46,8 @@
   // in which pre-validation of the ParsedCookie has not been done.
   CanonicalCookie(const GURL& url, const ParsedCookie& pc);
 
+  CanonicalCookie(const CanonicalCookie& other);
+
   ~CanonicalCookie();
 
   // Supports the default copy constructor.
diff --git a/net/disk_cache/blockfile/index_table_v3.cc b/net/disk_cache/blockfile/index_table_v3.cc
index 9c24e80..9dca3de 100644
--- a/net/disk_cache/blockfile/index_table_v3.cc
+++ b/net/disk_cache/blockfile/index_table_v3.cc
@@ -403,6 +403,8 @@
 EntrySet::EntrySet() : evicted_count(0), current(0) {
 }
 
+EntrySet::EntrySet(const EntrySet& other) = default;
+
 EntrySet::~EntrySet() {
 }
 
diff --git a/net/disk_cache/blockfile/index_table_v3.h b/net/disk_cache/blockfile/index_table_v3.h
index 78122c8..001b438 100644
--- a/net/disk_cache/blockfile/index_table_v3.h
+++ b/net/disk_cache/blockfile/index_table_v3.h
@@ -110,6 +110,7 @@
 // Keeps a collection of EntryCells in order to be processed.
 struct NET_EXPORT_PRIVATE EntrySet {
   EntrySet();
+  EntrySet(const EntrySet& other);
   ~EntrySet();
 
   int evicted_count;  // The numebr of evicted entries in this set.
diff --git a/net/dns/dns_config_service.cc b/net/dns/dns_config_service.cc
index 83c8944e..e58fdfad 100644
--- a/net/dns/dns_config_service.cc
+++ b/net/dns/dns_config_service.cc
@@ -107,6 +107,8 @@
       edns0(false),
       use_local_ipv6(false) {}
 
+DnsConfig::DnsConfig(const DnsConfig& other) = default;
+
 DnsConfig::~DnsConfig() {}
 
 bool DnsConfig::Equals(const DnsConfig& d) const {
diff --git a/net/dns/dns_config_service.h b/net/dns/dns_config_service.h
index fbbdb41..1053e86 100644
--- a/net/dns/dns_config_service.h
+++ b/net/dns/dns_config_service.h
@@ -66,6 +66,7 @@
 // DnsConfig stores configuration of the system resolver.
 struct NET_EXPORT_PRIVATE DnsConfig {
   DnsConfig();
+  DnsConfig(const DnsConfig& other);
   virtual ~DnsConfig();
 
   bool Equals(const DnsConfig& d) const;
diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc
index 93750ffc..af91b09 100644
--- a/net/dns/host_resolver_impl.cc
+++ b/net/dns/host_resolver_impl.cc
@@ -1854,6 +1854,9 @@
     max_retry_attempts = kDefaultMaxRetryAttempts;
 }
 
+HostResolverImpl::ProcTaskParams::ProcTaskParams(const ProcTaskParams& other) =
+    default;
+
 HostResolverImpl::ProcTaskParams::~ProcTaskParams() {}
 
 HostResolverImpl::HostResolverImpl(const Options& options, NetLog* net_log)
diff --git a/net/dns/host_resolver_impl.h b/net/dns/host_resolver_impl.h
index 245bde2..aa76363 100644
--- a/net/dns/host_resolver_impl.h
+++ b/net/dns/host_resolver_impl.h
@@ -82,6 +82,8 @@
     // Sets up defaults.
     ProcTaskParams(HostResolverProc* resolver_proc, size_t max_retry_attempts);
 
+    ProcTaskParams(const ProcTaskParams& other);
+
     ~ProcTaskParams();
 
     // The procedure to use for resolving host names. This will be NULL, except
diff --git a/net/ftp/ftp_ctrl_response_buffer.cc b/net/ftp/ftp_ctrl_response_buffer.cc
index 064068e..8dd631b 100644
--- a/net/ftp/ftp_ctrl_response_buffer.cc
+++ b/net/ftp/ftp_ctrl_response_buffer.cc
@@ -20,6 +20,8 @@
 
 FtpCtrlResponse::FtpCtrlResponse() : status_code(kInvalidStatusCode) {}
 
+FtpCtrlResponse::FtpCtrlResponse(const FtpCtrlResponse& other) = default;
+
 FtpCtrlResponse::~FtpCtrlResponse() {}
 
 FtpCtrlResponseBuffer::FtpCtrlResponseBuffer(const BoundNetLog& net_log)
@@ -112,6 +114,9 @@
       status_code(FtpCtrlResponse::kInvalidStatusCode) {
 }
 
+FtpCtrlResponseBuffer::ParsedLine::ParsedLine(const ParsedLine& other) =
+    default;
+
 // static
 FtpCtrlResponseBuffer::ParsedLine FtpCtrlResponseBuffer::ParseLine(
     const std::string& line) {
diff --git a/net/ftp/ftp_ctrl_response_buffer.h b/net/ftp/ftp_ctrl_response_buffer.h
index ae90fea5..b53b7a91 100644
--- a/net/ftp/ftp_ctrl_response_buffer.h
+++ b/net/ftp/ftp_ctrl_response_buffer.h
@@ -19,6 +19,7 @@
   static const int kInvalidStatusCode;
 
   FtpCtrlResponse();
+  FtpCtrlResponse(const FtpCtrlResponse& other);
   ~FtpCtrlResponse();
 
   int status_code;                 // Three-digit status code.
@@ -44,6 +45,7 @@
  private:
   struct ParsedLine {
     ParsedLine();
+    ParsedLine(const ParsedLine& other);
 
     // Indicates that this line begins with a valid 3-digit status code.
     bool has_status_code;
diff --git a/net/http/http_auth_cache.cc b/net/http/http_auth_cache.cc
index d76d3ed40..7a3a4e0 100644
--- a/net/http/http_auth_cache.cc
+++ b/net/http/http_auth_cache.cc
@@ -180,6 +180,8 @@
   return entry;
 }
 
+HttpAuthCache::Entry::Entry(const Entry& other) = default;
+
 HttpAuthCache::Entry::~Entry() {
 }
 
diff --git a/net/http/http_auth_cache.h b/net/http/http_auth_cache.h
index 53b998f..9190e42 100644
--- a/net/http/http_auth_cache.h
+++ b/net/http/http_auth_cache.h
@@ -31,6 +31,7 @@
  public:
   class NET_EXPORT_PRIVATE Entry {
    public:
+    Entry(const Entry& other);
     ~Entry();
 
     const GURL& origin() const {
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc
index 7337d4f8..509a0a74 100644
--- a/net/http/http_network_session.cc
+++ b/net/http/http_network_session.cc
@@ -136,6 +136,8 @@
   quic_supported_versions.push_back(QUIC_VERSION_27);
 }
 
+HttpNetworkSession::Params::Params(const Params& other) = default;
+
 HttpNetworkSession::Params::~Params() {}
 
 // TODO(mbelshe): Move the socket factories into HttpStreamFactory.
diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h
index 5e4ac4e..30cec77 100644
--- a/net/http/http_network_session.h
+++ b/net/http/http_network_session.h
@@ -64,6 +64,7 @@
  public:
   struct NET_EXPORT Params {
     Params();
+    Params(const Params& other);
     ~Params();
 
     ClientSocketFactory* client_socket_factory;
diff --git a/net/http/http_request_headers.cc b/net/http/http_request_headers.cc
index 4e2ae0e..71710cd 100644
--- a/net/http/http_request_headers.cc
+++ b/net/http/http_request_headers.cc
@@ -70,6 +70,8 @@
 }
 
 HttpRequestHeaders::HttpRequestHeaders() {}
+HttpRequestHeaders::HttpRequestHeaders(const HttpRequestHeaders& other) =
+    default;
 HttpRequestHeaders::~HttpRequestHeaders() {}
 
 bool HttpRequestHeaders::GetHeader(const base::StringPiece& key,
diff --git a/net/http/http_request_headers.h b/net/http/http_request_headers.h
index db70004..c500d8c3 100644
--- a/net/http/http_request_headers.h
+++ b/net/http/http_request_headers.h
@@ -81,6 +81,7 @@
   static const char kUserAgent[];
 
   HttpRequestHeaders();
+  HttpRequestHeaders(const HttpRequestHeaders& other);
   ~HttpRequestHeaders();
 
   bool IsEmpty() const { return headers_.empty(); }
diff --git a/net/http/http_request_info.cc b/net/http/http_request_info.cc
index 794aa1c..d51d3d0 100644
--- a/net/http/http_request_info.cc
+++ b/net/http/http_request_info.cc
@@ -13,6 +13,8 @@
       privacy_mode(PRIVACY_MODE_DISABLED) {
 }
 
+HttpRequestInfo::HttpRequestInfo(const HttpRequestInfo& other) = default;
+
 HttpRequestInfo::~HttpRequestInfo() {}
 
 }  // namespace net
diff --git a/net/http/http_request_info.h b/net/http/http_request_info.h
index 0c4c09d..2079f19 100644
--- a/net/http/http_request_info.h
+++ b/net/http/http_request_info.h
@@ -28,6 +28,7 @@
   };
 
   HttpRequestInfo();
+  HttpRequestInfo(const HttpRequestInfo& other);
   ~HttpRequestInfo();
 
   // The requested URL.
diff --git a/net/http/http_util.cc b/net/http/http_util.cc
index 6192c89..940ee80 100644
--- a/net/http/http_util.cc
+++ b/net/http/http_util.cc
@@ -867,6 +867,8 @@
   values_.set_quote_chars("\'\"");
 }
 
+HttpUtil::ValuesIterator::ValuesIterator(const ValuesIterator& other) = default;
+
 HttpUtil::ValuesIterator::~ValuesIterator() {
 }
 
@@ -903,6 +905,9 @@
     char delimiter)
     : NameValuePairsIterator(begin, end, delimiter, VALUES_NOT_OPTIONAL) {}
 
+HttpUtil::NameValuePairsIterator::NameValuePairsIterator(
+    const NameValuePairsIterator& other) = default;
+
 HttpUtil::NameValuePairsIterator::~NameValuePairsIterator() {}
 
 // We expect properties to be formatted as one of:
diff --git a/net/http/http_util.h b/net/http/http_util.h
index 13209b8..7e713103 100644
--- a/net/http/http_util.h
+++ b/net/http/http_util.h
@@ -291,6 +291,7 @@
     ValuesIterator(std::string::const_iterator values_begin,
                    std::string::const_iterator values_end,
                    char delimiter);
+    ValuesIterator(const ValuesIterator& other);
     ~ValuesIterator();
 
     // Advances the iterator to the next value, if any.  Returns true if there
@@ -338,6 +339,8 @@
                            std::string::const_iterator end,
                            char delimiter);
 
+    NameValuePairsIterator(const NameValuePairsIterator& other);
+
     ~NameValuePairsIterator();
 
     // Advances the iterator to the next pair, if any.  Returns true if there
diff --git a/net/http/mock_gssapi_library_posix.cc b/net/http/mock_gssapi_library_posix.cc
index b4d6514..ce21159 100644
--- a/net/http/mock_gssapi_library_posix.cc
+++ b/net/http/mock_gssapi_library_posix.cc
@@ -226,6 +226,9 @@
   }
 }
 
+MockGSSAPILibrary::SecurityContextQuery::SecurityContextQuery(
+    const SecurityContextQuery& other) = default;
+
 MockGSSAPILibrary::SecurityContextQuery::~SecurityContextQuery() {}
 
 MockGSSAPILibrary::MockGSSAPILibrary() {
diff --git a/net/http/mock_gssapi_library_posix.h b/net/http/mock_gssapi_library_posix.h
index 3d5f248..07f2542 100644
--- a/net/http/mock_gssapi_library_posix.h
+++ b/net/http/mock_gssapi_library_posix.h
@@ -52,6 +52,7 @@
                          const test::GssContextMockImpl& context_info,
                          const char* expected_input_token,
                          const char* output_token);
+    SecurityContextQuery(const SecurityContextQuery& other);
     ~SecurityContextQuery();
 
     std::string expected_package;
diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_state.cc
index 4475b0d..dc6fd93 100644
--- a/net/http/transport_security_state.cc
+++ b/net/http/transport_security_state.cc
@@ -1256,6 +1256,8 @@
 TransportSecurityState::PKPState::PKPState() : include_subdomains(false) {
 }
 
+TransportSecurityState::PKPState::PKPState(const PKPState& other) = default;
+
 TransportSecurityState::PKPState::~PKPState() {
 }
 
diff --git a/net/http/transport_security_state.h b/net/http/transport_security_state.h
index a4c52e7..bb79c8e 100644
--- a/net/http/transport_security_state.h
+++ b/net/http/transport_security_state.h
@@ -110,6 +110,7 @@
   class NET_EXPORT PKPState {
    public:
     PKPState();
+    PKPState(const PKPState& other);
     ~PKPState();
 
     // The absolute time (UTC) when the |spki_hashes| (and other state) were
diff --git a/net/proxy/proxy_config.cc b/net/proxy/proxy_config.cc
index 78d6ef3..ff05b63 100644
--- a/net/proxy/proxy_config.cc
+++ b/net/proxy/proxy_config.cc
@@ -42,6 +42,8 @@
       type(TYPE_NO_RULES) {
 }
 
+ProxyConfig::ProxyRules::ProxyRules(const ProxyRules& other) = default;
+
 ProxyConfig::ProxyRules::~ProxyRules() {
 }
 
diff --git a/net/proxy/proxy_config.h b/net/proxy/proxy_config.h
index 2e91923..68deafdf 100644
--- a/net/proxy/proxy_config.h
+++ b/net/proxy/proxy_config.h
@@ -49,6 +49,7 @@
     // Note that the default of TYPE_NO_RULES results in direct connections
     // being made when using this ProxyConfig.
     ProxyRules();
+    ProxyRules(const ProxyRules& other);
     ~ProxyRules();
 
     bool empty() const {
diff --git a/net/proxy/proxy_info.cc b/net/proxy/proxy_info.cc
index b659d67..7500079 100644
--- a/net/proxy/proxy_info.cc
+++ b/net/proxy/proxy_info.cc
@@ -15,6 +15,8 @@
       did_use_pac_script_(false) {
 }
 
+ProxyInfo::ProxyInfo(const ProxyInfo& other) = default;
+
 ProxyInfo::~ProxyInfo() {
 }
 
diff --git a/net/proxy/proxy_info.h b/net/proxy/proxy_info.h
index 1dc7388..3d06a75 100644
--- a/net/proxy/proxy_info.h
+++ b/net/proxy/proxy_info.h
@@ -22,6 +22,7 @@
 class NET_EXPORT ProxyInfo {
  public:
   ProxyInfo();
+  ProxyInfo(const ProxyInfo& other);
   ~ProxyInfo();
   // Default copy-constructor and assignment operator are OK!
 
diff --git a/net/proxy/proxy_list.cc b/net/proxy/proxy_list.cc
index a7b7aef..5f627e0c 100644
--- a/net/proxy/proxy_list.cc
+++ b/net/proxy/proxy_list.cc
@@ -19,6 +19,8 @@
 ProxyList::ProxyList() {
 }
 
+ProxyList::ProxyList(const ProxyList& other) = default;
+
 ProxyList::~ProxyList() {
 }
 
diff --git a/net/proxy/proxy_list.h b/net/proxy/proxy_list.h
index 82c637d..d128e18 100644
--- a/net/proxy/proxy_list.h
+++ b/net/proxy/proxy_list.h
@@ -29,6 +29,7 @@
 class NET_EXPORT_PRIVATE ProxyList {
  public:
   ProxyList();
+  ProxyList(const ProxyList& other);
   ~ProxyList();
 
   // Initializes the proxy list to a string containing one or more proxy servers
diff --git a/net/quic/iovector.cc b/net/quic/iovector.cc
index a6d2c61..effa52d 100644
--- a/net/quic/iovector.cc
+++ b/net/quic/iovector.cc
@@ -8,6 +8,8 @@
 
 IOVector::IOVector() {}
 
+IOVector::IOVector(const IOVector& other) = default;
+
 IOVector::~IOVector() {}
 
 }  // namespace net
diff --git a/net/quic/iovector.h b/net/quic/iovector.h
index 0ea57bb0..cf77a9a 100644
--- a/net/quic/iovector.h
+++ b/net/quic/iovector.h
@@ -62,6 +62,7 @@
   // Provide a default constructor so it'll never be inhibited by adding other
   // constructors.
   IOVector();
+  IOVector(const IOVector& other);
   ~IOVector();
 
   // Provides a way to convert system call-like iovec representation to
diff --git a/net/quic/quic_config.cc b/net/quic/quic_config.cc
index 076974e..c968be9e 100644
--- a/net/quic/quic_config.cc
+++ b/net/quic/quic_config.cc
@@ -264,6 +264,9 @@
       has_send_values_(false),
       has_receive_values_(false) {}
 
+QuicFixedTagVector::QuicFixedTagVector(const QuicFixedTagVector& other) =
+    default;
+
 QuicFixedTagVector::~QuicFixedTagVector() {}
 
 bool QuicFixedTagVector::HasSendValues() const {
@@ -349,6 +352,8 @@
   SetDefaults();
 }
 
+QuicConfig::QuicConfig(const QuicConfig& other) = default;
+
 QuicConfig::~QuicConfig() {}
 
 bool QuicConfig::SetInitialReceivedConnectionOptions(
diff --git a/net/quic/quic_config.h b/net/quic/quic_config.h
index 1fbb4b7..bd6e5d8a 100644
--- a/net/quic/quic_config.h
+++ b/net/quic/quic_config.h
@@ -183,6 +183,7 @@
 class NET_EXPORT_PRIVATE QuicFixedTagVector : public QuicConfigValue {
  public:
   QuicFixedTagVector(QuicTag name, QuicConfigPresence presence);
+  QuicFixedTagVector(const QuicFixedTagVector& other);
   ~QuicFixedTagVector() override;
 
   bool HasSendValues() const;
@@ -219,6 +220,7 @@
 class NET_EXPORT_PRIVATE QuicConfig {
  public:
   QuicConfig();
+  QuicConfig(const QuicConfig& other);
   ~QuicConfig();
 
   void SetConnectionOptionsToSend(const QuicTagVector& connection_options);
diff --git a/net/quic/quic_connection_stats.cc b/net/quic/quic_connection_stats.cc
index 2c98fcca..f314452 100644
--- a/net/quic/quic_connection_stats.cc
+++ b/net/quic/quic_connection_stats.cc
@@ -41,6 +41,9 @@
       tcp_loss_events(0),
       connection_creation_time(QuicTime::Zero()) {}
 
+QuicConnectionStats::QuicConnectionStats(const QuicConnectionStats& other) =
+    default;
+
 QuicConnectionStats::~QuicConnectionStats() {}
 
 }  // namespace net
diff --git a/net/quic/quic_connection_stats.h b/net/quic/quic_connection_stats.h
index 655ab32..2787612 100644
--- a/net/quic/quic_connection_stats.h
+++ b/net/quic/quic_connection_stats.h
@@ -19,6 +19,7 @@
 // Structure to hold stats for a QuicConnection.
 struct NET_EXPORT_PRIVATE QuicConnectionStats {
   QuicConnectionStats();
+  QuicConnectionStats(const QuicConnectionStats& other);
   ~QuicConnectionStats();
 
   NET_EXPORT_PRIVATE friend std::ostream& operator<<(
diff --git a/net/quic/quic_framer.cc b/net/quic/quic_framer.cc
index c7ae630..7d75b8f 100644
--- a/net/quic/quic_framer.cc
+++ b/net/quic/quic_framer.cc
@@ -313,6 +313,8 @@
 
 QuicFramer::AckFrameInfo::AckFrameInfo() : max_delta(0) {}
 
+QuicFramer::AckFrameInfo::AckFrameInfo(const AckFrameInfo& other) = default;
+
 QuicFramer::AckFrameInfo::~AckFrameInfo() {}
 
 // static
diff --git a/net/quic/quic_framer.h b/net/quic/quic_framer.h
index aba0f97..456f2b09 100644
--- a/net/quic/quic_framer.h
+++ b/net/quic/quic_framer.h
@@ -376,6 +376,7 @@
 
   struct AckFrameInfo {
     AckFrameInfo();
+    AckFrameInfo(const AckFrameInfo& other);
     ~AckFrameInfo();
 
     // The maximum delta between ranges.
diff --git a/net/quic/quic_protocol.cc b/net/quic/quic_protocol.cc
index 192008e..cb43400 100644
--- a/net/quic/quic_protocol.cc
+++ b/net/quic/quic_protocol.cc
@@ -96,6 +96,8 @@
       is_in_fec_group(NOT_IN_FEC_GROUP),
       fec_group(0) {}
 
+QuicPacketHeader::QuicPacketHeader(const QuicPacketHeader& other) = default;
+
 QuicPublicResetPacket::QuicPublicResetPacket()
     : nonce_proof(0), rejected_packet_number(0) {}
 
@@ -301,6 +303,8 @@
       ack_delay_time(QuicTime::Delta::Infinite()),
       latest_revived_packet(0) {}
 
+QuicAckFrame::QuicAckFrame(const QuicAckFrame& other) = default;
+
 QuicAckFrame::~QuicAckFrame() {}
 
 QuicRstStreamErrorCode AdjustErrorForVersion(QuicRstStreamErrorCode error_code,
@@ -729,6 +733,9 @@
   DCHECK(listener != nullptr);
 }
 
+AckListenerWrapper::AckListenerWrapper(const AckListenerWrapper& other) =
+    default;
+
 AckListenerWrapper::~AckListenerWrapper() {}
 
 SerializedPacket::SerializedPacket(QuicPathId path_id,
@@ -754,6 +761,8 @@
       original_packet_number(0),
       transmission_type(NOT_RETRANSMISSION) {}
 
+SerializedPacket::SerializedPacket(const SerializedPacket& other) = default;
+
 SerializedPacket::~SerializedPacket() {}
 
 QuicEncryptedPacket* QuicEncryptedPacket::Clone() const {
@@ -802,6 +811,8 @@
       needs_padding(needs_padding),
       retransmission(0) {}
 
+TransmissionInfo::TransmissionInfo(const TransmissionInfo& other) = default;
+
 TransmissionInfo::~TransmissionInfo() {}
 
 }  // namespace net
diff --git a/net/quic/quic_protocol.h b/net/quic/quic_protocol.h
index a9af2c1..6c5de3f 100644
--- a/net/quic/quic_protocol.h
+++ b/net/quic/quic_protocol.h
@@ -707,6 +707,7 @@
 struct NET_EXPORT_PRIVATE QuicPacketHeader {
   QuicPacketHeader();
   explicit QuicPacketHeader(const QuicPacketPublicHeader& header);
+  QuicPacketHeader(const QuicPacketHeader& other);
 
   NET_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& os,
                                                      const QuicPacketHeader& s);
@@ -956,6 +957,7 @@
 
 struct NET_EXPORT_PRIVATE QuicAckFrame {
   QuicAckFrame();
+  QuicAckFrame(const QuicAckFrame& other);
   ~QuicAckFrame();
 
   NET_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& os,
@@ -1288,6 +1290,7 @@
 struct NET_EXPORT_PRIVATE AckListenerWrapper {
   AckListenerWrapper(QuicAckListenerInterface* listener,
                      QuicPacketLength data_length);
+  AckListenerWrapper(const AckListenerWrapper& other);
   ~AckListenerWrapper();
 
   scoped_refptr<QuicAckListenerInterface> ack_listener;
@@ -1303,6 +1306,7 @@
                    QuicPacketEntropyHash entropy_hash,
                    bool has_ack,
                    bool has_stop_waiting);
+  SerializedPacket(const SerializedPacket& other);
   ~SerializedPacket();
 
   // Not owned.
@@ -1341,6 +1345,8 @@
                    bool has_crypto_handshake,
                    bool needs_padding);
 
+  TransmissionInfo(const TransmissionInfo& other);
+
   ~TransmissionInfo();
 
   QuicFrames retransmittable_frames;
diff --git a/net/server/http_server_request_info.cc b/net/server/http_server_request_info.cc
index 07c15a54..765ddc0 100644
--- a/net/server/http_server_request_info.cc
+++ b/net/server/http_server_request_info.cc
@@ -11,6 +11,9 @@
 
 HttpServerRequestInfo::HttpServerRequestInfo() {}
 
+HttpServerRequestInfo::HttpServerRequestInfo(
+    const HttpServerRequestInfo& other) = default;
+
 HttpServerRequestInfo::~HttpServerRequestInfo() {}
 
 std::string HttpServerRequestInfo::GetHeaderValue(
diff --git a/net/server/http_server_request_info.h b/net/server/http_server_request_info.h
index 1b02655b..014142c 100644
--- a/net/server/http_server_request_info.h
+++ b/net/server/http_server_request_info.h
@@ -19,6 +19,7 @@
 class HttpServerRequestInfo {
  public:
   HttpServerRequestInfo();
+  HttpServerRequestInfo(const HttpServerRequestInfo& other);
   ~HttpServerRequestInfo();
 
   // Returns header value for given header name. |header_name| should be
diff --git a/net/server/http_server_response_info.cc b/net/server/http_server_response_info.cc
index 2d0a32e..7c195812 100644
--- a/net/server/http_server_response_info.cc
+++ b/net/server/http_server_response_info.cc
@@ -15,6 +15,9 @@
 HttpServerResponseInfo::HttpServerResponseInfo(HttpStatusCode status_code)
     : status_code_(status_code) {}
 
+HttpServerResponseInfo::HttpServerResponseInfo(
+    const HttpServerResponseInfo& other) = default;
+
 HttpServerResponseInfo::~HttpServerResponseInfo() {}
 
 // static
diff --git a/net/server/http_server_response_info.h b/net/server/http_server_response_info.h
index fd8dfbc..c2451e8 100644
--- a/net/server/http_server_response_info.h
+++ b/net/server/http_server_response_info.h
@@ -20,6 +20,7 @@
   // Creates a 200 OK HttpServerResponseInfo.
   HttpServerResponseInfo();
   explicit HttpServerResponseInfo(HttpStatusCode status_code);
+  HttpServerResponseInfo(const HttpServerResponseInfo& other);
   ~HttpServerResponseInfo();
 
   static HttpServerResponseInfo CreateFor404();
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc
index 30aa3dc..e925943 100644
--- a/net/socket/client_socket_pool_base.cc
+++ b/net/socket/client_socket_pool_base.cc
@@ -220,6 +220,9 @@
       result(result_in) {
 }
 
+ClientSocketPoolBaseHelper::CallbackResultPair::CallbackResultPair(
+    const CallbackResultPair& other) = default;
+
 ClientSocketPoolBaseHelper::CallbackResultPair::~CallbackResultPair() {}
 
 bool ClientSocketPoolBaseHelper::IsStalled() const {
diff --git a/net/socket/client_socket_pool_base.h b/net/socket/client_socket_pool_base.h
index d288684..1e57adb 100644
--- a/net/socket/client_socket_pool_base.h
+++ b/net/socket/client_socket_pool_base.h
@@ -514,6 +514,7 @@
   struct CallbackResultPair {
     CallbackResultPair();
     CallbackResultPair(const CompletionCallback& callback_in, int result_in);
+    CallbackResultPair(const CallbackResultPair& other);
     ~CallbackResultPair();
 
     CompletionCallback callback;
diff --git a/net/socket/websocket_transport_client_socket_pool.cc b/net/socket/websocket_transport_client_socket_pool.cc
index 983afaf..e4f0883 100644
--- a/net/socket/websocket_transport_client_socket_pool.cc
+++ b/net/socket/websocket_transport_client_socket_pool.cc
@@ -634,6 +634,9 @@
       callback(callback),
       net_log(net_log) {}
 
+WebSocketTransportClientSocketPool::StalledRequest::StalledRequest(
+    const StalledRequest& other) = default;
+
 WebSocketTransportClientSocketPool::StalledRequest::~StalledRequest() {}
 
 }  // namespace net
diff --git a/net/socket/websocket_transport_client_socket_pool.h b/net/socket/websocket_transport_client_socket_pool.h
index 6374374..23b7774 100644
--- a/net/socket/websocket_transport_client_socket_pool.h
+++ b/net/socket/websocket_transport_client_socket_pool.h
@@ -185,6 +185,7 @@
                    ClientSocketHandle* handle,
                    const CompletionCallback& callback,
                    const BoundNetLog& net_log);
+    StalledRequest(const StalledRequest& other);
     ~StalledRequest();
     const scoped_refptr<TransportSocketParams> params;
     const RequestPriority priority;
diff --git a/net/spdy/spdy_alt_svc_wire_format.cc b/net/spdy/spdy_alt_svc_wire_format.cc
index a50590e..2ec6777 100644
--- a/net/spdy/spdy_alt_svc_wire_format.cc
+++ b/net/spdy/spdy_alt_svc_wire_format.cc
@@ -55,6 +55,9 @@
 
 SpdyAltSvcWireFormat::AlternativeService::~AlternativeService() {}
 
+SpdyAltSvcWireFormat::AlternativeService::AlternativeService(
+    const AlternativeService& other) = default;
+
 // static
 bool SpdyAltSvcWireFormat::ParseHeaderFieldValue(
     StringPiece value,
diff --git a/net/spdy/spdy_alt_svc_wire_format.h b/net/spdy/spdy_alt_svc_wire_format.h
index 28b4572..de404352 100644
--- a/net/spdy/spdy_alt_svc_wire_format.h
+++ b/net/spdy/spdy_alt_svc_wire_format.h
@@ -47,6 +47,7 @@
                        uint32_t max_age,
                        double probability,
                        VersionVector version);
+    AlternativeService(const AlternativeService& other);
     ~AlternativeService();
 
     bool operator==(const AlternativeService& other) const {
diff --git a/net/spdy/spdy_header_block.cc b/net/spdy/spdy_header_block.cc
index 49243a7..b24085f 100644
--- a/net/spdy/spdy_header_block.cc
+++ b/net/spdy/spdy_header_block.cc
@@ -114,6 +114,9 @@
       lookup_result_(lookup_result),
       key_(key) {}
 
+SpdyHeaderBlock::StringPieceProxy::StringPieceProxy(
+    const StringPieceProxy& other) = default;
+
 SpdyHeaderBlock::StringPieceProxy::~StringPieceProxy() {}
 
 SpdyHeaderBlock::StringPieceProxy& SpdyHeaderBlock::StringPieceProxy::operator=(
diff --git a/net/spdy/spdy_header_block.h b/net/spdy/spdy_header_block.h
index 1ee9708..58d6cf4c 100644
--- a/net/spdy/spdy_header_block.h
+++ b/net/spdy/spdy_header_block.h
@@ -89,6 +89,7 @@
   class NET_EXPORT StringPieceProxy {
    public:
     ~StringPieceProxy();
+    StringPieceProxy(const StringPieceProxy& other);
 
     // Assignment modifies the underlying SpdyHeaderBlock.
     StringPieceProxy& operator=(const base::StringPiece other);
diff --git a/net/spdy/spdy_session_key.cc b/net/spdy/spdy_session_key.cc
index 59f36df7..8b2fcbc 100644
--- a/net/spdy/spdy_session_key.cc
+++ b/net/spdy/spdy_session_key.cc
@@ -32,6 +32,8 @@
       << ", privacy=" << privacy_mode;
 }
 
+SpdySessionKey::SpdySessionKey(const SpdySessionKey& other) = default;
+
 SpdySessionKey::~SpdySessionKey() {}
 
 bool SpdySessionKey::operator<(const SpdySessionKey& other) const {
diff --git a/net/spdy/spdy_session_key.h b/net/spdy/spdy_session_key.h
index 59c832b..a393ce0 100644
--- a/net/spdy/spdy_session_key.h
+++ b/net/spdy/spdy_session_key.h
@@ -22,6 +22,8 @@
   SpdySessionKey(const HostPortProxyPair& host_port_proxy_pair,
                  PrivacyMode privacy_mode);
 
+  SpdySessionKey(const SpdySessionKey& other);
+
   ~SpdySessionKey();
 
   // Comparator function so this can be placed in a std::map.
diff --git a/net/spdy/spdy_write_queue.cc b/net/spdy/spdy_write_queue.cc
index ab25eaef8..a8e65532 100644
--- a/net/spdy/spdy_write_queue.cc
+++ b/net/spdy/spdy_write_queue.cc
@@ -26,6 +26,8 @@
       stream(stream),
       has_stream(stream.get() != NULL) {}
 
+SpdyWriteQueue::PendingWrite::PendingWrite(const PendingWrite& other) = default;
+
 SpdyWriteQueue::PendingWrite::~PendingWrite() {}
 
 SpdyWriteQueue::SpdyWriteQueue() : removing_writes_(false) {}
diff --git a/net/spdy/spdy_write_queue.h b/net/spdy/spdy_write_queue.h
index c19b3f2..8383e7a 100644
--- a/net/spdy/spdy_write_queue.h
+++ b/net/spdy/spdy_write_queue.h
@@ -75,6 +75,7 @@
     PendingWrite(SpdyFrameType frame_type,
                  SpdyBufferProducer* frame_producer,
                  const base::WeakPtr<SpdyStream>& stream);
+    PendingWrite(const PendingWrite& other);
     ~PendingWrite();
   };
 
diff --git a/net/ssl/signed_certificate_timestamp_and_status.cc b/net/ssl/signed_certificate_timestamp_and_status.cc
index 245fcf2a..55deaa3 100644
--- a/net/ssl/signed_certificate_timestamp_and_status.cc
+++ b/net/ssl/signed_certificate_timestamp_and_status.cc
@@ -13,6 +13,9 @@
     const ct::SCTVerifyStatus status)
     : sct(sct), status(status) {}
 
+SignedCertificateTimestampAndStatus::SignedCertificateTimestampAndStatus(
+    const SignedCertificateTimestampAndStatus& other) = default;
+
 SignedCertificateTimestampAndStatus::~SignedCertificateTimestampAndStatus() {}
 
 }  // namespace net
diff --git a/net/ssl/signed_certificate_timestamp_and_status.h b/net/ssl/signed_certificate_timestamp_and_status.h
index c23753e..650e5b1 100644
--- a/net/ssl/signed_certificate_timestamp_and_status.h
+++ b/net/ssl/signed_certificate_timestamp_and_status.h
@@ -19,6 +19,9 @@
       const scoped_refptr<ct::SignedCertificateTimestamp>& sct,
       ct::SCTVerifyStatus status);
 
+  SignedCertificateTimestampAndStatus(
+      const SignedCertificateTimestampAndStatus& other);
+
   ~SignedCertificateTimestampAndStatus();
 
   scoped_refptr<ct::SignedCertificateTimestamp> sct;
diff --git a/net/ssl/ssl_config.cc b/net/ssl/ssl_config.cc
index be87ed0..4a71b5948 100644
--- a/net/ssl/ssl_config.cc
+++ b/net/ssl/ssl_config.cc
@@ -36,6 +36,8 @@
       cert_io_enabled(true),
       renego_allowed_default(false) {}
 
+SSLConfig::SSLConfig(const SSLConfig& other) = default;
+
 SSLConfig::~SSLConfig() {}
 
 bool SSLConfig::IsAllowedBadCert(X509Certificate* cert,
diff --git a/net/ssl/ssl_config.h b/net/ssl/ssl_config.h
index 5460f66..0a5a83d 100644
--- a/net/ssl/ssl_config.h
+++ b/net/ssl/ssl_config.h
@@ -47,6 +47,7 @@
 struct NET_EXPORT SSLConfig {
   // Default to revocation checking.
   SSLConfig();
+  SSLConfig(const SSLConfig& other);
   ~SSLConfig();
 
   // Returns true if |cert| is one of the certs in |allowed_bad_certs|.
diff --git a/net/ssl/ssl_server_config.cc b/net/ssl/ssl_server_config.cc
index f423933..f5041b67 100644
--- a/net/ssl/ssl_server_config.cc
+++ b/net/ssl/ssl_server_config.cc
@@ -16,6 +16,8 @@
       client_cert_type(NO_CLIENT_CERT),
       client_cert_verifier(nullptr) {}
 
+SSLServerConfig::SSLServerConfig(const SSLServerConfig& other) = default;
+
 SSLServerConfig::~SSLServerConfig() {}
 
 }  // namespace net
diff --git a/net/ssl/ssl_server_config.h b/net/ssl/ssl_server_config.h
index 95bea0b..7a1861b 100644
--- a/net/ssl/ssl_server_config.h
+++ b/net/ssl/ssl_server_config.h
@@ -26,6 +26,7 @@
 
   // Defaults
   SSLServerConfig();
+  SSLServerConfig(const SSLServerConfig& other);
   ~SSLServerConfig();
 
   // The minimum and maximum protocol versions that are enabled.
diff --git a/net/test/embedded_test_server/http_request.cc b/net/test/embedded_test_server/http_request.cc
index b5b2e4f..7d54326 100644
--- a/net/test/embedded_test_server/http_request.cc
+++ b/net/test/embedded_test_server/http_request.cc
@@ -34,6 +34,8 @@
                              has_content(false) {
 }
 
+HttpRequest::HttpRequest(const HttpRequest& other) = default;
+
 HttpRequest::~HttpRequest() {
 }
 
diff --git a/net/test/embedded_test_server/http_request.h b/net/test/embedded_test_server/http_request.h
index d99c050..2a560b6 100644
--- a/net/test/embedded_test_server/http_request.h
+++ b/net/test/embedded_test_server/http_request.h
@@ -48,6 +48,7 @@
       std::map<std::string, std::string, CaseInsensitiveStringComparator>;
 
   HttpRequest();
+  HttpRequest(const HttpRequest& other);
   ~HttpRequest();
 
   // Returns a GURL as a convenience to extract the path and query strings.
diff --git a/net/test/spawned_test_server/base_test_server.cc b/net/test/spawned_test_server/base_test_server.cc
index e69233e..ecf5af5 100644
--- a/net/test/spawned_test_server/base_test_server.cc
+++ b/net/test/spawned_test_server/base_test_server.cc
@@ -159,6 +159,8 @@
       disable_channel_id(false),
       disable_extended_master_secret(false) {}
 
+BaseTestServer::SSLOptions::SSLOptions(const SSLOptions& other) = default;
+
 BaseTestServer::SSLOptions::~SSLOptions() {}
 
 base::FilePath BaseTestServer::SSLOptions::GetCertificateFile() const {
diff --git a/net/test/spawned_test_server/base_test_server.h b/net/test/spawned_test_server/base_test_server.h
index 7df2416..60d37e1 100644
--- a/net/test/spawned_test_server/base_test_server.h
+++ b/net/test/spawned_test_server/base_test_server.h
@@ -140,6 +140,7 @@
 
     // Initialize a new SSLOptions that will use the specified certificate.
     explicit SSLOptions(ServerCertificate cert);
+    SSLOptions(const SSLOptions& other);
     ~SSLOptions();
 
     // Returns the relative filename of the file that contains the
diff --git a/net/tools/flip_server/output_ordering.cc b/net/tools/flip_server/output_ordering.cc
index f378a87..24e92c0 100644
--- a/net/tools/flip_server/output_ordering.cc
+++ b/net/tools/flip_server/output_ordering.cc
@@ -14,6 +14,9 @@
 OutputOrdering::PriorityMapPointer::PriorityMapPointer()
     : ring(NULL), alarm_enabled(false) {}
 
+OutputOrdering::PriorityMapPointer::PriorityMapPointer(
+    const PriorityMapPointer& other) = default;
+
 OutputOrdering::PriorityMapPointer::~PriorityMapPointer() {}
 
 // static
diff --git a/net/tools/flip_server/output_ordering.h b/net/tools/flip_server/output_ordering.h
index 3641460..ecd32a2b 100644
--- a/net/tools/flip_server/output_ordering.h
+++ b/net/tools/flip_server/output_ordering.h
@@ -27,6 +27,7 @@
 
   struct PriorityMapPointer {
     PriorityMapPointer();
+    PriorityMapPointer(const PriorityMapPointer& other);
     ~PriorityMapPointer();
     PriorityRing* ring;
     PriorityRing::iterator it;
diff --git a/net/tools/quic/quic_in_memory_cache.cc b/net/tools/quic/quic_in_memory_cache.cc
index 2dee018..1f31b9cf 100644
--- a/net/tools/quic/quic_in_memory_cache.cc
+++ b/net/tools/quic/quic_in_memory_cache.cc
@@ -32,6 +32,9 @@
       priority(priority),
       body(body) {}
 
+QuicInMemoryCache::ServerPushInfo::ServerPushInfo(const ServerPushInfo& other) =
+    default;
+
 QuicInMemoryCache::Response::Response() : response_type_(REGULAR_RESPONSE) {}
 
 QuicInMemoryCache::Response::~Response() {}
diff --git a/net/tools/quic/quic_in_memory_cache.h b/net/tools/quic/quic_in_memory_cache.h
index d23d1e3..0cedc1e 100644
--- a/net/tools/quic/quic_in_memory_cache.h
+++ b/net/tools/quic/quic_in_memory_cache.h
@@ -48,6 +48,7 @@
                    const net::SpdyHeaderBlock& headers,
                    net::SpdyPriority priority,
                    string body);
+    ServerPushInfo(const ServerPushInfo& other);
     GURL request_url;
     net::SpdyHeaderBlock headers;
     net::SpdyPriority priority;
diff --git a/net/tools/quic/quic_time_wait_list_manager.cc b/net/tools/quic/quic_time_wait_list_manager.cc
index a583ff6d..3b50f2d 100644
--- a/net/tools/quic/quic_time_wait_list_manager.cc
+++ b/net/tools/quic/quic_time_wait_list_manager.cc
@@ -325,6 +325,9 @@
       time_added(time_added_),
       connection_rejected_statelessly(connection_rejected_statelessly) {}
 
+QuicTimeWaitListManager::ConnectionIdData::ConnectionIdData(
+    const ConnectionIdData& other) = default;
+
 QuicTimeWaitListManager::ConnectionIdData::~ConnectionIdData() {}
 
 }  // namespace net
diff --git a/net/tools/quic/quic_time_wait_list_manager.h b/net/tools/quic/quic_time_wait_list_manager.h
index a5b1212e..51df345d 100644
--- a/net/tools/quic/quic_time_wait_list_manager.h
+++ b/net/tools/quic/quic_time_wait_list_manager.h
@@ -149,6 +149,8 @@
                      QuicTime time_added_,
                      bool connection_rejected_statelessly);
 
+    ConnectionIdData(const ConnectionIdData& other);
+
     ~ConnectionIdData();
 
     int num_packets;
diff --git a/net/url_request/redirect_info.cc b/net/url_request/redirect_info.cc
index 16b517a..f7f9538 100644
--- a/net/url_request/redirect_info.cc
+++ b/net/url_request/redirect_info.cc
@@ -8,6 +8,8 @@
 
 RedirectInfo::RedirectInfo() : status_code(-1) {}
 
+RedirectInfo::RedirectInfo(const RedirectInfo& other) = default;
+
 RedirectInfo::~RedirectInfo() {}
 
 }  // namespace net
diff --git a/net/url_request/redirect_info.h b/net/url_request/redirect_info.h
index b1ae6369..93e7156 100644
--- a/net/url_request/redirect_info.h
+++ b/net/url_request/redirect_info.h
@@ -17,6 +17,7 @@
 // content/common/resource_messages.h.
 struct NET_EXPORT RedirectInfo {
   RedirectInfo();
+  RedirectInfo(const RedirectInfo& other);
   ~RedirectInfo();
 
   // The status code for the redirect response. This is almost redundant with
diff --git a/net/websockets/websocket_channel.cc b/net/websockets/websocket_channel.cc
index 3018088d..7d166ee 100644
--- a/net/websockets/websocket_channel.cc
+++ b/net/websockets/websocket_channel.cc
@@ -286,6 +286,9 @@
       offset_(offset),
       size_(size) {}
 
+WebSocketChannel::PendingReceivedFrame::PendingReceivedFrame(
+    const PendingReceivedFrame& other) = default;
+
 WebSocketChannel::PendingReceivedFrame::~PendingReceivedFrame() {}
 
 void WebSocketChannel::PendingReceivedFrame::ResetOpcode() {
diff --git a/net/websockets/websocket_channel.h b/net/websockets/websocket_channel.h
index 7f341950..97db65f 100644
--- a/net/websockets/websocket_channel.h
+++ b/net/websockets/websocket_channel.h
@@ -149,6 +149,7 @@
                          const scoped_refptr<IOBuffer>& data,
                          uint64_t offset,
                          uint64_t size);
+    PendingReceivedFrame(const PendingReceivedFrame& other);
     ~PendingReceivedFrame();
 
     bool final() const { return final_; }
diff --git a/net/websockets/websocket_extension.cc b/net/websockets/websocket_extension.cc
index c5e8e17..a0d55607 100644
--- a/net/websockets/websocket_extension.cc
+++ b/net/websockets/websocket_extension.cc
@@ -32,6 +32,9 @@
 WebSocketExtension::WebSocketExtension(const std::string& name)
     : name_(name) {}
 
+WebSocketExtension::WebSocketExtension(const WebSocketExtension& other) =
+    default;
+
 WebSocketExtension::~WebSocketExtension() {}
 
 bool WebSocketExtension::Equals(const WebSocketExtension& other) const {
diff --git a/net/websockets/websocket_extension.h b/net/websockets/websocket_extension.h
index 20f2922..4c42a76 100644
--- a/net/websockets/websocket_extension.h
+++ b/net/websockets/websocket_extension.h
@@ -38,6 +38,7 @@
 
   WebSocketExtension();
   explicit WebSocketExtension(const std::string& name);
+  WebSocketExtension(const WebSocketExtension& other);
   ~WebSocketExtension();
 
   void Add(const Parameter& parameter) { parameters_.push_back(parameter); }
