<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nhnt11</id>
	<title>MozillaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nhnt11"/>
	<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/Special:Contributions/Nhnt11"/>
	<updated>2026-08-13T14:54:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Modules/Desktop_Firefox&amp;diff=1240063</id>
		<title>Modules/Desktop Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Modules/Desktop_Firefox&amp;diff=1240063"/>
		<updated>2022-01-14T15:53:36Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: Downgraded myself to peer-emeritus for the Security and Privacy UI module&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Only module owners may edit this page.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
They may:&lt;br /&gt;
&lt;br /&gt;
* update any information about their module except the name of the owner&lt;br /&gt;
* add or remove sub-modules&lt;br /&gt;
* change the owner of a sub-module &lt;br /&gt;
* add emeritus owners or peers&lt;br /&gt;
&lt;br /&gt;
Other changes, including changes of module owner or addition/removal of modules, must be agreed with the Module Ownership Module group, probably via a discussion in [https://www.mozilla.org/about/forums/#governance mozilla.governance].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
Owners and peers of the Desktop Firefox module may review code anywhere in the browser and toolkit directories. Reviews should be sent to the more specific submodules below where possible.&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Desktop Firefox&lt;br /&gt;
|description=Standalone Web Browser.&lt;br /&gt;
|owner=[mailto:dtownsend@mozilla.com Dave Townsend], [mailto:gkruitbosch@mozilla.com Gijs Kruitbosch]&lt;br /&gt;
|fallbackpeers=[mailto:dao@mozilla.com Dão Gottwald], [mailto:jwein@mozilla.com Jared Wein], [mailto:mbonardo@mozilla.com Marco Bonardo], [mailto:mozilla@noorenberghe.ca Matthew Noorenberghe]&lt;br /&gt;
|ownersemeritus=&lt;br /&gt;
|peersemeritus=[mailto:netzen@gmail.com Brian Bondy], [mailto:lina@mozilla.com Lina Cambridge], [mailto:lchang@mozilla.com Luke Chang], [mailto:rchien@mozilla.com Ricky Chien], [mailto:dolske@mozilla.com Justin Dolske], [mailto:georg.fritzsche@googlemail.com Georg Fritzsche], [mailto:felipc@gmail.com Felipe Gomes], [mailto:tchien@mozilla.com Tim Guan-tin Chien], [mailto:jhofmann@mozilla.com Johann Hofmann],  [mailto:rexboy@mozilla.com KM Lee Rex], [mailto:gasolin@mozilla.com Fred Lin], [mailto:ralin@mozilla.com Ray Lin], [mailto:fliu@mozilla.com Fischer Liu], [mailto:wmccloskey@mozilla.com Bill McCloskey], [mailto:mark@moxienet.com Mark Mentovai], [mailto:ted.mielczarek@gmail.com Ted Mielczarek], [mailto:bnicholson@mozilla.com Brian Nicholson], [mailto:neil@parkwaycc.co.uk Neil Rashbrook], [mailto:mano@mozilla.com Asaf Romano], [mailto:msamuel@mozilla.com Marina Samuel], [mailto:jryans@gmail.com J Ryan Stinnett], [mailto:gps@mozilla.com Gregory Szorc], [mailto:ttaubert@mozilla.com Tim Taubert],  &lt;br /&gt;
|group=firefox-dev&lt;br /&gt;
|source_dirs=browser/, toolkit/&lt;br /&gt;
|url=[[Firefox/Code_Review|Code Review Guidelines]]&lt;br /&gt;
|components=Firefox, Toolkit&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Submodules ==&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Add-ons Manager&lt;br /&gt;
|description=Extension management back-end.&lt;br /&gt;
|owner=[mailto:scaraveo@mozilla.com Shane Caraveo]&lt;br /&gt;
|ownersemeritus=[mailto:rstrong@mozilla.com Robert Strong], [mailto:aswan@mozilla.com Andrew Swan], [mailto:kmaglione@mozilla.com Kris Maglione]&lt;br /&gt;
|peers=[mailto:lgreco@mozilla.com Luca Greco], [mailto:tjovanovic@mozilla.com Tomislav Jovanovic], [mailto:jmathies@mozilla.com Jim Mathies], [mailto:rwu@mozilla.com Rob Wu]&lt;br /&gt;
|source_dirs=toolkit/mozapps/extensions/&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Add-ons Manager UI&lt;br /&gt;
|description=about:addons.&lt;br /&gt;
|owner=[mailto:scaraveo@mozilla.com Shane Caraveo], [mailto:mstriemer@mozilla.com Mark Striemer]&lt;br /&gt;
|ownersemeritus=[mailto:rstrong@mozilla.com Robert Strong], [mailto:aswan@mozilla.com Andrew Swan]&lt;br /&gt;
|peers=[mailto:lgreco@mozilla.com Luca Greco], [mailto:tjovanovic@mozilla.com Tomislav Jovanovic], [mailto:rwu@mozilla.com Rob Wu]&lt;br /&gt;
|source_dirs=toolkit/mozapps/extensions/content/&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Application Update&lt;br /&gt;
|description=The application update services.&lt;br /&gt;
|owner=[mailto:ksteuber@mozilla.com Kirk Steuber]&lt;br /&gt;
|peers=[mailto:mhowell@mozilla.com Molly Howell], [mailto:agashlin@mozilla.com Adam Gashlin]&lt;br /&gt;
|source_dirs=toolkit/mozapps/update/&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Bookmarks &amp;amp; History&lt;br /&gt;
|description=The bookmarks and history services (Places).&lt;br /&gt;
|owner=[mailto:mbonardo@mozilla.com Marco Bonardo]&lt;br /&gt;
|peers=[mailto:standard8@mozilla.com Mark Banner], [mailto:adw@mozilla.com Drew Willcoxon]&lt;br /&gt;
|source_dirs=browser/components/places/, toolkit/components/places/&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Desktop Theme&lt;br /&gt;
|description=The style rules used in the desktop UI.&lt;br /&gt;
|owner=[mailto:dgottwald@mozilla.com Dão Gottwald]&lt;br /&gt;
|peers=[mailto:htwyford@mozilla.com Harry Twyford], [mailto:itiel_yn8@walla.com Itiel]&lt;br /&gt;
|peersemeritus=[mailto:ntim.bugs@gmail.com Tim Nguyen]&lt;br /&gt;
|source_dirs=browser/themes/, toolkit/themes/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Theme, Toolkit::Themes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Desktop UI&lt;br /&gt;
|description=The main browser UI except where covered by more specific submodules.&lt;br /&gt;
|owner=[mailto:jwein@mozilla.com Jared Wein]&lt;br /&gt;
|peers=[mailto:mconley@mozilla.com Mike Conley], [mailto:florian@queze.net Florian Quèze] &lt;br /&gt;
|source_dirs=browser/base/content/&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Download Manager&lt;br /&gt;
|description=The downloads UI and service.&lt;br /&gt;
|owner=[mailto:mbonardo@mozilla.com Marco Bonardo]&lt;br /&gt;
|peers=[mailto:gijskruitbosch@gmail.com Gijs Kruitbosch], [mailto:mtigley@mozilla.com Micah Tigley]&lt;br /&gt;
|source_dirs=browser/components/downloads/, toolkit/mozapps/downloads/&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Enterprise Policies&lt;br /&gt;
|description=System policies for controlling Firefox.&lt;br /&gt;
|owner=[mailto:mkaply@mozilla.com Michael Kaply]&lt;br /&gt;
|peers=&lt;br /&gt;
|source_dirs=browser/components/enterprisepolicies/&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Form Autofill&lt;br /&gt;
|description=Form detection and autocomplete.&lt;br /&gt;
|owner=[mailto:tgiles@mozilla.com Tim Giles]&lt;br /&gt;
|ownersemeritus=[mailto:mozilla@noorenberghe.ca Matthew Noorenberghe]&lt;br /&gt;
|peers=[mailto:sgalich@mozilla.com Sergey Galich], [mailto:dlee@mozilla.com Dimi Lee]&lt;br /&gt;
|source_dirs=browser/extensions/formautofill/, toolkit/components/satchel/&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=In-product Messaging&lt;br /&gt;
|description=The system for delivering in-product messaging.&lt;br /&gt;
|owner=[mailto:aoprea@mozilla.com Andrei Oprea]&lt;br /&gt;
|peers=[mailto:najiang@mozilla.com Nan Jiang], [mailto:pdahiya@mozilla.com Punam Dahiya], [mailto:edilee@mozilla.com Ed Lee], [mailto:khudson@mozilla.com Kate Hudson],&lt;br /&gt;
|source_dirs=toolkit/components/messaging-system/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Messaging System&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Launcher Process&lt;br /&gt;
|description=Windows process for bootstrapping the browser process.&lt;br /&gt;
|owner=[mailto:tkikuchi@mozilla.com Toshihito Kikuchi]&lt;br /&gt;
|ownersemeritus=Aaron Klotz&lt;br /&gt;
|peers=[mailto:mhowell@mozilla.com Molly Howell]&lt;br /&gt;
|source_dirs=browser/app/winlauncher&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Launcher Process&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=New Tab Page&lt;br /&gt;
|description=The new tab/home page.&lt;br /&gt;
|owner=[mailto:elee@mozilla.com Ed Lee]&lt;br /&gt;
|peers=[mailto:khudson@mozilla.com Kate Hudson], [mailto:aoprea@mozilla.com Andrei Oprea], [mailto:sdowne@getpocket.com Scott Downe]&lt;br /&gt;
|source_dirs=browser/components/newtab/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::New Tab Page&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Normandy&lt;br /&gt;
|description=The experiments and off-train deployments system.&lt;br /&gt;
|owner=[mailto:mcooper@mozilla.com Michael Cooper]&lt;br /&gt;
|peers=[mailto:gkruitbosch@mozilla.com Gijs Kruitbosch]&lt;br /&gt;
|source_dirs=toolkit/components/normandy/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Normandy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Onboarding&lt;br /&gt;
|description=The onboarding experience including UI tours.&lt;br /&gt;
|owner=[mailto:elee@mozilla.com Ed Lee]&lt;br /&gt;
|peers=[mailto:mozilla@noorenberghe.ca Matthew Noorenberghe]&lt;br /&gt;
|source_dirs=browser/components/uitour/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Tours&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Password Manager&lt;br /&gt;
|description=Managing, saving and filling logins.&lt;br /&gt;
|owner=[mailto:sgalich@mozilla.com Sergey Galich]&lt;br /&gt;
|ownersemeritus=[mailto:mozilla@noorenberghe.ca Matthew Noorenberghe]&lt;br /&gt;
|peers=[mailto:sfoster@mozilla.com Sam Foster], [mailto:jwein@mozilla.com Jared Wein], [mailto:tgiles@mozilla.com Tim Giles], [mailto:dlee@mozilla.com Dimi Lee]&lt;br /&gt;
|peersemeritus=[mailto:bdanforth@mozilla.com Bianca Danforth], [mailto:srudie@mozilla.com Severin Rudie]&lt;br /&gt;
|source_dirs=toolkit/components/passwordmgr/, browser/components/aboutlogins&lt;br /&gt;
|url=https://wiki.mozilla.org/Toolkit:Password_Manager&lt;br /&gt;
|components=Toolkit::Password Manager, Toolkit::Password Manager: Site Compatibility, Firefox::about:logins&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name= Picture-in-Picture&lt;br /&gt;
|description= A component that allows video elements to be pulled out into an always-on-top window.&lt;br /&gt;
|owner=[mailto:mconley@mozilla.com Mike Conley], [mailto:mtigley@mozilla.com Micah Tigley], [mailto:mhowell@mozilla.com Molly Howell]&lt;br /&gt;
|peers=[mailto:kpatenio@mozilla.com Katherine Patenio], [mailto:nbaumgardner@mozilla.com Niklas Baumgardner]&lt;br /&gt;
|source_dirs=toolkit/components/pictureinpicture, browser/extensions/pictureinpicture&lt;br /&gt;
|url=https://firefox-source-docs.mozilla.org/toolkit/components/pictureinpicture/pictureinpicture/index.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Preferences&lt;br /&gt;
|description=The front-end preferences system.&lt;br /&gt;
|owner=[mailto:jwein@mozilla.com Jared Wein]&lt;br /&gt;
|peers=[mailto:mstriemer@mozilla.com Mark Striemer], [mailto:gkruitbosch@mozilla.com Gijs Kruitbosch]&lt;br /&gt;
|peersemeritus=[mailto:ntim.bugs@gmail.com Tim Nguyen]&lt;br /&gt;
|source_dirs=browser/components/preferences/, browser/themes/*/preferences, toolkit/mozapps/preferences&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Profile Migration&lt;br /&gt;
|description=Migrating data from other browsers.&lt;br /&gt;
|owner=[mailto:gkruitbosch@mozilla.com Gijs Kruitbosch]&lt;br /&gt;
|peers=[mailto:mbonardo@mozilla.com Marco Bonardo], [mailto:mozilla@noorenberghe.ca Matthew Noorenberghe]&lt;br /&gt;
|source_dirs=browser/components/migration/&lt;br /&gt;
|url=&lt;br /&gt;
|components=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Screenshots&lt;br /&gt;
|description=Code relating to Screenshots functionality&lt;br /&gt;
|owner=[mailto:sfoster@mozilla.com Sam Foster]&lt;br /&gt;
|peers=[mailto:jhirsch@mozilla.com Jared Hirsch], [mailto:nbaumgardner@mozilla.com Niklas Baumgardner],&lt;br /&gt;
|peersemeritus=[mailto:bchen@mozilla.com Barry Chen]&lt;br /&gt;
|ownersemeritus=[mailto:emmamalysz@gmail.com Emma Malysz], [mailto:ian@ianbicking.org Ian Bicking]&lt;br /&gt;
|source_dirs=browser/extensions/screenshots, browser/components/screenshots/&lt;br /&gt;
|components=Firefox::Screenshots&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Search and Address Bar&lt;br /&gt;
|description=The search service, address bar and address bar autocomplete.&lt;br /&gt;
|owner=[mailto:standard8@mozilla.com Mark Banner], [mailto:dwillcoxon@mozilla.com Drew Willcoxon]&lt;br /&gt;
|peers=[mailto:dharvey@mozilla.com Dale Harvey], [mailto:mbonardo@mozilla.com Marco Bonardo], [mailto:dao@mozilla.com Dão Gottwald], [mailto:htwyford@mozilla.com Harry Twyford]&lt;br /&gt;
|peersemeritus=[mailto:info@mikedeboer.nl Michael de Boer]&lt;br /&gt;
|source_dirs=browser/components/search/, browser/components/urlbar/, toolkit/components/search/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Address Bar, Firefox::Search&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Security and Privacy UI&lt;br /&gt;
|description=The front-end to our security and privacy features, including Protections UI, Site Identity, Site Permissions and Certificate Errors&lt;br /&gt;
|owner=[mailto:pbz@mozilla.com Paul Zühlcke]&lt;br /&gt;
|peers=[mailto:prathiksha@mozilla.com Prathiksha]&lt;br /&gt;
|peersemeritus=[mailto:ewright@mozilla.com Erica Wright], Nihanth Subramanya&lt;br /&gt;
|ownersemeritus=[mailto:jhofmann@mozilla.com Johann Hofmann]&lt;br /&gt;
|source_dirs=browser/components/protections/, browser/components/controlcenter/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Security, Firefox::Protections UI, Firefox::Site Identity, Firefox::Site Permissions&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Session Restore&lt;br /&gt;
|description=Restoring a user&#039;s session after starting Firefox.&lt;br /&gt;
|owner=[mailto:dao@mozilla.com Dão Gottwald], [mailto:dharvey@mozilla.com Dale Harvey]&lt;br /&gt;
|peers=[mailto:afarre@mozilla.com Andreas Farre]&lt;br /&gt;
|ownersemeritus=[mailto:info@mikedeboer.nl Michael de Boer], Kashav Madan, Anny Gakhokidze&lt;br /&gt;
|source_dirs=browser/components/sessionstore/, toolkit/components/sessionstore/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Session Restore&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Tabbed Browser&lt;br /&gt;
|description=The UI component controlling browser tabs.&lt;br /&gt;
|owner=[mailto:dgottwald@mozilla.com Dão Gottwald]&lt;br /&gt;
|peers=&lt;br /&gt;
|source_dirs=browser/base/content/tabbrowser*, browser/modules/AsyncTabSwitcher.jsm&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Tabbed Browser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Module&lt;br /&gt;
|name=Windows Installer&lt;br /&gt;
|description=The installer for Windows.&lt;br /&gt;
|owner=[mailto:mhowell@mozilla.com Molly Howell]&lt;br /&gt;
|peers=[mailto:agashlin@mozilla.com Adam Gashlin], [mailto:nalexander@mozilla.com Nick Alexander]&lt;br /&gt;
|source_dirs=browser/installer/, toolkit/mozapps/installer/&lt;br /&gt;
|url=&lt;br /&gt;
|components=Firefox::Installer&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1234606</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1234606"/>
		<updated>2021-03-23T18:21:12Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: Updated doorhanger screenshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article describes the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. See [[Trusted Recursive Resolver]] for details on TRR implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Flow Diagram ==&lt;br /&gt;
&lt;br /&gt;
[[File:DoH Controller Flow Diagram.png|750px|frameless|DoH Frontend Flow Diagram]]&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* Choice of provider is made by using each available provider to do lookup several popular domains as well as random subdomains of `firefox-dns-perf-test.net`.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/source/browser/components/doh/TRRPerformance.jsm&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|700px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://datatracker.ietf.org/doc/draft-rescorla-doh-cdisco/&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:DoH CFR.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is available.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
Want to see this in action for yourself?&lt;br /&gt;
# On a new profile, navigate to about:config&lt;br /&gt;
# Set `doh-rollout.enabled` to true&lt;br /&gt;
# Close about:config&lt;br /&gt;
# Load/reload any website&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need to do this in an environment that doesn&#039;t trip our heurisitics, i.e. no Canary and no enterprise config.&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* doh-rollout.enabled - Turns on heuristics. Prerequisite for enabling sub-features.&lt;br /&gt;
* doh-rollout.provider-steering.enabled - Turns on automatic provider steering.&lt;br /&gt;
* doh-rollout.provider-steering.provider-list - Provider data for automatic steering (name, CNAME for discovery, and DoH endpoint)&lt;br /&gt;
* doh-rollout.trr-selection.enabled - Turns on automatic performance-based default-TRR selection. Dry-run by default.&lt;br /&gt;
* doh-rollout.trr-selection.commit-result - Commits and persists TRR selection dry-run result.&lt;br /&gt;
&lt;br /&gt;
TODO: other state prefs&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=File:DoH_CFR.png&amp;diff=1234605</id>
		<title>File:DoH CFR.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=File:DoH_CFR.png&amp;diff=1234605"/>
		<updated>2021-03-23T18:20:42Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The DoH consent CFR as of Release 87.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1234604</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1234604"/>
		<updated>2021-03-23T18:18:21Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: Fix type &amp;quot;anction&amp;quot;-&amp;gt;&amp;quot;action&amp;quot;, fix list style&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article describes the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. See [[Trusted Recursive Resolver]] for details on TRR implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Flow Diagram ==&lt;br /&gt;
&lt;br /&gt;
[[File:DoH Controller Flow Diagram.png|750px|frameless|DoH Frontend Flow Diagram]]&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* Choice of provider is made by using each available provider to do lookup several popular domains as well as random subdomains of `firefox-dns-perf-test.net`.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/source/browser/components/doh/TRRPerformance.jsm&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|700px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://datatracker.ietf.org/doc/draft-rescorla-doh-cdisco/&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is available.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
Want to see this in action for yourself?&lt;br /&gt;
# On a new profile, navigate to about:config&lt;br /&gt;
# Set `doh-rollout.enabled` to true&lt;br /&gt;
# Close about:config&lt;br /&gt;
# Load/reload any website&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need to do this in an environment that doesn&#039;t trip our heurisitics, i.e. no Canary and no enterprise config.&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* doh-rollout.enabled - Turns on heuristics. Prerequisite for enabling sub-features.&lt;br /&gt;
* doh-rollout.provider-steering.enabled - Turns on automatic provider steering.&lt;br /&gt;
* doh-rollout.provider-steering.provider-list - Provider data for automatic steering (name, CNAME for discovery, and DoH endpoint)&lt;br /&gt;
* doh-rollout.trr-selection.enabled - Turns on automatic performance-based default-TRR selection. Dry-run by default.&lt;br /&gt;
* doh-rollout.trr-selection.commit-result - Commits and persists TRR selection dry-run result.&lt;br /&gt;
&lt;br /&gt;
TODO: other state prefs&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1234603</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1234603"/>
		<updated>2021-03-23T18:17:25Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: Added instructions to trigger doorhanger&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article describes the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. See [[Trusted Recursive Resolver]] for details on TRR implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Flow Diagram ==&lt;br /&gt;
&lt;br /&gt;
[[File:DoH Controller Flow Diagram.png|750px|frameless|DoH Frontend Flow Diagram]]&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* Choice of provider is made by using each available provider to do lookup several popular domains as well as random subdomains of `firefox-dns-perf-test.net`.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/source/browser/components/doh/TRRPerformance.jsm&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|700px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://datatracker.ietf.org/doc/draft-rescorla-doh-cdisco/&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is available.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
Want to see this in anction for yourself?&lt;br /&gt;
1. On a new profile, navigate to about:config&lt;br /&gt;
2. Set `doh-rollout.enabled` to true&lt;br /&gt;
3. Close about:config&lt;br /&gt;
4. Load/reload any website&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need to do this in an environment that doesn&#039;t trip our heurisitics, i.e. no Canary and no enterprise config.&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* doh-rollout.enabled - Turns on heuristics. Prerequisite for enabling sub-features.&lt;br /&gt;
* doh-rollout.provider-steering.enabled - Turns on automatic provider steering.&lt;br /&gt;
* doh-rollout.provider-steering.provider-list - Provider data for automatic steering (name, CNAME for discovery, and DoH endpoint)&lt;br /&gt;
* doh-rollout.trr-selection.enabled - Turns on automatic performance-based default-TRR selection. Dry-run by default.&lt;br /&gt;
* doh-rollout.trr-selection.commit-result - Commits and persists TRR selection dry-run result.&lt;br /&gt;
&lt;br /&gt;
TODO: other state prefs&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1230905</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1230905"/>
		<updated>2020-09-18T14:37:38Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: Add some pref details&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article describes the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. See [[Trusted Recursive Resolver]] for details on TRR implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Flow Diagram ==&lt;br /&gt;
&lt;br /&gt;
[[File:DoH Controller Flow Diagram.png|750px|frameless|DoH Frontend Flow Diagram]]&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* Choice of provider is made by using each available provider to do lookup several popular domains as well as random subdomains of `firefox-dns-perf-test.net`.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/source/browser/components/doh/TRRPerformance.jsm&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|700px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://datatracker.ietf.org/doc/draft-rescorla-doh-cdisco/&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is available.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* doh-rollout.enabled - Turns on heuristics. Prerequisite for enabling sub-features.&lt;br /&gt;
* doh-rollout.provider-steering.enabled - Turns on automatic provider steering.&lt;br /&gt;
* doh-rollout.provider-steering.provider-list - Provider data for automatic steering (name, CNAME for discovery, and DoH endpoint)&lt;br /&gt;
* doh-rollout.trr-selection.enabled - Turns on automatic performance-based default-TRR selection. Dry-run by default.&lt;br /&gt;
* doh-rollout.trr-selection.commit-result - Commits and persists TRR selection dry-run result.&lt;br /&gt;
&lt;br /&gt;
TODO: other state prefs&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229191</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229191"/>
		<updated>2020-07-16T21:08:46Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: add cname-discovery-steering spec link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article describes the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. See [[Trusted Recursive Resolver]] for details on TRR implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Flow Diagram ==&lt;br /&gt;
&lt;br /&gt;
[[File:DoH Controller Flow Diagram.png|750px|frameless|DoH Frontend Flow Diagram]]&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* Choice of provider is made by using each available provider to do lookup several popular domains as well as random subdomains of `firefox-dns-perf-test.net`.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/source/browser/components/doh/TRRPerformance.jsm&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|700px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://datatracker.ietf.org/doc/draft-rescorla-doh-cdisco/&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229188</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229188"/>
		<updated>2020-07-16T20:44:30Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: update intro&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article describes the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. See [[Trusted Recursive Resolver]] for details on TRR implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Flow Diagram ==&lt;br /&gt;
&lt;br /&gt;
[[File:DoH Controller Flow Diagram.png|750px|frameless|DoH Frontend Flow Diagram]]&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* Choice of provider is made by using each available provider to do lookup several popular domains as well as random subdomains of `firefox-dns-perf-test.net`.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/source/browser/components/doh/TRRPerformance.jsm&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|700px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Trusted_Recursive_Resolver&amp;diff=1229187</id>
		<title>Trusted Recursive Resolver</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Trusted_Recursive_Resolver&amp;diff=1229187"/>
		<updated>2020-07-16T20:42:26Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: link to DNS over HTTPS article&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DNS-over-HTTPS (DoH) allows DNS to be resolved with enhanced privacy, secure&lt;br /&gt;
transfers and [https://blog.mozilla.org/futurereleases/2019/07/31/dns-over-https-doh-update-detecting-managed-networks-and-user-choice/ comparable] performance. This page describes Firefox configuration settings related to DoH in detail, and offers some explanation of internal operations of the implementation.&lt;br /&gt;
&lt;br /&gt;
Mozilla operates a Trusted Recursive Resolver program, whose requirements are documented at [[Security/DOH-resolver-policy]]. All TRRs offered by Firefox conform to the requirements described in the policy, but not vice versa(&amp;lt;!--NextDNS not &#039;offered&#039; but I understand that it conforms.--&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
For more information, we&#039;ve created [https://support.mozilla.org/en-US/kb/firefox-dns-over-https documentation about DoH and our plans for deployment]. We also have an [https://support.mozilla.org/en-US/kb/dns-over-https-doh-faqs FAQ], and instructions for [https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https network operators who wish to disable DoH on their networks]. &lt;br /&gt;
&lt;br /&gt;
== DNS-over-HTTPS Rollout ==&lt;br /&gt;
&lt;br /&gt;
Main article: [[Security/DNS Over HTTPS]]&lt;br /&gt;
&lt;br /&gt;
== DNS-over-HTTPS Prefs in Firefox ==&lt;br /&gt;
&lt;br /&gt;
All preferences for the DNS-over-HTTPS functionality in Firefox are located under the `network.trr` prefix (TRR == Trusted Recursive Resolver). The support for these were added in Firefox 62.&lt;br /&gt;
&lt;br /&gt;
; network.trr.mode :&lt;br /&gt;
The resolver mode. You should not change the mode manually, instead use the UI in the Network Settings section of about:preferences&lt;br /&gt;
 &lt;br /&gt;
* 0 - Off (default). use standard native resolving only (don&#039;t use TRR at all)&lt;br /&gt;
* 1 - Reserved (used to be Race mode)&lt;br /&gt;
* 2 - First. Use TRR first, and only if the name resolve fails use the native resolver as a fallback.&lt;br /&gt;
* 3 - Only. Only use TRR, never use the native resolver.&lt;br /&gt;
** Up to FF &amp;gt;= 73, this mode also requires the bootstrapAddress pref to be set.&lt;br /&gt;
** Starting with Firefox 74, setting the bootstrap address is no longer mandatory - the browser will simply bootstrap itself using regular DNS, unless the DoH server domain can&#039;t be resolved.  &lt;br /&gt;
** The native resolver will still be used for portal detection and telemetry ([https://bugzilla.mozilla.org/show_bug.cgi?id=1593873 Bug 1593873])&lt;br /&gt;
* 4 - Reserved (used to be Shadow mode)&lt;br /&gt;
* 5 - Off by choice. This is the same as 0 but marks it as done by choice and not done by default.&lt;br /&gt;
&lt;br /&gt;
; network.trr.uri :&lt;br /&gt;
&lt;br /&gt;
(default: none) set the URI for your DoH server. That&#039;s the URL Firefox will issue its HTTP request to. It must be a HTTPS URL. If &amp;quot;useGET&amp;quot; is enabled, Firefox will append &amp;quot;?dns=....&amp;quot; to the URI when it makes its HTTP requests. For the default POST requests, they will be issued to exactly the specified URI.&lt;br /&gt;
&lt;br /&gt;
Publicly announced servers include:&lt;br /&gt;
* https://mozilla.cloudflare-dns.com/dns-query&lt;br /&gt;
* https://dns.google/dns-query&lt;br /&gt;
&lt;br /&gt;
For more servers, see this unofficial list of DoH servers: https://github.com/curl/curl/wiki/DNS-over-HTTPS.&lt;br /&gt;
&lt;br /&gt;
; network.trr.resolvers :&lt;br /&gt;
&lt;br /&gt;
A list of potential resolvers for the user interface. When enabled, the TRR service will always use the value of &amp;quot;network.trr.uri&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; network.trr.credentials :&lt;br /&gt;
&lt;br /&gt;
(default: none) set credentials that will be used in the HTTP requests to the DoH end-point. It is the right-hand side content, the value, sent in the Authorization: request header.&lt;br /&gt;
&lt;br /&gt;
; network.trr.wait-for-portal :&lt;br /&gt;
&lt;br /&gt;
(default: false) set this boolean to **true** to tell Firefox to wait for the captive portal detection before TRR is used. (on Android, this will default to **false** since the captive portal handling is done outside of Firefox, by the OS itself.)&lt;br /&gt;
&lt;br /&gt;
; network.trr.allow-rfc1918 :&lt;br /&gt;
&lt;br /&gt;
(default: false) set this to true to allow RFC 1918 private addresses in TRR responses. When set to false, any such response will be considered invalid and won&#039;t be used.&lt;br /&gt;
&lt;br /&gt;
; network.trr.useGET :&lt;br /&gt;
&lt;br /&gt;
(default: false) When the browser issues a request to the DoH server to resolve host names, it can do that using POST or GET. By default Firefox will use POST, but by toggling this you can enforce GET to be used instead.&lt;br /&gt;
&lt;br /&gt;
; network.trr.confirmationNS :&lt;br /&gt;
&lt;br /&gt;
(default: example.com) Firefox will check an NS entry at startup to verify that TRR works to ensure proper configuration. This preference sets which domain to check. The verification only checks for a positive answer, it doesn&#039;t actually care what the response data says. Set this to `skip` to completely avoid confirmation.&lt;br /&gt;
&lt;br /&gt;
; network.trr.bootstrapAddress :&lt;br /&gt;
&lt;br /&gt;
(default: none) by setting this field to the IP address of the host name used in &amp;quot;network.trr.uri&amp;quot;, you can bypass using the system native resolver for it.&lt;br /&gt;
Use this to get the IPs of the cloudflare server: https://dns.google/query?name=mozilla.cloudflare-dns.com&lt;br /&gt;
&lt;br /&gt;
Starting with Firefox 74 setting the bootstrap address is no longer required in mode 3. Firefox will attempt to use regular DNS in order to get the IP address of the trusted resolver. However, if DNS resolution of the resolver domain fails, setting the bootstrap address is again necessary.&lt;br /&gt;
&lt;br /&gt;
; network.trr.blacklist-duration :&lt;br /&gt;
&lt;br /&gt;
(default: 60) is the number of seconds a name will be kept in the TRR blacklist until it expires and then will be tried with TRR again. The default duration is one minute.&lt;br /&gt;
&lt;br /&gt;
Entries are added to the TRR blacklist when the resolution fails with TRR but works with the native resolver, or if the subsequent connection with a TRR resolved host name fails but works with a retry that is resolved natively. When a hostname is added to the TRR, its domain gets checked in the background to see if the whole domain should be blacklisted to ensure a smoother ride going forward.&lt;br /&gt;
&lt;br /&gt;
; network.trr.request_timeout_ms :&lt;br /&gt;
&lt;br /&gt;
(default: 1500) is the number of milliseconds a request and the corresponding response from the DoH server is allowed to take until considered failed and discarded.&lt;br /&gt;
&lt;br /&gt;
; network.trr.request_timeout_mode_trronly_ms :&lt;br /&gt;
&lt;br /&gt;
(default: 30000) is the number of milliseconds a request and the corresponding response from the DoH server is allowed to take until considered failed and discarded in TRR-only mode.&lt;br /&gt;
&lt;br /&gt;
; network.trr.early-AAAA :&lt;br /&gt;
&lt;br /&gt;
(default: false) For each normal name resolution, Firefox issues one HTTP request for A entries and another for AAAA entries. The responses come back separately and can come in any order. If the A records arrive first, Firefox will—as an optimization— continue and use them without waiting for the second response. If the AAAA records arrive first, Firefox will only continue and use them immediately if this option is set to **true**.&lt;br /&gt;
&lt;br /&gt;
; network.trr.skip-AAAA-when-not-supported :&lt;br /&gt;
&lt;br /&gt;
(default: true) If Firefox detects that your system does not have IPv6 connectivity, it will not request IPv6 addresses from the DoH server.&lt;br /&gt;
&lt;br /&gt;
; network.trr.wait-for-A-and-AAAA :&lt;br /&gt;
&lt;br /&gt;
(default: true) When true, the DNS request will wait for both A and AAAA responses (if both have been requested) before notifying the listeners. When true, it effectively cancels `network.trr.early-AAAA`&lt;br /&gt;
&lt;br /&gt;
; network.trr.max-fails :&lt;br /&gt;
&lt;br /&gt;
(default: 5) If this many DoH requests fail in a row, consider TRR broken and go back to verify-NS state. This is meant to detect situations when the DoH server dies.&lt;br /&gt;
&lt;br /&gt;
; network.trr.disable-ECS :&lt;br /&gt;
&lt;br /&gt;
(default: true) If set, TRR asks the resolver to disable ECS (EDNS Client Subnet: the method where the resolver passes on the subnet of the client asking the question). Some resolvers will use ECS to the upstream if this request is not passed on to them.&lt;br /&gt;
&lt;br /&gt;
; network.trr.excluded-domains :&lt;br /&gt;
&lt;br /&gt;
(default: ``) Comma separated list of domain names to be resolved using the native resolver instead of TRR. Users may add domains they wish to exclude from TRR to this pref.&lt;br /&gt;
&lt;br /&gt;
This pref can be used to make /etc/hosts works with DNS over HTTPS in Firefox. Setting network.trr.excluded-domains to include host names from /etc/hosts will make them fall back to platform DNS, which will use the rules in /etc/hosts.&lt;br /&gt;
&lt;br /&gt;
; network.trr.builtin-excluded-domains :&lt;br /&gt;
&lt;br /&gt;
(default: `localhost,local`) Comma separated list of domain names to be resolved using the native resolver instead of TRR. The host of the captive portal detection is also added to the exclusion list internally, in order to be able to detect local captive portals. Users should change this pref as it may get overwritten by changes to the default values.&lt;br /&gt;
&lt;br /&gt;
; network.trr.enable_when_vpn_detected :&lt;br /&gt;
&lt;br /&gt;
(default: false) When false if a &#039;&#039;&#039;Windows VPN&#039;&#039;&#039; is detected on the system then TRR will be disabled. If true, VPN status will be ignored when deciding if to enable TRR.&lt;br /&gt;
&lt;br /&gt;
; network.trr.enable_when_proxy_detected :&lt;br /&gt;
&lt;br /&gt;
(default: false) When false if a &#039;&#039;&#039;Windows System Proxy&#039;&#039;&#039; is detected on the system then TRR will be disabled. If true, proxy status will be ignored when deciding if to enable TRR. The proxy is detected by checking the related Windows Registry keys.&lt;br /&gt;
&lt;br /&gt;
; network.trr.enable_when_nrpt_detected :&lt;br /&gt;
&lt;br /&gt;
(default: false) When false on Windows if &#039;&#039;&#039;NRPT is detected&#039;&#039;&#039; on the system then TRR will be disabled. If true, NRPT status will be ignored when deciding if to enable TRR. NRPT is detected by checking the related Windows Registry keys.&lt;br /&gt;
&lt;br /&gt;
; network.trr.send_user-agent_headers :&lt;br /&gt;
&lt;br /&gt;
(default: false) When false the User-Agent header will not be set on TRR requests.&lt;br /&gt;
&lt;br /&gt;
; network.trr.send_accept-language_headers :&lt;br /&gt;
&lt;br /&gt;
(default: false) When false the Accept-Language header will not be set on TRR requests.&lt;br /&gt;
&lt;br /&gt;
; network.trr.clear-cache-on-pref-change :&lt;br /&gt;
&lt;br /&gt;
(default: true) When true, the DNS+TRR cache will be cleared when a relevant TRR pref changes. (uri, bootstrapAddress, excluded-domains)&lt;br /&gt;
&lt;br /&gt;
== Dynamic Blacklist ==&lt;br /&gt;
&lt;br /&gt;
To keep the failure rate at a minimum, the TRR system manages a dynamic&lt;br /&gt;
persistent blacklist for host names that can&#039;t be resolved with DOH but works&lt;br /&gt;
with the native resolver. Blacklisted entries will not be retried over DOH for one minute.&lt;br /&gt;
&amp;quot;localhost&amp;quot; and names in the &amp;quot;.local&amp;quot; TLD will never be&lt;br /&gt;
resolved via DOH.&lt;br /&gt;
&lt;br /&gt;
When TRR starts up, it will first verify that it works by first checking a&lt;br /&gt;
&amp;quot;confirmation&amp;quot; domain name. This confirmation domain is a pref by default set&lt;br /&gt;
to &amp;quot;example.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
=== DNS ===&lt;br /&gt;
&lt;br /&gt;
TRR bypasses system DNS so you might not be using any &#039;enhanced&#039; DNS services provided by your default DNS server which may include Web Content Filtering or basic Malware Protection, phishing protection.&lt;br /&gt;
&lt;br /&gt;
=== ESNI ===&lt;br /&gt;
&lt;br /&gt;
The way ESNI is currently implemented requires TRR. When TRR is disabled ESNI will not work because the platform DNS APIs don&#039;t allow retrieving TXT records.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Initial ticket: https://bugzilla.mozilla.org/show_bug.cgi?id=1434852&lt;br /&gt;
* The DNS-over-HTTPS spec: https://tools.ietf.org/html/rfc8484&lt;br /&gt;
&lt;br /&gt;
* https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229185</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229185"/>
		<updated>2020-07-16T20:35:26Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: rm TODO from migrations section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Flow Diagram ==&lt;br /&gt;
&lt;br /&gt;
[[File:DoH Controller Flow Diagram.png|750px|frameless|DoH Frontend Flow Diagram]]&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* Choice of provider is made by using each available provider to do lookup several popular domains as well as random subdomains of `firefox-dns-perf-test.net`.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/source/browser/components/doh/TRRPerformance.jsm&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|700px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229184</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229184"/>
		<updated>2020-07-16T20:29:09Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: add trr performance info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Flow Diagram ==&lt;br /&gt;
&lt;br /&gt;
[[File:DoH Controller Flow Diagram.png|750px|frameless|DoH Frontend Flow Diagram]]&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* Choice of provider is made by using each available provider to do lookup several popular domains as well as random subdomains of `firefox-dns-perf-test.net`.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/source/browser/components/doh/TRRPerformance.jsm&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|700px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229182</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229182"/>
		<updated>2020-07-16T20:16:44Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: fix flow diagram visibility&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Flow Diagram ==&lt;br /&gt;
&lt;br /&gt;
[[File:DoH Controller Flow Diagram.png|750px|frameless|DoH Frontend Flow Diagram]]&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|700px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=File:DoH_Controller_Flow_Diagram.png&amp;diff=1229181</id>
		<title>File:DoH Controller Flow Diagram.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=File:DoH_Controller_Flow_Diagram.png&amp;diff=1229181"/>
		<updated>2020-07-16T20:14:08Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: Nhnt11 uploaded a new version of File:DoH Controller Flow Diagram.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DoH Controller Flow Diagram&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229180</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229180"/>
		<updated>2020-07-16T20:09:18Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: add main flow diagram&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Flow Diagram ==&lt;br /&gt;
&lt;br /&gt;
[[File:DoH Controller Flow Diagram.png|800px|frameless|DoH Frontend Flow Diagram]]&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|700px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=File:DoH_Controller_Flow_Diagram.png&amp;diff=1229179</id>
		<title>File:DoH Controller Flow Diagram.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=File:DoH_Controller_Flow_Diagram.png&amp;diff=1229179"/>
		<updated>2020-07-16T20:07:46Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DoH Controller Flow Diagram&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229178</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229178"/>
		<updated>2020-07-16T18:49:56Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: update provider steering flow size&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|700px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229177</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229177"/>
		<updated>2020-07-16T18:49:23Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: update provider steering flow size&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|545px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=File:DoH_provider_steering_flow.png&amp;diff=1229176</id>
		<title>File:DoH provider steering flow.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=File:DoH_provider_steering_flow.png&amp;diff=1229176"/>
		<updated>2020-07-16T18:48:41Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: Nhnt11 uploaded a new version of File:DoH provider steering flow.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DoH provider steering flow&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229175</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229175"/>
		<updated>2020-07-16T18:46:32Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: add provider steering flow diagram&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH provider steering flow.png|800px|frameless|DoH Provider Steering Flow]]&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=File:DoH_provider_steering_flow.png&amp;diff=1229173</id>
		<title>File:DoH provider steering flow.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=File:DoH_provider_steering_flow.png&amp;diff=1229173"/>
		<updated>2020-07-16T18:46:10Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DoH provider steering flow&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229170</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229170"/>
		<updated>2020-07-16T18:29:17Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: dry-run mechanism header level decrease&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
&lt;br /&gt;
==== Dry-Run Mechanism ====&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229169</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229169"/>
		<updated>2020-07-16T18:28:55Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: increase trrselect flow size&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
&lt;br /&gt;
=== Dry-Run Mechanism ===&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|600px|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229168</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229168"/>
		<updated>2020-07-16T18:28:04Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: add trrselect flow&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
&lt;br /&gt;
=== Dry-Run Mechanism ===&lt;br /&gt;
&lt;br /&gt;
* Default provider selection is done in two phases: a dry-run followed by committing the result.&lt;br /&gt;
* By default, this feature is dry-run-only, and records the result in a pref `doh-rollout.trr-selection.dry-run-result`.&lt;br /&gt;
* Committing the result is enabled by another pref `doh-rollout.trr-selection.commit-result`. If this is true, then after the dry-run step, the `dry-run-result` will be copied into `doh-rollout.uri`.&lt;br /&gt;
&lt;br /&gt;
[[File:DoH automatic provider selection flow.png|frameless|DoH automatic provider selection flow]]&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=File:DoH_automatic_provider_selection_flow.png&amp;diff=1229167</id>
		<title>File:DoH automatic provider selection flow.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=File:DoH_automatic_provider_selection_flow.png&amp;diff=1229167"/>
		<updated>2020-07-16T18:26:02Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DoH automatic provider selection flow&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229161</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229161"/>
		<updated>2020-07-16T16:17:17Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: undo align cfr screenshot on the right&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229160</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229160"/>
		<updated>2020-07-16T16:16:41Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: align cfr screenshot on the right&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|right|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229159</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229159"/>
		<updated>2020-07-16T16:15:47Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: move cfr screenshot to top of section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229158</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229158"/>
		<updated>2020-07-16T16:15:21Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: add links and remove todos, add cfr screenshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1643651&lt;br /&gt;
&lt;br /&gt;
[[File:Cfr.png|frameless|DoH CFR message screenshot]]&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/toolkit/components/telemetry/Events.yaml#2097-2158&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=File:Cfr.png&amp;diff=1229157</id>
		<title>File:Cfr.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=File:Cfr.png&amp;diff=1229157"/>
		<updated>2020-07-16T16:14:55Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CFR message screenshot&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229156</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229156"/>
		<updated>2020-07-16T16:06:55Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: update rollout bug link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1571543&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
* TODO: flow diagram&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
* TODO: links to CFR code/docs, screenshot&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
* TODO: links to Events.yaml, data review bugs, etc.&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229155</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229155"/>
		<updated>2020-07-16T16:06:21Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: cleanup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://bugzilla.mozilla.org/show_bug.cgi?id=1573840&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
* TODO: flow diagram&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
* TODO: links to CFR code/docs, screenshot&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
* TODO: links to Events.yaml, data review bugs, etc.&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229154</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229154"/>
		<updated>2020-07-16T16:05:55Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: link to implementation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
1. https://bugzilla.mozilla.org/show_bug.cgi?id=1573840&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
* TODO: flow diagram&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
* TODO: links to CFR code/docs, screenshot&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
* TODO: links to Events.yaml, data review bugs, etc.&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS/Heuristics&amp;diff=1229153</id>
		<title>Security/DNS Over HTTPS/Heuristics</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS/Heuristics&amp;diff=1229153"/>
		<updated>2020-07-16T16:05:31Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: add links for third-party roots section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox runs several heuristics on each network to determine whether it&#039;s OK to enable DoH on that network. Generally, the heuristics attempt to disable DoH in order to support parental controls and enterprise configurations.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;High-level overview:&#039;&#039;&#039; https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh/DoHHeuristics.jsm&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://searchfox.org/mozilla-central/source/browser/components/doh/DoHController.jsm DoHController.jsm] is responsible for running them at startup and upon network changes, and taking action to disable or enable DoH based on the outcome.&lt;br /&gt;
&lt;br /&gt;
== Global Canary ==&lt;br /&gt;
&lt;br /&gt;
See https://support.mozilla.org/en-US/kb/canary-domain-use-application-dnsnet&lt;br /&gt;
&lt;br /&gt;
== Parental Controls Service ==&lt;br /&gt;
&lt;br /&gt;
[https://searchfox.org/mozilla-central/source/toolkit/components/parentalcontrols/nsIParentalControlsService.idl nsIParentalControlsService] provides an interface to check whether parental controls are enabled on the user account on the OS. If so, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# [https://searchfox.org/mozilla-central/source/toolkit/components/parentalcontrols/ Parental Controls Service component]&lt;br /&gt;
# https://developer.apple.com/documentation/devicemanagement/parentalcontrolscontentfilter&lt;br /&gt;
# https://docs.microsoft.com/en-us/windows/win32/parcon/using-parental-controls-settings-apis&lt;br /&gt;
&lt;br /&gt;
== Forced SafeSearch (DNS-based Parental Controls) ==&lt;br /&gt;
&lt;br /&gt;
As a way to detect DNS-based content filtering, we perform DNS lookups of filtered and unfiltered domains of popular content platforms. If any of the IPs returned for the filtered domains of a given platform are identical to any of the IPs returned for the unfiltered domains, we disable DoH. Currently, Google and YouTube are supported.&lt;br /&gt;
&lt;br /&gt;
== Third-party Root Certificates ==&lt;br /&gt;
&lt;br /&gt;
We look at all certs in the cert database and check if any of them are not &amp;quot;built-in&amp;quot;. If such certs are present, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/security/manager/ssl/nsIX509CertDB.idl#329&lt;br /&gt;
# https://searchfox.org/mozilla-central/rev/1b95a0179507a4dc7d4b0c94c2df420dc1a72885/security/manager/ssl/nsIX509Cert.idl#47&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policies ==&lt;br /&gt;
&lt;br /&gt;
If enterprise policies are active, we disable DoH unless it is explicitly enabled by the DNSOverHTTPS policy.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://support.mozilla.org/en-US/products/firefox-enterprise/policies-customization-enterprise/policies-overview-enterprise&lt;br /&gt;
&lt;br /&gt;
== Enterprise Roots ==&lt;br /&gt;
&lt;br /&gt;
If enterprise root support has been enabled by setting the pref `security.enterprise_roots.enabled` to true, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox&lt;br /&gt;
&lt;br /&gt;
== ZScaler Canary Domain ==&lt;br /&gt;
&lt;br /&gt;
Currently, ZScaler has not yet adopted the global canary, and is supported by a separate canary lookup heuristic that operates on `sitereview.zscaler.com`.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS/Heuristics&amp;diff=1229152</id>
		<title>Security/DNS Over HTTPS/Heuristics</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS/Heuristics&amp;diff=1229152"/>
		<updated>2020-07-16T16:02:55Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: clean intro more&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox runs several heuristics on each network to determine whether it&#039;s OK to enable DoH on that network. Generally, the heuristics attempt to disable DoH in order to support parental controls and enterprise configurations.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;High-level overview:&#039;&#039;&#039; https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh/DoHHeuristics.jsm&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://searchfox.org/mozilla-central/source/browser/components/doh/DoHController.jsm DoHController.jsm] is responsible for running them at startup and upon network changes, and taking action to disable or enable DoH based on the outcome.&lt;br /&gt;
&lt;br /&gt;
== Global Canary ==&lt;br /&gt;
&lt;br /&gt;
See https://support.mozilla.org/en-US/kb/canary-domain-use-application-dnsnet&lt;br /&gt;
&lt;br /&gt;
== Parental Controls Service ==&lt;br /&gt;
&lt;br /&gt;
[https://searchfox.org/mozilla-central/source/toolkit/components/parentalcontrols/nsIParentalControlsService.idl nsIParentalControlsService] provides an interface to check whether parental controls are enabled on the user account on the OS. If so, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# [https://searchfox.org/mozilla-central/source/toolkit/components/parentalcontrols/ Parental Controls Service component]&lt;br /&gt;
# https://developer.apple.com/documentation/devicemanagement/parentalcontrolscontentfilter&lt;br /&gt;
# https://docs.microsoft.com/en-us/windows/win32/parcon/using-parental-controls-settings-apis&lt;br /&gt;
&lt;br /&gt;
== Forced SafeSearch (DNS-based Parental Controls) ==&lt;br /&gt;
&lt;br /&gt;
As a way to detect DNS-based content filtering, we perform DNS lookups of filtered and unfiltered domains of popular content platforms. If any of the IPs returned for the filtered domains of a given platform are identical to any of the IPs returned for the unfiltered domains, we disable DoH. Currently, Google and YouTube are supported.&lt;br /&gt;
&lt;br /&gt;
== Third-party Root Certificates ==&lt;br /&gt;
&lt;br /&gt;
We look at all certs in the cert database and check if any of them are not &amp;quot;built-in&amp;quot;. If such certs are present, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policies ==&lt;br /&gt;
&lt;br /&gt;
If enterprise policies are active, we disable DoH unless it is explicitly enabled by the DNSOverHTTPS policy.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://support.mozilla.org/en-US/products/firefox-enterprise/policies-customization-enterprise/policies-overview-enterprise&lt;br /&gt;
&lt;br /&gt;
== Enterprise Roots ==&lt;br /&gt;
&lt;br /&gt;
If enterprise root support has been enabled by setting the pref `security.enterprise_roots.enabled` to true, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox&lt;br /&gt;
&lt;br /&gt;
== ZScaler Canary Domain ==&lt;br /&gt;
&lt;br /&gt;
Currently, ZScaler has not yet adopted the global canary, and is supported by a separate canary lookup heuristic that operates on `sitereview.zscaler.com`.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS/Heuristics&amp;diff=1229151</id>
		<title>Security/DNS Over HTTPS/Heuristics</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS/Heuristics&amp;diff=1229151"/>
		<updated>2020-07-16T16:02:28Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: clean up intro&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox runs several heuristics on each network to determine whether it&#039;s OK to enable DoH on that network. Generally, the heuristics attempt to disable DoH in order to support parental controls and enterprise configurations.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;High-level overview:&#039;&#039;&#039; https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Implementation:&#039;&#039;&#039; https://searchfox.org/mozilla-central/source/browser/components/doh/DoHHeuristics.jsm&lt;br /&gt;
[https://searchfox.org/mozilla-central/source/browser/components/doh/DoHController.jsm DoHController.jsm] is responsible for running them at startup and upon network changes, and taking action to disable or enable DoH based on the outcome.&lt;br /&gt;
&lt;br /&gt;
== Global Canary ==&lt;br /&gt;
&lt;br /&gt;
See https://support.mozilla.org/en-US/kb/canary-domain-use-application-dnsnet&lt;br /&gt;
&lt;br /&gt;
== Parental Controls Service ==&lt;br /&gt;
&lt;br /&gt;
[https://searchfox.org/mozilla-central/source/toolkit/components/parentalcontrols/nsIParentalControlsService.idl nsIParentalControlsService] provides an interface to check whether parental controls are enabled on the user account on the OS. If so, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# [https://searchfox.org/mozilla-central/source/toolkit/components/parentalcontrols/ Parental Controls Service component]&lt;br /&gt;
# https://developer.apple.com/documentation/devicemanagement/parentalcontrolscontentfilter&lt;br /&gt;
# https://docs.microsoft.com/en-us/windows/win32/parcon/using-parental-controls-settings-apis&lt;br /&gt;
&lt;br /&gt;
== Forced SafeSearch (DNS-based Parental Controls) ==&lt;br /&gt;
&lt;br /&gt;
As a way to detect DNS-based content filtering, we perform DNS lookups of filtered and unfiltered domains of popular content platforms. If any of the IPs returned for the filtered domains of a given platform are identical to any of the IPs returned for the unfiltered domains, we disable DoH. Currently, Google and YouTube are supported.&lt;br /&gt;
&lt;br /&gt;
== Third-party Root Certificates ==&lt;br /&gt;
&lt;br /&gt;
We look at all certs in the cert database and check if any of them are not &amp;quot;built-in&amp;quot;. If such certs are present, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policies ==&lt;br /&gt;
&lt;br /&gt;
If enterprise policies are active, we disable DoH unless it is explicitly enabled by the DNSOverHTTPS policy.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://support.mozilla.org/en-US/products/firefox-enterprise/policies-customization-enterprise/policies-overview-enterprise&lt;br /&gt;
&lt;br /&gt;
== Enterprise Roots ==&lt;br /&gt;
&lt;br /&gt;
If enterprise root support has been enabled by setting the pref `security.enterprise_roots.enabled` to true, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox&lt;br /&gt;
&lt;br /&gt;
== ZScaler Canary Domain ==&lt;br /&gt;
&lt;br /&gt;
Currently, ZScaler has not yet adopted the global canary, and is supported by a separate canary lookup heuristic that operates on `sitereview.zscaler.com`.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS/Heuristics&amp;diff=1229150</id>
		<title>Security/DNS Over HTTPS/Heuristics</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS/Heuristics&amp;diff=1229150"/>
		<updated>2020-07-16T16:01:08Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: add code links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox runs several heuristics on each network to determine whether it&#039;s OK to enable DoH on that network. This page details each heuristic we use.&lt;br /&gt;
&lt;br /&gt;
Generally, the heuristics attempt to disable DoH in order to support parental controls and enterprise configurations.&lt;br /&gt;
&lt;br /&gt;
A high-level overview is also available here: https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https&lt;br /&gt;
&lt;br /&gt;
Heuristics are implemented in [https://searchfox.org/mozilla-central/source/browser/components/doh/DoHHeuristics.jsm DoHHeuristics.jsm]&lt;br /&gt;
[https://searchfox.org/mozilla-central/source/browser/components/doh/DoHController.jsm DoHController.jsm] is responsible for running them at startup and upon network changes, and taking action to disable or enable DoH based on the outcome.&lt;br /&gt;
&lt;br /&gt;
== Global Canary ==&lt;br /&gt;
&lt;br /&gt;
See https://support.mozilla.org/en-US/kb/canary-domain-use-application-dnsnet&lt;br /&gt;
&lt;br /&gt;
== Parental Controls Service ==&lt;br /&gt;
&lt;br /&gt;
[https://searchfox.org/mozilla-central/source/toolkit/components/parentalcontrols/nsIParentalControlsService.idl nsIParentalControlsService] provides an interface to check whether parental controls are enabled on the user account on the OS. If so, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# [https://searchfox.org/mozilla-central/source/toolkit/components/parentalcontrols/ Parental Controls Service component]&lt;br /&gt;
# https://developer.apple.com/documentation/devicemanagement/parentalcontrolscontentfilter&lt;br /&gt;
# https://docs.microsoft.com/en-us/windows/win32/parcon/using-parental-controls-settings-apis&lt;br /&gt;
&lt;br /&gt;
== Forced SafeSearch (DNS-based Parental Controls) ==&lt;br /&gt;
&lt;br /&gt;
As a way to detect DNS-based content filtering, we perform DNS lookups of filtered and unfiltered domains of popular content platforms. If any of the IPs returned for the filtered domains of a given platform are identical to any of the IPs returned for the unfiltered domains, we disable DoH. Currently, Google and YouTube are supported.&lt;br /&gt;
&lt;br /&gt;
== Third-party Root Certificates ==&lt;br /&gt;
&lt;br /&gt;
We look at all certs in the cert database and check if any of them are not &amp;quot;built-in&amp;quot;. If such certs are present, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policies ==&lt;br /&gt;
&lt;br /&gt;
If enterprise policies are active, we disable DoH unless it is explicitly enabled by the DNSOverHTTPS policy.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://support.mozilla.org/en-US/products/firefox-enterprise/policies-customization-enterprise/policies-overview-enterprise&lt;br /&gt;
&lt;br /&gt;
== Enterprise Roots ==&lt;br /&gt;
&lt;br /&gt;
If enterprise root support has been enabled by setting the pref `security.enterprise_roots.enabled` to true, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox&lt;br /&gt;
&lt;br /&gt;
== ZScaler Canary Domain ==&lt;br /&gt;
&lt;br /&gt;
Currently, ZScaler has not yet adopted the global canary, and is supported by a separate canary lookup heuristic that operates on `sitereview.zscaler.com`.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229148</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229148"/>
		<updated>2020-07-16T15:51:48Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: update heuristics link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
* TODO: links to tickets, bugs, dashboards etc.&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* Main article: [[Security/DNS Over HTTPS/Heuristics]].&lt;br /&gt;
* TODO: flow diagram&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
* TODO: links to CFR code/docs, screenshot&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
* TODO: links to Events.yaml, data review bugs, etc.&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229147</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229147"/>
		<updated>2020-07-16T15:50:57Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: link individual heuristics doc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
* TODO: links to tickets, bugs, dashboards etc.&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* The individual heuristics are documented [[Security/DNS Over HTTPS/Heuristics|here]].&lt;br /&gt;
* TODO: flow diagram&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
* TODO: links to CFR code/docs, screenshot&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
* TODO: links to Events.yaml, data review bugs, etc.&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS/Heuristics&amp;diff=1229145</id>
		<title>Security/DNS Over HTTPS/Heuristics</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS/Heuristics&amp;diff=1229145"/>
		<updated>2020-07-16T15:49:11Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: use lists in markup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox runs several heuristics on each network to determine whether it&#039;s OK to enable DoH on that network. This page details each heuristic we use.&lt;br /&gt;
&lt;br /&gt;
Generally, the heuristics attempt to disable DoH in order to support parental controls and enterprise configurations.&lt;br /&gt;
&lt;br /&gt;
A high-level overview is also available here: https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https&lt;br /&gt;
&lt;br /&gt;
== Global Canary ==&lt;br /&gt;
&lt;br /&gt;
See https://support.mozilla.org/en-US/kb/canary-domain-use-application-dnsnet&lt;br /&gt;
&lt;br /&gt;
== Parental Controls Service ==&lt;br /&gt;
&lt;br /&gt;
[https://searchfox.org/mozilla-central/source/toolkit/components/parentalcontrols/nsIParentalControlsService.idl nsIParentalControlsService] provides an interface to check whether parental controls are enabled on the user account on the OS. If so, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# [https://searchfox.org/mozilla-central/source/toolkit/components/parentalcontrols/ Parental Controls Service component]&lt;br /&gt;
# https://developer.apple.com/documentation/devicemanagement/parentalcontrolscontentfilter&lt;br /&gt;
# https://docs.microsoft.com/en-us/windows/win32/parcon/using-parental-controls-settings-apis&lt;br /&gt;
&lt;br /&gt;
== Forced SafeSearch (DNS-based Parental Controls) ==&lt;br /&gt;
&lt;br /&gt;
As a way to detect DNS-based content filtering, we perform DNS lookups of filtered and unfiltered domains of popular content platforms. If any of the IPs returned for the filtered domains of a given platform are identical to any of the IPs returned for the unfiltered domains, we disable DoH. Currently, Google and YouTube are supported.&lt;br /&gt;
&lt;br /&gt;
== Third-party Root Certificates ==&lt;br /&gt;
&lt;br /&gt;
We look at all certs in the cert database and check if any of them are not &amp;quot;built-in&amp;quot;. If such certs are present, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policies ==&lt;br /&gt;
&lt;br /&gt;
If enterprise policies are active, we disable DoH unless it is explicitly enabled by the DNSOverHTTPS policy.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://support.mozilla.org/en-US/products/firefox-enterprise/policies-customization-enterprise/policies-overview-enterprise&lt;br /&gt;
&lt;br /&gt;
== Enterprise Roots ==&lt;br /&gt;
&lt;br /&gt;
If enterprise root support has been enabled by setting the pref `security.enterprise_roots.enabled` to true, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
# https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox&lt;br /&gt;
&lt;br /&gt;
== ZScaler Canary Domain ==&lt;br /&gt;
&lt;br /&gt;
Currently, ZScaler has not yet adopted the global canary, and is supported by a separate canary lookup heuristic that operates on `sitereview.zscaler.com`.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS/Heuristics&amp;diff=1229144</id>
		<title>Security/DNS Over HTTPS/Heuristics</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS/Heuristics&amp;diff=1229144"/>
		<updated>2020-07-16T15:48:24Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: add doc for individual heuristics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox runs several heuristics on each network to determine whether it&#039;s OK to enable DoH on that network. This page details each heuristic we use.&lt;br /&gt;
&lt;br /&gt;
Generally, the heuristics attempt to disable DoH in order to support parental controls and enterprise configurations.&lt;br /&gt;
&lt;br /&gt;
A high-level overview is also available here: https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https&lt;br /&gt;
&lt;br /&gt;
== Global Canary ==&lt;br /&gt;
&lt;br /&gt;
See https://support.mozilla.org/en-US/kb/canary-domain-use-application-dnsnet&lt;br /&gt;
&lt;br /&gt;
== Parental Controls Service ==&lt;br /&gt;
&lt;br /&gt;
[https://searchfox.org/mozilla-central/source/toolkit/components/parentalcontrols/nsIParentalControlsService.idl nsIParentalControlsService] provides an interface to check whether parental controls are enabled on the user account on the OS. If so, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
1. [https://searchfox.org/mozilla-central/source/toolkit/components/parentalcontrols/ Parental Controls Service component]&lt;br /&gt;
2. https://developer.apple.com/documentation/devicemanagement/parentalcontrolscontentfilter&lt;br /&gt;
3. https://docs.microsoft.com/en-us/windows/win32/parcon/using-parental-controls-settings-apis&lt;br /&gt;
&lt;br /&gt;
== Forced SafeSearch (DNS-based Parental Controls) ==&lt;br /&gt;
&lt;br /&gt;
As a way to detect DNS-based content filtering, we perform DNS lookups of filtered and unfiltered domains of popular content platforms. If any of the IPs returned for the filtered domains of a given platform are identical to any of the IPs returned for the unfiltered domains, we disable DoH. Currently, Google and YouTube are supported.&lt;br /&gt;
&lt;br /&gt;
== Third-party Root Certificates ==&lt;br /&gt;
&lt;br /&gt;
We look at all certs in the cert database and check if any of them are not &amp;quot;built-in&amp;quot;. If such certs are present, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policies ==&lt;br /&gt;
&lt;br /&gt;
If enterprise policies are active, we disable DoH unless it is explicitly enabled by the DNSOverHTTPS policy.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
1. https://support.mozilla.org/en-US/products/firefox-enterprise/policies-customization-enterprise/policies-overview-enterprise&lt;br /&gt;
&lt;br /&gt;
== Enterprise Roots ==&lt;br /&gt;
&lt;br /&gt;
If enterprise root support has been enabled by setting the pref `security.enterprise_roots.enabled` to true, we disable DoH.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
1. https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox&lt;br /&gt;
&lt;br /&gt;
== ZScaler Canary Domain ==&lt;br /&gt;
&lt;br /&gt;
Currently, ZScaler has not yet adopted the global canary, and is supported by a separate canary lookup heuristic that operates on `sitereview.zscaler.com`.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229129</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229129"/>
		<updated>2020-07-15T23:54:30Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: add prefs section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
* TODO: links to tickets, bugs, dashboards etc.&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* TODO: more details, individual docs for each heuristic, flow diagram&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
* TODO: links to CFR code/docs, screenshot&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
* TODO: links to Events.yaml, data review bugs, etc.&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;br /&gt;
&lt;br /&gt;
== Prefs ==&lt;br /&gt;
&lt;br /&gt;
* TODO: list all involved prefs and semantics.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229128</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229128"/>
		<updated>2020-07-15T23:52:53Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: clean up intro&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
* TODO: links to tickets, bugs, dashboards etc.&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* TODO: more details, individual docs for each heuristic, flow diagram&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
* TODO: links to CFR code/docs, screenshot&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
* TODO: links to Events.yaml, data review bugs, etc.&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229127</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229127"/>
		<updated>2020-07-15T23:52:03Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: add todos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. This includes heuristics, default-provider selection, and automatic steering to network-indicated DoH endpoints. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend and its sub-features are gated behind prefs that are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
* The pref `doh-rollout.enabled`, serves as a blanket gate. Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
* TODO: links to tickets, bugs, dashboards etc.&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass, and disabled otherwise.&lt;br /&gt;
* TODO: more details, individual docs for each heuristic, flow diagram&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* TODO: sub-page for documenting the mechanism, flow diagram, links to code/docs&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
* TODO: links to CFR code/docs, screenshot&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
* TODO: links to Events.yaml, data review bugs, etc.&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;br /&gt;
* TODO: sub-page with details on each migration, versioning, links to code.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229126</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229126"/>
		<updated>2020-07-15T23:47:07Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: improve reading flow&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. This includes heuristics, default-provider selection, and automatic steering to network-indicated DoH endpoints. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend is gated behind the pref `doh-rollout.enabled`, which by default does not have a value.&lt;br /&gt;
* Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
* Prefs are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* DoH is enabled on the network if all heuristics pass.&lt;br /&gt;
&lt;br /&gt;
== Respecting User-choice ==&lt;br /&gt;
&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
* This holds for prefs that were set prior to enrollment in the rollout.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* A provider (endpoint + expected CNAME for discovery) must be explicitly supported for this mechanism to work.&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229125</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229125"/>
		<updated>2020-07-15T22:21:02Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: change &amp;quot;popup&amp;quot; to &amp;quot;doorhanger&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. This includes heuristics, default-provider selection, and automatic steering to network-indicated DoH endpoints. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend is gated behind the pref `doh-rollout.enabled`, which by default does not have a value.&lt;br /&gt;
* Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
* Prefs are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
&lt;br /&gt;
== User-choice ==&lt;br /&gt;
&lt;br /&gt;
* User-choice is respected throughout the frontend code.&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* If all of the heuristics pass, DoH is enabled by setting the pref `doh-rollout.mode=2`.&lt;br /&gt;
* If any heuristic fails, DoH is disabled by setting the pref `doh-rollout.mode=0`.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
&lt;br /&gt;
== Opt-out Doorhanger ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This doorhanger offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The doorhanger is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The doorhanger is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229124</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229124"/>
		<updated>2020-07-15T22:18:38Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: split enterprise policy point into two for easy reading&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. This includes heuristics, default-provider selection, and automatic steering to network-indicated DoH endpoints. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend is gated behind the pref `doh-rollout.enabled`, which by default does not have a value.&lt;br /&gt;
* Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
* Prefs are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
&lt;br /&gt;
== User-choice ==&lt;br /&gt;
&lt;br /&gt;
* User-choice is respected throughout the frontend code.&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client.&lt;br /&gt;
* This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* If all of the heuristics pass, DoH is enabled by setting the pref `doh-rollout.mode=2`.&lt;br /&gt;
* If any heuristic fails, DoH is disabled by setting the pref `doh-rollout.mode=0`.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
&lt;br /&gt;
== Opt-out Popup ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This popup offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The popup is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The popup is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229123</id>
		<title>Security/DNS Over HTTPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Security/DNS_Over_HTTPS&amp;diff=1229123"/>
		<updated>2020-07-15T22:14:38Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: Add basic doc for DoH frontend.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article and its children describe the various mechanics of Firefox&#039;s DNS over HTTPS (DoH) frontend. This includes heuristics, default-provider selection, and automatic steering to network-indicated DoH endpoints. Separate [[Trusted Recursive Resolver|documentation]] exists for the protocol implementation in necko.&lt;br /&gt;
&lt;br /&gt;
== Rollout ==&lt;br /&gt;
&lt;br /&gt;
* The DoH frontend is gated behind the pref `doh-rollout.enabled`, which by default does not have a value.&lt;br /&gt;
* Every mechanism described below depends on this pref being set to true.&lt;br /&gt;
* Individual mechanisms may be additionally gated behind their own prefs. This is indicated where relevant.&lt;br /&gt;
* Prefs are set to true via Normandy Rollouts, which allows us to target specific regions and control population size and growth so we can manage risk. &lt;br /&gt;
&lt;br /&gt;
== User-choice ==&lt;br /&gt;
&lt;br /&gt;
* User-choice is respected throughout the frontend code.&lt;br /&gt;
* If we detect that the user changed their DoH settings in about:preferences, we permanently turn off our heuristics and other mechanisms. The user-set values are obeyed.&lt;br /&gt;
&lt;br /&gt;
== Enterprise Policy ==&lt;br /&gt;
&lt;br /&gt;
* In order to avoid interfering with enterprise-configured network behaviors, we disable our heuristics and other mechanisms if any policy is active on the client. This is true whether the policy is configured on the local machine or propagated by the network e.g. via Group Policy.&lt;br /&gt;
* If a DNSOverHTTPS policy to turn on DoH is in effect, this is respected and heuristics and other mechanisms will be enabled.&lt;br /&gt;
&lt;br /&gt;
== Heuristics ==&lt;br /&gt;
&lt;br /&gt;
* We run various heuristics to determine whether the network is (un)suitable to enable DoH.&lt;br /&gt;
* The heuristics are run at startup and upon network changes.&lt;br /&gt;
* If all of the heuristics pass, DoH is enabled by setting the pref `doh-rollout.mode=2`.&lt;br /&gt;
* If any heuristic fails, DoH is disabled by setting the pref `doh-rollout.mode=0`.&lt;br /&gt;
&lt;br /&gt;
== Default Provider Selection ==&lt;br /&gt;
&lt;br /&gt;
* This feature is controlled by the prefs `doh-rollout.trr-selection.enabled`.&lt;br /&gt;
* Before running heuristics for the first time, we attempt to choose one of the available providers as the default for the profile.&lt;br /&gt;
* The chosen default is used whenever DoH is enabled, via the pref `doh-rollout.uri`.&lt;br /&gt;
* A network-provided endpoint, if detected, will take precedence over the default provider when on that network. (See Provider Steering below)&lt;br /&gt;
&lt;br /&gt;
== Provider Steering ==&lt;br /&gt;
&lt;br /&gt;
* This feature is controlled by the pref `doh-rollout.provider-steering.enabled`.&lt;br /&gt;
* Some providers supply their own DoH endpoints which we want to use if indicated.&lt;br /&gt;
* This capability is discovered via the CNAME response when looking up the domain `doh.test`.&lt;br /&gt;
* Discovery is only attempted if all heuristics are passing on the network.&lt;br /&gt;
* A DoH endpoint discovered in this manner takes precedence over the automatically chosen default provider (see Default Provider Selection above).&lt;br /&gt;
* Currently, Comcast is the only supported provider.&lt;br /&gt;
&lt;br /&gt;
== Opt-out Popup ==&lt;br /&gt;
&lt;br /&gt;
* When the client is first enrolled in the rollout, we show a doorhanger popup to let the user know that DoH is enabled.&lt;br /&gt;
* This popup offers an option to opt-out, which results in permanently disabling heuristics and other mechanisms.&lt;br /&gt;
* The popup is shown only if the rollout is &amp;quot;successful&amp;quot; - i.e. the user did not already have custom DoH preferences or active enterprise policy.&lt;br /&gt;
* The popup is implemented as a CFR message, gated behind the relevant prefs.&lt;br /&gt;
&lt;br /&gt;
== Telemetry ==&lt;br /&gt;
&lt;br /&gt;
* Interaction and functional data is collected in the form of two telemetry Events.&lt;br /&gt;
* A &#039;&#039;state&#039;&#039; event is sent when the DoHController&#039;s state changes, e.g. when DoH is enabled or disabled on the network, when a user-choice results in disabling heuristics, when a rollback is detected, etc.&lt;br /&gt;
* A &#039;&#039;heuristics&#039;&#039; event is sent whenever we run heuristics, containing the result of each heuristic as its payload, along with the trigger (e.g. startup, network change) and the provider steering status.&lt;br /&gt;
&lt;br /&gt;
== Migrations ==&lt;br /&gt;
&lt;br /&gt;
* We have several migrations to support users upgrading from older versions of Firefox as well as the rollout when they upgrade to newer versions.&lt;br /&gt;
* Two of the migrations work on the format of stored state (local storage and prefs)&lt;br /&gt;
* During a dry-run-only test of Default Provider Selection, an underlying bug was triggered that caused clients to effectively DDoS NextDNS&#039;s endpoint. In the aftermath, a new endpoint was set up and we have a migration to convert occurrences of the old endpoint in stored URI values to the new one.&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Berlin_Office&amp;diff=1207266</id>
		<title>Berlin Office</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Berlin_Office&amp;diff=1207266"/>
		<updated>2019-02-05T17:49:35Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: Removed my email from the bridge photo description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Oberbaumbrucke.jpg|thumbnail|upright=1.8|right|link=|alt=Oberbaumbrücke|The Oberbaum Bridge as seen from the office]]&lt;br /&gt;
&lt;br /&gt;
= Welcome To Berlin! =&lt;br /&gt;
&lt;br /&gt;
Welcome to the Berlin office! We&#039;re glad to have you here!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Come and join us for some German beer, some Currywurst, and our fun new space...&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Need Help with a Mozilla product? ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: yellow;&amp;quot;&amp;gt;&lt;br /&gt;
For fast and easy support go to [http://support.mozilla.org/ Mozilla Support]&#039;&#039;&#039;&lt;br /&gt;
Please understand that Mozilla, as a non-profit, cannot provide phone support.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Office Logistics = &lt;br /&gt;
To access the building use the driveway to the courtyard of Schlesische Strasse 27 and go straight until the end of the area. Then enter Haus 3 entrance C on the lefthand side. You can use either stairs or the elevator to go to the 4th Floor.&lt;br /&gt;
&lt;br /&gt;
==Accessibility==&lt;br /&gt;
The building entrance door opens automatically. However, the next door needs to be opened manually. Once you pass them, there are two elevators on the righthand side. Press the button and choose 4th floor (it is where our welcome/reception area is located).&lt;br /&gt;
There is a grey door on the right when you exit the elevator on the 4th floor; they remain open. The glass door at the end of the short corridor can be opened with a badge.&lt;br /&gt;
There are two floors in the office connected by an internal stairwell. If you want to use the kitchen or event space on the 3rd floor, please take the same elevator you used to get to the 4th / reception floor.&lt;br /&gt;
There are 2 accessible toilets, one on each floor.&lt;br /&gt;
-3rd floor- On the lefthand side as you enter the event &amp;amp; community space.&lt;br /&gt;
-4th floor- On the lefthand side as you enter the reception area.&lt;br /&gt;
&lt;br /&gt;
== Rooms ==&lt;br /&gt;
* Entrance area with comfy lounge space&lt;br /&gt;
* A common space that can be extended to fit 80 people&lt;br /&gt;
* Conferencing rooms equipped for video conferencing&lt;br /&gt;
* A community space with an adjacent maker space&lt;br /&gt;
* Kitchen with a great view, serving refrigerated drinks, espresso machine, dishwasher, snack bar&lt;br /&gt;
&lt;br /&gt;
= Getting Here =&lt;br /&gt;
&lt;br /&gt;
=== Traveling to Berlin  ===&lt;br /&gt;
Berlin has two functional airports: Tegel (TXL) and Schönefeld (SXF):&lt;br /&gt;
&lt;br /&gt;
* Tegel is closer to the city center and has service from transatlantic flights (Brussels Airlines, United, Air Canada Rouge) as well as many normal-cost air carriers.  Some flights departing from terminal A allow you to get very quickly from the gate to the waiting lounge because each jetbridge has its own gate, security, and lounge.  All other terminals in Tegel take a little longer.&lt;br /&gt;
* Schönefeld is a little further from the city&#039;s center, but also has a very easy connection to the office.  Schönefeld is primarily served by low-cost air carriers (Ryanair, Easyjet).&lt;br /&gt;
&lt;br /&gt;
Berlin is also well connected by train.  The closest major station for long distance and international trains is the Ostbahnhof.  If the train does not stop at Ostbahnhof, then the Hauptbahnhof is the next best choice.&lt;br /&gt;
&lt;br /&gt;
=== Public transportation ===&lt;br /&gt;
&lt;br /&gt;
[[File:Berlin public transport logos.png|thumbnail|upright=1.6|right|link=|alt=Berlin public transport logos|Indicating the next local train (&amp;quot;S-Bahn&amp;quot;), subway (&amp;quot;U-Bahn&amp;quot;), or bus station.]]The subway (&amp;quot;U-Bahn&amp;quot;) station closest to the office is &amp;lt;b&amp;gt;Schlesisches Tor&amp;lt;/b&amp;gt;, served by &#039;&#039;&#039;subway line U1&#039;&#039;&#039; (which actually drives above the earth in this section of the line). Another great choice is S-Bahn station &#039;&#039;&#039;Warschauer Straße&#039;&#039;&#039;, from which it is a 10 to 15-minute walk to the office, or &#039;&#039;&#039;Treptower Park&#039;&#039;&#039;, from which you can take a 10-minute walk or bus 165/265 to &#039;&#039;&#039;Taborstraße&#039;&#039;&#039; right in front of the office. You can find information on the metro service and maps here: http://www.bvg.de/en/Travel-information&lt;br /&gt;
&lt;br /&gt;
* The transit authority in Berlin is [http://www.vbb.de/en/index.html VBB].  Most inner city services are operated by [http://www.bvg.de/en/ BVG] and [http://www.s-bahn-berlin.de/en S-Bahn-Berlin].&lt;br /&gt;
* There are three fare zones in Berlin: A, B, and C.  A is the inner city, bounded by the Ringbahn (S41/S42).  B is between the Ringbahn and the Brandenburg border.  C is Brandenburg.&lt;br /&gt;
* Tickets are sold as AB, BC or ABC.  An AB or BC can be extended to the third zone with the purchase of an &amp;quot;Anschlussfahrausweis&amp;quot;.  This also applies to single rides in concert with a flat rate (daily/weekly/monthly) ticket.&lt;br /&gt;
* You will almost exclusively use AB tickets.  The main exception is a trip to Schönefeld Airport (SXF), which requires zone C&lt;br /&gt;
* A ticket from BVG can be used on an S-Bahn-Berlin and vice versa&lt;br /&gt;
* A ticket from BVG/S-Bahn-Berlin can be used on regional trains within the ticketed zone.  These are trains which have a number like &amp;quot;RE1&amp;quot; or &amp;quot;RB1&amp;quot;.  They are primarily operated by DB Regio (mainly red), ODEG (grey with yellow lettering) and NEB (blue and white).&lt;br /&gt;
* A ticket from BVG/S-Bahn-Berlin &#039;&#039;&#039;cannot&#039;&#039;&#039; be used on long-distance trains, even within the ticketed zone.  Google maps sometimes suggest these routes in their transit directions.  These are trains with routes like &amp;quot;IC 500&amp;quot;, &amp;quot;EC 40&amp;quot; or &amp;quot;ICE 100&amp;quot;.  In Berlin, these are often grey with a thin horizontal red stripe (DB), light blue (PKP), dark blue (ČD) or light blue with a white stripe (MÁV)&lt;br /&gt;
* &#039;&#039;&#039;A single ride ticket is valid for two hours, but only for one direction.&#039;&#039;&#039;&lt;br /&gt;
* Berlin time-based transit tickets are valid until 3:00 AM the following day&lt;br /&gt;
* [http://www.bvg.de/en/index.php?section=downloads&amp;amp;cmd=58&amp;amp;download=399 Subway and S-Bahn train map (region ABC) (PDF)]&lt;br /&gt;
* [http://www.bvg.de/en/index.php?section=downloads&amp;amp;cmd=58&amp;amp;download=400 Subway and S-Bahn train map (city/region AB) (PDF)]&lt;br /&gt;
* [http://www.bvg.de/en/index.php?section=downloads&amp;amp;cmd=58&amp;amp;download=401 Tram map (PDF)]&lt;br /&gt;
* [http://fahrinfo.bvg.de/Fahrinfo/bin/query.bin/en/dn?ujm=1&amp;amp;MapLayer=NETWORK Interactive map]&lt;br /&gt;
* Day tickets are cheaper when taking three rides or more. Also: buying tickets in sets of 4 gives you a decent deal.&lt;br /&gt;
* Day tickets for groups up to five people are dirt-cheap.&lt;br /&gt;
* Multi-day tickets (regular ones or the &amp;quot;City/Welcome&amp;quot; variety which allow rebates in certain museums and restaurants) are not really a good deal.&lt;br /&gt;
* Every ticket machine also sells special tickets, but they&#039;re hidden in sub-menus. Keep digging!  Most support changing to English on the main screen.&lt;br /&gt;
* Remember to always validate your ticket before boarding a subway, S-Bahn or regional train. Ticket validation machines are located near the ticket machine itself and on the platforms.&lt;br /&gt;
* Most ticket machines accept coins.  Ticket machines might additionally accept a combination of credit card, banknotes &amp;lt;= 10€, any banknote and EC card (German debit cards).&lt;br /&gt;
* If the ticket machine doesn&#039;t like your coin, rub the edge against the machine and try again&lt;br /&gt;
&lt;br /&gt;
==== Smartphone Apps ====&lt;br /&gt;
Google maps give pretty good transit directions in Berlin and are available for Ios and Android.  Transit app, Here maps, and Citymapper also work well&lt;br /&gt;
&lt;br /&gt;
The single best public transportation app for Android is [https://play.google.com/store/apps/details?id=de.schildbach.oeffi&amp;amp;hl=en Öffi]. It covers all of Germany and is available for free through Google Play.&lt;br /&gt;
* Open &amp;quot;Öffi Directions&amp;quot;, choose &#039;&#039;My current location&#039;&#039; as starting point and &#039;&#039;Schlesisches Tor&#039;&#039; (U-Bahn stop close to the office) or &#039;&#039;Taborstraße&#039;&#039; (bus stop directly in front of the office) as your destination, and you should be good to go.&lt;br /&gt;
&lt;br /&gt;
There&#039;s also the BVG Fahrinfo app, which is BVG&#039;s official transit app.  This app gives really good transit directions as well as schedules.  You can also buy tickets directly from the app.&lt;br /&gt;
&lt;br /&gt;
==== From Tegel Airport TXL ====&lt;br /&gt;
* The recommended route from TXL to the office is via the S-Bahn ring. From the airport, take bus TXL to S Beusselstraße (2 stops). From there, take S41 (via Gesundbrunnen, Ostkreuz) to Treptower Park. From there the office is only 10 min walk away: go right on Puschkinallee and keep straight (it&#039;s a beautiful walk!). You can also take bus 165 (direction U Märkisches Museum) or 265 (direction U Stadtmitte ) to Taborstraße. This will leave you right in front of our office building.&lt;br /&gt;
&lt;br /&gt;
==== From Schönefeld Airport SXF ====&lt;br /&gt;
* &#039;&#039;&#039;NOTE&#039;&#039;&#039;: you will require a ticket in fare zone ABC&lt;br /&gt;
* The recommended route from SXF is via S-Bahn route S9.  From the airport, take the S9 to Treptower Park. From there the office is only 10 min walk away: go right on Puschkinallee and keep straight. You can also take bus 165 (direction U Märkisches Museum) or 265 (direction U Stadtmitte ) to Taborstraße. This will leave you right in front of our office building.&lt;br /&gt;
&lt;br /&gt;
==== From Berlin Hauptbahnhof, Ostbahnhof or Alexanderplatz train station ====&lt;br /&gt;
* The recommended route is the S5, S7 or S75.  All of these stations are on all of these routes.  From the station, take the route to Warschauer Strasse station.  From Warschauer Strasse station, either walk or take the U1 one stop to Schlesisches Tor U-Bahn.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;My Taxi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you know you need to take a lot of taxis while you are in town, we suggest downloading the [http://www.mytaxi.com/en/passengers/mytaxi-in-your-city/berlin.html MyTaxi] app. You can filter taxis by who takes card, how many people you need to pick up etc.&lt;br /&gt;
&lt;br /&gt;
* Most taxi rides within central Berlin are around 10 EUR, hardly more than 15 EUR.&lt;br /&gt;
&lt;br /&gt;
= Visiting Berlin  =&lt;br /&gt;
&lt;br /&gt;
=== Hotels ===&lt;br /&gt;
&lt;br /&gt;
;Michelberger Hotel&lt;br /&gt;
http://michelbergerhotel.com/&lt;br /&gt;
15min walk from the office. Great location, great hotel. Free yoga class on Thursdays, make their own coconut water. Delicious food (local and made from scrap) and drinks. Rooms range from &amp;quot;Cozy&amp;quot; (very tiny but beautiful and has everything you need) to a larger scale. More hipster vibe. Very different from your usual hotel. It&#039;s an experience in itself.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Hotel Johann&#039;&#039;&#039;&lt;br /&gt;
https://www.hotel-johann-berlin.de/ in Johanniterstrasse (U1 Prinzenstr). This is definitely outside of walking distance, but if you take the U1 towards Schlesisches Tor, you are close.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Hotel Vier Jahreszeiten&#039;&#039;&#039;&lt;br /&gt;
http://vj-hotels.com/ in Skalitzer Str (U1 Görlitzer Bhf). Similar as Hotel Johann, just 2 stops closer&lt;br /&gt;
&lt;br /&gt;
=== Tipping &amp;amp; Money ===&lt;br /&gt;
&lt;br /&gt;
* Local Currency: Euro&lt;br /&gt;
* It is customary in Germany to tip a little by rounding up and around 10% at restaurants for good service. Tipping in bars is not something many Europeans do.&lt;br /&gt;
* Not many places accept Credit/Debit Card. Many smaller restaurants and shops do not accept credit cards like in the US and other larger European cities.  Please be prepared to pay in cash. It&#039;s a good practice in Berlin to ask in advance of making a restaurant reservation if they accept credit cards.&lt;br /&gt;
&lt;br /&gt;
=== Things to do in Berlin ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Museums&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.computerspielemuseum.de/1210_Home.htm Computerspielemuseum] – computer games museum (see [https://en.wikipedia.org/wiki/Computerspielemuseum_Berlin Wikipedia]) in Friedrichshain&lt;br /&gt;
* [https://www.ddr-museum.de/en DDR-Museum] – an interactive museum about the German Democratic Republic (GDR) in Mitte&lt;br /&gt;
*Museum Insel [https://www.museumsinsel-berlin.de/en/buildings/overview-of-the-buildings/] - &#039;Museum Island&#039; is a unique complex of 5 significant national museums on the Spree Island. It is on the UNESCO World Heritage List.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sight Seeing&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Fernsehturm_Berlin Fernsehturm am Alexanderplatz] – best view of the city, but long waiting lines&lt;br /&gt;
* [https://www.google.com/maps/place/Oranienstraße Oranienstr. in Kreuzberg] – lots of cafes, bars, and restaurants&lt;br /&gt;
* Take one ride around the [http://en.wikipedia.org/wiki/Berlin_Ringbahn S-Bahn-Ring]. Train lines 41 or 42. A public transport ticket (region AB) is only 2.70 EUR. The full circle takes about an hour and will show you many facets of the city and you&#039;ll see people from all walks of life.&lt;br /&gt;
* [http://berliner-teufelsberg.com/web/ Teufelsberg] – the old NSA listening post&lt;br /&gt;
* [http://berliner-unterwelten.de/home.1.1.html Berliner Unterwelten] – awesome guided tours through old bunkers and other abandoned, mostly underground places.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Websites for short stays!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://fotostrasse.1982.us/what-to-do-in-berlin-mainstream-tour-guide/ 24 Hours Guide]&lt;br /&gt;
* [http://www.12hrs.net/guides/12-hrs-in-berlin-with-herbert-hofmann/ 12 Hours Guide]&lt;br /&gt;
&lt;br /&gt;
=== Restaurants ===&lt;br /&gt;
&amp;lt;!-- restaurants here need h-card markup! see Sadhu below for an example. :) -t --&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Freischwimmer[https://www.freischwimmer-berlin.com/]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
Vor dem Schlesischen Tor 2, 10997 Berlin&amp;lt;br&amp;gt; &lt;br /&gt;
Waterside dining space with wooden decking over the water, comfy rooms, serving an eclectic menu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Burgermeister&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
Oberbaumstraße 8, 10997 Berlin&amp;lt;br&amp;gt; &lt;br /&gt;
Delicious and fast burgers right at the U1 Schlesisches Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Curry 36[http://www.curry36.de/]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mehringdamm 36, 10961 Berlin Kreuzberg&amp;lt;br&amp;gt; &lt;br /&gt;
Typically Berlin fast food place serving pork sausage with curry ketchup.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Schwarzwaldstuben [http://www.schwarzwaldstuben-berlin.com/]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tucholskystraße 48, 10117 Berlin-Mitte&amp;lt;br&amp;gt;&lt;br /&gt;
Simple and tasty South German cuisine. Located in Mitte, close to Rosenthaler Platz and Hackescher Markt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Zur Gerichtslaube [http://www.gerichtslaube.de/?lang=en]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Poststraße 28 · 10178 Berlin Mitte / Nikolaiviertel&amp;lt;br&amp;gt; &lt;br /&gt;
If you would like to see traditional German restaurant and try creamy potato soup, &#039;Berliner style&#039; grilled sausage or oven-fresh apple-strudel, this place is for you!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b class=&amp;quot;p-name&amp;quot;&amp;gt;Sadhu&amp;lt;/b&amp;gt; &amp;lt;span class=&amp;quot;u-url&amp;quot;&amp;gt;https://foursquare.com/v/sadhu/4afef6f7f964a520323222e3&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt; &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;Falckensteinstr. 41&amp;lt;/span&amp;gt;, &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-postal-code&amp;quot;&amp;gt;10997&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;p-region&amp;quot;&amp;gt;Berlin&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;Wrangelkiez&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;p-note&amp;quot;&amp;gt;Excellent Indian Food! Can accommodate medium to large parties with a reservation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bars ===&lt;br /&gt;
&amp;lt;b&amp;gt;Hopfenreich[hopfenreich.de &amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sorauer Str. 31, 10997 Berlin&lt;br /&gt;
If you’re looking for a Bar with Craft Beers from Berlin, Germany and all over the world you should check this one out.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;John Muir[http://johnmuirberlin.com/]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Skalitzer Str. 51, 10997 Berlin&lt;br /&gt;
Good Cocktails and live music in the heart of Kreuzberg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://weinerei.com/forum/ Forum Wine Bar]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Fehrbelliner Straße 57, 10119 Berlin, Germany&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The Forum wine bar is super cool. You pay 2EUR when you enter and you drink as much wine as you want and eat from their small salad bar. In the end, you pay what you feel it was worth. Done!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://www.eschschloraque.de/ Eschschloraque]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Rosenthaler Straße 39, 10178 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Where all the hackers hang out. Smoker&#039;s bar. Pro-tipp: order a &amp;quot;Tschunk&amp;quot; (Caipirinha with Club-Mate). It&#039;s close to S-Bahn stop &amp;lt;i&amp;gt;Hackescher Markt&amp;lt;/i&amp;gt; in walking distance from Alexanderplatz, and easy to miss with the entrance hidden deep inside the backyard.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://www.brauhaus-lemke.com/index.php/home Brauhaus Lemke]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Dircksenstraße 143, 10178 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Very, very German and not nearly as bad as it sounds. They serve decent foods and very tasty beer from their own brewery. Pro-tipp: order a &amp;quot;Bierprobe&amp;quot;, which is a small sample of all their beers. Located right next to S-Bahn stop &amp;lt;i&amp;gt;Hackescher Markt&amp;lt;/i&amp;gt; and in walking distance from Alexanderplatz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://vagabundbrauerei.com/ Vagabund Brauerei]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Antwerpenerstr. 3, 13353 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Bar with built-in micro brewery located in district Wedding. Watch your beer in the making.&lt;br /&gt;
&lt;br /&gt;
=== Hacker / Maker Spaces ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[[Berlin Makerspace|Mozilla Makerspace]]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;[[Berlin Office|Mozilla Office Berlin]]&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mozilla&#039;s Berlin office is home to Mozilla&#039;s first dedicated maker space. Swing by if you want to learn, share or just make something.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://x-hain.de XHain]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Grünberger Str. 14, 10243 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
One of the youngest maker spaces of Berlin located near S-Bahn stop &amp;lt;i&amp;gt;Warschauer Straße&amp;lt;/i&amp;gt;. It&#039;s just a 15-minute walk from the office. The space is very active and we hear that people there are unusually friendly and welcoming.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://c-base.org/ c-base]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Rungestraße 20, 10179 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The largest hackerspace of the city located directly on the river Spree near Subway/S-Bahn station Jannowitzbrücke. It&#039;s not easy to find because it&#039;s located in the second backyard from the street. Open every day, it has regular and irregular events on most of the evenings and parties on the weekends. The included bar also sells the legendary &amp;quot;Tschunk&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://www.raumfahrtagentur.org/ Raumfahrtagentur]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Gerichtstr. 15, 13347 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Need to quickly machine your metal parts, 3D-print a case for your electronics project, or sew your pants? Or reverse-engineer your DNA in a biolab, smell the vegetables or just hang out in the hot tub of a massively green backyard garden? The &amp;quot;Space Agency&amp;quot; is one of the most well-equipped fablabs you&#039;ll find in this country, and always worth a little visit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Berlin Office Location  =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Address:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mozilla Berlin&amp;lt;br&amp;gt;&lt;br /&gt;
Gebäude 3, 4. Obergeschoss&amp;lt;br&amp;gt;&lt;br /&gt;
Schlesische Straße 27&amp;lt;br&amp;gt;&lt;br /&gt;
10997 Berlin&amp;lt;br&amp;gt;&lt;br /&gt;
Germany&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Additional Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Finding the office ([https://www.openstreetmap.org/node/4996803917 location on OpenStreetMap]): Use driveway Schlesische Str. 27 ([https://wiki.mozilla.org/images/thumb/b/b4/Moz_berlin_entrance.jpg/800px-Moz_berlin_entrance.jpg see photo]). Walk along the cobblestone path all the way to the end. We are in the white building, and the entrance is on the left side right before the path ends ([https://wiki.mozilla.org/images/thumb/a/ae/Moz_berlin_entrance1.jpg/450px-Moz_berlin_entrance1.jpg see photo]). Enter through the door marked &amp;quot;Treppenhaus C&amp;quot; ([https://wiki.mozilla.org/images/thumb/e/e5/Moz_berlin_door.jpg/450px-Moz_berlin_door.jpg see photo]), and go up to the 4th floor. The door to the office is marked by a Mozilla Berlin sticker ([https://wiki.mozilla.org/images/thumb/2/20/Moz_berlin_sticker.jpg/450px-Moz_berlin_sticker.jpg see photo]).&lt;br /&gt;
*Bikes: Our office is also bike friendly! To access the bike shed, enter through the &#039;&#039;&#039;&#039;third&#039;&#039;&#039;&#039; floor, if you don&#039;t want to use one of the many racks outside of our building. We also have a bike for guests!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;This is not a support hotline. For fast and easy support go to [http://support.mozilla.org/ Mozilla Support]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Main Office&#039;&#039;&#039;: +49 30 56795983&lt;br /&gt;
* &#039;&#039;&#039;Reception Desk&#039;&#039;&#039;: +49 30 56795986&lt;br /&gt;
* &#039;&#039;&#039;Fax&#039;&#039;&#039;: +49 30 56795987&lt;br /&gt;
&lt;br /&gt;
= Emergency Information =&lt;br /&gt;
&lt;br /&gt;
* Emergency Services: 110 (police), 112 (ambulance, fire), mobile networks also support 911&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Berlin_Office&amp;diff=1207246</id>
		<title>Berlin Office</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Berlin_Office&amp;diff=1207246"/>
		<updated>2019-02-05T14:59:16Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: Updated Oberbaumbrucke description text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Oberbaumbrucke.jpg|thumbnail|upright=1.8|right|link=|alt=Oberbaumbrücke|The Oberbaum Bridge as seen from the office, CC-ZERO nhnt11(at)gmail(dot)com]]&lt;br /&gt;
&lt;br /&gt;
= Welcome To Berlin! =&lt;br /&gt;
&lt;br /&gt;
Welcome to the Berlin office! We&#039;re glad to have you here!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Come and join us for some German beer, some Currywurst, and our fun new space...&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Need Help with a Mozilla product? ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: yellow;&amp;quot;&amp;gt;&lt;br /&gt;
For fast and easy support go to [http://support.mozilla.org/ Mozilla Support]&#039;&#039;&#039;&lt;br /&gt;
Please understand that Mozilla, as a non-profit, cannot provide phone support.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Office Logistics = &lt;br /&gt;
To access the building use the driveway to the courtyard of Schlesische Strasse 27 and go straight until the end of the area. Then enter Haus 3 entrance C on the lefthand side. You can use either stairs or the elevator to go to the 4th Floor.&lt;br /&gt;
&lt;br /&gt;
==Accessibility==&lt;br /&gt;
The building entrance door opens automatically. However, the next door needs to be opened manually. Once you pass them, there are two elevators on the righthand side. Press the button and choose 4th floor (it is where our welcome/reception area is located).&lt;br /&gt;
There is a grey door on the right when you exit the elevator on the 4th floor; they remain open. The glass door at the end of the short corridor can be opened with a badge.&lt;br /&gt;
There are two floors in the office connected by an internal stairwell. If you want to use the kitchen or event space on the 3rd floor, please take the same elevator you used to get to the 4th / reception floor.&lt;br /&gt;
There are 2 accessible toilets, one on each floor.&lt;br /&gt;
-3rd floor- On the lefthand side as you enter the event &amp;amp; community space.&lt;br /&gt;
-4th floor- On the lefthand side as you enter the reception area.&lt;br /&gt;
&lt;br /&gt;
== Rooms ==&lt;br /&gt;
* Entrance area with comfy lounge space&lt;br /&gt;
* A common space that can be extended to fit 80 people&lt;br /&gt;
* Conferencing rooms equipped for video conferencing&lt;br /&gt;
* A community space with an adjacent maker space&lt;br /&gt;
* Kitchen with a great view, serving refrigerated drinks, espresso machine, dishwasher, snack bar&lt;br /&gt;
&lt;br /&gt;
= Getting Here =&lt;br /&gt;
&lt;br /&gt;
=== Traveling to Berlin  ===&lt;br /&gt;
Berlin has two functional airports: Tegel (TXL) and Schönefeld (SXF):&lt;br /&gt;
&lt;br /&gt;
* Tegel is closer to the city center and has service from transatlantic flights (Brussels Airlines, United, Air Canada Rouge) as well as many normal-cost air carriers.  Some flights departing from terminal A allow you to get very quickly from the gate to the waiting lounge because each jetbridge has its own gate, security, and lounge.  All other terminals in Tegel take a little longer.&lt;br /&gt;
* Schönefeld is a little further from the city&#039;s center, but also has a very easy connection to the office.  Schönefeld is primarily served by low-cost air carriers (Ryanair, Easyjet).&lt;br /&gt;
&lt;br /&gt;
Berlin is also well connected by train.  The closest major station for long distance and international trains is the Ostbahnhof.  If the train does not stop at Ostbahnhof, then the Hauptbahnhof is the next best choice.&lt;br /&gt;
&lt;br /&gt;
=== Public transportation ===&lt;br /&gt;
&lt;br /&gt;
[[File:Berlin public transport logos.png|thumbnail|upright=1.6|right|link=|alt=Berlin public transport logos|Indicating the next local train (&amp;quot;S-Bahn&amp;quot;), subway (&amp;quot;U-Bahn&amp;quot;), or bus station.]]The subway (&amp;quot;U-Bahn&amp;quot;) station closest to the office is &amp;lt;b&amp;gt;Schlesisches Tor&amp;lt;/b&amp;gt;, served by &#039;&#039;&#039;subway line U1&#039;&#039;&#039; (which actually drives above the earth in this section of the line). Another great choice is S-Bahn station &#039;&#039;&#039;Warschauer Straße&#039;&#039;&#039;, from which it is a 10 to 15-minute walk to the office, or &#039;&#039;&#039;Treptower Park&#039;&#039;&#039;, from which you can take a 10-minute walk or bus 165/265 to &#039;&#039;&#039;Taborstraße&#039;&#039;&#039; right in front of the office. You can find information on the metro service and maps here: http://www.bvg.de/en/Travel-information&lt;br /&gt;
&lt;br /&gt;
* The transit authority in Berlin is [http://www.vbb.de/en/index.html VBB].  Most inner city services are operated by [http://www.bvg.de/en/ BVG] and [http://www.s-bahn-berlin.de/en S-Bahn-Berlin].&lt;br /&gt;
* There are three fare zones in Berlin: A, B, and C.  A is the inner city, bounded by the Ringbahn (S41/S42).  B is between the Ringbahn and the Brandenburg border.  C is Brandenburg.&lt;br /&gt;
* Tickets are sold as AB, BC or ABC.  An AB or BC can be extended to the third zone with the purchase of an &amp;quot;Anschlussfahrausweis&amp;quot;.  This also applies to single rides in concert with a flat rate (daily/weekly/monthly) ticket.&lt;br /&gt;
* You will almost exclusively use AB tickets.  The main exception is a trip to Schönefeld Airport (SXF), which requires zone C&lt;br /&gt;
* A ticket from BVG can be used on an S-Bahn-Berlin and vice versa&lt;br /&gt;
* A ticket from BVG/S-Bahn-Berlin can be used on regional trains within the ticketed zone.  These are trains which have a number like &amp;quot;RE1&amp;quot; or &amp;quot;RB1&amp;quot;.  They are primarily operated by DB Regio (mainly red), ODEG (grey with yellow lettering) and NEB (blue and white).&lt;br /&gt;
* A ticket from BVG/S-Bahn-Berlin &#039;&#039;&#039;cannot&#039;&#039;&#039; be used on long-distance trains, even within the ticketed zone.  Google maps sometimes suggest these routes in their transit directions.  These are trains with routes like &amp;quot;IC 500&amp;quot;, &amp;quot;EC 40&amp;quot; or &amp;quot;ICE 100&amp;quot;.  In Berlin, these are often grey with a thin horizontal red stripe (DB), light blue (PKP), dark blue (ČD) or light blue with a white stripe (MÁV)&lt;br /&gt;
* &#039;&#039;&#039;A single ride ticket is valid for two hours, but only for one direction.&#039;&#039;&#039;&lt;br /&gt;
* Berlin time-based transit tickets are valid until 3:00 AM the following day&lt;br /&gt;
* [http://www.bvg.de/en/index.php?section=downloads&amp;amp;cmd=58&amp;amp;download=399 Subway and S-Bahn train map (region ABC) (PDF)]&lt;br /&gt;
* [http://www.bvg.de/en/index.php?section=downloads&amp;amp;cmd=58&amp;amp;download=400 Subway and S-Bahn train map (city/region AB) (PDF)]&lt;br /&gt;
* [http://www.bvg.de/en/index.php?section=downloads&amp;amp;cmd=58&amp;amp;download=401 Tram map (PDF)]&lt;br /&gt;
* [http://fahrinfo.bvg.de/Fahrinfo/bin/query.bin/en/dn?ujm=1&amp;amp;MapLayer=NETWORK Interactive map]&lt;br /&gt;
* Day tickets are cheaper when taking three rides or more. Also: buying tickets in sets of 4 gives you a decent deal.&lt;br /&gt;
* Day tickets for groups up to five people are dirt-cheap.&lt;br /&gt;
* Multi-day tickets (regular ones or the &amp;quot;City/Welcome&amp;quot; variety which allow rebates in certain museums and restaurants) are not really a good deal.&lt;br /&gt;
* Every ticket machine also sells special tickets, but they&#039;re hidden in sub-menus. Keep digging!  Most support changing to English on the main screen.&lt;br /&gt;
* Remember to always validate your ticket before boarding a subway, S-Bahn or regional train. Ticket validation machines are located near the ticket machine itself and on the platforms.&lt;br /&gt;
* Most ticket machines accept coins.  Ticket machines might additionally accept a combination of credit card, banknotes &amp;lt;= 10€, any banknote and EC card (German debit cards).&lt;br /&gt;
* If the ticket machine doesn&#039;t like your coin, rub the edge against the machine and try again&lt;br /&gt;
&lt;br /&gt;
==== Smartphone Apps ====&lt;br /&gt;
Google maps give pretty good transit directions in Berlin and are available for Ios and Android.  Transit app, Here maps, and Citymapper also work well&lt;br /&gt;
&lt;br /&gt;
The single best public transportation app for Android is [https://play.google.com/store/apps/details?id=de.schildbach.oeffi&amp;amp;hl=en Öffi]. It covers all of Germany and is available for free through Google Play.&lt;br /&gt;
* Open &amp;quot;Öffi Directions&amp;quot;, choose &#039;&#039;My current location&#039;&#039; as starting point and &#039;&#039;Schlesisches Tor&#039;&#039; (U-Bahn stop close to the office) or &#039;&#039;Taborstraße&#039;&#039; (bus stop directly in front of the office) as your destination, and you should be good to go.&lt;br /&gt;
&lt;br /&gt;
There&#039;s also the BVG Fahrinfo app, which is BVG&#039;s official transit app.  This app gives really good transit directions as well as schedules.  You can also buy tickets directly from the app.&lt;br /&gt;
&lt;br /&gt;
==== From Tegel Airport TXL ====&lt;br /&gt;
* The recommended route from TXL to the office is via the S-Bahn ring. From the airport, take bus TXL to S Beusselstraße (2 stops). From there, take S41 (via Gesundbrunnen, Ostkreuz) to Treptower Park. From there the office is only 10 min walk away: go right on Puschkinallee and keep straight (it&#039;s a beautiful walk!). You can also take bus 165 (direction U Märkisches Museum) or 265 (direction U Stadtmitte ) to Taborstraße. This will leave you right in front of our office building.&lt;br /&gt;
&lt;br /&gt;
==== From Schönefeld Airport SXF ====&lt;br /&gt;
* &#039;&#039;&#039;NOTE&#039;&#039;&#039;: you will require a ticket in fare zone ABC&lt;br /&gt;
* The recommended route from SXF is via S-Bahn route S9.  From the airport, take the S9 to Treptower Park. From there the office is only 10 min walk away: go right on Puschkinallee and keep straight. You can also take bus 165 (direction U Märkisches Museum) or 265 (direction U Stadtmitte ) to Taborstraße. This will leave you right in front of our office building.&lt;br /&gt;
&lt;br /&gt;
==== From Berlin Hauptbahnhof, Ostbahnhof or Alexanderplatz train station ====&lt;br /&gt;
* The recommended route is the S5, S7 or S75.  All of these stations are on all of these routes.  From the station, take the route to Warschauer Strasse station.  From Warschauer Strasse station, either walk or take the U1 one stop to Schlesisches Tor U-Bahn.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;My Taxi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you know you need to take a lot of taxis while you are in town, we suggest downloading the [http://www.mytaxi.com/en/passengers/mytaxi-in-your-city/berlin.html MyTaxi] app. You can filter taxis by who takes card, how many people you need to pick up etc.&lt;br /&gt;
&lt;br /&gt;
* Most taxi rides within central Berlin are around 10 EUR, hardly more than 15 EUR.&lt;br /&gt;
&lt;br /&gt;
= Visiting Berlin  =&lt;br /&gt;
&lt;br /&gt;
=== Hotels ===&lt;br /&gt;
&lt;br /&gt;
;Michelberger Hotel&lt;br /&gt;
http://michelbergerhotel.com/&lt;br /&gt;
15min walk from the office. Great location, great hotel. Free yoga class on Thursdays, make their own coconut water. Delicious food (local and made from scrap) and drinks. Rooms range from &amp;quot;Cozy&amp;quot; (very tiny but beautiful and has everything you need) to a larger scale. More hipster vibe. Very different from your usual hotel. It&#039;s an experience in itself.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Hotel Johann&#039;&#039;&#039;&lt;br /&gt;
https://www.hotel-johann-berlin.de/ in Johanniterstrasse (U1 Prinzenstr). This is definitely outside of walking distance, but if you take the U1 towards Schlesisches Tor, you are close.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Hotel Vier Jahreszeiten&#039;&#039;&#039;&lt;br /&gt;
http://vj-hotels.com/ in Skalitzer Str (U1 Görlitzer Bhf). Similar as Hotel Johann, just 2 stops closer&lt;br /&gt;
&lt;br /&gt;
=== Tipping &amp;amp; Money ===&lt;br /&gt;
&lt;br /&gt;
* Local Currency: Euro&lt;br /&gt;
* It is customary in Germany to tip a little by rounding up and around 10% at restaurants for good service. Tipping in bars is not something many Europeans do.&lt;br /&gt;
* Not many places accept Credit/Debit Card. Many smaller restaurants and shops do not accept credit cards like in the US and other larger European cities.  Please be prepared to pay in cash. It&#039;s a good practice in Berlin to ask in advance of making a restaurant reservation if they accept credit cards.&lt;br /&gt;
&lt;br /&gt;
=== Things to do in Berlin ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Museums&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.computerspielemuseum.de/1210_Home.htm Computerspielemuseum] – computer games museum (see [https://en.wikipedia.org/wiki/Computerspielemuseum_Berlin Wikipedia]) in Friedrichshain&lt;br /&gt;
* [https://www.ddr-museum.de/en DDR-Museum] – an interactive museum about the German Democratic Republic (GDR) in Mitte&lt;br /&gt;
*Museum Insel [https://www.museumsinsel-berlin.de/en/buildings/overview-of-the-buildings/] - &#039;Museum Island&#039; is a unique complex of 5 significant national museums on the Spree Island. It is on the UNESCO World Heritage List.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sight Seeing&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Fernsehturm_Berlin Fernsehturm am Alexanderplatz] – best view of the city, but long waiting lines&lt;br /&gt;
* [https://www.google.com/maps/place/Oranienstraße Oranienstr. in Kreuzberg] – lots of cafes, bars, and restaurants&lt;br /&gt;
* Take one ride around the [http://en.wikipedia.org/wiki/Berlin_Ringbahn S-Bahn-Ring]. Train lines 41 or 42. A public transport ticket (region AB) is only 2.70 EUR. The full circle takes about an hour and will show you many facets of the city and you&#039;ll see people from all walks of life.&lt;br /&gt;
* [http://berliner-teufelsberg.com/web/ Teufelsberg] – the old NSA listening post&lt;br /&gt;
* [http://berliner-unterwelten.de/home.1.1.html Berliner Unterwelten] – awesome guided tours through old bunkers and other abandoned, mostly underground places.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Websites for short stays!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://fotostrasse.1982.us/what-to-do-in-berlin-mainstream-tour-guide/ 24 Hours Guide]&lt;br /&gt;
* [http://www.12hrs.net/guides/12-hrs-in-berlin-with-herbert-hofmann/ 12 Hours Guide]&lt;br /&gt;
&lt;br /&gt;
=== Restaurants ===&lt;br /&gt;
&amp;lt;!-- restaurants here need h-card markup! see Sadhu below for an example. :) -t --&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Freischwimmer[https://www.freischwimmer-berlin.com/]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
Vor dem Schlesischen Tor 2, 10997 Berlin&amp;lt;br&amp;gt; &lt;br /&gt;
Waterside dining space with wooden decking over the water, comfy rooms, serving an eclectic menu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Burgermeister&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
Oberbaumstraße 8, 10997 Berlin&amp;lt;br&amp;gt; &lt;br /&gt;
Delicious and fast burgers right at the U1 Schlesisches Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Curry 36[http://www.curry36.de/]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mehringdamm 36, 10961 Berlin Kreuzberg&amp;lt;br&amp;gt; &lt;br /&gt;
Typically Berlin fast food place serving pork sausage with curry ketchup.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Schwarzwaldstuben [http://www.schwarzwaldstuben-berlin.com/]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tucholskystraße 48, 10117 Berlin-Mitte&amp;lt;br&amp;gt;&lt;br /&gt;
Simple and tasty South German cuisine. Located in Mitte, close to Rosenthaler Platz and Hackescher Markt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Zur Gerichtslaube [http://www.gerichtslaube.de/?lang=en]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Poststraße 28 · 10178 Berlin Mitte / Nikolaiviertel&amp;lt;br&amp;gt; &lt;br /&gt;
If you would like to see traditional German restaurant and try creamy potato soup, &#039;Berliner style&#039; grilled sausage or oven-fresh apple-strudel, this place is for you!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b class=&amp;quot;p-name&amp;quot;&amp;gt;Sadhu&amp;lt;/b&amp;gt; &amp;lt;span class=&amp;quot;u-url&amp;quot;&amp;gt;https://foursquare.com/v/sadhu/4afef6f7f964a520323222e3&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt; &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;Falckensteinstr. 41&amp;lt;/span&amp;gt;, &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-postal-code&amp;quot;&amp;gt;10997&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;p-region&amp;quot;&amp;gt;Berlin&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;Wrangelkiez&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;p-note&amp;quot;&amp;gt;Excellent Indian Food! Can accommodate medium to large parties with a reservation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bars ===&lt;br /&gt;
&amp;lt;b&amp;gt;Hopfenreich[hopfenreich.de &amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sorauer Str. 31, 10997 Berlin&lt;br /&gt;
If you’re looking for a Bar with Craft Beers from Berlin, Germany and all over the world you should check this one out.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;John Muir[http://johnmuirberlin.com/]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Skalitzer Str. 51, 10997 Berlin&lt;br /&gt;
Good Cocktails and live music in the heart of Kreuzberg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://weinerei.com/forum/ Forum Wine Bar]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Fehrbelliner Straße 57, 10119 Berlin, Germany&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The Forum wine bar is super cool. You pay 2EUR when you enter and you drink as much wine as you want and eat from their small salad bar. In the end, you pay what you feel it was worth. Done!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://www.eschschloraque.de/ Eschschloraque]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Rosenthaler Straße 39, 10178 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Where all the hackers hang out. Smoker&#039;s bar. Pro-tipp: order a &amp;quot;Tschunk&amp;quot; (Caipirinha with Club-Mate). It&#039;s close to S-Bahn stop &amp;lt;i&amp;gt;Hackescher Markt&amp;lt;/i&amp;gt; in walking distance from Alexanderplatz, and easy to miss with the entrance hidden deep inside the backyard.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://www.brauhaus-lemke.com/index.php/home Brauhaus Lemke]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Dircksenstraße 143, 10178 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Very, very German and not nearly as bad as it sounds. They serve decent foods and very tasty beer from their own brewery. Pro-tipp: order a &amp;quot;Bierprobe&amp;quot;, which is a small sample of all their beers. Located right next to S-Bahn stop &amp;lt;i&amp;gt;Hackescher Markt&amp;lt;/i&amp;gt; and in walking distance from Alexanderplatz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://vagabundbrauerei.com/ Vagabund Brauerei]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Antwerpenerstr. 3, 13353 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Bar with built-in micro brewery located in district Wedding. Watch your beer in the making.&lt;br /&gt;
&lt;br /&gt;
=== Hacker / Maker Spaces ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[[Berlin Makerspace|Mozilla Makerspace]]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;[[Berlin Office|Mozilla Office Berlin]]&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mozilla&#039;s Berlin office is home to Mozilla&#039;s first dedicated maker space. Swing by if you want to learn, share or just make something.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://x-hain.de XHain]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Grünberger Str. 14, 10243 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
One of the youngest maker spaces of Berlin located near S-Bahn stop &amp;lt;i&amp;gt;Warschauer Straße&amp;lt;/i&amp;gt;. It&#039;s just a 15-minute walk from the office. The space is very active and we hear that people there are unusually friendly and welcoming.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://c-base.org/ c-base]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Rungestraße 20, 10179 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The largest hackerspace of the city located directly on the river Spree near Subway/S-Bahn station Jannowitzbrücke. It&#039;s not easy to find because it&#039;s located in the second backyard from the street. Open every day, it has regular and irregular events on most of the evenings and parties on the weekends. The included bar also sells the legendary &amp;quot;Tschunk&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://www.raumfahrtagentur.org/ Raumfahrtagentur]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Gerichtstr. 15, 13347 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Need to quickly machine your metal parts, 3D-print a case for your electronics project, or sew your pants? Or reverse-engineer your DNA in a biolab, smell the vegetables or just hang out in the hot tub of a massively green backyard garden? The &amp;quot;Space Agency&amp;quot; is one of the most well-equipped fablabs you&#039;ll find in this country, and always worth a little visit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Berlin Office Location  =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Address:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mozilla Berlin&amp;lt;br&amp;gt;&lt;br /&gt;
Gebäude 3, 4. Obergeschoss&amp;lt;br&amp;gt;&lt;br /&gt;
Schlesische Straße 27&amp;lt;br&amp;gt;&lt;br /&gt;
10997 Berlin&amp;lt;br&amp;gt;&lt;br /&gt;
Germany&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Additional Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Finding the office ([https://www.openstreetmap.org/node/4996803917 location on OpenStreetMap]): Use driveway Schlesische Str. 27 ([https://wiki.mozilla.org/images/thumb/b/b4/Moz_berlin_entrance.jpg/800px-Moz_berlin_entrance.jpg see photo]). Walk along the cobblestone path all the way to the end. We are in the white building, and the entrance is on the left side right before the path ends ([https://wiki.mozilla.org/images/thumb/a/ae/Moz_berlin_entrance1.jpg/450px-Moz_berlin_entrance1.jpg see photo]). Enter through the door marked &amp;quot;Treppenhaus C&amp;quot; ([https://wiki.mozilla.org/images/thumb/e/e5/Moz_berlin_door.jpg/450px-Moz_berlin_door.jpg see photo]), and go up to the 4th floor. The door to the office is marked by a Mozilla Berlin sticker ([https://wiki.mozilla.org/images/thumb/2/20/Moz_berlin_sticker.jpg/450px-Moz_berlin_sticker.jpg see photo]).&lt;br /&gt;
*Bikes: Our office is also bike friendly! To access the bike shed, enter through the &#039;&#039;&#039;&#039;third&#039;&#039;&#039;&#039; floor, if you don&#039;t want to use one of the many racks outside of our building. We also have a bike for guests!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;This is not a support hotline. For fast and easy support go to [http://support.mozilla.org/ Mozilla Support]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Main Office&#039;&#039;&#039;: +49 30 56795983&lt;br /&gt;
* &#039;&#039;&#039;Reception Desk&#039;&#039;&#039;: +49 30 56795986&lt;br /&gt;
* &#039;&#039;&#039;Fax&#039;&#039;&#039;: +49 30 56795987&lt;br /&gt;
&lt;br /&gt;
= Emergency Information =&lt;br /&gt;
&lt;br /&gt;
* Emergency Services: 110 (police), 112 (ambulance, fire), mobile networks also support 911&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Berlin_Office&amp;diff=1207244</id>
		<title>Berlin Office</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Berlin_Office&amp;diff=1207244"/>
		<updated>2019-02-05T14:58:34Z</updated>

		<summary type="html">&lt;p&gt;Nhnt11: Replaced TV Tower image with my photo of Oberbaumbrucke&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Oberbaumbrucke.jpg|thumbnail|upright=1.8|right|link=|alt=Oberbaumbrücke|The Oberbaum Bridge, CC-ZERO nhnt11(at)gmail(dot)com]]&lt;br /&gt;
&lt;br /&gt;
= Welcome To Berlin! =&lt;br /&gt;
&lt;br /&gt;
Welcome to the Berlin office! We&#039;re glad to have you here!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Come and join us for some German beer, some Currywurst, and our fun new space...&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Need Help with a Mozilla product? ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: yellow;&amp;quot;&amp;gt;&lt;br /&gt;
For fast and easy support go to [http://support.mozilla.org/ Mozilla Support]&#039;&#039;&#039;&lt;br /&gt;
Please understand that Mozilla, as a non-profit, cannot provide phone support.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Office Logistics = &lt;br /&gt;
To access the building use the driveway to the courtyard of Schlesische Strasse 27 and go straight until the end of the area. Then enter Haus 3 entrance C on the lefthand side. You can use either stairs or the elevator to go to the 4th Floor.&lt;br /&gt;
&lt;br /&gt;
==Accessibility==&lt;br /&gt;
The building entrance door opens automatically. However, the next door needs to be opened manually. Once you pass them, there are two elevators on the righthand side. Press the button and choose 4th floor (it is where our welcome/reception area is located).&lt;br /&gt;
There is a grey door on the right when you exit the elevator on the 4th floor; they remain open. The glass door at the end of the short corridor can be opened with a badge.&lt;br /&gt;
There are two floors in the office connected by an internal stairwell. If you want to use the kitchen or event space on the 3rd floor, please take the same elevator you used to get to the 4th / reception floor.&lt;br /&gt;
There are 2 accessible toilets, one on each floor.&lt;br /&gt;
-3rd floor- On the lefthand side as you enter the event &amp;amp; community space.&lt;br /&gt;
-4th floor- On the lefthand side as you enter the reception area.&lt;br /&gt;
&lt;br /&gt;
== Rooms ==&lt;br /&gt;
* Entrance area with comfy lounge space&lt;br /&gt;
* A common space that can be extended to fit 80 people&lt;br /&gt;
* Conferencing rooms equipped for video conferencing&lt;br /&gt;
* A community space with an adjacent maker space&lt;br /&gt;
* Kitchen with a great view, serving refrigerated drinks, espresso machine, dishwasher, snack bar&lt;br /&gt;
&lt;br /&gt;
= Getting Here =&lt;br /&gt;
&lt;br /&gt;
=== Traveling to Berlin  ===&lt;br /&gt;
Berlin has two functional airports: Tegel (TXL) and Schönefeld (SXF):&lt;br /&gt;
&lt;br /&gt;
* Tegel is closer to the city center and has service from transatlantic flights (Brussels Airlines, United, Air Canada Rouge) as well as many normal-cost air carriers.  Some flights departing from terminal A allow you to get very quickly from the gate to the waiting lounge because each jetbridge has its own gate, security, and lounge.  All other terminals in Tegel take a little longer.&lt;br /&gt;
* Schönefeld is a little further from the city&#039;s center, but also has a very easy connection to the office.  Schönefeld is primarily served by low-cost air carriers (Ryanair, Easyjet).&lt;br /&gt;
&lt;br /&gt;
Berlin is also well connected by train.  The closest major station for long distance and international trains is the Ostbahnhof.  If the train does not stop at Ostbahnhof, then the Hauptbahnhof is the next best choice.&lt;br /&gt;
&lt;br /&gt;
=== Public transportation ===&lt;br /&gt;
&lt;br /&gt;
[[File:Berlin public transport logos.png|thumbnail|upright=1.6|right|link=|alt=Berlin public transport logos|Indicating the next local train (&amp;quot;S-Bahn&amp;quot;), subway (&amp;quot;U-Bahn&amp;quot;), or bus station.]]The subway (&amp;quot;U-Bahn&amp;quot;) station closest to the office is &amp;lt;b&amp;gt;Schlesisches Tor&amp;lt;/b&amp;gt;, served by &#039;&#039;&#039;subway line U1&#039;&#039;&#039; (which actually drives above the earth in this section of the line). Another great choice is S-Bahn station &#039;&#039;&#039;Warschauer Straße&#039;&#039;&#039;, from which it is a 10 to 15-minute walk to the office, or &#039;&#039;&#039;Treptower Park&#039;&#039;&#039;, from which you can take a 10-minute walk or bus 165/265 to &#039;&#039;&#039;Taborstraße&#039;&#039;&#039; right in front of the office. You can find information on the metro service and maps here: http://www.bvg.de/en/Travel-information&lt;br /&gt;
&lt;br /&gt;
* The transit authority in Berlin is [http://www.vbb.de/en/index.html VBB].  Most inner city services are operated by [http://www.bvg.de/en/ BVG] and [http://www.s-bahn-berlin.de/en S-Bahn-Berlin].&lt;br /&gt;
* There are three fare zones in Berlin: A, B, and C.  A is the inner city, bounded by the Ringbahn (S41/S42).  B is between the Ringbahn and the Brandenburg border.  C is Brandenburg.&lt;br /&gt;
* Tickets are sold as AB, BC or ABC.  An AB or BC can be extended to the third zone with the purchase of an &amp;quot;Anschlussfahrausweis&amp;quot;.  This also applies to single rides in concert with a flat rate (daily/weekly/monthly) ticket.&lt;br /&gt;
* You will almost exclusively use AB tickets.  The main exception is a trip to Schönefeld Airport (SXF), which requires zone C&lt;br /&gt;
* A ticket from BVG can be used on an S-Bahn-Berlin and vice versa&lt;br /&gt;
* A ticket from BVG/S-Bahn-Berlin can be used on regional trains within the ticketed zone.  These are trains which have a number like &amp;quot;RE1&amp;quot; or &amp;quot;RB1&amp;quot;.  They are primarily operated by DB Regio (mainly red), ODEG (grey with yellow lettering) and NEB (blue and white).&lt;br /&gt;
* A ticket from BVG/S-Bahn-Berlin &#039;&#039;&#039;cannot&#039;&#039;&#039; be used on long-distance trains, even within the ticketed zone.  Google maps sometimes suggest these routes in their transit directions.  These are trains with routes like &amp;quot;IC 500&amp;quot;, &amp;quot;EC 40&amp;quot; or &amp;quot;ICE 100&amp;quot;.  In Berlin, these are often grey with a thin horizontal red stripe (DB), light blue (PKP), dark blue (ČD) or light blue with a white stripe (MÁV)&lt;br /&gt;
* &#039;&#039;&#039;A single ride ticket is valid for two hours, but only for one direction.&#039;&#039;&#039;&lt;br /&gt;
* Berlin time-based transit tickets are valid until 3:00 AM the following day&lt;br /&gt;
* [http://www.bvg.de/en/index.php?section=downloads&amp;amp;cmd=58&amp;amp;download=399 Subway and S-Bahn train map (region ABC) (PDF)]&lt;br /&gt;
* [http://www.bvg.de/en/index.php?section=downloads&amp;amp;cmd=58&amp;amp;download=400 Subway and S-Bahn train map (city/region AB) (PDF)]&lt;br /&gt;
* [http://www.bvg.de/en/index.php?section=downloads&amp;amp;cmd=58&amp;amp;download=401 Tram map (PDF)]&lt;br /&gt;
* [http://fahrinfo.bvg.de/Fahrinfo/bin/query.bin/en/dn?ujm=1&amp;amp;MapLayer=NETWORK Interactive map]&lt;br /&gt;
* Day tickets are cheaper when taking three rides or more. Also: buying tickets in sets of 4 gives you a decent deal.&lt;br /&gt;
* Day tickets for groups up to five people are dirt-cheap.&lt;br /&gt;
* Multi-day tickets (regular ones or the &amp;quot;City/Welcome&amp;quot; variety which allow rebates in certain museums and restaurants) are not really a good deal.&lt;br /&gt;
* Every ticket machine also sells special tickets, but they&#039;re hidden in sub-menus. Keep digging!  Most support changing to English on the main screen.&lt;br /&gt;
* Remember to always validate your ticket before boarding a subway, S-Bahn or regional train. Ticket validation machines are located near the ticket machine itself and on the platforms.&lt;br /&gt;
* Most ticket machines accept coins.  Ticket machines might additionally accept a combination of credit card, banknotes &amp;lt;= 10€, any banknote and EC card (German debit cards).&lt;br /&gt;
* If the ticket machine doesn&#039;t like your coin, rub the edge against the machine and try again&lt;br /&gt;
&lt;br /&gt;
==== Smartphone Apps ====&lt;br /&gt;
Google maps give pretty good transit directions in Berlin and are available for Ios and Android.  Transit app, Here maps, and Citymapper also work well&lt;br /&gt;
&lt;br /&gt;
The single best public transportation app for Android is [https://play.google.com/store/apps/details?id=de.schildbach.oeffi&amp;amp;hl=en Öffi]. It covers all of Germany and is available for free through Google Play.&lt;br /&gt;
* Open &amp;quot;Öffi Directions&amp;quot;, choose &#039;&#039;My current location&#039;&#039; as starting point and &#039;&#039;Schlesisches Tor&#039;&#039; (U-Bahn stop close to the office) or &#039;&#039;Taborstraße&#039;&#039; (bus stop directly in front of the office) as your destination, and you should be good to go.&lt;br /&gt;
&lt;br /&gt;
There&#039;s also the BVG Fahrinfo app, which is BVG&#039;s official transit app.  This app gives really good transit directions as well as schedules.  You can also buy tickets directly from the app.&lt;br /&gt;
&lt;br /&gt;
==== From Tegel Airport TXL ====&lt;br /&gt;
* The recommended route from TXL to the office is via the S-Bahn ring. From the airport, take bus TXL to S Beusselstraße (2 stops). From there, take S41 (via Gesundbrunnen, Ostkreuz) to Treptower Park. From there the office is only 10 min walk away: go right on Puschkinallee and keep straight (it&#039;s a beautiful walk!). You can also take bus 165 (direction U Märkisches Museum) or 265 (direction U Stadtmitte ) to Taborstraße. This will leave you right in front of our office building.&lt;br /&gt;
&lt;br /&gt;
==== From Schönefeld Airport SXF ====&lt;br /&gt;
* &#039;&#039;&#039;NOTE&#039;&#039;&#039;: you will require a ticket in fare zone ABC&lt;br /&gt;
* The recommended route from SXF is via S-Bahn route S9.  From the airport, take the S9 to Treptower Park. From there the office is only 10 min walk away: go right on Puschkinallee and keep straight. You can also take bus 165 (direction U Märkisches Museum) or 265 (direction U Stadtmitte ) to Taborstraße. This will leave you right in front of our office building.&lt;br /&gt;
&lt;br /&gt;
==== From Berlin Hauptbahnhof, Ostbahnhof or Alexanderplatz train station ====&lt;br /&gt;
* The recommended route is the S5, S7 or S75.  All of these stations are on all of these routes.  From the station, take the route to Warschauer Strasse station.  From Warschauer Strasse station, either walk or take the U1 one stop to Schlesisches Tor U-Bahn.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;My Taxi&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you know you need to take a lot of taxis while you are in town, we suggest downloading the [http://www.mytaxi.com/en/passengers/mytaxi-in-your-city/berlin.html MyTaxi] app. You can filter taxis by who takes card, how many people you need to pick up etc.&lt;br /&gt;
&lt;br /&gt;
* Most taxi rides within central Berlin are around 10 EUR, hardly more than 15 EUR.&lt;br /&gt;
&lt;br /&gt;
= Visiting Berlin  =&lt;br /&gt;
&lt;br /&gt;
=== Hotels ===&lt;br /&gt;
&lt;br /&gt;
;Michelberger Hotel&lt;br /&gt;
http://michelbergerhotel.com/&lt;br /&gt;
15min walk from the office. Great location, great hotel. Free yoga class on Thursdays, make their own coconut water. Delicious food (local and made from scrap) and drinks. Rooms range from &amp;quot;Cozy&amp;quot; (very tiny but beautiful and has everything you need) to a larger scale. More hipster vibe. Very different from your usual hotel. It&#039;s an experience in itself.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Hotel Johann&#039;&#039;&#039;&lt;br /&gt;
https://www.hotel-johann-berlin.de/ in Johanniterstrasse (U1 Prinzenstr). This is definitely outside of walking distance, but if you take the U1 towards Schlesisches Tor, you are close.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Hotel Vier Jahreszeiten&#039;&#039;&#039;&lt;br /&gt;
http://vj-hotels.com/ in Skalitzer Str (U1 Görlitzer Bhf). Similar as Hotel Johann, just 2 stops closer&lt;br /&gt;
&lt;br /&gt;
=== Tipping &amp;amp; Money ===&lt;br /&gt;
&lt;br /&gt;
* Local Currency: Euro&lt;br /&gt;
* It is customary in Germany to tip a little by rounding up and around 10% at restaurants for good service. Tipping in bars is not something many Europeans do.&lt;br /&gt;
* Not many places accept Credit/Debit Card. Many smaller restaurants and shops do not accept credit cards like in the US and other larger European cities.  Please be prepared to pay in cash. It&#039;s a good practice in Berlin to ask in advance of making a restaurant reservation if they accept credit cards.&lt;br /&gt;
&lt;br /&gt;
=== Things to do in Berlin ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Museums&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.computerspielemuseum.de/1210_Home.htm Computerspielemuseum] – computer games museum (see [https://en.wikipedia.org/wiki/Computerspielemuseum_Berlin Wikipedia]) in Friedrichshain&lt;br /&gt;
* [https://www.ddr-museum.de/en DDR-Museum] – an interactive museum about the German Democratic Republic (GDR) in Mitte&lt;br /&gt;
*Museum Insel [https://www.museumsinsel-berlin.de/en/buildings/overview-of-the-buildings/] - &#039;Museum Island&#039; is a unique complex of 5 significant national museums on the Spree Island. It is on the UNESCO World Heritage List.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sight Seeing&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Fernsehturm_Berlin Fernsehturm am Alexanderplatz] – best view of the city, but long waiting lines&lt;br /&gt;
* [https://www.google.com/maps/place/Oranienstraße Oranienstr. in Kreuzberg] – lots of cafes, bars, and restaurants&lt;br /&gt;
* Take one ride around the [http://en.wikipedia.org/wiki/Berlin_Ringbahn S-Bahn-Ring]. Train lines 41 or 42. A public transport ticket (region AB) is only 2.70 EUR. The full circle takes about an hour and will show you many facets of the city and you&#039;ll see people from all walks of life.&lt;br /&gt;
* [http://berliner-teufelsberg.com/web/ Teufelsberg] – the old NSA listening post&lt;br /&gt;
* [http://berliner-unterwelten.de/home.1.1.html Berliner Unterwelten] – awesome guided tours through old bunkers and other abandoned, mostly underground places.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Websites for short stays!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://fotostrasse.1982.us/what-to-do-in-berlin-mainstream-tour-guide/ 24 Hours Guide]&lt;br /&gt;
* [http://www.12hrs.net/guides/12-hrs-in-berlin-with-herbert-hofmann/ 12 Hours Guide]&lt;br /&gt;
&lt;br /&gt;
=== Restaurants ===&lt;br /&gt;
&amp;lt;!-- restaurants here need h-card markup! see Sadhu below for an example. :) -t --&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Freischwimmer[https://www.freischwimmer-berlin.com/]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
Vor dem Schlesischen Tor 2, 10997 Berlin&amp;lt;br&amp;gt; &lt;br /&gt;
Waterside dining space with wooden decking over the water, comfy rooms, serving an eclectic menu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Burgermeister&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
Oberbaumstraße 8, 10997 Berlin&amp;lt;br&amp;gt; &lt;br /&gt;
Delicious and fast burgers right at the U1 Schlesisches Tor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Curry 36[http://www.curry36.de/]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mehringdamm 36, 10961 Berlin Kreuzberg&amp;lt;br&amp;gt; &lt;br /&gt;
Typically Berlin fast food place serving pork sausage with curry ketchup.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Schwarzwaldstuben [http://www.schwarzwaldstuben-berlin.com/]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tucholskystraße 48, 10117 Berlin-Mitte&amp;lt;br&amp;gt;&lt;br /&gt;
Simple and tasty South German cuisine. Located in Mitte, close to Rosenthaler Platz and Hackescher Markt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Zur Gerichtslaube [http://www.gerichtslaube.de/?lang=en]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Poststraße 28 · 10178 Berlin Mitte / Nikolaiviertel&amp;lt;br&amp;gt; &lt;br /&gt;
If you would like to see traditional German restaurant and try creamy potato soup, &#039;Berliner style&#039; grilled sausage or oven-fresh apple-strudel, this place is for you!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h-card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b class=&amp;quot;p-name&amp;quot;&amp;gt;Sadhu&amp;lt;/b&amp;gt; &amp;lt;span class=&amp;quot;u-url&amp;quot;&amp;gt;https://foursquare.com/v/sadhu/4afef6f7f964a520323222e3&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt; &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-street-address&amp;quot;&amp;gt;Falckensteinstr. 41&amp;lt;/span&amp;gt;, &lt;br /&gt;
&amp;lt;span class=&amp;quot;p-postal-code&amp;quot;&amp;gt;10997&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;p-region&amp;quot;&amp;gt;Berlin&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p-locality&amp;quot;&amp;gt;Wrangelkiez&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;p-note&amp;quot;&amp;gt;Excellent Indian Food! Can accommodate medium to large parties with a reservation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bars ===&lt;br /&gt;
&amp;lt;b&amp;gt;Hopfenreich[hopfenreich.de &amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Sorauer Str. 31, 10997 Berlin&lt;br /&gt;
If you’re looking for a Bar with Craft Beers from Berlin, Germany and all over the world you should check this one out.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;John Muir[http://johnmuirberlin.com/]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Skalitzer Str. 51, 10997 Berlin&lt;br /&gt;
Good Cocktails and live music in the heart of Kreuzberg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://weinerei.com/forum/ Forum Wine Bar]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Fehrbelliner Straße 57, 10119 Berlin, Germany&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The Forum wine bar is super cool. You pay 2EUR when you enter and you drink as much wine as you want and eat from their small salad bar. In the end, you pay what you feel it was worth. Done!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://www.eschschloraque.de/ Eschschloraque]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Rosenthaler Straße 39, 10178 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Where all the hackers hang out. Smoker&#039;s bar. Pro-tipp: order a &amp;quot;Tschunk&amp;quot; (Caipirinha with Club-Mate). It&#039;s close to S-Bahn stop &amp;lt;i&amp;gt;Hackescher Markt&amp;lt;/i&amp;gt; in walking distance from Alexanderplatz, and easy to miss with the entrance hidden deep inside the backyard.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://www.brauhaus-lemke.com/index.php/home Brauhaus Lemke]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Dircksenstraße 143, 10178 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Very, very German and not nearly as bad as it sounds. They serve decent foods and very tasty beer from their own brewery. Pro-tipp: order a &amp;quot;Bierprobe&amp;quot;, which is a small sample of all their beers. Located right next to S-Bahn stop &amp;lt;i&amp;gt;Hackescher Markt&amp;lt;/i&amp;gt; and in walking distance from Alexanderplatz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://vagabundbrauerei.com/ Vagabund Brauerei]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Antwerpenerstr. 3, 13353 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Bar with built-in micro brewery located in district Wedding. Watch your beer in the making.&lt;br /&gt;
&lt;br /&gt;
=== Hacker / Maker Spaces ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[[Berlin Makerspace|Mozilla Makerspace]]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;[[Berlin Office|Mozilla Office Berlin]]&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mozilla&#039;s Berlin office is home to Mozilla&#039;s first dedicated maker space. Swing by if you want to learn, share or just make something.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://x-hain.de XHain]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Grünberger Str. 14, 10243 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
One of the youngest maker spaces of Berlin located near S-Bahn stop &amp;lt;i&amp;gt;Warschauer Straße&amp;lt;/i&amp;gt;. It&#039;s just a 15-minute walk from the office. The space is very active and we hear that people there are unusually friendly and welcoming.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://c-base.org/ c-base]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Rungestraße 20, 10179 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The largest hackerspace of the city located directly on the river Spree near Subway/S-Bahn station Jannowitzbrücke. It&#039;s not easy to find because it&#039;s located in the second backyard from the street. Open every day, it has regular and irregular events on most of the evenings and parties on the weekends. The included bar also sells the legendary &amp;quot;Tschunk&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;[http://www.raumfahrtagentur.org/ Raumfahrtagentur]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Gerichtstr. 15, 13347 Berlin&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Need to quickly machine your metal parts, 3D-print a case for your electronics project, or sew your pants? Or reverse-engineer your DNA in a biolab, smell the vegetables or just hang out in the hot tub of a massively green backyard garden? The &amp;quot;Space Agency&amp;quot; is one of the most well-equipped fablabs you&#039;ll find in this country, and always worth a little visit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Berlin Office Location  =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Address:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Mozilla Berlin&amp;lt;br&amp;gt;&lt;br /&gt;
Gebäude 3, 4. Obergeschoss&amp;lt;br&amp;gt;&lt;br /&gt;
Schlesische Straße 27&amp;lt;br&amp;gt;&lt;br /&gt;
10997 Berlin&amp;lt;br&amp;gt;&lt;br /&gt;
Germany&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Additional Information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Finding the office ([https://www.openstreetmap.org/node/4996803917 location on OpenStreetMap]): Use driveway Schlesische Str. 27 ([https://wiki.mozilla.org/images/thumb/b/b4/Moz_berlin_entrance.jpg/800px-Moz_berlin_entrance.jpg see photo]). Walk along the cobblestone path all the way to the end. We are in the white building, and the entrance is on the left side right before the path ends ([https://wiki.mozilla.org/images/thumb/a/ae/Moz_berlin_entrance1.jpg/450px-Moz_berlin_entrance1.jpg see photo]). Enter through the door marked &amp;quot;Treppenhaus C&amp;quot; ([https://wiki.mozilla.org/images/thumb/e/e5/Moz_berlin_door.jpg/450px-Moz_berlin_door.jpg see photo]), and go up to the 4th floor. The door to the office is marked by a Mozilla Berlin sticker ([https://wiki.mozilla.org/images/thumb/2/20/Moz_berlin_sticker.jpg/450px-Moz_berlin_sticker.jpg see photo]).&lt;br /&gt;
*Bikes: Our office is also bike friendly! To access the bike shed, enter through the &#039;&#039;&#039;&#039;third&#039;&#039;&#039;&#039; floor, if you don&#039;t want to use one of the many racks outside of our building. We also have a bike for guests!&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;This is not a support hotline. For fast and easy support go to [http://support.mozilla.org/ Mozilla Support]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Main Office&#039;&#039;&#039;: +49 30 56795983&lt;br /&gt;
* &#039;&#039;&#039;Reception Desk&#039;&#039;&#039;: +49 30 56795986&lt;br /&gt;
* &#039;&#039;&#039;Fax&#039;&#039;&#039;: +49 30 56795987&lt;br /&gt;
&lt;br /&gt;
= Emergency Information =&lt;br /&gt;
&lt;br /&gt;
* Emergency Services: 110 (police), 112 (ambulance, fire), mobile networks also support 911&lt;/div&gt;</summary>
		<author><name>Nhnt11</name></author>
	</entry>
</feed>