diff --git a/patches/timezone-spoofing.patch b/patches/timezone-spoofing.patch new file mode 100644 index 0000000..0b9d641 --- /dev/null +++ b/patches/timezone-spoofing.patch @@ -0,0 +1,49 @@ +diff --git a/intl/components/moz.build b/intl/components/moz.build +index b0af60b999..28c221136e 100644 +--- a/intl/components/moz.build ++++ b/intl/components/moz.build +@@ -89,3 +89,6 @@ if CONFIG["MOZ_ICU4X"]: + DEFINES["MOZ_HAS_MOZGLUE"] = True + + Library("intlcomponents") ++ ++# DOM Mask ++LOCAL_INCLUDES += ["/camoucfg"] +\ No newline at end of file +diff --git a/intl/components/src/TimeZone.cpp b/intl/components/src/TimeZone.cpp +index 5b09dfdcc5..98a78b33cc 100644 +--- a/intl/components/src/TimeZone.cpp ++++ b/intl/components/src/TimeZone.cpp +@@ -8,7 +8,8 @@ + + #include + #include +- ++#include "unicode/unistr.h" ++#include "MaskConfig.hpp" + #include "unicode/uenum.h" + #if MOZ_INTL_USE_ICU_CPP_TIMEZONE + # include "unicode/basictz.h" +@@ -22,7 +23,21 @@ Result, ICUError> TimeZone::TryCreate( + Maybe> aTimeZoneOverride) { + const UChar* zoneID = nullptr; + int32_t zoneIDLen = 0; +- if (aTimeZoneOverride) { ++ ++ if (auto value = MaskConfig::GetString("timezone")) { ++ std::string camouTimeZone = value.value(); ++ ++ // Because we don't have access to NS_ConvertUTF8toUTF16 here, ++ // convert UTF-8 to UTF-16 using ICU's UnicodeString ++ icu::UnicodeString uniStr = icu::UnicodeString::fromUTF8(camouTimeZone); ++ ++ if (uniStr.isBogus()) { ++ return Err(ICUError::InternalError); ++ } ++ ++ zoneIDLen = uniStr.length(); ++ zoneID = uniStr.getBuffer(); ++ } else if (aTimeZoneOverride) { + zoneIDLen = static_cast(aTimeZoneOverride->Length()); + zoneID = aTimeZoneOverride->Elements(); + } diff --git a/settings/properties.json b/settings/properties.json index 520c646..9b0be58 100644 --- a/settings/properties.json +++ b/settings/properties.json @@ -57,5 +57,6 @@ { "property": "fonts", "type": "array" }, { "property": "geolocation:latitude", "type": "double" }, { "property": "geolocation:longitude", "type": "double" }, - { "property": "geolocation:accuracy", "type": "double" } + { "property": "geolocation:accuracy", "type": "double" }, + { "property": "timezone", "type": "str" } ]