Merge mozilla-central to autoland. a=merge CLOSED TREE
authorshindli <shindli@mozilla.com>
Tue, 09 Oct 2018 12:30:40 +0300
changeset 498594 a2fc465a0dd88db35a108be38898c7637d935efe
parent 498593 015250ccee42c76fb7d2437ac9f1b6d6272486db (current diff)
parent 498584 a9616aaeff87448588d57c295e16eb4caec420fb (diff)
child 498595 92eadc28f0339980235a752d57989febbe2cee90
push id1864
push userffxbld-merge
push dateMon, 03 Dec 2018 15:51:40 +0000
treeherdermozilla-release@f040763d99ad [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone64.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central to autoland. a=merge CLOSED TREE
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));