Fix no_size_t_to_int_warning in rtp_rtcp:rtp_rtcp_format target

Change types in interface to plain int.
When putting values into raw buffer / structures with small types, use rtc::dchecked_cast.

BUG=webrtc:1348

Review-Url: https://codereview.webrtc.org/3013623002
Cr-Original-Commit-Position: refs/heads/master@{#19813}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 772bd8b6a7d232c94b1d2b1d37ec7e1f9515c7a7
diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn
index 261446c..82bd16d 100644
--- a/modules/rtp_rtcp/BUILD.gn
+++ b/modules/rtp_rtcp/BUILD.gn
@@ -34,9 +34,6 @@
     "../../rtc_base:rtc_base_approved",
     "../../system_wrappers",
   ]
-
-  # TODO(crbug.com/webrtc/1348): Fix this warning.
-  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
 }
 
 rtc_static_library("rtp_rtcp") {
diff --git a/modules/rtp_rtcp/include/rtp_header_extension_map.h b/modules/rtp_rtcp/include/rtp_header_extension_map.h
index dcb48b6..59ab582 100644
--- a/modules/rtp_rtcp/include/rtp_header_extension_map.h
+++ b/modules/rtp_rtcp/include/rtp_header_extension_map.h
@@ -29,23 +29,23 @@
 class RtpHeaderExtensionMap {
  public:
   static constexpr RTPExtensionType kInvalidType = kRtpExtensionNone;
-  static constexpr uint8_t kInvalidId = 0;
+  static constexpr int kInvalidId = 0;
 
   RtpHeaderExtensionMap();
   explicit RtpHeaderExtensionMap(rtc::ArrayView<const RtpExtension> extensions);
 
   template <typename Extension>
-  bool Register(uint8_t id) {
+  bool Register(int id) {
     return Register(id, Extension::kId, Extension::kUri);
   }
-  bool RegisterByType(uint8_t id, RTPExtensionType type);
-  bool RegisterByUri(uint8_t id, const std::string& uri);
+  bool RegisterByType(int id, RTPExtensionType type);
+  bool RegisterByUri(int id, const std::string& uri);
 
   bool IsRegistered(RTPExtensionType type) const {
     return GetId(type) != kInvalidId;
   }
   // Return kInvalidType if not found.
-  RTPExtensionType GetType(uint8_t id) const {
+  RTPExtensionType GetType(int id) const {
     RTC_DCHECK_GE(id, kMinId);
     RTC_DCHECK_LE(id, kMaxId);
     return types_[id];
@@ -61,15 +61,15 @@
       rtc::ArrayView<const RtpExtensionSize> extensions) const;
 
   // TODO(danilchap): Remove use of the functions below.
-  int32_t Register(RTPExtensionType type, uint8_t id) {
+  int32_t Register(RTPExtensionType type, int id) {
     return RegisterByType(id, type) ? 0 : -1;
   }
   int32_t Deregister(RTPExtensionType type);
 
  private:
-  static constexpr uint8_t kMinId = 1;
-  static constexpr uint8_t kMaxId = 14;
-  bool Register(uint8_t id, RTPExtensionType type, const char* uri);
+  static constexpr int kMinId = 1;
+  static constexpr int kMaxId = 14;
+  bool Register(int id, RTPExtensionType type, const char* uri);
 
   RTPExtensionType types_[kMaxId + 1];
   uint8_t ids_[kRtpExtensionNumberOfExtensions];
diff --git a/modules/rtp_rtcp/source/rtp_header_extension_map.cc b/modules/rtp_rtcp/source/rtp_header_extension_map.cc
index 3d48ef0..6cdcc1f 100644
--- a/modules/rtp_rtcp/source/rtp_header_extension_map.cc
+++ b/modules/rtp_rtcp/source/rtp_header_extension_map.cc
@@ -51,9 +51,9 @@
 }  // namespace
 
 constexpr RTPExtensionType RtpHeaderExtensionMap::kInvalidType;
-constexpr uint8_t RtpHeaderExtensionMap::kInvalidId;
-constexpr uint8_t RtpHeaderExtensionMap::kMinId;
-constexpr uint8_t RtpHeaderExtensionMap::kMaxId;
+constexpr int RtpHeaderExtensionMap::kInvalidId;
+constexpr int RtpHeaderExtensionMap::kMinId;
+constexpr int RtpHeaderExtensionMap::kMaxId;
 
 RtpHeaderExtensionMap::RtpHeaderExtensionMap() {
   for (auto& type : types_)
@@ -69,7 +69,7 @@
     RegisterByUri(extension.id, extension.uri);
 }
 
-bool RtpHeaderExtensionMap::RegisterByType(uint8_t id, RTPExtensionType type) {
+bool RtpHeaderExtensionMap::RegisterByType(int id, RTPExtensionType type) {
   for (const ExtensionInfo& extension : kExtensions)
     if (type == extension.type)
       return Register(id, extension.type, extension.uri);
@@ -77,12 +77,12 @@
   return false;
 }
 
-bool RtpHeaderExtensionMap::RegisterByUri(uint8_t id, const std::string& uri) {
+bool RtpHeaderExtensionMap::RegisterByUri(int id, const std::string& uri) {
   for (const ExtensionInfo& extension : kExtensions)
     if (uri == extension.uri)
       return Register(id, extension.type, extension.uri);
   LOG(LS_WARNING) << "Unknown extension uri:'" << uri
-                  << "', id: " << static_cast<int>(id) << '.';
+                  << "', id: " << id << '.';
   return false;
 }
 
@@ -114,7 +114,7 @@
   return 0;
 }
 
-bool RtpHeaderExtensionMap::Register(uint8_t id,
+bool RtpHeaderExtensionMap::Register(int id,
                                      RTPExtensionType type,
                                      const char* uri) {
   RTC_DCHECK_GT(type, kRtpExtensionNone);
@@ -122,19 +122,19 @@
 
   if (id < kMinId || id > kMaxId) {
     LOG(LS_WARNING) << "Failed to register extension uri:'" << uri
-                    << "' with invalid id:" << static_cast<int>(id) << ".";
+                    << "' with invalid id:" << id << ".";
     return false;
   }
 
   if (GetType(id) == type) {  // Same type/id pair already registered.
     LOG(LS_VERBOSE) << "Reregistering extension uri:'" << uri
-                    << "', id:" << static_cast<int>(id);
+                    << "', id:" << id;
     return true;
   }
 
   if (GetType(id) != kInvalidType) {  // |id| used by another extension type.
     LOG(LS_WARNING) << "Failed to register extension uri:'" << uri
-                    << "', id:" << static_cast<int>(id)
+                    << "', id:" << id
                     << ". Id already in use by extension type "
                     << static_cast<int>(GetType(id));
     return false;
@@ -142,7 +142,8 @@
   RTC_DCHECK(!IsRegistered(type));
 
   types_[id] = type;
-  ids_[type] = id;
+  // There is a run-time check above id fits into uint8_t.
+  ids_[type] = static_cast<uint8_t>(id);
   return true;
 }
 
diff --git a/modules/rtp_rtcp/source/rtp_packet.cc b/modules/rtp_rtcp/source/rtp_packet.cc
index 7df6005..ba0a6ae 100644
--- a/modules/rtp_rtcp/source/rtp_packet.cc
+++ b/modules/rtp_rtcp/source/rtp_packet.cc
@@ -19,6 +19,7 @@
 #include "webrtc/rtc_base/checks.h"
 #include "webrtc/rtc_base/logging.h"
 #include "webrtc/rtc_base/random.h"
+#include "webrtc/rtc_base/safe_conversions.h"
 
 namespace webrtc {
 namespace rtp {
@@ -30,7 +31,7 @@
 constexpr size_t kDefaultPacketSize = 1500;
 }  // namespace
 
-constexpr size_t Packet::kMaxExtensionHeaders;
+constexpr int Packet::kMaxExtensionHeaders;
 constexpr int Packet::kMinExtensionId;
 constexpr int Packet::kMaxExtensionId;
 
@@ -78,7 +79,7 @@
 Packet::~Packet() {}
 
 void Packet::IdentifyExtensions(const ExtensionManager& extensions) {
-  for (size_t i = 0; i < kMaxExtensionHeaders; ++i)
+  for (int i = 0; i < kMaxExtensionHeaders; ++i)
     extension_entries_[i].type = extensions.GetType(i + 1);
 }
 
@@ -242,7 +243,7 @@
   RTC_DCHECK_LE(csrcs.size(), 0x0fu);
   RTC_DCHECK_LE(kFixedHeaderSize + 4 * csrcs.size(), capacity());
   payload_offset_ = kFixedHeaderSize + 4 * csrcs.size();
-  WriteAt(0, (data()[0] & 0xF0) | csrcs.size());
+  WriteAt(0, (data()[0] & 0xF0) | rtc::dchecked_cast<uint8_t>(csrcs.size()));
   size_t offset = kFixedHeaderSize;
   for (uint32_t csrc : csrcs) {
     ByteWriter<uint32_t>::WriteBigEndian(WriteAt(offset), csrc);
@@ -328,12 +329,14 @@
                                          kOneByteExtensionId);
   }
 
-  WriteAt(extensions_offset + extensions_size_, (id << 4) | (length - 1));
+  uint8_t one_byte_header = rtc::dchecked_cast<uint8_t>(id) << 4;
+  one_byte_header |= rtc::dchecked_cast<uint8_t>(length - 1);
+  WriteAt(extensions_offset + extensions_size_, one_byte_header);
 
-  extension_entry->offset =
-      extensions_offset + extensions_size_ + kOneByteHeaderSize;
-  extension_entry->length = length;
-  extensions_size_ = new_extensions_size;
+  extension_entry->offset = rtc::dchecked_cast<uint16_t>(
+      extensions_offset + extensions_size_ + kOneByteHeaderSize);
+  extension_entry->length = rtc::dchecked_cast<uint8_t>(length);
+  extensions_size_ = rtc::dchecked_cast<uint16_t>(new_extensions_size);
 
   // Update header length field.
   uint16_t extensions_words = (extensions_size_ + 3) / 4;  // Wrap up to 32bit.
@@ -497,8 +500,9 @@
         }
 
         extensions_size_ += kOneByteHeaderSize;
-        extension_entries_[idx].offset = extension_offset + extensions_size_;
-        extension_entries_[idx].length = length;
+        extension_entries_[idx].offset =
+            rtc::dchecked_cast<uint16_t>(extension_offset + extensions_size_);
+        extension_entries_[idx].length = rtc::dchecked_cast<uint16_t>(length);
         extensions_size_ += length;
       }
     }
@@ -527,7 +531,7 @@
 
 rtc::ArrayView<uint8_t> Packet::AllocateExtension(ExtensionType type,
                                                   size_t length) {
-  for (size_t i = 0; i < kMaxExtensionHeaders; ++i) {
+  for (int i = 0; i < kMaxExtensionHeaders; ++i) {
     if (extension_entries_[i].type == type) {
       int extension_id = i + 1;
       return AllocateRawExtension(extension_id, length);
diff --git a/modules/rtp_rtcp/source/rtp_packet.h b/modules/rtp_rtcp/source/rtp_packet.h
index 5a02f6c..09a1887 100644
--- a/modules/rtp_rtcp/source/rtp_packet.h
+++ b/modules/rtp_rtcp/source/rtp_packet.h
@@ -26,7 +26,7 @@
  public:
   using ExtensionType = RTPExtensionType;
   using ExtensionManager = RtpHeaderExtensionMap;
-  static constexpr size_t kMaxExtensionHeaders = 14;
+  static constexpr int kMaxExtensionHeaders = 14;
   static constexpr int kMinExtensionId = 1;
   static constexpr int kMaxExtensionId = 14;
 
diff --git a/modules/rtp_rtcp/source/rtp_packet_received.cc b/modules/rtp_rtcp/source/rtp_packet_received.cc
index 82a4f68..0d3fdd1 100644
--- a/modules/rtp_rtcp/source/rtp_packet_received.cc
+++ b/modules/rtp_rtcp/source/rtp_packet_received.cc
@@ -13,6 +13,7 @@
 #include <vector>
 
 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h"
+#include "webrtc/rtc_base/safe_conversions.h"
 
 namespace webrtc {
 
@@ -23,7 +24,7 @@
   header->timestamp = Timestamp();
   header->ssrc = Ssrc();
   std::vector<uint32_t> csrcs = Csrcs();
-  header->numCSRCs = csrcs.size();
+  header->numCSRCs = rtc::dchecked_cast<uint8_t>(csrcs.size());
   for (size_t i = 0; i < csrcs.size(); ++i) {
     header->arrOfCSRCs[i] = csrcs[i];
   }