mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 16:25:38 +00:00
Bug 1634462 - Add doh-rollout.mode pref check and mode change notification r=dragana,necko-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D74316
This commit is contained in:
parent
3f4d65a8af
commit
197dbfbdde
@ -373,6 +373,11 @@ ChildDNSService::GetCurrentTrrURI(nsACString& aURI) {
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
ChildDNSService::GetCurrentTrrMode(uint32_t* aMode) {
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
ChildDNSService::GetMyHostName(nsACString& result) {
|
||||
// TODO: get value from parent during PNecko construction?
|
||||
|
@ -26,6 +26,7 @@ static const char kDisableIpv6Pref[] = "network.dns.disableIPv6";
|
||||
static const char kPrefSkipTRRParentalControl[] =
|
||||
"network.dns.skipTRR-when-parental-control-enabled";
|
||||
static const char kRolloutURIPref[] = "doh-rollout.uri";
|
||||
static const char kRolloutModePref[] = "doh-rollout.mode";
|
||||
|
||||
#define TRR_PREF_PREFIX "network.trr."
|
||||
#define TRR_PREF(x) TRR_PREF_PREFIX x
|
||||
@ -89,6 +90,7 @@ nsresult TRRService::Init() {
|
||||
prefBranch->AddObserver(kDisableIpv6Pref, this, true);
|
||||
prefBranch->AddObserver(kPrefSkipTRRParentalControl, this, true);
|
||||
prefBranch->AddObserver(kRolloutURIPref, this, true);
|
||||
prefBranch->AddObserver(kRolloutModePref, this, true);
|
||||
}
|
||||
nsCOMPtr<nsICaptivePortalService> captivePortalService =
|
||||
do_GetService(NS_CAPTIVEPORTAL_CID);
|
||||
@ -274,6 +276,35 @@ void TRRService::CheckURIPrefs() {
|
||||
MaybeSetPrivateURI(mURIPref);
|
||||
}
|
||||
|
||||
// static
|
||||
uint32_t TRRService::ModeFromPrefs() {
|
||||
// 0 - off, 1 - reserved, 2 - TRR first, 3 - TRR only, 4 - reserved,
|
||||
// 5 - explicit off
|
||||
|
||||
auto processPrefValue = [](uint32_t value) -> uint32_t {
|
||||
if (value == MODE_RESERVED1 || value == MODE_RESERVED4 ||
|
||||
value > MODE_TRROFF) {
|
||||
return MODE_TRROFF;
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
||||
uint32_t tmp = MODE_NATIVEONLY;
|
||||
if (NS_SUCCEEDED(Preferences::GetUint(TRR_PREF("mode"), &tmp))) {
|
||||
tmp = processPrefValue(tmp);
|
||||
}
|
||||
|
||||
if (tmp != MODE_NATIVEONLY) {
|
||||
return tmp;
|
||||
}
|
||||
|
||||
if (NS_SUCCEEDED(Preferences::GetUint(kRolloutModePref, &tmp))) {
|
||||
return processPrefValue(tmp);
|
||||
}
|
||||
|
||||
return MODE_NATIVEONLY;
|
||||
}
|
||||
|
||||
nsresult TRRService::ReadPrefs(const char* name) {
|
||||
MOZ_ASSERT(NS_IsMainThread(), "wrong thread");
|
||||
|
||||
@ -281,21 +312,17 @@ nsresult TRRService::ReadPrefs(const char* name) {
|
||||
// we set this to true then do it at the end of the method.
|
||||
bool clearEntireCache = false;
|
||||
|
||||
if (!name || !strcmp(name, TRR_PREF("mode"))) {
|
||||
// 0 - off, 1 - reserved, 2 - TRR first, 3 - TRR only, 4 - reserved,
|
||||
// 5 - explicit off
|
||||
uint32_t tmp;
|
||||
if (NS_SUCCEEDED(Preferences::GetUint(TRR_PREF("mode"), &tmp))) {
|
||||
if (tmp > MODE_TRROFF) {
|
||||
tmp = MODE_TRROFF;
|
||||
if (!name || !strcmp(name, TRR_PREF("mode")) ||
|
||||
!strcmp(name, kRolloutModePref)) {
|
||||
uint32_t oldMode = mMode;
|
||||
mMode = ModeFromPrefs();
|
||||
if (mMode != oldMode) {
|
||||
nsCOMPtr<nsIObserverService> obs =
|
||||
mozilla::services::GetObserverService();
|
||||
if (obs) {
|
||||
obs->NotifyObservers(nullptr, NS_NETWORK_TRR_MODE_CHANGED_TOPIC,
|
||||
nullptr);
|
||||
}
|
||||
if (tmp == MODE_RESERVED1) {
|
||||
tmp = MODE_TRROFF;
|
||||
}
|
||||
if (tmp == MODE_RESERVED4) {
|
||||
tmp = MODE_TRROFF;
|
||||
}
|
||||
mMode = tmp;
|
||||
}
|
||||
}
|
||||
if (!name || !strcmp(name, TRR_PREF("uri")) ||
|
||||
|
@ -107,6 +107,8 @@ class TRRService : public nsIObserver,
|
||||
void ProcessURITemplate(nsACString& aURI);
|
||||
void ClearEntireCache();
|
||||
|
||||
static uint32_t ModeFromPrefs();
|
||||
|
||||
bool mInitialized;
|
||||
Atomic<uint32_t, Relaxed> mMode;
|
||||
Atomic<uint32_t, Relaxed> mTRRBlacklistExpireTime;
|
||||
|
@ -1371,6 +1371,15 @@ nsDNSService::GetCurrentTrrURI(nsACString& aURI) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDNSService::GetCurrentTrrMode(uint32_t* aMode) {
|
||||
*aMode = 0; // The default mode.
|
||||
if (mTrrService) {
|
||||
*aMode = mTrrService->Mode();
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
size_t nsDNSService::SizeOfIncludingThis(
|
||||
mozilla::MallocSizeOf mallocSizeOf) const {
|
||||
// Measurement of the following members may be added later if DMD finds it
|
||||
|
@ -318,6 +318,11 @@ interface nsIDNSService : nsISupports
|
||||
*/
|
||||
readonly attribute AUTF8String currentTrrURI;
|
||||
|
||||
/**
|
||||
* Returns the value of the TRR Service's current default mode.
|
||||
*/
|
||||
readonly attribute unsigned long currentTrrMode;
|
||||
|
||||
/**
|
||||
* @return the hostname of the operating system.
|
||||
*/
|
||||
@ -417,5 +422,11 @@ interface nsIDNSService : nsISupports
|
||||
*/
|
||||
#define NS_NETWORK_TRR_URI_CHANGED_TOPIC "network:trr-uri-changed"
|
||||
|
||||
/**
|
||||
* An observer notification for this topic is sent whenever the mode that the
|
||||
* TRR service is using has changed.
|
||||
*/
|
||||
#define NS_NETWORK_TRR_MODE_CHANGED_TOPIC "network:trr-mode-changed"
|
||||
|
||||
%}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user