diff --git a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
index 0d4ce95..1356069 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
@@ -31,11 +31,10 @@
 //   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 //   |  ID   | len=2 |              absolute send time               |
 //   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-const char* AbsoluteSendTime::kName =
+constexpr RTPExtensionType AbsoluteSendTime::kId;
+constexpr uint8_t AbsoluteSendTime::kValueSizeBytes;
+const char* const AbsoluteSendTime::kUri =
     "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time";
-bool AbsoluteSendTime::IsSupportedFor(MediaType type) {
-  return true;
-}
 
 bool AbsoluteSendTime::Parse(const uint8_t* data, uint32_t* time_24bits) {
   *time_24bits = ByteReader<uint32_t, 3>::ReadBigEndian(data);
@@ -59,19 +58,10 @@
 //   |  ID   | len=0 |V|   level     |
 //   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 //
-const char* AudioLevel::kName = "urn:ietf:params:rtp-hdrext:ssrc-audio-level";
-bool AudioLevel::IsSupportedFor(MediaType type) {
-  switch (type) {
-    case MediaType::ANY:
-    case MediaType::AUDIO:
-      return true;
-    case MediaType::VIDEO:
-    case MediaType::DATA:
-      return false;
-  }
-  RTC_NOTREACHED();
-  return false;
-}
+constexpr RTPExtensionType AudioLevel::kId;
+constexpr uint8_t AudioLevel::kValueSizeBytes;
+const char* const AudioLevel::kUri =
+    "urn:ietf:params:rtp-hdrext:ssrc-audio-level";
 
 bool AudioLevel::Parse(const uint8_t* data,
                        bool* voice_activity,
@@ -105,19 +95,10 @@
 //   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 //   |  ID   | len=2 |              transmission offset              |
 //   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-const char* TransmissionOffset::kName = "urn:ietf:params:rtp-hdrext:toffset";
-bool TransmissionOffset::IsSupportedFor(MediaType type) {
-  switch (type) {
-    case MediaType::ANY:
-    case MediaType::VIDEO:
-      return true;
-    case MediaType::AUDIO:
-    case MediaType::DATA:
-      return false;
-  }
-  RTC_NOTREACHED();
-  return false;
-}
+constexpr RTPExtensionType TransmissionOffset::kId;
+constexpr uint8_t TransmissionOffset::kValueSizeBytes;
+const char* const TransmissionOffset::kUri =
+    "urn:ietf:params:rtp-hdrext:toffset";
 
 bool TransmissionOffset::Parse(const uint8_t* data, int32_t* rtp_time) {
   *rtp_time = ByteReader<int32_t, 3>::ReadBigEndian(data);
@@ -135,11 +116,10 @@
 //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 //  |  ID   | L=1   |transport wide sequence number |
 //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-const char* TransportSequenceNumber::kName =
+constexpr RTPExtensionType TransportSequenceNumber::kId;
+constexpr uint8_t TransportSequenceNumber::kValueSizeBytes;
+const char* const TransportSequenceNumber::kUri =
     "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions";
-bool TransportSequenceNumber::IsSupportedFor(MediaType type) {
-  return true;
-}
 
 bool TransportSequenceNumber::Parse(const uint8_t* data, uint16_t* value) {
   *value = ByteReader<uint16_t>::ReadBigEndian(data);
@@ -162,19 +142,9 @@
 //   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 //   |  ID   | len=0 |0 0 0 0 C F R R|
 //   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-const char* VideoOrientation::kName = "urn:3gpp:video-orientation";
-bool VideoOrientation::IsSupportedFor(MediaType type) {
-  switch (type) {
-    case MediaType::ANY:
-    case MediaType::VIDEO:
-      return true;
-    case MediaType::AUDIO:
-    case MediaType::DATA:
-      return false;
-  }
-  RTC_NOTREACHED();
-  return false;
-}
+constexpr RTPExtensionType VideoOrientation::kId;
+constexpr uint8_t VideoOrientation::kValueSizeBytes;
+const char* const VideoOrientation::kUri = "urn:3gpp:video-orientation";
 
 bool VideoOrientation::Parse(const uint8_t* data, VideoRotation* rotation) {
   *rotation = ConvertCVOByteToVideoRotation(data[0]);
@@ -203,20 +173,8 @@
 //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 constexpr RTPExtensionType PlayoutDelayLimits::kId;
 constexpr uint8_t PlayoutDelayLimits::kValueSizeBytes;
-const char* PlayoutDelayLimits::kName =
+const char* const PlayoutDelayLimits::kUri =
     "http://www.webrtc.org/experiments/rtp-hdrext/playout-delay";
-bool PlayoutDelayLimits::IsSupportedFor(MediaType type) {
-  switch (type) {
-    case MediaType::ANY:
-    case MediaType::VIDEO:
-      return true;
-    case MediaType::AUDIO:
-    case MediaType::DATA:
-      return false;
-  }
-  RTC_NOTREACHED();
-  return false;
-}
 
 bool PlayoutDelayLimits::Parse(const uint8_t* data,
                                PlayoutDelay* playout_delay) {
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h
index 95473f4..b685023 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h
+++ b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h
@@ -11,7 +11,6 @@
 #define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_HEADER_EXTENSIONS_H_
 
 #include "webrtc/base/basictypes.h"
-#include "webrtc/call.h"
 #include "webrtc/common_video/rotation.h"
 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
 
@@ -21,8 +20,8 @@
  public:
   static constexpr RTPExtensionType kId = kRtpExtensionAbsoluteSendTime;
   static constexpr uint8_t kValueSizeBytes = 3;
-  static const char* kName;
-  static bool IsSupportedFor(MediaType type);
+  static const char* const kUri;
+
   static bool Parse(const uint8_t* data, uint32_t* time_24bits);
   static bool Write(uint8_t* data, int64_t time_ms);
 
@@ -35,8 +34,8 @@
  public:
   static constexpr RTPExtensionType kId = kRtpExtensionAudioLevel;
   static constexpr uint8_t kValueSizeBytes = 1;
-  static const char* kName;
-  static bool IsSupportedFor(MediaType type);
+  static const char* const kUri;
+
   static bool Parse(const uint8_t* data,
                     bool* voice_activity,
                     uint8_t* audio_level);
@@ -47,8 +46,8 @@
  public:
   static constexpr RTPExtensionType kId = kRtpExtensionTransmissionTimeOffset;
   static constexpr uint8_t kValueSizeBytes = 3;
-  static const char* kName;
-  static bool IsSupportedFor(MediaType type);
+  static const char* const kUri;
+
   static bool Parse(const uint8_t* data, int32_t* rtp_time);
   static bool Write(uint8_t* data, int32_t rtp_time);
 };
@@ -57,8 +56,8 @@
  public:
   static constexpr RTPExtensionType kId = kRtpExtensionTransportSequenceNumber;
   static constexpr uint8_t kValueSizeBytes = 2;
-  static const char* kName;
-  static bool IsSupportedFor(MediaType type);
+  static const char* const kUri;
+
   static bool Parse(const uint8_t* data, uint16_t* value);
   static bool Write(uint8_t* data, uint16_t value);
 };
@@ -67,8 +66,8 @@
  public:
   static constexpr RTPExtensionType kId = kRtpExtensionVideoRotation;
   static constexpr uint8_t kValueSizeBytes = 1;
-  static const char* kName;
-  static bool IsSupportedFor(MediaType type);
+  static const char* const kUri;
+
   static bool Parse(const uint8_t* data, VideoRotation* value);
   static bool Write(uint8_t* data, VideoRotation value);
   static bool Parse(const uint8_t* data, uint8_t* value);
@@ -79,8 +78,8 @@
  public:
   static constexpr RTPExtensionType kId = kRtpExtensionPlayoutDelay;
   static constexpr uint8_t kValueSizeBytes = 3;
-  static const char* kName;
-  static bool IsSupportedFor(MediaType type);
+  static const char* const kUri;
+
   // Playout delay in milliseconds. A playout delay limit (min or max)
   // has 12 bits allocated. This allows a range of 0-4095 values which
   // translates to a range of 0-40950 in milliseconds.
