Merge inbound to mozilla-central. a=merge
authorshindli <shindli@mozilla.com>
Tue, 09 Oct 2018 12:27:34 +0300
changeset 488468 a9616aaeff87448588d57c295e16eb4caec420fb
parent 488467 a3a767ad55fbf01762d41f7e8bff91188e736daf (current diff)
parent 488460 f25bc716b4cd5a813536b7d469661f33aa004310 (diff)
child 488469 6e54a90860e7f94d2f84543bc5cc3812dfc12eee
child 488562 a2fc465a0dd88db35a108be38898c7637d935efe
push id246
push userfmarier@mozilla.com
push dateSat, 13 Oct 2018 00:15:40 +0000
reviewersmerge
milestone64.0a1
Merge inbound to mozilla-central. a=merge
dom/tests/mochitest/bugs/test_bug351601.html
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -6,16 +6,18 @@ const XULNS = "http://www.mozilla.org/ke
 
 ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
 ChromeUtils.import("resource://gre/modules/Services.jsm");
 ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
 
 ChromeUtils.defineModuleGetter(this, "ActorManagerParent",
                                "resource://gre/modules/ActorManagerParent.jsm");
 
+const PREF_PDFJS_ENABLED_CACHE_STATE = "pdfjs.enabledCache.state";
+
 let ACTORS = {
   AboutReader: {
     child: {
       module: "resource:///actors/AboutReaderChild.jsm",
       group: "browsers",
       events: {
         "AboutReaderContentLoaded": {wantUntrusted: true},
         "DOMContentLoaded": {},
@@ -988,17 +990,23 @@ BrowserGlue.prototype = {
     os.removeObserver(this, "shield-init-complete");
   },
 
   // runs on startup, before the first command line handler is invoked
   // (i.e. before the first window is opened)
   _beforeUIStartup: function BG__beforeUIStartup() {
     SessionStartup.init();
 
-    PdfJs.earlyInit();
+    if (Services.prefs.prefHasUserValue(PREF_PDFJS_ENABLED_CACHE_STATE)) {
+      Services.ppmm.sharedData.set(
+        "pdfjs.enabled",
+        Services.prefs.getBoolPref(PREF_PDFJS_ENABLED_CACHE_STATE));
+    } else {
+      PdfJs.earlyInit();
+    }
 
     // check if we're in safe mode
     if (Services.appinfo.inSafeMode) {
       Services.ww.openWindow(null, "chrome://browser/content/safeMode.xul",
                              "_blank", "chrome,centerscreen,modal,resizable=no", null);
     }
 
     // apply distribution customizations
--- a/browser/components/resistfingerprinting/test/browser/browser_navigator.js
+++ b/browser/components/resistfingerprinting/test/browser/browser_navigator.js
@@ -38,17 +38,16 @@ const SPOOFED_OSCPU = {
 };
 const SPOOFED_UA_OS = {
   linux: "X11; Linux x86_64",
   win: "Windows NT 6.1; Win64; x64",
   macosx: "Macintosh; Intel Mac OS X 10.13",
   android: "Android 6.0; Mobile",
   other: "X11; Linux x86_64",
 };
-const SPOOFED_BUILDID        = "20100101";
 const SPOOFED_HW_CONCURRENCY = 2;
 
 const CONST_APPCODENAME = "Mozilla";
 const CONST_PRODUCT     = "Gecko";
 const CONST_PRODUCTSUB  = "20100101";
 const CONST_VENDOR      = "";
 const CONST_VENDORSUB   = "";
 
@@ -65,17 +64,16 @@ async function testNavigator() {
 
   is(result.appName, SPOOFED_APPNAME, "Navigator.appName is correctly spoofed.");
   is(result.appVersion, SPOOFED_APPVERSION[AppConstants.platform], "Navigator.appVersion is correctly spoofed.");
   is(result.platform, SPOOFED_PLATFORM[AppConstants.platform], "Navigator.platform is correctly spoofed.");
   is(result.userAgent, spoofedUserAgent, "Navigator.userAgent is correctly spoofed.");
   is(result.mimeTypesLength, 0, "Navigator.mimeTypes has a length of 0.");
   is(result.pluginsLength, 0, "Navigator.plugins has a length of 0.");
   is(result.oscpu, SPOOFED_OSCPU[AppConstants.platform], "Navigator.oscpu is correctly spoofed.");
-  is(result.buildID, SPOOFED_BUILDID, "Navigator.buildID is correctly spoofed.");
   is(result.hardwareConcurrency, SPOOFED_HW_CONCURRENCY, "Navigator.hardwareConcurrency is correctly spoofed.");
 
   is(result.appCodeName, CONST_APPCODENAME, "Navigator.appCodeName reports correct constant value.");
   is(result.product, CONST_PRODUCT, "Navigator.product reports correct constant value.");
   is(result.productSub, CONST_PRODUCTSUB, "Navigator.productSub reports correct constant value.");
   is(result.vendor, CONST_VENDOR, "Navigator.vendor reports correct constant value.");
   is(result.vendorSub, CONST_VENDORSUB, "Navigator.vendorSub reports correct constant value.");
 
@@ -135,16 +133,15 @@ add_task(async function runWorkerNavigat
 add_task(async function runOverrideTest() {
   await SpecialPowers.pushPrefEnv({"set":
     [
       ["general.appname.override", "appName overridden"],
       ["general.appversion.override", "appVersion overridden"],
       ["general.platform.override", "platform overridden"],
       ["general.useragent.override", "userAgent overridden"],
       ["general.oscpu.override", "oscpu overridden"],
-      ["general.buildID.override", "buildID overridden"],
     ],
   });
 
   await testNavigator();
 
   await testWorkerNavigator();
 });
--- a/browser/components/resistfingerprinting/test/browser/file_navigator.html
+++ b/browser/components/resistfingerprinting/test/browser/file_navigator.html
@@ -15,17 +15,16 @@
     result.userAgent = navigator.userAgent;
     result.product = navigator.product;
     result.productSub = navigator.productSub;
     result.vendor = navigator.vendor;
     result.vendorSub = navigator.vendorSub;
     result.mimeTypesLength = navigator.mimeTypes.length;
     result.pluginsLength = navigator.plugins.length;
     result.oscpu = navigator.oscpu;
-    result.buildID = navigator.buildID;
     result.hardwareConcurrency = navigator.hardwareConcurrency;
 
     // eslint-disable-next-line no-unsanitized/property
     document.getElementById("result").innerHTML = JSON.stringify(result);
   }
 </script>
 </head>
 <body onload="collect();">
--- a/browser/extensions/pdfjs/content/PdfJs.jsm
+++ b/browser/extensions/pdfjs/content/PdfJs.jsm
@@ -103,16 +103,18 @@ var PdfJs = {
     }
     PdfjsChromeUtils.init();
     this.initPrefs();
 
     Services.ppmm.sharedData.set("pdfjs.enabled", this.checkEnabled());
   },
 
   earlyInit() {
+    // Note: Please keep this in sync with the duplicated logic in
+    // nsBrowserGlue.js.
     Services.ppmm.sharedData.set("pdfjs.enabled", this.checkEnabled());
   },
 
   initPrefs: function initPrefs() {
     if (this._initialized) {
       return;
     }
     this._initialized = true;
index dff0b7ef1e7c815d0568d95ad919ebe7b449df1a..67e2880c69cee3634627cd5d218982610fe9a7e4
GIT binary patch
literal 229376
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
z(~34!@0|ML)f;bETshOdkNKXnXAid6F$NC#5Ttux?Ax`}jQG2C(@YOdn-QVSma!XL
z_Lz~G@^KUU?VD4qhVIj5o~=K_@*Y~;hueSK^P~q#Q48;t5FgOu1#7x!%qpoMG8Z-a
z?>SUqJbc!G6D;3J4CbU^hDN;~oTnsjxMfjzG{pSaz5aP?4<A-i;LKk*!D5ZK>#PJ5
z>O<2z(;{?M%`pl0GS6e)nLg)p_mB?{PVarnrbik~jf`1aGkAl}ovKswn9IU$e>5#i
z6PRlW?h)M!L-JL&j}#mwo;)@$G;I55*Mj*0X1!nYoJY&QvOOu=cjq>W$K>rQ#6z#-
zUfsMtA3OUxKVtpT>CtZVS47)kD_DXPz7swZ-V<IGo)I1q)(WeH8-x|Yg~D0FNx}l*
zDB(z9k}yU%NZ3~xAnYb23+;tOp`K7xC?jYVyb?ST+!S0892e9Jb_q5MR-=mp00000
z00000000000000000000000000000000000000000000000000000000000000000
z00000000000000000000000000Pz1#o*<1^@oJH>6(x{Do{cEsoJqD8B^(m+tR#ui
zmZF4BGr>ZVkTMq~EbG#Vk_6vOlpuzWF_k0=OhgIedRt>j!p2CHFvvY@C`lYL5G8a~
zl=USEB|T9>vpz;wk{F>QN~jeWYfBPFTB3w<)GJL%;-!Wtp`f9!E=lOAi4rmk)m0@4
zH5E}pYNVX9Bq6JWC6qt+s8Ez7mMe%7A5YcDOA@=~M2UB6n`9-4*D|6+Q?ib<B%w_Z
zC0^<*my#n$E1-#Gif9kpaw#~j54Rhal2MS6$jjwXxm0doMvn}g%ng|Z>C*i3yn5a|
z;S`~XV70(2_dsrBw%({^qg=E0X7$g!nyHadmcBHd#HaIKai4K>bJ*GAJNuXc00000
z00000000000000000000000000000000000000000000000000000000000000000
z000000000000000005m!nt;RGViOx|Vr@j|ibr%vT8M@$AyS&4tQg5kVX-q<M1Nna
zzsR#3DV;~dBgrH?#72~<Wj2tWn#Sf(Iax%1I)}$dV8l~-bfPbxm&E2Ucv&QUL>DWm
zsHN7IJ&M6(Qi%iUTpoj!NU}mKupA{Vqc9FTfx)B`d-EAII*r&rjmJo3jH2=wY?j3z
zU!(b7w4eAFd1g+8Xgp%`WhDe<BVQ(u&S7C2H;}{U^3e5s-AL14DQxn``@r~*uhHmN
zI>hi-3LE_Kw&?%yHR{<B2I3J55)m;KcZeRB&P;ITG7?#InhQOXnwrL>yTr3ob$_;?
z&R-nq+JBL!^~c+;`N!9&@hgX)`mYpL`{Qj<{o`v?`QvL;{^M&@`r~U<{Nrm>$fHRY
zgy509D<maE0V^-7B^4R*<&C_Sl)o=Y7tzMv$Z4tcW%F4)DuYEF#Gq%8ED>|@x(&aq
z+nE?Rh)AQy@e_$WbTiOULNY;&#G9cVL67HS+e{2(B{EoaItSZI3gRYisWVzrvgt%S
zbS>CfmBHrllCtd4#dKj&Q|aFHbZ2a_&hb=|6XGDN;7}M;_*Mn4fY&vNPoi>|R34S(
z!xJy$+c+ryKha9LKYsMc{_!=+{P8tP|M4{v{`eZD($F<3{Lx5<-p$x%XXAv2g-eAa
z1%-kE0wni&?(W<fxt!d9T*I6bIYV=dvma#FWY5UW5V#9hWbey0%blA&H#a!9PMDtk
zL@-!*JjXn@Dd%j?2*JeciP;6{;s5{u00000000000000000000000000000000000
z00000000000000000000000000000000000000000000000000000000QgmM1Wo)h
zT$HWkr;X&NwKM^Tx3VFG;SnOq6fqY49dKnG$=|4_)4u&n^Ojgy3rj)>9x)*qAqL{I
zn%pERiBA8vpgC5M=t79aBX%Sk#7bPy<m*D6>6vK^PTPf>VRcMB2pl{@B6UHW#dT~L
ztav7$MtA1&<7n(uDucy!Nn@~B3|8W|l})h9#((?|s2gFcH4Ko>Q^X_Qq;80pc%#X2
zRGLf28}3ZYVo_5W@!vMU09%s26`>CvF(nxzhT;WjwbM^}SV>(w!azJ?K_Vii;*xq?
zIy1qU%SdFkEv<u<);1z^#UnZ-Ekr|HS}~H9!eVEzi2lA>SOHCILO(oWMlwN+#09j`
zeM)wxwB4&3SW$H+LNp$+`O-fGWg}lEkIrFX{W?&*cU${c4XdHrm5_-?+(={u5!bMf
z<0rb2T)hx4mrRzkb5bTXIWCEwNT!Z*r7}gck~68yG#WEa1*@-YOz4hBbV=HXrntV+
zH`}Cyl~DZQNXy8`aEYU`Qb<@CocJBhIgy`*y;s2M$mh|d3(x~O?+Qr?QNXInYDq;#
ze0d|UCFSo+(nYkfH*#7kec9;2i|$0?AO<~yWQmxI4;#ZThmA8aa1fD3M_WeZp+^wf
zv0pk<NlQC|9?!?RgBZw4WU%OT4t9W15I6Bb>WtQu9CbuH$tjY-=J1lT?9s(^K@SzW
zH$B}MTdZ?DmE?pt$SOD#1{J<l!7Jc(P2!WN943`VW%=;L3;A}J$ze^E{b83$4nXI2
z&LkPEhO{}M7alPp86bM%8tQ%7@ktC(%i@^~I*UiZib)}a1O>#AWRKX2n?ejuO+_2X
z;xV&`0SvC>Y)6}oy?AI3D58PLR-la&x(fRWwg@*0bA@vRr-k>0Ck0D|iGurr5TTBs
zP|zZ96C?<)3l9lb38x78!Wdzo&{3!&cq6zjI3idpC=mz*BLsc|CxMl~7+o9y00000
z00000000000000000000000000000000000000000000000000000000000000000
z0000000000000000000000000{8x}8XyTXQqHHBUZ6rUfB|oiH2&Q;GOY*nmEhTd;
zv<MD(ZW5IgLub*@7xu^H%_Vt6Jp#G429-slXQnYYbefqY-&C96gy-_8JVtyNgT-R7
z68)$&6G^7A0zns_mdK8$8cF6D>JVJ;v@8}i_1p3Wl3aZyf+1eA0zJt*T~z`R&!saH
zxQs*=ou(t1t&Pp*vr<^>3|34$RZB8k6I(vo6tX+zo5pBJa@92mHh3zNN9VAp=!DJY
zsY!BFv79)5q8rK83-OAlb9gF}9A&J_&^B=CoOC)zNitUvD^KUfQ`6{F9*-KILQ;_A
z$ZHbp@bq*B3td4foyI^{Bqzy|)g>U`HNH2SO_PyiOJi$FWydEmcyun0Aek$rPoO9;
zQd1c$v@Oi67#f2s*%^xH{<h7Xj}zV&?iW@F#|u-0eT7|w8iH4Xvx04cd4g=ga6wOj
zxqy&+SEwr(EeObM5Iztd7OoMd2?q$>1n&fw1l59tf;fSVKtA_T?j~U|x;Ov;00000
z00000000000000000000000000000000000000000000000000000000000000000
z000000000000000000000002^f22=v!_Np=cv4?QdF8B>3l*yCXW#J-mpN^VW#nX6
z_ZTzV`gwJQ(79LA%_R5L8ys!03`%0zuG$BL=B7LY{L|tI)>raWVy&eKIJ{Ly)hw}G
zi;i;5v0P$Dxn@|dX-Dfd!E%i|s%wPh8g^9I0L#_ysIDHCtJ_ho4wkFkQLYx2tJzVm
z29~Sd(N?KpxvCx2Rl#zVJIYnUauqwuRlsuPJKE=RSgveGb!D(z>5g&<Sgw>F!A+sP
G-2Vd}T)Mpg
index daedff91f957b276dba44e71e4ae4ecf232fb223..331c32787b5ebc3943fd487276e05d3e23a77c7c
GIT binary patch
literal 294912
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
zmo|wC)t`=<*cmrXQ~xV>mv93E3)Uj4Z@R+pt-rnWhyXdSXz;7mRQ5mz8=lj+g+sOs
zVK*Xc+pAwM_<FfXf1eGObYo96s+6R&XedFY<`q}=+3}A1B^yS>A$)Y(<d{+<inf;X
z4WA$J&p2OGQosLD1zjZ{9eFk4GxDVLE{TJ_KiVT1yj_o5U12b=9s029#&N(#VS3}>
z|3AIi$;dV}{qG*R0RR91@PEbT^*4(6cVzKP@iXi10000000000000000000000000
z00000000000000000000000000000000000000000000000000000000000000000
z00000004mhhtW__A{f-x5EL6LsFYChO%#;04APNuo7Zoph@T^iUx{B_e+K{n00000
z00000000000000000000000000000000000000000000000000000000000000000
z0000000000000000000000000{0~7%L586Cxge*YAfw$J|D22>&X6q5Fy1XL_WyP^
z00000000000000000000000000000000000000000000000000000000000000000
z0000000000000000000000000000000QhfCnIeQ1B_}6~lBTAxr=*}4!v?tfg?V74
zL&MxW0{zk0fKZtrY(M}uz)J=biS`fj!^pS?`r|z)51JuR_*ZgtDB7P}QnQlV+x~HZ
zhLv1jSB?Y4_VdCfRtAf}umIfpt^^&hm<Tyxl+e%XH?#6s1V&^1{Lq5Zf`$%)9vHVU
zFF_n86eqa8F&~Qe=bh+S*=#ZHVIf#tl%QdN7d8Nc30aRKr;JkE$jd6dzNOvzHtSak
zim!i^kg!l(L|_QcJ4#}GH?jd}e~cC;T>9s3rQOkTQYcAkTFDfXltl&vErNs3-5VX^
zhsL1;ba20R^6#G{MKC4a1A+396Gw^t`e*`n82_Na5OheCpgtx9hxNp|qj4BP-7uVY
z;LnV5TqurTpBvL3pWDB}$%&wlzdj*etB^oXtRF_uI1KB7@ete<gv0t{qtQ5QU;z30
zBO*oWL$^78hKwTq4q1G6{M+?+0000000000000000000000000000000000000000
z0000000000000000000000000000000000000000000000000000000006*$L#z~1
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
bEwbQR%7klfL|I{-a*U>~ZmwxTm)G$(=O^MO
index 124d04377341d01a30d7cdac4822937e2f310de3..2736d6130b186127f6d3a6762bb1dfda49c9b261
GIT binary patch
literal 2448
zc$`&~c{~(~7RSeI7`u#U7zPz(nF&$GzK61my=xguD2<SHY(uu}u4Tr=*puxNHyJXP
zvR_;7Q<jL7DSNhTulxDD_wKuYoX`23?>Xns?+;C4PXV%k&?I(CDEp;&qxd~87FHG-
ziCq^=V%PkM)zBo+$log{jRa!+L~TG8z|YqFe@|!;DC|E2CkqtK4Q8urI(m{;Z2|xS
z*#OZbP@*Hm^pk1d#J~n!=@^Ugbc)Iyo4f!zDP$buht5f+A?}c07r+=?il^&#6JQ0R
z>B&6e3S4md#WVM0){nRg>v2(J=8zyhxsj2ZYHK)uev9U|0<4H#epQpTL+oQTJMk78
zB*}&NganM-mc;ok`F*Wg-MAFP!&hq8iR`a3OdlM-RJXt&ki6G#Woy_kV+KP)82_3?
z%wee|xl7+{s5^ukW9{@RB!|9~c=8x5z^5Y-)q(1+eG{akSu8TVH~rXZr?wENYvkmg
z1`#(ECp_`Xa>X4`l|TPhx!udrz=KR-S^KS{0e-88vW=xY|IwKg;4W9|-}y@>Rgl~I
z!VD9pY4LbdtlYvcxN1tEv0jy8b^9%Ix<zjGhl0Fo)y(?4=8}U5kpOmIk^U8%?41u^
zp5Hx2$+`B9dyXeaT13(lh+7W7Zl-E=(i<CW+n2Igqn;G`467vZ`}9i&xJ-aWPdl$P
z>Q~WF5$Oc4c%AJM2k|rCGq$9wJ=99VJ2tR9wOt^2AprK#!5uQkPQsTY)Vpi-ux_^R
zhNfS8V#*PVl*G9}tOp2X$Tgd!O6NWDGRIX-*y5L4_6n{)1}AHjR}3^>rB9+Nf00^<
zt!6t^N;m#$U^{Y^i!I)yLvEi5F476rL7E=PB-oS&vT)Jm+O2gSK&O)h{^fr7f+Z8D
zHU3`EgARm-V^@9h+PAHH7tw!2lzD282|gUlZ?h&8iC^HrOq>BG_zO6tK|`{-S?~M!
z`3@JP$0_Qlikh%-+MN&2@WDhyJ|}$$-Wrfj3dr1j-KgM{_6bxVfd{(WOExyP=b2BW
z8rSH__UzVonZ!p|avm4d1#4}0YD<HhVPqkX(BMp#dkc1_!g{%=$g;TJGfFL3xSQ@7
zwiLKc*^sTEmK7A~Gc$ljo$zNVVixNIF;#<;hF!jwEsu@1G<>L#eQV6f8m-GXp&%(J
z00qIz@&-*wg{;ZQd&FjrjDm7W{cXLTI~Dh?2v+J8M0LU`3DJEs^l#4VWyUxwUJE4?
zWg8=P!mhlzprpTkF2hvxP^e3lYpJ4L{R4z8->lg5QK>oN_vgLw=B>+$!YgVew^e8#
z{RY~hP*<1NQ&uxC@O;&xo3&G%-(Obrg~rOzLOod=Tke%~gxEZ_@Z7X&8XUfy@Kq#Z
z#5*R%2*(P)b>`fmM%>ZVD*@H4i?wJH#Qh((L#)9hh{aEA_Opzk9RJlA#sZ{~z-wp{
znE4O8L4Vl|>I50e66;+4vKveS_kEr5<#Ci<%(+9Bvwyed{5|%#3|S0YQorVtd=^>^
zPd#}%vx`I<j0k3B*5tQx`<D4x#$If65!&GY+O5ag=Epdw2~SMVs)%XmDWyiy6R+<|
zrKP;E)G%?NxwVX1?J9>haPUH@Ge+(kmmJmBgd-iRh<fcGU?`V#u66Hy`D)hm@`#(#
zo0d5HoT)r)zD_f%U!A90l0!{g-k&FJ$m?fcN{i;KwUITk#lNBlB5QC&%`FmKhM;nQ
z$9h|Q&Y;i6pExM>JUb~|S;EzZwN~-`;CM+Aqs?j%irZMaZ(4*s2Wn>D+VsqqX4IdS
zXct%)^%@kfx=8SCaW;S8UXdEQs{pBc<+{ceq}-AEBlI!IvQ+-HT&}aXQ&p*EiKl`n
zXRARAB%)ztj$)>Nx$muo+w?2*Q0JijL~{%;M?<}rkgw$Qo<lBo8S|OCvz&~zNAMg)
zsxAjm11Rg~$k=tBc<hgv#nUF!CJlVYMX^Hx8lv|R^LN7(Xg=G!lzAJF@ZxncGrFgl
zktq>QI)}JaCZ;FxLfPhGetcNZ-NEn^mBXFiLT`#WO@0~NHu=V*NI>1=3*y-(!@>$O
zf-6)hm^$~X;)e}#V;nKl0Db{w+o$&S<Gk(99$>b8)wIi1LB;0$ri-ff@qObLzZ{zV
z`f)I)AD*+08hR5)MabUabKE2%v(1i{2H!04<3Hi1TVt(P6-0~tuAuTYfQ$v^4Xke5
zs`twvj|-^^(c7b8mdQ-h$qn4u;a<$HPQV~qM{_hPiC66x&RSf1qdH;J%7fOfGhMxz
zqB)PzH9EGV%1VOmUMKUI2v0&Y)x6xB_J$38S2DO;H_zYhZdo4vm?wl4Vhc*!Np;qb
zihY|p+{#ZqTc)w|CvgR))%0ZWi>%82^8FX#qvs2YVcMUX4ziU?I+vcN9=x${gV#RH
znTOu9I|*DqfpkrF^AeRb!jSKlFz?CHUXo)ov;J0rbHZi2iqd}=#HQ#pMK0FpU)l0g
z9>arqh9K0^aL-Bp#^xnL7tx-P&SXhBZh?W8UVhwD5xjaBvCw*w;P0SA93dY`etMQz
zxQ>X_teCFw)W+V7Z(?d-=Cs7`{y6(+;Ze^!t?1FWiakY(!ai4|iVy;eO?%lbpC;tp
z5BH@xDV}F?mGBZo*YG9xu<c>w!*3L$m-;>Ca=#~%XMHJqHzR$yz7;;t>Sm$be<h-#
zcZW~9QddHxoNRP)<)ia?vX7a_o+GL<J9psGB3|ZQ{Hcv1!kk{ymA#*6^yE@0L3$1{
zn(~=>+m^|+>a&)4pU7J&uXin%_gos$-a575b1beX4Co!!533LxG3f&wd$eBMPtA+4
zP+y*@@5Xqvs`5X1=$w6;=oiqj=k&THwBvg(?vOdo9vZ@{S!iw;*&pHrNxK=yLog+t
z9iv+x$m)Fn+BDZRj6b4Lhb(XOBp_H%Bk4BB+XKDTdCfVk!A|EuY$+5nvi5gZBtpha
zDcIp!MNh@%$^&>bM<^eV4M<*<?0--yOWNqYCAhKjM{xQ$L&)_q9dW>~f3+QK6w~W!
zY6|7x#e0b{ZL>D5BA)i)W2e+5l$8tNP8ADM0V0{Ss+I>j#^pG^<uL8{H+1_kMrhRk
z(ve*NBY@-w_yPz3H-Hzw8xRQa00aO6(UO0kz%hbgfg&4>kXR-7I{~G~iiur~c*aNN
zM`O?^G&>Y>nHvN=2LXTurb2u5;CWcB)T3lqd?LurqemtN%oa_#es?8ztn;rR{WteK
BZbtwB
--- a/build/pgo/server-locations.txt
+++ b/build/pgo/server-locations.txt
@@ -255,21 +255,16 @@ https://xn--lve-6lad.w3c-test.org:443
 http://test.w3.org:80
 
 # Hosts for testing TLD-based fallback encoding
 http://example.tw:80                privileged
 http://example.cn:80                privileged
 http://example.co.jp:80             privileged
 http://example.fi:80                privileged
 
-# Hosts for testing marketplace apps installations
-https://marketplace.firefox.com:443       privileged
-https://marketplace-dev.allizom.org:443   privileged
-https://marketplace.allizom.org:443       privileged
-
 # Host for HPKP
 https://include-subdomains.pinning-dynamic.example.com:443        privileged,cert=dynamicPinningGood
 https://bad.include-subdomains.pinning-dynamic.example.com:443    privileged,cert=dynamicPinningBad
 
 # Host for static pin tests
 https://badchain.include-subdomains.pinning.example.com:443       privileged,cert=staticPinningBad
 https://fail-handshake.example.com:443                            privileged,failHandshake
 
@@ -286,8 +281,11 @@ https://rc4.example.com:443         priv
 https://ssl3rc4.example.com:443     privileged,ssl3,rc4
 https://tls1.example.com:443        privileged,tls1
 
 # Hosts for youtube rewrite tests
 https://mochitest.youtube.com:443
 
 # Host for U2F localhost tests
 https://localhost:443
+
+# Host for testing APIs whitelisted for mozilla.org
+https://www.mozilla.org:443
--- a/dom/base/Navigator.cpp
+++ b/dom/base/Navigator.cpp
@@ -451,18 +451,18 @@ void
 Navigator::GetProduct(nsAString& aProduct)
 {
   aProduct.AssignLiteral("Gecko");
 }
 
 void
 Navigator::GetProductSub(nsAString& aProductSub)
 {
-  // Legacy build ID hardcoded for backward compatibility (bug 776376)
-  aProductSub.AssignLiteral(LEGACY_BUILD_ID);
+  // Legacy build date hardcoded for backward compatibility (bug 776376)
+  aProductSub.AssignLiteral(LEGACY_UA_GECKO_TRAIL);
 }
 
 nsMimeTypeArray*
 Navigator::GetMimeTypes(ErrorResult& aRv)
 {
   if (!mMimeTypes) {
     if (!mWindow) {
       aRv.Throw(NS_ERROR_UNEXPECTED);
@@ -568,22 +568,45 @@ Navigator::GetBuildID(nsAString& aBuildI
 {
   if (aCallerType != CallerType::System) {
     // If fingerprinting resistance is on, we will spoof this value. See nsRFPService.h
     // for details about spoofed values.
     if (nsContentUtils::ShouldResistFingerprinting()) {
       aBuildID.AssignLiteral(LEGACY_BUILD_ID);
       return;
     }
+
     nsAutoString override;
     nsresult rv = Preferences::GetString("general.buildID.override", override);
     if (NS_SUCCEEDED(rv)) {
       aBuildID = override;
       return;
     }
+
+    nsAutoCString host;
+    bool isHTTPS = false;
+    if (mWindow) {
+      nsCOMPtr<nsIDocument> doc = mWindow->GetDoc();
+      if (doc) {
+        nsIURI* uri = doc->GetDocumentURI();
+        if (uri) {
+          MOZ_ALWAYS_SUCCEEDS(uri->SchemeIs("https", &isHTTPS));
+          if (isHTTPS) {
+            MOZ_ALWAYS_SUCCEEDS(uri->GetHost(host));
+          }
+        }
+      }
+    }
+
+    // Spoof the buildID on pages not loaded from "https://*.mozilla.org".
+    if (!isHTTPS ||
+        !StringEndsWith(host, NS_LITERAL_CSTRING(".mozilla.org"))) {
+      aBuildID.AssignLiteral(LEGACY_BUILD_ID);
+      return;
+    }
   }
 
   nsCOMPtr<nsIXULAppInfo> appInfo =
     do_GetService("@mozilla.org/xre/app-info;1");
   if (!appInfo) {
     aRv.Throw(NS_ERROR_NOT_IMPLEMENTED);
     return;
   }
--- a/dom/tests/mochitest/bugs/mochitest.ini
+++ b/dom/tests/mochitest/bugs/mochitest.ini
@@ -52,17 +52,16 @@ skip-if = toolkit == 'android'
 [test_bug304459.html]
 [test_bug308856.html]
 [test_bug327891.html]
 [test_bug333983.html]
 [test_bug335976.xhtml]
 [test_bug342448.html]
 [test_bug345521.html]
 [test_bug346659.html]
-[test_bug351601.html]
 [test_bug369306.html]
 skip-if = toolkit == 'android' #TIMED_OUT
 [test_bug370098.html]
 [test_bug377539.html]
 [test_bug384122.html]
 [test_bug389366.html]
 [test_bug393974.html]
 [test_bug394769.html]
@@ -131,16 +130,17 @@ skip-if = toolkit == 'android'
 [test_bug857555.html]
 [test_bug862540.html]
 [test_bug876098.html]
 [test_bug927901.html]
 [test_devicemotion_multiple_listeners.html]
 skip-if = toolkit == 'android' #bug 775227
 [test_domparser_after_blank.html]
 [test_errorReporting.html]
+[test_navigator_buildID.html]
 [test_onerror_message.html]
 [test_protochains.html]
 [test_resize_move_windows.html]
 skip-if = toolkit == 'android' || os == 'linux' #Windows can't change size and position on Android
 [test_sizetocontent_clamp.html]
 skip-if = toolkit == 'android' #Windows can't change size on Android
 [test_toJSON.html]
 [test_window_bar.html]
rename from dom/tests/mochitest/bugs/test_bug351601.html
rename to dom/tests/mochitest/bugs/test_navigator_buildID.html
--- a/dom/tests/mochitest/bugs/test_bug351601.html
+++ b/dom/tests/mochitest/bugs/test_navigator_buildID.html
@@ -1,35 +1,99 @@
 <!DOCTYPE HTML>
 <html>
 <!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=351601
+https://bugzilla.mozilla.org/show_bug.cgi?id=583181
 -->
 <head>
-  <title>Test for Bug 351601</title>
-  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>        
+  <title>Test for Bug 583181</title>
+  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
 </head>
 <body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=351601">Mozilla Bug 351601</a>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=583181">Mozilla Bug 583181</a>
 <p id="display"></p>
 <div id="content" style="display: none">
-  
+
 </div>
 <pre id="test">
 <script class="testbody" type="text/javascript">
+"use strict";
 
-/** Test for Bug 351601 **/
+SimpleTest.waitForExplicitFinish();
+
+const LEGACY_BUILD_ID = 20181001000000;
 
+//
+// Access navigator.buildID from unprivileged web content.
+//
 var isOK = false;
 try {
-  var foo = navigator.buildID;
+  var contentBuildID = navigator.buildID;
   isOK = true;
 } catch (ex) {
 }
 ok(isOK, "navigator.buildID should never throw");
+is(typeof(contentBuildID), "string", "navigator.buildID should be a string");
+is(+contentBuildID, LEGACY_BUILD_ID,
+   "navigator.buildID should be spoofed in content");
 
+//
+// Access navigator.buildID from chrome.
+//
+let chromeScript = SpecialPowers.loadChromeScript(() => {
+  ChromeUtils.import("resource://gre/modules/Services.jsm");
+  addMessageListener("test:getBuildID", nav => {
+    let browser = Services.wm.getMostRecentWindow('navigator:browser');
+    return browser.navigator.buildID;
+  });
+});
 
+let chromeBuildID = chromeScript.sendSyncMessage("test:getBuildID")[0][0];
+chromeScript.destroy();
+
+ok(+chromeBuildID > LEGACY_BUILD_ID,
+   `navigator.buildID should be exposed in chrome - got "${chromeBuildID}"`);
+
+function onMozillaIFrameLoaded() {
+  //
+  // Access navigator.buildID from mozilla.org.
+  //
+  let mozillaBuildID = getMozillaBuildID();
+
+  ok(+mozillaBuildID > LEGACY_BUILD_ID,
+     `navigator.buildID should be exposed on mozilla.org ` +
+     `- got "${mozillaBuildID}"`);
+  is(chromeBuildID, mozillaBuildID,
+     "navigator.buildID should be the same in chrome and on mozilla.org");
+
+  //
+  // Access navigator.buildID from mozilla.org when resisting fingerprinting.
+  //
+  SpecialPowers.pushPrefEnv(
+    {"set": [["privacy.resistFingerprinting", true]]},
+    () => {
+      let resistBuildID = getMozillaBuildID();
+
+      is(+resistBuildID, LEGACY_BUILD_ID,
+         "navigator.buildID should be spoofed on mozilla.org when " +
+         "resisting fingerprinting");
+
+      SimpleTest.finish();
+    }
+  );
+}
+
+function getMozillaBuildID() {
+  let Cu = SpecialPowers.Cu;
+  let mozillaIFrame = document.getElementById("mozillaIFrame").contentWindow;
+  let mozillaSandbox = Cu.Sandbox(mozillaIFrame,
+                                  {sandboxPrototype: mozillaIFrame});
+  let mozillaBuildID = Cu.evalInSandbox("window.navigator.buildID",
+                                        mozillaSandbox);
+  Cu.nukeSandbox(mozillaSandbox);
+  return mozillaBuildID;
+}
 </script>
 </pre>
+<iframe id="mozillaIFrame" onload="onMozillaIFrameLoaded();" src="https://www.mozilla.org/" />
 </body>
 </html>
-
--- a/editor/libeditor/EditorBase.cpp
+++ b/editor/libeditor/EditorBase.cpp
@@ -4662,21 +4662,20 @@ EditorBase::HandleInlineSpellCheck(EditS
   }
   return mInlineSpellChecker->SpellCheckAfterEditorChange(
                                 aEditSubAction, aSelection,
                                 previousSelectedNode, previousSelectedOffset,
                                 aStartContainer, aStartOffset, aEndContainer,
                                 aEndOffset);
 }
 
-already_AddRefed<nsIContent>
-EditorBase::FindSelectionRoot(nsINode* aNode)
-{
-  nsCOMPtr<nsIContent> rootContent = GetRoot();
-  return rootContent.forget();
+Element*
+EditorBase::FindSelectionRoot(nsINode* aNode) const
+{
+  return GetRoot();
 }
 
 void
 EditorBase::InitializeSelectionAncestorLimit(Selection& aSelection,
                                              nsIContent& aAncestorLimit)
 {
   aSelection.SetAncestorLimiter(&aAncestorLimit);
 }
--- a/editor/libeditor/EditorBase.h
+++ b/editor/libeditor/EditorBase.h
@@ -654,17 +654,17 @@ public:
 
   /**
    * FindSelectionRoot() returns a selection root of this editor when aNode
    * gets focus.  aNode must be a content node or a document node.  When the
    * target isn't a part of this editor, returns nullptr.  If this is for
    * designMode, you should set the document node to aNode except that an
    * element in the document has focus.
    */
-  virtual already_AddRefed<nsIContent> FindSelectionRoot(nsINode* aNode);
+  virtual Element* FindSelectionRoot(nsINode* aNode) const;
 
   /**
    * This method has to be called by EditorEventListener::Focus.
    * All actions that have to be done when the editor is focused needs to be
    * added here.
    */
   void OnFocus(dom::EventTarget* aFocusEventTarget);
 
--- a/editor/libeditor/HTMLEditRules.cpp
+++ b/editor/libeditor/HTMLEditRules.cpp
@@ -157,16 +157,51 @@ public:
     }
     return false;
   }
 
 protected:
   HTMLEditor* mHTMLEditor;
 };
 
+
+class MOZ_RAII AutoSetTemporaryAncestorLimiter final
+{
+  MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER;
+
+public:
+  explicit AutoSetTemporaryAncestorLimiter(HTMLEditor& aHTMLEditor,
+                                           Selection& aSelection,
+                                           nsINode& aStartPointNode
+                                           MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
+  {
+    MOZ_GUARD_OBJECT_NOTIFIER_INIT;
+
+    if (aSelection.GetAncestorLimiter()) {
+      return;
+    }
+
+    Element* root = aHTMLEditor.FindSelectionRoot(&aStartPointNode);
+    if (root) {
+      aHTMLEditor.InitializeSelectionAncestorLimit(aSelection, *root);
+      mSelection = &aSelection;
+    }
+  }
+
+  ~AutoSetTemporaryAncestorLimiter()
+  {
+    if (mSelection) {
+      mSelection->SetAncestorLimiter(nullptr);
+    }
+  }
+
+private:
+  RefPtr<Selection> mSelection;
+};
+
 /********************************************************
  * mozilla::HTMLEditRules
  ********************************************************/
 
 HTMLEditRules::HTMLEditRules()
   : mHTMLEditor(nullptr)
   , mListenerEnabled(false)
   , mReturnInEmptyLIKillsList(false)
@@ -2400,16 +2435,23 @@ HTMLEditRules::WillDeleteSelection(nsIEd
     rv = CheckBidiLevelForDeletion(startPoint, aAction, aCancel);
     if (NS_WARN_IF(NS_FAILED(rv))) {
       return rv;
     }
     if (*aCancel) {
       return NS_OK;
     }
 
+    // ExtendSelectionForDelete will use selection controller to set
+    // selection for delete.  But if focus event doesn't receive yet,
+    // ancestor isn't set.  So we must set root eleement of editor to
+    // ancestor.
+    AutoSetTemporaryAncestorLimiter autoSetter(HTMLEditorRef(), SelectionRef(),
+                                               *startPoint.GetContainer());
+
     rv = HTMLEditorRef().ExtendSelectionForDelete(&SelectionRef(), &aAction);
     if (NS_WARN_IF(NS_FAILED(rv))) {
       return rv;
     }
 
     // We should delete nothing.
     if (aAction == nsIEditor::eNone) {
       return NS_OK;
--- a/editor/libeditor/HTMLEditor.cpp
+++ b/editor/libeditor/HTMLEditor.cpp
@@ -457,62 +457,58 @@ HTMLEditor::UpdateRootElement()
       // If there is no HTML body element,
       // we should use the document root element instead.
       mRootElement = doc->GetDocumentElement();
     }
     // else leave it null, for lack of anything better.
   }
 }
 
-already_AddRefed<nsIContent>
-HTMLEditor::FindSelectionRoot(nsINode* aNode)
+Element*
+HTMLEditor::FindSelectionRoot(nsINode* aNode) const
 {
   if (NS_WARN_IF(!aNode)) {
     return nullptr;
   }
 
   MOZ_ASSERT(aNode->IsDocument() || aNode->IsContent(),
              "aNode must be content or document node");
 
-  nsCOMPtr<nsIDocument> doc = aNode->GetComposedDoc();
+  nsIDocument* doc = aNode->GetComposedDoc();
   if (!doc) {
     return nullptr;
   }
 
-  nsCOMPtr<nsIContent> content;
   if (aNode->IsInUncomposedDoc() &&
       (doc->HasFlag(NODE_IS_EDITABLE) || !aNode->IsContent())) {
-    content = doc->GetRootElement();
-    return content.forget();
-  }
-  content = aNode->AsContent();
+    return doc->GetRootElement();
+  }
 
   // XXX If we have readonly flag, shouldn't return the element which has
   // contenteditable="true"?  However, such case isn't there without chrome
   // permission script.
   if (IsReadonly()) {
     // We still want to allow selection in a readonly editor.
-    content = GetRoot();
-    return content.forget();
-  }
-
+    return GetRoot();
+  }
+
+  nsIContent* content = aNode->AsContent();
   if (!content->HasFlag(NODE_IS_EDITABLE)) {
     // If the content is in read-write state but is not editable itself,
     // return it as the selection root.
     if (content->IsElement() &&
         content->AsElement()->State().HasState(NS_EVENT_STATE_MOZ_READWRITE)) {
-      return content.forget();
+      return content->AsElement();
     }
     return nullptr;
   }
 
   // For non-readonly editors we want to find the root of the editable subtree
   // containing aContent.
-  content = content->GetEditingHost();
-  return content.forget();
+  return content->GetEditingHost();
 }
 
 void
 HTMLEditor::CreateEventListeners()
 {
   // Don't create the handler twice
   if (!mEventListener) {
     mEventListener = new HTMLEditorEventListener();
--- a/editor/libeditor/HTMLEditor.h
+++ b/editor/libeditor/HTMLEditor.h
@@ -37,16 +37,17 @@ class nsHTMLDocument;
 class nsITransferable;
 class nsIClipboard;
 class nsILinkHandler;
 class nsTableWrapperFrame;
 class nsRange;
 
 namespace mozilla {
 class AutoSelectionSetterAfterTableEdit;
+class AutoSetTemporaryAncestorLimiter;
 class DocumentResizeEventListener;
 class EmptyEditableFunctor;
 class ResizerSelectionListener;
 enum class EditSubAction : int32_t;
 struct PropItem;
 template<class T> class OwningNonNull;
 namespace dom {
 class Blob;
@@ -142,18 +143,17 @@ public:
                             int32_t* outNumTestsFailed) override;
 
   virtual nsresult HandleKeyPressEvent(
                      WidgetKeyboardEvent* aKeyboardEvent) override;
   virtual nsIContent* GetFocusedContent() override;
   virtual already_AddRefed<nsIContent> GetFocusedContentForIME() override;
   virtual bool IsActiveInDOMWindow() override;
   virtual dom::EventTarget* GetDOMEventTarget() override;
-  virtual already_AddRefed<nsIContent> FindSelectionRoot(
-                                         nsINode *aNode) override;
+  virtual Element* FindSelectionRoot(nsINode *aNode) const override;
   virtual bool IsAcceptableInputEvent(WidgetGUIEvent* aGUIEvent) override;
   virtual nsresult GetPreferredIMEState(widget::IMEState* aState) override;
 
   /**
    * PasteAsQuotationAsAction() pastes content in clipboard with newly created
    * blockquote element.  If the editor is in plaintext mode, will paste the
    * content with appending ">" to start of each line.
    *
@@ -2393,16 +2393,17 @@ protected:
   void AddMouseClickListener(Element* aElement);
   void RemoveMouseClickListener(Element* aElement);
 
   nsCOMPtr<nsILinkHandler> mLinkHandler;
 
   ParagraphSeparator mDefaultParagraphSeparator;
 
   friend class AutoSelectionSetterAfterTableEdit;
+  friend class AutoSetTemporaryAncestorLimiter;
   friend class CSSEditUtils;
   friend class DocumentResizeEventListener;
   friend class EditorBase;
   friend class EmptyEditableFunctor;
   friend class HTMLEditRules;
   friend class SlurpBlobEventListener;
   friend class TextEditor;
   friend class WSRunObject;
--- a/gfx/ipc/CrossProcessPaint.cpp
+++ b/gfx/ipc/CrossProcessPaint.cpp
@@ -32,17 +32,17 @@
 #endif
 
 namespace mozilla {
 namespace gfx {
 
 using namespace mozilla::ipc;
 
 /// The minimum scale we allow tabs to be rasterized at.
-static const float kMinPaintScale = 0.05;
+static const float kMinPaintScale = 0.05f;
 
 /* static */ PaintFragment
 PaintFragment::Record(nsIDocShell* aDocShell,
                       const IntRect& aRect,
                       float aScale,
                       nscolor aBackgroundColor)
 {
   IntSize surfaceSize = aRect.Size();
--- a/js/public/ProfilingStack.h
+++ b/js/public/ProfilingStack.h
@@ -469,22 +469,26 @@ class GeckoProfilerThread
     friend class GeckoProfilerEntryMarker;
     friend class GeckoProfilerBaselineOSRMarker;
 
     ProfilingStack*         profilingStack_;
 
   public:
     GeckoProfilerThread();
 
-    uint32_t stackPointer() { MOZ_ASSERT(installed()); return profilingStack_->stackPointer; }
+    uint32_t stackPointer() { MOZ_ASSERT(infraInstalled()); return profilingStack_->stackPointer; }
     ProfilingStackFrame* stack() { return profilingStack_->frames; }
     ProfilingStack* getProfilingStack() { return profilingStack_; }
 
-    /* management of whether instrumentation is on or off */
-    bool installed() { return profilingStack_ != nullptr; }
+    /*
+     * True if the profiler infrastructure is setup.  Should be true in builds
+     * that include profiler support except during early startup or late
+     * shutdown.  Unrelated to the presence of the Gecko Profiler addon.
+     */
+    bool infraInstalled() { return profilingStack_ != nullptr; }
 
     void setProfilingStack(ProfilingStack* profilingStack);
     void trace(JSTracer* trc);
 
     /*
      * Functions which are the actual instrumentation to track run information
      *
      *   - enter: a function has started to execute
--- a/js/src/shell/js.cpp
+++ b/js/src/shell/js.cpp
@@ -3815,17 +3815,17 @@ EvalInContext(JSContext* cx, unsigned ar
     }
 
     return true;
 }
 
 static bool
 EnsureGeckoProfilingStackInstalled(JSContext* cx, ShellContext* sc)
 {
-    if (cx->geckoProfiler().installed()) {
+    if (cx->geckoProfiler().infraInstalled()) {
         MOZ_ASSERT(sc->geckoProfilingStack);
         return true;
     }
 
     MOZ_ASSERT(!sc->geckoProfilingStack);
     sc->geckoProfilingStack = MakeUnique<ProfilingStack>();
     if (!sc->geckoProfilingStack) {
         JS_ReportOutOfMemory(cx);
--- a/js/src/vm/GeckoProfiler-inl.h
+++ b/js/src/vm/GeckoProfiler-inl.h
@@ -48,17 +48,17 @@ class MOZ_RAII AutoSuppressProfilerSampl
 
 MOZ_ALWAYS_INLINE
 GeckoProfilerEntryMarker::GeckoProfilerEntryMarker(JSContext* cx,
                                                    JSScript* script
                                                    MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL)
   : profiler_(&cx->geckoProfiler())
 {
     MOZ_GUARD_OBJECT_NOTIFIER_INIT;
-    if (MOZ_LIKELY(!profiler_->installed())) {
+    if (MOZ_LIKELY(!profiler_->infraInstalled())) {
         profiler_ = nullptr;
         return;
     }
 #ifdef DEBUG
     spBefore_ = profiler_->stackPointer();
 #endif
 
     // Push an sp marker frame so the profiler can correctly order JS and native
@@ -83,17 +83,17 @@ GeckoProfilerEntryMarker::~GeckoProfiler
 
 MOZ_ALWAYS_INLINE
 AutoGeckoProfilerEntry::AutoGeckoProfilerEntry(JSContext* cx, const char* label,
                                                ProfilingStackFrame::Category category
                                                MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL)
   : profiler_(&cx->geckoProfiler())
 {
     MOZ_GUARD_OBJECT_NOTIFIER_INIT;
-    if (MOZ_LIKELY(!profiler_->installed())) {
+    if (MOZ_LIKELY(!profiler_->infraInstalled())) {
         profiler_ = nullptr;
         return;
     }
 #ifdef DEBUG
     spBefore_ = profiler_->stackPointer();
 #endif
     profiler_->profilingStack_->pushLabelFrame(label,
                                             /* dynamicString = */ nullptr,
--- a/js/src/vm/GeckoProfiler.cpp
+++ b/js/src/vm/GeckoProfiler.cpp
@@ -80,17 +80,17 @@ GetTopProfilingJitFrame(Activation* act)
     MOZ_ASSERT(!jitIter.done());
     return jitIter.fp();
 }
 
 void
 GeckoProfilerRuntime::enable(bool enabled)
 {
     JSContext* cx = rt->mainContextFromAnyThread();
-    MOZ_ASSERT(cx->geckoProfiler().installed());
+    MOZ_ASSERT(cx->geckoProfiler().infraInstalled());
 
     if (enabled_ == enabled) {
         return;
     }
 
     /*
      * Ensure all future generated code will be instrumented, or that all
      * currently instrumented code is discarded
--- a/netwerk/protocol/http/nsHttpHandler.cpp
+++ b/netwerk/protocol/http/nsHttpHandler.cpp
@@ -511,17 +511,17 @@ nsHttpHandler::Init()
     if (NS_FAILED(rv)) return rv;
 
     mRequestContextService =
         do_GetService("@mozilla.org/network/request-context-service;1");
 
 #if defined(ANDROID)
     mProductSub.AssignLiteral(MOZILLA_UAVERSION);
 #else
-    mProductSub.AssignLiteral(LEGACY_BUILD_ID);
+    mProductSub.AssignLiteral(LEGACY_UA_GECKO_TRAIL);
 #endif
 
 #if DEBUG
     // dump user agent prefs
     LOG(("> legacy-app-name = %s\n", mLegacyAppName.get()));
     LOG(("> legacy-app-version = %s\n", mLegacyAppVersion.get()));
     LOG(("> platform = %s\n", mPlatform.get()));
     LOG(("> oscpu = %s\n", mOscpu.get()));
--- a/toolkit/components/resistfingerprinting/nsRFPService.cpp
+++ b/toolkit/components/resistfingerprinting/nsRFPService.cpp
@@ -702,17 +702,17 @@ nsRFPService::GetSpoofedUserAgent(nsACSt
 
   // Starting from Firefox 10, Firefox ESR was released once every seven
   // Firefox releases, e.g. Firefox 10, 17, 24, 31, and so on.
   // Except we used 60 as an ESR instead of 59.
   // We infer the last and closest ESR version based on this rule.
   uint32_t spoofedVersion = firefoxVersion - ((firefoxVersion - 4) % 7);
   userAgent.Assign(nsPrintfCString(
     "Mozilla/5.0 (%s; rv:%d.0) Gecko/%s Firefox/%d.0",
-    SPOOFED_UA_OS, spoofedVersion, LEGACY_BUILD_ID, spoofedVersion));
+    SPOOFED_UA_OS, spoofedVersion, LEGACY_UA_GECKO_TRAIL, spoofedVersion));
 
   return rv;
 }
 
 static const char* gCallbackPrefs[] = {
   RESIST_FINGERPRINTING_PREF,
   RFP_TIMER_PREF,
   RFP_TIMER_VALUE_PREF,
--- a/toolkit/components/resistfingerprinting/nsRFPService.h
+++ b/toolkit/components/resistfingerprinting/nsRFPService.h
@@ -41,17 +41,18 @@
 // platform.
 #define SPOOFED_UA_OS      "X11; Linux x86_64"
 #define SPOOFED_APPVERSION "5.0 (X11)"
 #define SPOOFED_OSCPU      "Linux x86_64"
 #define SPOOFED_PLATFORM   "Linux x86_64"
 #endif
 
 #define SPOOFED_APPNAME    "Netscape"
-#define LEGACY_BUILD_ID    "20100101"
+#define LEGACY_BUILD_ID    "20181001000000"
+#define LEGACY_UA_GECKO_TRAIL "20100101"
 
 // Forward declare LRUCache, defined in nsRFPService.cpp
 class LRUCache;
 
 namespace mozilla {
 
 enum KeyboardLang {
   EN = 0x01
--- a/toolkit/content/widgets/progressmeter.js
+++ b/toolkit/content/widgets/progressmeter.js
@@ -85,23 +85,23 @@ class MozProgressmeter extends MozXULEle
       this._initUI();
     }
   }
 
   _initUI() {
     let isUndetermined = this.isUndetermined();
     let content = isUndetermined ?
       `
-        <spacer class="progress-bar"/>
-        <spacer class="progress-remainder"/>
-      ` :
-      `
         <stack class="progress-remainder" flex="1" style="overflow: -moz-hidden-unscrollable;">
           <spacer class="progress-bar" top="0" style="margin-right: -1000px;"/>
         </stack>
+      ` :
+      `
+        <spacer class="progress-bar"/>
+        <spacer class="progress-remainder"/>
       `;
 
     this._stack = null;
     this._spacer = null;
     this._runAnimation = isUndetermined;
 
     this.textContent = "";
     this.appendChild(MozXULElement.parseXULToFragment(content));