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;
|
return NS_ERROR_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
ChildDNSService::GetCurrentTrrMode(uint32_t* aMode) {
|
||||||
|
return NS_ERROR_NOT_AVAILABLE;
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
ChildDNSService::GetMyHostName(nsACString& result) {
|
ChildDNSService::GetMyHostName(nsACString& result) {
|
||||||
// TODO: get value from parent during PNecko construction?
|
// TODO: get value from parent during PNecko construction?
|
||||||
|
@ -26,6 +26,7 @@ static const char kDisableIpv6Pref[] = "network.dns.disableIPv6";
|
|||||||
static const char kPrefSkipTRRParentalControl[] =
|
static const char kPrefSkipTRRParentalControl[] =
|
||||||
"network.dns.skipTRR-when-parental-control-enabled";
|
"network.dns.skipTRR-when-parental-control-enabled";
|
||||||
static const char kRolloutURIPref[] = "doh-rollout.uri";
|
static const char kRolloutURIPref[] = "doh-rollout.uri";
|
||||||
|
static const char kRolloutModePref[] = "doh-rollout.mode";
|
||||||
|
|
||||||
#define TRR_PREF_PREFIX "network.trr."
|
#define TRR_PREF_PREFIX "network.trr."
|
||||||
#define TRR_PREF(x) TRR_PREF_PREFIX x
|
#define TRR_PREF(x) TRR_PREF_PREFIX x
|
||||||
@ -89,6 +90,7 @@ nsresult TRRService::Init() {
|
|||||||
prefBranch->AddObserver(kDisableIpv6Pref, this, true);
|
prefBranch->AddObserver(kDisableIpv6Pref, this, true);
|
||||||
prefBranch->AddObserver(kPrefSkipTRRParentalControl, this, true);
|
prefBranch->AddObserver(kPrefSkipTRRParentalControl, this, true);
|
||||||
prefBranch->AddObserver(kRolloutURIPref, this, true);
|
prefBranch->AddObserver(kRolloutURIPref, this, true);
|
||||||
|
prefBranch->AddObserver(kRolloutModePref, this, true);
|
||||||
}
|
}
|
||||||
nsCOMPtr<nsICaptivePortalService> captivePortalService =
|
nsCOMPtr<nsICaptivePortalService> captivePortalService =
|
||||||
do_GetService(NS_CAPTIVEPORTAL_CID);
|
do_GetService(NS_CAPTIVEPORTAL_CID);
|
||||||
@ -274,6 +276,35 @@ void TRRService::CheckURIPrefs() {
|
|||||||
MaybeSetPrivateURI(mURIPref);
|
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) {
|
nsresult TRRService::ReadPrefs(const char* name) {
|
||||||
MOZ_ASSERT(NS_IsMainThread(), "wrong thread");
|
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.
|
// we set this to true then do it at the end of the method.
|
||||||
bool clearEntireCache = false;
|
bool clearEntireCache = false;
|
||||||
|
|
||||||
if (!name || !strcmp(name, TRR_PREF("mode"))) {
|
if (!name || !strcmp(name, TRR_PREF("mode")) ||
|
||||||
// 0 - off, 1 - reserved, 2 - TRR first, 3 - TRR only, 4 - reserved,
|
!strcmp(name, kRolloutModePref)) {
|
||||||
// 5 - explicit off
|
uint32_t oldMode = mMode;
|
||||||
uint32_t tmp;
|
mMode = ModeFromPrefs();
|
||||||
if (NS_SUCCEEDED(Preferences::GetUint(TRR_PREF("mode"), &tmp))) {
|
if (mMode != oldMode) {
|
||||||
if (tmp > MODE_TRROFF) {
|
nsCOMPtr<nsIObserverService> obs =
|
||||||
tmp = MODE_TRROFF;
|
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")) ||
|
if (!name || !strcmp(name, TRR_PREF("uri")) ||
|
||||||
|
@ -107,6 +107,8 @@ class TRRService : public nsIObserver,
|
|||||||
void ProcessURITemplate(nsACString& aURI);
|
void ProcessURITemplate(nsACString& aURI);
|
||||||
void ClearEntireCache();
|
void ClearEntireCache();
|
||||||
|
|
||||||
|
static uint32_t ModeFromPrefs();
|
||||||
|
|
||||||
bool mInitialized;
|
bool mInitialized;
|
||||||
Atomic<uint32_t, Relaxed> mMode;
|
Atomic<uint32_t, Relaxed> mMode;
|
||||||
Atomic<uint32_t, Relaxed> mTRRBlacklistExpireTime;
|
Atomic<uint32_t, Relaxed> mTRRBlacklistExpireTime;
|
||||||
|
@ -1371,6 +1371,15 @@ nsDNSService::GetCurrentTrrURI(nsACString& aURI) {
|
|||||||
return NS_OK;
|
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(
|
size_t nsDNSService::SizeOfIncludingThis(
|
||||||
mozilla::MallocSizeOf mallocSizeOf) const {
|
mozilla::MallocSizeOf mallocSizeOf) const {
|
||||||
// Measurement of the following members may be added later if DMD finds it
|
// Measurement of the following members may be added later if DMD finds it
|
||||||
|
@ -318,6 +318,11 @@ interface nsIDNSService : nsISupports
|
|||||||
*/
|
*/
|
||||||
readonly attribute AUTF8String currentTrrURI;
|
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.
|
* @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"
|
#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