From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- dom/media/webrtc/sdp/SdpPref.h | 82 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 dom/media/webrtc/sdp/SdpPref.h (limited to 'dom/media/webrtc/sdp/SdpPref.h') diff --git a/dom/media/webrtc/sdp/SdpPref.h b/dom/media/webrtc/sdp/SdpPref.h new file mode 100644 index 0000000000..5f24fb12a7 --- /dev/null +++ b/dom/media/webrtc/sdp/SdpPref.h @@ -0,0 +1,82 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef _SDPPREF_H_ +#define _SDPPREF_H_ + +#include "mozilla/Maybe.h" +#include "mozilla/Preferences.h" + +#include +#include + +namespace mozilla { + +class SdpParser; + +// Interprets about:config SDP parsing preferences +class SdpPref { + private: + static const std::string PRIMARY_PREF; + static const std::string ALTERNATE_PREF; + static const std::string STRICT_SUCCESS_PREF; + static const std::string DEFAULT; + + public: + // Supported Parsers + enum class Parsers { + Sipcc, + WebRtcSdp, + }; + static auto ToString(const Parsers& aParser) -> std::string; + + // How is the alternate used + enum class AlternateParseModes { + Parallel, // Alternate is always run, if A succedes it is used, otherwise B + // is used + Failover, // Alternate is only run on failure of the primary to parse + Never, // Alternate is never run; this is effectively a kill switch + }; + static auto ToString(const AlternateParseModes& aMode) -> std::string; + + private: + // Finds the mapping between a pref string and pref value, if none exists the + // default is used + template + static auto Pref(const std::string& aPrefName, + const std::unordered_map& aMap) -> T { + MOZ_ASSERT(aMap.find(DEFAULT) != aMap.end()); + + nsCString value; + if (NS_FAILED(Preferences::GetCString(aPrefName.c_str(), value))) { + return aMap.at(DEFAULT); + } + const auto found = aMap.find(value.get()); + if (found != aMap.end()) { + return found->second; + } + return aMap.at(DEFAULT); + } + // The value of the parser pref + static auto Parser() -> Parsers; + + // The value of the alternate parse mode pref + static auto AlternateParseMode() -> AlternateParseModes; + + public: + // Do non-fatal parsing errors count as failure + static auto StrictSuccess() -> bool; + // Functions to create the primary, secondary and failover parsers. + + // Reads about:config to choose the primary Parser + static auto Primary() -> UniquePtr; + static auto Secondary() -> Maybe>; + static auto Failover() -> Maybe>; +}; + +} // namespace mozilla + +#endif -- cgit v1.2.3