Backed out changeset 441baa36ba93 (bug 634697) for failure at test_sss_readstate.js. CLOSED TREE
authorButkovits Atila <abutkovits@mozilla.com>
Wed, 29 Jul 2020 19:39:44 +0300
changeset 542460 f6e962ff9eb45359b95ec15f6471436fe74fef47
parent 542459 fe257d5e4151803357e94df0dada486395ea6c43
child 542461 35338e484bec62584618d69439c182d838b1b93e
push id37650
push usernerli@mozilla.com
push dateWed, 29 Jul 2020 21:38:24 +0000
treeherdermozilla-central@4c1c82402c09 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs634697
milestone81.0a1
backs out441baa36ba93128836dc5564ce8d218bcac51422
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
Backed out changeset 441baa36ba93 (bug 634697) for failure at test_sss_readstate.js. CLOSED TREE
build/pgo/certs/cert9.db
build/pgo/certs/key4.db
build/pgo/certs/mochitest.client
build/pgo/server-locations.txt
security/manager/locales/en-US/security/certificates/certManager.ftl
security/manager/pki/resources/content/certManager.js
security/manager/ssl/DataStorageList.h
security/manager/ssl/nsClientAuthRemember.cpp
security/manager/ssl/nsClientAuthRemember.h
security/manager/ssl/nsIClientAuthRememberService.idl
security/manager/ssl/nsNSSComponent.cpp
security/manager/ssl/nsNSSIOLayer.cpp
security/manager/ssl/tests/mochitest/browser/browser_clientAuthRememberService.js
security/manager/ssl/tests/mochitest/browser/browser_clientAuth_connection.js
toolkit/components/cleardata/ClearDataService.jsm
index 7011091aacc0f0b55288f6bf1de841eeb927c9be..c4f59cdf389fdb2cdfd68703b535c8cf98868ea6
GIT binary patch
literal 294912
zc%1Fs2V4`&+A#2h(7W_b=rypRgJ1&-*g!-S3x*^>AS94NClOEq5f!ob3M%%F4FMGk
z_5!Gg1$!42yWegS#RBK(x!;ldyYKVYER&s`*`3|lXD6EkLPG{IcywYko0CA{5nXW;
zaCkhf7m<j=;XKiY0<N75`jGzSIUe`-JaJC`H7de4IN9`jxQtfe;f&20aT)gL6951J
z00000000000000000000000000000000000000000000000000000000000000000
z0000000000000000000000000(4~6G%IfNx;zu!9G<qsEp2DE9xZGfV6q7-f^B>l?
z_wc^Nz###BM-oMO#GyloU-OB!6f)vs*F#2BLzt)rCMAl_{JMnfcQuIeeyqXOE<jpV
z*U%I{R#cwLkBXyHd0&^1`K|^@?$296w(Cuh)z$yf4hEOYr*pn8BK=(@;>;iG@FLsg
z4aLjpnwsLLCGaRwO#0W{uL&thJ;QtV8PxaN(&&x}9u_#b_pnjKfqh32!-fQgg!RSN
z;6HRozd?ci!->873>`Mykw`(%2N`|1pbu9pEt-MNA!D<=u%}+wQ!mj|Y!NRvY~qeh
zJg|u;Hu1tH-q?hKO`_0=x2P&aJQdZ5xQM3W^|*<q?xLxOXzD4NdWojqqA5i*jS@|%
zq74&oo_PC2X%}%?RI`hyW*1S-E~1)UL^ZpJYIYIT>>{e!RaDkhRMu5g)>Ty2RaDkP
zl<OhN^$_KHh;lu|xuTjqL^XSgmh=)&Mf*|IUKd21#>%>gw%HXCPsySwHs4J&$4xZH
zO)|$-G<6eA-9=MuEpDRv-9+`fiH?K2sI0rFtUDr}BQA?_A(Pva;)5uH&85=aUEN&W
zze&2ZCtcf<ZtY3;_M}I9(z8A3^)>0yUd*Gtm`8gtkM?37-xTxyn)Gbn2G1{*d9-h@
zNBj1Av~RCR`}TUYZ?8xD_Ik8$uSfg#qDk-eB&9tW)t;obCu!|TdV4bZYf{u{#L1}k
z&56P`hvrT}Xi*4aN0yS+?Q4q1i9<^glfk1$QusW!=y~MV6F8FmHAz52qC6HCWzYv+
z_#R6th<^Y80000000000000000000000000000000000000000000000000000000
z00000000000000000000000000000000000000000RPv>J1C-4l7NX5z7akZ-Vrtl
zF9=TvtA!Q9&B8L_65(v&RAH_#U6>?{6-Ek22nP!Tgx!TMLOUT*s4G+z$_PFPS_KaT
zHv|oW(}E*{{eta+a={A0e8CJso<Jbrqg4X{000000000000000000000000000000
z00000000000000000000000000000000000000000000000000000000000000000
z_<=k@8t=oY?MV_PM$QRx6eWh{m^+9P{l*Wpmn4GhL<!&P8Mcx{x{WB|TFAGSBzRV$
zguO<sr6h60LX;pD4K$Y|g3Lq--C>i6lEg$)Q9|XepNS;lYb;6-HWnI55>pJZg!em#
zsRoinp}r{b^jMspB*D-XC2sF;(vc*tYKszA9#?2d61z1;iL<TiH6)4hZlc7IkqzpS
zM7^3Qv4<X|DoIdOM2Su3bCo5D93@erR5nRbl1Nk#B^HKHm6s$6<wS|%3p`m#f-56R
z<Q-6#mL${&qJ+R|qLds#S^-VuDx$}QlsE;KI4f~_;uQW~{?eqgNjnmEB+ln2^9Lv2
zOWw=#<*9KDk{%1E3ylTk0`IKatgy^mnMoO+Gm6rNrZ%O<r@T$cOVLga<k$1A@EF|1
zTnA1Cr+<=v;@R}Fw5qP|bpQYW0000000000000000000000000000000000000000
z00000000000000000000000000000000000000000KoqeX#x&U!X}Q`#KDl@gGaQ<
znn*WULYOo`Suu<i&tj*ri2l9p|02&WNjjT`N8-q~h_xtF({wmJA(73YaMFnWbPkUZ
z&7e|vbYgElFP6<=@Y2Y7hz_=-qNdtlb~=N}q!5SGxjY6dhHQzLV>wEihQS<mG=oVe
z_UAKbbQ*DJB9D>4NT=`^Y?kdGU!%=mwBPzK@~j*QWAKRemz5Bd4SO?rbPfyKxZxZ=
zmxr$B>qc7s&cYUdd>@$q@im(L@ih|v_!>=r=b)SX&ceojye&q5e2s>-gyDF^oJ>Sa
z#5+WnOJ_!txQrMUo#sSOr6eRW=}uI3g2AsYsQ(vdv)*6i>HhJy>-_OGYX466)B2r-
zHUD^9H2(M+yZ!Mss{ipds{Qdbs{Zjcs$|oobA#|m_EoYHqJS+gt0@&0`sIndrj&ng
zvJRq!J(1H?8O-LhcoYVUID$b>AzL73;&mH*SvQH;cLb3}kK)G=dFW=Kp@eLV7>YMT
zE0j*<W7|yZ%Zg#J=yVRYl^%$jxTPetq-4{Hw&+^0vnqwn;l-xeq18CEC<$~wdNK*C
zmPDnH9T9t31^dYZCby~J74SO7)L06KN#Rjgy?EkEzKw&*|0i0h^v8RT;vZk5!XICw
z{2yPV+#g?~>>ppF%pYH)^dDa%;g7FTDiK|y!XJ$Q=qqnh`URZujBuJTT!;uh2{f~s
zv-W3YWev<CW`52*n^~4QHseml)(n0|?+m^4M_JNY)k60S<IMG0R_V_(F9|PZ1q%ro
z{W5lCwFt*#q-W&_OERM}9t!l*ThgzhRRaJ3000000000000000000000000000000
z000000000000000000000000000000000000000000000000000000000000fG#FS
z(7><8MUW&v9VI^<qzO2@y)_{ij}XZwh>_?IY%6Q?Sv(G(%cIkr=&6*1L?+#d%1*Gu
zmbJAY1mO{5vLT``URHw}OCi(g-!5o_EokjT7>`G6$<~OactPW@m6GVGi44y7m0MwD
zEIkPvJVGWrBP4MdYX*zT<kRRRE<cLKPM|PYT&F|^i^X8Yd|TK8D{TJL3R6;2oT4Z+
zDxJd<7yh=48CHh)$N!qSDYjaZ0O@Q+JmN?0j(Cf=)dk&7r_LKoqNTAY2@LAD4KT)P
zGO{EL!XqYRBg8;lk!A<`)(~6Lz?Lu^kC>B*h>3VfT`rv&P2w_QSl=(Lk1efdNbtcU
z+GI_nn|Nu(FjhQ^ox&pe_twQ0(6J&6!6T+*W5iIrfEL;hT--gr?+M!2qFRoGF?huK
z%l;uK8}?@M=o}WdUx$l(MEm~L#7b!R5K{4o8`%Xx#3k&a_%Uu|S8v4IDV0Sc#iml?
zqGIVWE|hdv3R5&IE|tPeq%jk_Vdd402)=kkhpdHYh|4Q|vrTH)5~`ha7FIkNTLvfT
zI;0qW8unZTE2ErElg>pufA&?f5~6?=lhu?83;ps$UQ^1yH(3YK!k)-!stjhM9UeW1
z#1Ra73fTfN6L%YfFWrVj>^p);qoXY&^3WcH?$|FoQ%O@RluqSiyMx%56~kcB=^U(s
zc_41$PD(;cN_rj9R&rXUusOWgG&{5!XSA!({piUgtXdM4LUu&#Wfklv518Dhf>*%n
z7*k^@943WFVfEsPEBW@2DPc`j{OOQMIv}ZovrhplA#X<Lher&_`iQQ$g!*7MHI^Z2
z8I{SPvv_jYVzOjHG#+sv+aWgMrVs-Y63_;+c+50n0D~)u5NNZp2M^r?GFUNbUqU7x
z@gTb)F5=o9sNbBNDGapp@Oeb^yosYzd0%=LBbhz~-4k2_R)ds1AwmJM`f?ly$_C#>
z2A6Leq=?2#QdTui@Lmuid?M5qWC_!SeT9*Ng~Cn3`NFe;c%idkQ`Q?nlfX@IB<rR?
zOL#|kOjsr?7IK8)LO-F6P({!xxF|RvC=-+j_yVdRP~a#~&U%)0IqO{3akOdx00000
z00000000000000000000000000000000000000000000000000000000000000000
z0000000000000000000000000_(S9f8u-<?2$JNdqvWT9<fpv~!357|N&eWpon)@9
zCcz%hjirzy=`0%h!2bHYjU>-nm*CP~g2JNFQxh2+I?YOwZ>dFa#B+HR9)lXpV6hmi
zm_8Jmg(TCw8^IbMMWOlAIlKVTpPM(6<Pa4II{3sGHkD#3nPZ|&aKh8lSd@fsYciJP
z8YvMB@RC&<O6D1;5{P&%of*w##IWczeaUP+Y&M@2&tj*rBB>Nz$!s00ezcJ;?jGMX
zQ(Ka&g>5N?$)j^v6m-I7^E4$n8lpDvW8BED-iS99ZAmvtjykq8(Kc}DoMbvjO)^&%
zTb|CPQWEJD9*;teC#y(ulr;#pczQB}g{~lhPGg`eQj%mT>JX408sDGIrYT6W<*_v-
zu&J>O9-YgRlgyRXCwSl)2?-1q+7@P7B#pt993~mb64KbgVX;H`QE_xCuQ!u7gpxof
zNHV3m5o{H{J2)<iXb&P~^}-2n2@ea)gayKQ;b5V&u$!P&a8a;JFkg@%7%S*0FcT26
zZfDhIt<5SFTowdmJ;>q+?+K3!*9)f!6NPR<9l;yHKEV>f1VNO*S|FcQm$fl#M%F0d
zFtlm_000000000000000000000000000000000000000000000000000000000000
z0000000000000000000000000000000002M{}FlwH+)IZlCyd$%4=uGH<YPvn$zMJ
zB6FUEWn^aT>oIYT)w6wNLQ=oj8?o-?n;jgn43C(l`>XE}KD^4-$3K}i#p-Id%6JE9
z0uFEASur~-*S51<8!Xqlvs^1I*Rr$qT41^6os~7ia*3Vgnqs*ooz-lN<r;NX))31z
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
ULJpBH64qbVQ*?h^BsysS4`1A!&j0`b
index d454ed584a747e9c18237d7e75bc834ce92662db..cd34021f5de6187e97465feb0f59222bdaec3297
GIT binary patch
literal 294912
zc%1Cr2|Sej-#2_?CuGaM4$2b7PIe`fkZj2|7>qsp77d~-A(EoB5JDlTY$*z5E0SbO
zl%leQvUE?n&a3}*{-0-N&e#3C?)!B;*Z1A&aLh4t{Cs?m=6n3+Fggz%G{y#DgxvfB
ze9%Ec3S`I05C}3IAt5p{GI{(59oZk$_z%i|xs4zrPM%C=cQa$m3K?yL23h2nnC8fm
zNOYuN#G43>h#MsA4*&oF000000000000000000000000000000000000000000000
z00000000000000000000000000000000000000000002+--<U44JSW80w)!OcJ{{j
zV1m$l&_U?GKGW_t*Vnbs7qZaRGu9XSYpakr)>X*N+~|O=`C*~``iF%qO^gm&>I<2g
z2<<jC*=uaH+d{}(-^^HdxBgBcY!Jpr?)N8o30Ycd&fWY7GOVvFCM@u%H-4)lIylI0
z^S0w(<2%azwMM5$P0h(Ej5xCS02ePb*3~yK&@2EOf)2va{6{z=lRf%2LYsH~ity(F
zLgHvSl)Quv)#e!1n`3yRoiW~j9zy+J#@M{`-^Ngo*h@*x$t#R-{2e>k*%RXu^yeW|
z|7DE-xcmPhiJZi43TjU7zrGu6U|=vN;Ll?y|I0AH@BOz?ROKWR%@H)5!orBtew&Bv
z&)t94$p6b>`_}=8A2?k-Q*(=*LTD8J1ApAm^7s#hU+bG2er=KawMq5YP1RpFRX1<`
zdWfpxuZ7aDh4Qb3%CCj$uZ7yL1^U;*8NX25918V&xj7<AeslTz>nLt6l{S~kn@g3=
zrRwHVZF7m<Tsm(qT{eULj`us?=DPgv_05sxH%FG=99e#IWckgJ<u^x`-yB(fb7Y0h
zeHAwMRoL8DVRK)F&3%<O?^WKsS9$YZ<;{DQf8V<~vhwE0Dw~f~{k`0*<L37(kNUm-
zYhU@z%nGRAOS#SEukDJPTNF39DE`M5h0Uen=2B^M`Rl7FZjP_GIlkiNaZuXaS7~!!
zCDiXNzxTzHmy`Rm`uiYm`nA;sqokmyp!6@R@_$wp{;VqgSylS8s{ChF<<F|>f37P3
z*-iP+ZpwdlQ~tA?^1tk+_MfXNe=?~2HJI|Byvl#_D*wr={3oySpS;R{@+$wytNbS~
zepT(yD*Df=^Pg3hKdY{PRxy88-TrfR^DoWsRp&o(oPWh}RYId&olz(W1#)Um1L6O-
z#`xzM>?rqVodVy!X@B)_#t<(u3Y%gwn_}<t&inr_pHKh*00000000000000000000
z000000000000000000000000000000000000000000000@PAaM5CTU|$<D;I^Y8bt
z2PiU;;r}o(k&!X6vc@xzu_o}ubN%(_uZJ=HdH~b^PK0=dU8b?Z_!SBSA}|OYgmp2)
z`ubvh-SyC}zwSrL$;qOmsVOWeDHyh6eO<hRT`|&u!OpIJK4`3Opp5_TN6TQs&_4d&
z7#SBoA7%IahDTErYu|9(h%cv;#D;K;PKaN~3dwBo|2+(TV(vzlA4)6fo-ubXq&dcJ
zQnkW+UnjEiS)bo^+d;`;-L^+YNiElIKU`u@T;#=`(rq|i$fv<dzUOg#L5raR)g)UA
zg1Vcw@j}85r`q>drxyG~9>0!byFYqMB~E{^>tJ91(2MKOG+L>rJ5l~KIUN)9g&D6T
zY-5f-Zgj))OG$6E8SOc|<?*#oM(dfCuMX)rat4N+KbzntW^nGa9+vhbEsLHIHYaKK
z#ze~dMBFg4=6c?XxL`KHOexls@q{18#Q3NsUqsJx%q4cdG>MZ^x|g{%s5bpZax2<h
zRI+m2$C;gxtEK7QleFfbcx(B6uSOEyTgvhaaPuD(_UNrckRed9h&YrFHJxOFVZt&a
zf{GF4gwp+UlL4hjDOBw|jVR<Tu1<QoS`;*=rk^O?U3F!2WMIg0<=z4MmUeOkf*c`)
zqNk?)y&E|likF(sDZvndp`b)aQZk7fuf(4)D#q5gU!Affql`r`-#K!E3~?ar$0I?+
z7e+yAuTrwtA{*)I6FPSa2Xmb=8uqJ1+>gGtNXEL~L*>$C$%{JFV#kx`BMw<I$Cy9Q
zxO9c@ivQ1@w&&a948r{G_Uqj<Hpx4&+i>s0n<$3QjYGI2@0%6EScVxHGuC9S*9Ee7
zejB<Y9_T*7Q&Bw|WpX(*MIv|HSMk9;rD%~|i{D=Ia*Xod<!H_mlxbNs?JLnuzcm&2
z_>7>5%MR|)SJueM)P4L<+xDhTkNI?LS=f>lL0hDdBk(B&8Jp~$ZK!&QBPy+?uyJn8
zCSQ7txwkZ{Yt^rLzyDh`19t_^y8~O_7qU&LmfkK~NMIS1e)|v=tc%ibU1@I%<Fk46
zhW?w+>YYFa{9zy`b{Imi35qooRF}o0V}<GbDGO!{@5=QEf8wl3?51u%Vzxx|FmN(f
zEIg2+62Qfc#9M8r#HGI-&WW?6w+K6)QL4x{vVn8R2#PZHdAIGOqsr*iGbZ^CJ-(<u
z%U1$3HQBo>nuQN-r`~sYrbMrN_fl9>z^s2yi2wB-L`dONW~Kh0Qft<yG~%ABy*ibl
z_3GKJtlZR}fz&MQ=T*XPe4l#XJkl|RrXv>_mrzH(Oe(CdFD$RSc2X^m{nc!(jbd&?
zhacLpm6wz%B%D{fCM;aF*TFEe?mpX(=sdNT^)FAVtx)Q4<?!cDE)%W7QjuBT>#y5R
zZ@K)Fk1Z5mg)5?o$K~X$L&@~_e@-f;-g-m*(HNrg4z=EVZEY~?7p7a`vzqeeWM<nw
zsY_l{DWuLT-X6-cu?u~WUg2TJhldNr^q+q|bPSPFQ0{5iw$(7b`c;5vvwZ7Y+Mf}9
z>fZ<N+3n=(SsG|yE)!$xIC=Kjn~*`fZQBxWT+x#pNJ;9yE&JK0b@;-0uXJn8g&l7M
zu{ESr;pxXqd^d4g85*^^gH`bfvp0U^)rt(_OnpDkp9so(n@qF{nmdsJm4%{6$89<B
zo@)3i_#{_R_Q+eHUh*A6V90P!+G0+ezVAUj_Uidvw2wwq$uMgl^D$pLDcZhg&6Tq@
z`&DpBWuv9De9BG1T@&wa^k3XNUG~6vDN&qx)adzjt+w@&-4QXTS0W1RI&V~$oE(oy
zkf^NSKJYA!+?QM}Klu!A)H8%z;XEzp!sQB13kx&r*6l4fKE|CD_TJaDL208xN)<H4
z7a!#!#P+?@_P>6iQL4^$^oFl@4cRHSW+~~ak_+dFR$-Y#E`nV>ihk;(dYdvQz6!P*
zp%<){Q&n%S-R_uW4~a{3rdR7Ta#;VYOuZBPrfxLuYOm1tyUw4dIeE)o={<2@Xcb8?
zy~wAIJV2L8DcNAdc$4vXvx0K2412@yk1Ht@AB_@Lyxk0}cE7vDyrnOtxX{L@OyXSK
zQ`@2-Kfk%b^+(z2kKSEjh|cC*YU-hRt#!&I*X5@0shfFX-)cuKM}Lx11?tY^^&BcW
zX-STSlUxgWelxW9$T+RZd#4%qa(Wc)J4Cb!+nzsc&5*YH`mOOzP=-Ce3cHRm1?l8;
zJ=&qfgt7NBpxl|et>;)R=4X`j&Wm?$czz20_N-*aNm(MgQl@CqrgHlF7aMH>xnSBC
zPiCFIFk}``d<t7qFc8WSJ8v!Vc3>2%t#0%wXDM%1^0v#k1C!R$nNwdWE}E#gTwV_3
zOuqeoyqcXad_+&-Dwniz#D}pu_L`Rd%=p>hgif|;4L><V0Rn&eNBmDeS!eC1z)}2~
zqKW_86fJJw|G7C@K&#g8IT|Je>l=g#@WHrZ(LtEa85(X#ZVQU;*A$JKjok9kUpHvk
z$am|?aiG|L-JoG(Jm44X8-$;;30Yw=p>iT9;a}V7*?124MPR+X(L&Nf`c^`&80TPj
zp&(3PkPv=ne*9lq{DZczu^+;?1P5S)!iDsG-LbwHOaOk)C#Q^3+?*J)N#pml!0&_K
zC?t;mDgnWPL7{#DK_1}}_+eyy(LNYWOo;TaVWnNraywCy|M_I1LvZlBc%TEk(Lrcm
zouJ=?{OfEobKj-sT#O7QXT1iBm~LfHXda~M{ny##9ivlr7s;4YS+0D~Pb_)&yzq_v
zkD0lXgVqmR**wyAP6X`y$(*kGFo?W;m!yGagSh8s?V(<mZd(cVP(;H3*DLgq?@C@T
zd)pK|Z=}#2RZgOA?%adEuXRw*gmX`w%#A+JQq?YQ58-UV#H0H-T(H`7A$+3;ysn6S
z>S}G=!Kj)RmhU|pc2jQ8XYm$?a0ykHqN|dIIrPc}OaU*$+wY5wuC!(<%dUHzD|#4g
z>~OB#z4_BH&&{N(9bJk^2<$y3@vE;Gc(NJ%6da{5=jOU<+dil@nz~Vf`{*=&EYWbw
zu;p+T=MOHk{5nhHZd`#{baF9kl48Sr80O)r$w1R82`Un2lUHiJvW3~-etdqMRpyLW
zBbDv7tJx8I$)6(?JHN`#dORlDt{4W-HcD32*#xK;ll8j(noS}O4~Gl1*<`Kk;MhL@
z?uIHNcckptBc6K(xB4a1OVYY<1Bq=rwG*T{vg71p&mH%>{=R$q)fo&KRU{9WGrJsB
z{Cnp$t&*g>?(;3Z!X>3qJ1&jrKN#MYq|NwL@AXE&L7|JodRtf+{St0#QHvjQ%@md$
z>gCcfAE$cw)<x=QZ_aU9hf@V7qAH(ZzG#cl9&SK4Np1wWZyie<<~{s)B-c$QdO}Yx
z*HJ0>ir`u1Q^_$uWS$nXp1rqtS!efR!?%O_6a0J|A=Uxn?vpMHyM+}*%%<dImX2NM
zmn=_}v3D*GV>*P*$Pc-Na8?p@t5J(V(wB}qRMz*61b=g7+e3Ef-i3pc`WI{-h!=D`
z6MWI1{hgGv2Jf*sMU@Fh%E3LSI|pvex5=5y$9_LeFX;AK%=BGA))S(K!Q?1noAt+j
zrw!^L*~_f>v&PBFl>;2|i`y2hWiz}^2Dikr)J<pOyaPFyqC%!0+tH&sk0?o9j(F4i
zRyI@AY@h#n@`w6HuSDr0%_q4s6oHRe&Yx)dHcGa-OX|A1aJfjALy?EY$==@a)E@&o
zZ{4w!t_)<GXriL8>vF$%^L+F0MS~u}x8GXAh7K+a7EO#T)Ss<lKflkks+=W@Y;CVJ
zV;Ct_@O`KpXqH^r9jDH8=^MwGr!x&NrhNGjDuCwQfeO!66wxa1y{LJ+*kBf`rm>}c
zZWvz$d4nC46)jIoO(vYP+tldvn&Ra1IuRGwpA98)x$*mA=grxMw0q)8SV9G!z4DJX
z^hCUTCD?xOjmNZ`>_r-d@LR0m&ZEAk=}jdaan~~6mEVtR6+(DEp9!AZ{c5|X^|$4p
zZo{c7#@~e%)7I^;@lIz^7Tq|FtM@$h$zsw(WBx5~=j4{9lD5d;916`zxAJUKs=ze&
zaHT4*wT<H#TkVUYOv`hD8h5PogdD;oPYaFACm$tR1;+7@>e-TwpI;`iNd3Hpufl1*
z(IBalub#xaS|!~{i9PMB%80GG{umb;<AZS;*@Cn&tU@wTFD0vYxLxp(Q^N%%?0ICO
zQ|)~09@{K+@n<$KzoiU&smvd?;*CWg+2TAr7y}J#(3ghE#QYnkn0F7bj;O1>dw)m!
zlcCCjo-UoM?^su;7wf!mlN|SeTa)<Ii7LvwJSl;+Os`+xk~I|MAf*a^`69Rv>c{6k
zcWb#C9MTe#K2P=d3r6AcOZ@-}m)%26M5|D_-Oz3Qj;w!+Oq=AoD833cm}NvnGNO`d
z>s_f27=v^4@waAg3cfgTgJ%GFNwP3V@UByx&w7=4Wr7y=S(POl*VnJR1szH(T6DtF
zl64p)s%64<zQ?pTay5r3Za-~1`1a(%Oa2@A2}A3bzhsqD^uHc@aeV!a!GWXp-p1$U
zm^Hszu$Ut%_O5oKlDQ=#>J3xrF%IOR8w%+6PXm5r1cs7Qg$o;pZ?>6J<F0;rD<$lA
zC_8G@hLX~yNvv`(gyp*^MuBJ*q}&V=jXM@2t#V)6NK@gffJ>BJ9eCQGU;V*C`!sz|
zuyf4@bv(tppVM}kwumXwL8oobIXB)cN0bCEd`R`b`O`k3p;Bh_d-V9mu2d24<lbr{
zvr?xEc`-Vots~w&m32SDi;r$+?aeFC!kEt~-M)3>L%`$yL*GR@4mVH_2p&=q*X7fU
zi#&I3q_DAh^~p(O?&?Tv0UIW*G901(Onzf>b2j-u{bZeKO8$E`$?<QqNu2Bdx!I&m
zw$bm|q`$kL3wm=B=_x0U+WvbsCuo83@%IZr2ZRgl#smam-LNjd{#S{*!9gB=zvh5)
zTqus;bH}ZJ%^m+^@+T*XLjImG@|p$sxnaFALI%NDSB$HWsecgG2OEJ7!ut6}Mb>M@
zXN%3&7sW{L^?2){R9YeRuQR&ZlLw3UoaX4)UH7dyNv+JRsloR8(}dE#>X~mI*50C#
z4_n2G#|8u&D)XpweR&e*y~c0Z277tB9;J;av@Oz4T;_WznnxbpxqD3j+oLKZky$F#
zY&7xazVRb3Z>G=NVz<skmt%P<d&zetOX_|p@*msEn7Zz^MXEydOu@1HC(+^QmDcH+
zFVr88-7^#{R_Q&t`|A#l0n58?wl|{5(`9!>G9RZF?cno1SDuYNa(6tNwJBKc8bii#
z_0#3Ga(=O1y07;+nTkB#-j0+-`eENyC!Iy}f7#wIcCj>r)<pRkpD5+d2OP<=lXGe3
zIpyx%-Y^pR5pb|Y?j=RpAQ!#T=Ts7BbSg|n)h7+-PL%HYn5X_^*JGO0XeUPlbZbT8
z`KuEvpBjj^j6KC7md~5jvr}GS^4~iCn$fvhYWgo0Hz(1*4;K^VOix*onRqUl&l{3B
zs^ZATaeaX<Qwb5fe<afGfalORk)_b_%k&R8t5elZ^gR<83)_C9xL104I*xhPW6!-$
zPY?Hm&Kiyu7EIX->|h~#wpSUabQ$BcQ(kcGW>HpYd$-=|g1{@vlmQxwT}xXZ&x^mk
zScyG)w=(3$PwJpb2A(n{TjA<8-HDB01-8Y&GbM?_&tt|Mr_`y-=mHIIUOVae1>svb
z>N%Vk(dTS+r%6LEaKEKT#?Y~|!ijY^BG<l(Pe;pj1YC@LP2I)VN!^lkfMI#fz(f1?
zIrbls`IDc=4v!YxcvDSNr&(WC%RM(Mc=T8zVz9qFH{|-32lmrv(x<bdK9bV8v$q8;
zbke?jN%pMpSm0~5((j|g{rBYMEXru7U2F{7iC+zI)RoIwa{YM$@v!`s#20+$E~3h*
zH~4WnRZ=)1fL_<(_3^lsgZn~4z8DmIIp|Gxubn}%8bx<2c;z;-VJt1}sb=aGN?uOZ
z#i{J>9I2EmtZhm3vELJMR&#mZvJTz&rtas}nYOm*KCrS%>;AE_AYa%hUhT;_ioIeP
zmqKTi%=I62yNc|YXBU=Le{phv_M>)2ym6t9LiwGg#FL@#tH1a~lQg3Xjs8)Zc;ty(
z(QAqHfss7@gWJT-`jw+6HWub<Tjbn`Rw2&Gd}~^YUq(0o(1$}8@KyLAn39Cfjf)kY
zSf|jUJTO#lknfr^@NTAO+_WG-&7G(6h5Yn;bq}fQ;VHHoN2<^3KJ!D+vj}QsN|m%%
zJ^Q|rNjElJaeI(uH$`26S}Yyos!MImN0d>mY&!Xf3#!)T+$_iYvLvDB1=A&8WA5;%
zM@-$ztn3&+5h*CM*sSI|r0$9QaB1z!vohl<3>!-04k=X-q)F<dOgX^4+S0;j<SE``
z;6U*SWv%U&_IOJ5ih|^KqE+yVD$X8A7oosa^7Gqz;j3`Q@IWTlnVCrcyb>?>&!eu-
zFUNkDUw+b!wQ9NLo}A6ladWb6F!|<{94gBI#@vxh$i=Tc-nVwX$-4FQm8qjr1&1%!
z=K;E&3CS;1b<`}UeyRmrn@>5f#eV;VFL~i%N}B4x$NXD5W0Xdt-)Qc#)^$AFSZ2ND
zuBQKcQK_54k8IuRpNzPrj2lJv*DbPhVy_+{r3zF>r%Z5{JPMAABVH);r^iR}T;eQ=
z<L9Nz_-3QG_sJ^JDik<YWe-j16;EflT%+p4SAnA3<Xl)TmkIfHmF3X<vr<Fm=a?B+
zuJ=TGtk%|lcA?@>>{7EsM7ngaxqPO7J($GZOxf45Mf?<p)?=NV5m(h9x`oh0k8^jX
z!rr4cdOKZ%G&nR>>9y12xjC2^GsjXkLQ_H>^gTEx-u_g){D`Z`(>h$+q+=fsRZ3G&
z-S+3@X?$BHy6<|qKawBZDA?{iM@kiH<3hvd?vI+psMGMvX|KCkafK|Mx|_e})7;p$
zW;%1?*NR7@w(FhFW$i1_v~^n=$5&y-NNV5bRrzNd2ANq4ya&rG$6DPT?1g?BH1K6k
z*B-7=>XpnW_bXX=GaF@b{La9su$8)6A#0P!nWft?7hmh&9koM{%O%wpCHD0#SC-fF
z?u@>fm&S7W+3S<SCc=|dK0@b$CJF}gE`E+0C>XVE-TGcT;KC`tYXRe2+9E!?`3&<D
z%C3|>uRO-8rZhWNdiUq%jP8H>$(oFe?(F~0YzzPZ0002|e}EqUK@szwEM_I<EB+Gz
z00000000000000000000000000000000000000000000000000000000000000000
z0000000000000000000000000000000Pz1~v=o$xT>-6H6q_qH*+%3v6qIzkOk;)V
z@%K{1%#+2e#Vq4L0RR91000000000000000000000000000000000000000000000
z00000000000000000000000000000000000000000000000030Lr_wXAt-(=$SEku
z=;&km$S9)q$)fdRoTH=uZ)XDl0000000000000000000000000000000000000000
z000000000000000000000000000000000000000000000000000001h|K^k_0_ae3
za<V9CY6?qA3Wn`iUl;FSSB!LEu(PY54;t$mDC3Xy^~L(S%V5ILKK|Yq85chvoGWGA
zJ_HIkB)0`c_iImTHgd~Df8C&EBj2qn$AM!1b%TbD@qk~jZxDVcAuB8<R89mX{A)Ws
z8_xm12&}g^T1Z+*-%7|8;~eZR6od&362kAykK+CHpe=0dhcGU|0ob5$A$?zWtS<%=
zfR7@lj8fdp%O;KA(*nN_exr~${;LE82L^@u1q6A7OW=o*^+o$&G%+F4zlN1|LCft#
zNmA2ECKx6xGa~2^9Q-aG=m2kY5ZYHK==UK1`b|<CrNp@+P@Zz)sO`VMnxF;7$KNji
z9S|<G8xs(Ob;G)#gD^t6!9gB=zcR{kp*VhjZ(INR-u@$;oG1$U`y1jl3-EKpdSiqP
zg0Zd`S0PjXAgm8I0v&|)^Cib0k)5O-I{KKeWE3%tWHB#dCh?yD000000000000000
z00000000000000000000000000000000000000000000000000000000000000000
z0000000000000000D%97*eG_=1qPvmur6j;Utg@RyB^w=l|meW3BmdXVFG+Gu2^&s
zhJucQ1L5!P=Yl53@5Az6Mxe)kP{h=b#Z1L?<39la0000000000000000000000000
z00000000000000000000000000000000000000000000000000000000000000000
z000000RN3}Q79rZ_g#9<#mG={)@z`M=~niH=0U1nieGm`Mb>M@XN%3&7sW{L^?2){
zR9YcL&Pkz2r|h2J@Mwx+?Hi68@#S=q*bt7<i4i|q6{9#=j7{|IXr^P>sFo<f$cTuS
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
D<#I68
index a7bb340e7c7e64b2dca15763780432dfa9cca233..3142b38d35b424c72f24022e95dc686767f12385
GIT binary patch
literal 2448
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
Ce`JFI
--- a/build/pgo/server-locations.txt
+++ b/build/pgo/server-locations.txt
@@ -112,17 +112,16 @@ https://sub1.test2.example.com:443     p
 https://sub2.test1.example.com:443     privileged
 https://sub2.test2.example.com:443     privileged
 https://nocert.example.com:443         privileged,nocert
 https://self-signed.example.com:443    privileged,cert=selfsigned
 https://untrusted.example.com:443      privileged,cert=untrusted
 https://expired.example.com:443        privileged,cert=expired
 https://requestclientcert.example.com:443         privileged,clientauth=request
 https://requireclientcert.example.com:443         privileged,clientauth=require
-https://requireclientcert-2.example.com:443         privileged,clientauth=require
 https://mismatch.expired.example.com:443	privileged,cert=expired
 https://mismatch.untrusted.example.com:443	privileged,cert=untrusted
 https://untrusted-expired.example.com:443	privileged,cert=untrustedandexpired
 https://mismatch.untrusted-expired.example.com:443	privileged,cert=untrustedandexpired
 https://supports-insecure.expired.example.com:443   privileged,cert=expired
 https://no-subject-alt-name.example.com:443   cert=noSubjectAltName
 
 # Used for secure contexts on ip addresses, see bug 1616675. Note that
--- a/security/manager/locales/en-US/security/certificates/certManager.ftl
+++ b/security/manager/locales/en-US/security/certificates/certManager.ftl
@@ -179,19 +179,16 @@ delete-email-cert-impact = If you delete a person’s e-mail certificate, you will no longer be able to send encrypted e-mail to that person.
 
 # Used for semi-uniquely representing a cert.
 #
 # Variables:
 #   $serialNumber : the serial number of the cert in AA:BB:CC hex format.
 cert-with-serial =
     .value = Certificate with serial number: { $serialNumber }
 
-# Used to indicate that the user chose not to send a client authentication certificate to a server that requested one in a TLS handshake.
-send-no-client-certificate = Send no client certificate
-
 ## Add Security Exception dialog
 add-exception-branded-warning = You are about to override how { -brand-short-name } identifies this site.
 add-exception-invalid-header = This site attempts to identify itself with invalid information.
 add-exception-domain-mismatch-short = Wrong Site
 add-exception-domain-mismatch-long = The certificate belongs to a different site, which could mean that someone is trying to impersonate this site.
 add-exception-expired-short = Outdated Information
 add-exception-expired-long = The certificate is not currently valid. It may have been stolen or lost, and could be used by someone to impersonate this site.
 add-exception-unverified-or-bad-signature-short = Unknown Identity
--- a/security/manager/pki/resources/content/certManager.js
+++ b/security/manager/pki/resources/content/certManager.js
@@ -44,32 +44,30 @@ var emailTreeView;
  */
 var userTreeView;
 
 var clientAuthRememberService;
 
 var richlist;
 
 var rememberedDecisionsRichList = {
-  async buildRichList() {
+  buildRichList() {
     let rememberedDecisions = clientAuthRememberService.getDecisions();
 
     let oldItems = richlist.querySelectorAll("richlistitem");
     for (let item of oldItems) {
       item.remove();
     }
 
     let frag = document.createDocumentFragment();
     for (let decision of rememberedDecisions) {
-      let richlistitem = await this._richBoxAddItem(decision);
+      let richlistitem = this._richBoxAddItem(decision);
       frag.appendChild(richlistitem);
     }
     richlist.appendChild(frag);
-
-    richlist.addEventListener("select", () => this.setButtonState());
   },
 
   _createItem(item) {
     let innerHbox = document.createXULElement("hbox");
     innerHbox.setAttribute("align", "center");
     innerHbox.setAttribute("flex", "1");
 
     let row = document.createXULElement("label");
@@ -78,91 +76,66 @@ var rememberedDecisionsRichList = {
     row.setAttribute("style", "margin-inline-start: 15px;");
     row.setAttribute("value", item);
     row.setAttribute("ordinal", "1");
     innerHbox.appendChild(row);
 
     return innerHbox;
   },
 
-  async _richBoxAddItem(item) {
+  _richBoxAddItem(item) {
     let richlistitem = document.createXULElement("richlistitem");
 
     richlistitem.setAttribute("entryKey", item.entryKey);
     richlistitem.setAttribute("dbKey", item.dbKey);
 
     let hbox = document.createXULElement("hbox");
     hbox.setAttribute("flex", "1");
     hbox.setAttribute("equalsize", "always");
 
+    let tmpCert = certdb.findCertByDBKey(item.dbKey);
+
     hbox.appendChild(this._createItem(item.asciiHost));
-    if (item.dbKey == "") {
-      let noCertSpecified = await document.l10n.formatValue(
-        "send-no-client-certificate"
-      );
-
-      hbox.appendChild(this._createItem(noCertSpecified));
 
-      hbox.appendChild(this._createItem(""));
-    } else {
-      let tmpCert = certdb.findCertByDBKey(item.dbKey);
+    hbox.appendChild(this._createItem(tmpCert.commonName));
 
-      hbox.appendChild(this._createItem(tmpCert.commonName));
-
-      hbox.appendChild(this._createItem(tmpCert.serialNumber));
-    }
+    hbox.appendChild(this._createItem(tmpCert.serialNumber));
 
     richlistitem.appendChild(hbox);
 
     return richlistitem;
   },
 
-  async deleteSelectedRichListItem() {
+  deleteSelectedRichListItem() {
     let selectedItem = richlist.selectedItem;
     let index = richlist.selectedIndex;
     if (index < 0) {
       return;
     }
 
     clientAuthRememberService.forgetRememberedDecision(
       selectedItem.attributes.entryKey.value
     );
 
-    await this.buildRichList();
-    this.setButtonState();
+    this.buildRichList();
   },
 
   viewSelectedRichListItem() {
     let selectedItem = richlist.selectedItem;
     let index = richlist.selectedIndex;
     if (index < 0) {
       return;
     }
 
-    if (selectedItem.attributes.dbKey.value != "") {
-      let cert = certdb.findCertByDBKey(selectedItem.attributes.dbKey.value);
-      viewCertHelper(window, cert);
-    }
-  },
-
-  setButtonState() {
-    let rememberedDeleteButton = document.getElementById(
-      "remembered_deleteButton"
-    );
-    let rememberedViewButton = document.getElementById("remembered_viewButton");
-
-    rememberedDeleteButton.disabled = richlist.selectedIndex < 0;
-    rememberedViewButton.disabled =
-      richlist.selectedItem == null
-        ? true
-        : richlist.selectedItem.attributes.dbKey.value == "";
+    let cert = certdb.findCertByDBKey(selectedItem.attributes.dbKey.value);
+    viewCertHelper(window, cert);
   },
 };
 
-async function LoadCerts() {
+function LoadCerts() {
   certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(
     Ci.nsIX509CertDB
   );
   var certcache = certdb.getCerts();
 
   caTreeView = Cc["@mozilla.org/security/nsCertTree;1"].createInstance(
     Ci.nsICertTree
   );
@@ -188,19 +161,17 @@ async function LoadCerts() {
   document.getElementById("user-tree").view = userTreeView;
 
   clientAuthRememberService = Cc[
     "@mozilla.org/security/clientAuthRememberService;1"
   ].getService(Ci.nsIClientAuthRememberService);
 
   richlist = document.getElementById("rememberedList");
 
-  await rememberedDecisionsRichList.buildRichList();
-
-  rememberedDecisionsRichList.setButtonState();
+  rememberedDecisionsRichList.buildRichList();
 
   enableBackupAllButton();
 }
 
 function enableBackupAllButton() {
   let backupAllButton = document.getElementById("mine_backupAllButton");
   backupAllButton.disabled = userTreeView.rowCount < 1;
 }
--- a/security/manager/ssl/DataStorageList.h
+++ b/security/manager/ssl/DataStorageList.h
@@ -9,12 +9,11 @@
 // storage in the profile directory.
 //
 // Please note that it is crucial for performance reasons for the number of
 // these classes to remain low.  If you need to add to this list, you may
 // need to update the algorithm in DataStorage::SetCachedStorageEntries()
 // to something faster.
 
 DATA_STORAGE(AlternateServices)
-DATA_STORAGE(ClientAuthRememberList)
 DATA_STORAGE(SecurityPreloadState)
 DATA_STORAGE(SiteSecurityServiceState)
 DATA_STORAGE(TRRBlacklist)
--- a/security/manager/ssl/nsClientAuthRemember.cpp
+++ b/security/manager/ssl/nsClientAuthRemember.cpp
@@ -2,43 +2,38 @@
  *
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsClientAuthRemember.h"
 
 #include "mozilla/BasePrincipal.h"
-#include "mozilla/DataStorage.h"
 #include "mozilla/RefPtr.h"
 #include "nsCRT.h"
 #include "nsNSSCertHelper.h"
 #include "nsIObserverService.h"
 #include "nsNetUtil.h"
 #include "nsPromiseFlatString.h"
 #include "nsThreadUtils.h"
 #include "nsStringBuffer.h"
 #include "cert.h"
 #include "nspr.h"
 #include "pk11pub.h"
 #include "certdb.h"
 #include "sechash.h"
 #include "SharedSSLState.h"
 
-#include "nsJSUtils.h"
-
 using namespace mozilla;
 using namespace mozilla::psm;
 
-NS_IMPL_ISUPPORTS(nsClientAuthRememberService, nsIClientAuthRememberService)
+NS_IMPL_ISUPPORTS(nsClientAuthRememberService, nsIClientAuthRememberService,
+                  nsIObserver)
 NS_IMPL_ISUPPORTS(nsClientAuthRemember, nsIClientAuthRememberRecord)
 
-const nsCString nsClientAuthRemember::SentinelValue =
-    "no client certificate"_ns;
-
 NS_IMETHODIMP
 nsClientAuthRemember::GetAsciiHost(/*out*/ nsACString& aAsciiHost) {
   aAsciiHost = mAsciiHost;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsClientAuthRemember::GetFingerprint(/*out*/ nsACString& aFingerprint) {
@@ -53,95 +48,104 @@ nsClientAuthRemember::GetDbKey(/*out*/ n
 }
 
 NS_IMETHODIMP
 nsClientAuthRemember::GetEntryKey(/*out*/ nsACString& aEntryKey) {
   aEntryKey = mEntryKey;
   return NS_OK;
 }
 
+nsClientAuthRememberService::nsClientAuthRememberService()
+    : monitor("nsClientAuthRememberService.monitor") {}
+
+nsClientAuthRememberService::~nsClientAuthRememberService() {
+  RemoveAllFromMemory();
+}
+
 nsresult nsClientAuthRememberService::Init() {
   if (!NS_IsMainThread()) {
     NS_ERROR("nsClientAuthRememberService::Init called off the main thread");
     return NS_ERROR_NOT_SAME_THREAD;
   }
 
-  mClientAuthRememberList =
-      mozilla::DataStorage::Get(DataStorageClass::ClientAuthRememberList);
-  nsresult rv = mClientAuthRememberList->Init(nullptr);
-
-  if (NS_WARN_IF(NS_FAILED(rv))) {
-    return rv;
+  nsCOMPtr<nsIObserverService> observerService =
+      mozilla::services::GetObserverService();
+  if (observerService) {
+    observerService->AddObserver(this, "profile-before-change", false);
+    observerService->AddObserver(this, "last-pb-context-exited", false);
   }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsClientAuthRememberService::ForgetRememberedDecision(const nsACString& key) {
-  mClientAuthRememberList->Remove(PromiseFlatCString(key),
-                                  mozilla::DataStorage_Persistent);
+  {
+    ReentrantMonitorAutoEnter lock(monitor);
+    mSettingsTable.RemoveEntry(PromiseFlatCString(key).get());
+  }
 
   nsNSSComponent::ClearSSLExternalAndInternalSessionCacheNative();
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsClientAuthRememberService::GetDecisions(
     nsTArray<RefPtr<nsIClientAuthRememberRecord>>& results) {
-  nsTArray<mozilla::psm::DataStorageItem> decisions;
-  mClientAuthRememberList->GetAll(&decisions);
+  ReentrantMonitorAutoEnter lock(monitor);
+  for (auto iter = mSettingsTable.Iter(); !iter.Done(); iter.Next()) {
+    if (!nsClientAuthRememberService::IsPrivateBrowsingKey(
+            iter.Get()->mEntryKey)) {
+      results.AppendElement(iter.Get()->mSettings);
+    }
+  }
+
+  return NS_OK;
+}
 
-  for (const mozilla::psm::DataStorageItem& decision : decisions) {
-    if (decision.type() == DataStorageType::DataStorage_Persistent) {
-      RefPtr<nsIClientAuthRememberRecord> tmp =
-          new nsClientAuthRemember(decision.key(), decision.value());
+NS_IMETHODIMP
+nsClientAuthRememberService::Observe(nsISupports* aSubject, const char* aTopic,
+                                     const char16_t* aData) {
+  // check the topic
+  if (!nsCRT::strcmp(aTopic, "profile-before-change")) {
+    // The profile is about to change,
+    // or is going away because the application is shutting down.
 
-      results.AppendElement(tmp);
-    }
+    ReentrantMonitorAutoEnter lock(monitor);
+    RemoveAllFromMemory();
+  } else if (!nsCRT::strcmp(aTopic, "last-pb-context-exited")) {
+    ReentrantMonitorAutoEnter lock(monitor);
+    ClearPrivateDecisions();
   }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsClientAuthRememberService::ClearRememberedDecisions() {
-  mClientAuthRememberList->Clear();
-  nsNSSComponent::ClearSSLExternalAndInternalSessionCacheNative();
+  ReentrantMonitorAutoEnter lock(monitor);
+  RemoveAllFromMemory();
   return NS_OK;
 }
 
-NS_IMETHODIMP
-nsClientAuthRememberService::DeleteDecisionsByHost(
-    const nsACString& aHostName, JS::Handle<JS::Value> aOriginAttributes,
-    JSContext* aCx) {
-  OriginAttributes attrs;
-  if (!aOriginAttributes.isObject() || !attrs.Init(aCx, aOriginAttributes)) {
-    return NS_ERROR_INVALID_ARG;
-  }
-  DataStorageType storageType = GetDataStorageType(attrs);
-
-  nsTArray<mozilla::psm::DataStorageItem> decisions;
-  mClientAuthRememberList->GetAll(&decisions);
-
-  for (const mozilla::psm::DataStorageItem& decision : decisions) {
-    if (decision.type() == storageType) {
-      RefPtr<nsIClientAuthRememberRecord> tmp =
-          new nsClientAuthRemember(decision.key(), decision.value());
-      nsAutoCString asciiHost;
-      tmp->GetAsciiHost(asciiHost);
-      if (asciiHost.Equals(aHostName)) {
-        mClientAuthRememberList->Remove(decision.key(), decision.type());
-      }
+nsresult nsClientAuthRememberService::ClearPrivateDecisions() {
+  ReentrantMonitorAutoEnter lock(monitor);
+  for (auto iter = mSettingsTable.Iter(); !iter.Done(); iter.Next()) {
+    if (nsClientAuthRememberService::IsPrivateBrowsingKey(
+            iter.Get()->mEntryKey)) {
+      iter.Remove();
     }
   }
-  nsNSSComponent::ClearSSLExternalAndInternalSessionCacheNative();
   return NS_OK;
 }
 
+void nsClientAuthRememberService::RemoveAllFromMemory() {
+  mSettingsTable.Clear();
+}
+
 NS_IMETHODIMP
 nsClientAuthRememberService::RememberDecision(
     const nsACString& aHostName, const OriginAttributes& aOriginAttributes,
     CERTCertificate* aServerCert, CERTCertificate* aClientCert) {
   // aClientCert == nullptr means: remember that user does not want to use a
   // cert
   NS_ENSURE_ARG_POINTER(aServerCert);
   if (aHostName.IsEmpty()) {
@@ -149,106 +153,101 @@ nsClientAuthRememberService::RememberDec
   }
 
   nsAutoCString fpStr;
   nsresult rv = GetCertFingerprintByOidTag(aServerCert, SEC_OID_SHA256, fpStr);
   if (NS_FAILED(rv)) {
     return rv;
   }
 
-  if (aClientCert) {
-    RefPtr<nsNSSCertificate> pipCert(new nsNSSCertificate(aClientCert));
-    nsAutoCString dbkey;
-    rv = pipCert->GetDbKey(dbkey);
-    if (NS_SUCCEEDED(rv)) {
-      AddEntryToList(aHostName, aOriginAttributes, fpStr, dbkey);
+  {
+    ReentrantMonitorAutoEnter lock(monitor);
+    if (aClientCert) {
+      RefPtr<nsNSSCertificate> pipCert(new nsNSSCertificate(aClientCert));
+      nsAutoCString dbkey;
+      rv = pipCert->GetDbKey(dbkey);
+      if (NS_SUCCEEDED(rv)) {
+        AddEntryToList(aHostName, aOriginAttributes, fpStr, dbkey);
+      }
+    } else {
+      nsCString empty;
+      AddEntryToList(aHostName, aOriginAttributes, fpStr, empty);
     }
-  } else {
-    AddEntryToList(aHostName, aOriginAttributes, fpStr,
-                   nsClientAuthRemember::SentinelValue);
   }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsClientAuthRememberService::HasRememberedDecision(
     const nsACString& aHostName, const OriginAttributes& aOriginAttributes,
     CERTCertificate* aCert, nsACString& aCertDBKey, bool* aRetVal) {
   if (aHostName.IsEmpty()) return NS_ERROR_INVALID_ARG;
 
   NS_ENSURE_ARG_POINTER(aCert);
   NS_ENSURE_ARG_POINTER(aRetVal);
   *aRetVal = false;
-  aCertDBKey.Truncate();
 
   nsresult rv;
   nsAutoCString fpStr;
   rv = GetCertFingerprintByOidTag(aCert, SEC_OID_SHA256, fpStr);
   if (NS_FAILED(rv)) return rv;
 
   nsAutoCString entryKey;
   GetEntryKey(aHostName, aOriginAttributes, fpStr, entryKey);
-  DataStorageType storageType = GetDataStorageType(aOriginAttributes);
-
-  nsCString listEntry = mClientAuthRememberList->Get(entryKey, storageType);
-  if (listEntry.IsEmpty()) {
-    return NS_OK;
+  {
+    ReentrantMonitorAutoEnter lock(monitor);
+    nsClientAuthRememberEntry* entry = mSettingsTable.GetEntry(entryKey.get());
+    if (!entry) return NS_OK;
+    entry->mSettings->GetDbKey(aCertDBKey);
+    *aRetVal = true;
   }
-
-  if (!listEntry.Equals(nsClientAuthRemember::SentinelValue)) {
-    aCertDBKey = listEntry;
-  }
-  *aRetVal = true;
-
   return NS_OK;
 }
 
 nsresult nsClientAuthRememberService::AddEntryToList(
     const nsACString& aHostName, const OriginAttributes& aOriginAttributes,
     const nsACString& aFingerprint, const nsACString& aDBKey) {
   nsAutoCString entryKey;
   GetEntryKey(aHostName, aOriginAttributes, aFingerprint, entryKey);
-  DataStorageType storageType = GetDataStorageType(aOriginAttributes);
+
+  {
+    ReentrantMonitorAutoEnter lock(monitor);
+    nsClientAuthRememberEntry* entry = mSettingsTable.PutEntry(entryKey.get());
 
-  nsCString tmpDbKey(aDBKey);
-  nsresult rv = mClientAuthRememberList->Put(entryKey, tmpDbKey, storageType);
-  if (NS_FAILED(rv)) {
-    return rv;
+    if (!entry) {
+      NS_ERROR("can't insert a null entry!");
+      return NS_ERROR_OUT_OF_MEMORY;
+    }
+
+    entry->mEntryKey = entryKey;
+
+    entry->mSettings =
+        new nsClientAuthRemember(aHostName, aFingerprint, aDBKey, entryKey);
   }
 
   return NS_OK;
 }
 
 void nsClientAuthRememberService::GetEntryKey(
     const nsACString& aHostName, const OriginAttributes& aOriginAttributes,
     const nsACString& aFingerprint, nsACString& aEntryKey) {
   nsAutoCString hostCert(aHostName);
-  hostCert.Append(',');
-  hostCert.Append(aFingerprint);
-  hostCert.Append(',');
-
   nsAutoCString suffix;
   aOriginAttributes.CreateSuffix(suffix);
   hostCert.Append(suffix);
+  hostCert.Append(':');
+  hostCert.Append(aFingerprint);
 
   aEntryKey.Assign(hostCert);
 }
 
 bool nsClientAuthRememberService::IsPrivateBrowsingKey(
     const nsCString& entryKey) {
   const int32_t separator = entryKey.Find(":", false, 0, -1);
   nsCString suffix;
   if (separator >= 0) {
     entryKey.Left(suffix, separator);
   } else {
     suffix = entryKey;
   }
   return OriginAttributes::IsPrivateBrowsing(suffix);
 }
-
-DataStorageType nsClientAuthRememberService::GetDataStorageType(
-    const OriginAttributes& aOriginAttributes) {
-  if (aOriginAttributes.mPrivateBrowsingId > 0) {
-    return DataStorage_Private;
-  }
-  return DataStorage_Persistent;
-}
--- a/security/manager/ssl/nsClientAuthRemember.h
+++ b/security/manager/ssl/nsClientAuthRemember.h
@@ -5,17 +5,16 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef __NSCLIENTAUTHREMEMBER_H__
 #define __NSCLIENTAUTHREMEMBER_H__
 
 #include <utility>
 
 #include "mozilla/Attributes.h"
-#include "mozilla/DataStorage.h"
 #include "mozilla/HashFunctions.h"
 #include "mozilla/ReentrantMonitor.h"
 #include "nsIClientAuthRememberService.h"
 #include "nsIObserver.h"
 #include "nsNSSCertificate.h"
 #include "nsString.h"
 #include "nsTHashtable.h"
 #include "nsWeakReference.h"
@@ -26,66 +25,103 @@ class OriginAttributes;
 
 using mozilla::OriginAttributes;
 
 class nsClientAuthRemember final : public nsIClientAuthRememberRecord {
  public:
   NS_DECL_THREADSAFE_ISUPPORTS
   NS_DECL_NSICLIENTAUTHREMEMBERRECORD
 
-  nsClientAuthRemember(const nsCString& aEntryKey, const nsCString& aDBKey) {
+  nsClientAuthRemember(const nsACString& aAsciiHost,
+                       const nsACString& aFingerprint, const nsACString& aDBKey,
+                       const nsACString& aEntryKey) {
+    mAsciiHost = aAsciiHost;
+    mFingerprint = aFingerprint;
+    mDBKey = aDBKey;
     mEntryKey = aEntryKey;
-    if (!aDBKey.Equals(nsClientAuthRemember::SentinelValue)) {
-      mDBKey = aDBKey;
-    }
-
-    nsTArray<nsCString*> fields = {&mAsciiHost, &mFingerprint};
-
-    auto fieldsIter = fields.begin();
-    auto splitter = aEntryKey.Split(',');
-    auto splitterIter = splitter.begin();
-    for (; fieldsIter != fields.end() && splitterIter != splitter.end();
-         ++fieldsIter, ++splitterIter) {
-      (*fieldsIter)->Assign(*splitterIter);
-    }
   }
 
   nsCString mAsciiHost;
   nsCString mFingerprint;
   nsCString mDBKey;
   nsCString mEntryKey;
-  static const nsCString SentinelValue;
 
  protected:
   ~nsClientAuthRemember() = default;
 };
 
-class nsClientAuthRememberService final : public nsIClientAuthRememberService {
+// hash entry class
+class nsClientAuthRememberEntry final : public PLDHashEntryHdr {
+ public:
+  // Hash methods
+  typedef const char* KeyType;
+  typedef const char* KeyTypePointer;
+
+  // do nothing with aHost - we require mHead to be set before we're live!
+  explicit nsClientAuthRememberEntry(KeyTypePointer aHostWithCertUTF8) {}
+
+  nsClientAuthRememberEntry(nsClientAuthRememberEntry&& aToMove)
+      : PLDHashEntryHdr(std::move(aToMove)),
+        mSettings(std::move(aToMove.mSettings)),
+        mEntryKey(std::move(aToMove.mEntryKey)) {}
+
+  ~nsClientAuthRememberEntry() = default;
+
+  KeyType GetKey() const { return EntryKeyPtr(); }
+
+  KeyTypePointer GetKeyPointer() const { return EntryKeyPtr(); }
+
+  bool KeyEquals(KeyTypePointer aKey) const {
+    return !strcmp(EntryKeyPtr(), aKey);
+  }
+
+  static KeyTypePointer KeyToPointer(KeyType aKey) { return aKey; }
+
+  static PLDHashNumber HashKey(KeyTypePointer aKey) {
+    return mozilla::HashString(aKey);
+  }
+
+  enum { ALLOW_MEMMOVE = false };
+
+  // get methods
+  inline const nsCString& GetEntryKey() const { return mEntryKey; }
+
+  inline KeyTypePointer EntryKeyPtr() const { return mEntryKey.get(); }
+
+  nsCOMPtr<nsIClientAuthRememberRecord> mSettings;
+  nsCString mEntryKey;
+};
+
+class nsClientAuthRememberService final : public nsIObserver,
+                                          public nsIClientAuthRememberService {
  public:
   NS_DECL_THREADSAFE_ISUPPORTS
+  NS_DECL_NSIOBSERVER
   NS_DECL_NSICLIENTAUTHREMEMBERSERVICE
 
-  nsClientAuthRememberService() = default;
+  nsClientAuthRememberService();
 
   nsresult Init();
 
   static void GetEntryKey(const nsACString& aHostName,
                           const OriginAttributes& aOriginAttributes,
                           const nsACString& aFingerprint,
                           /*out*/ nsACString& aEntryKey);
 
   static bool IsPrivateBrowsingKey(const nsCString& entryKey);
 
  protected:
-  ~nsClientAuthRememberService() = default;
+  ~nsClientAuthRememberService();
 
-  static mozilla::DataStorageType GetDataStorageType(
-      const OriginAttributes& aOriginAttributes);
+  mozilla::ReentrantMonitor monitor;
+  nsTHashtable<nsClientAuthRememberEntry> mSettingsTable;
 
-  RefPtr<mozilla::DataStorage> mClientAuthRememberList;
+  void RemoveAllFromMemory();
+
+  nsresult ClearPrivateDecisions();
 
   nsresult AddEntryToList(const nsACString& aHost,
                           const OriginAttributes& aOriginAttributes,
                           const nsACString& aServerFingerprint,
                           const nsACString& aDBKey);
 };
 
 #endif
--- a/security/manager/ssl/nsIClientAuthRememberService.idl
+++ b/security/manager/ssl/nsIClientAuthRememberService.idl
@@ -49,14 +49,9 @@ interface nsIClientAuthRememberService :
   [must_use, noscript]
   bool hasRememberedDecision(in ACString aHostName,
                              in const_OriginAttributesRef aOriginAttributes,
                              in CERTCertificatePtr aServerCert,
                              out ACString aCertDBKey);
 
   [must_use]
   void clearRememberedDecisions();
-
-  [implicit_jscontext]
-  void deleteDecisionsByHost(in ACString aHostName,
-                             in jsval aOriginAttributes);
-
 };
--- a/security/manager/ssl/nsNSSComponent.cpp
+++ b/security/manager/ssl/nsNSSComponent.cpp
@@ -2483,17 +2483,24 @@ nsresult nsNSSComponent::GetNewPrompter(
 
 nsresult nsNSSComponent::LogoutAuthenticatedPK11() {
   nsCOMPtr<nsICertOverrideService> icos =
       do_GetService("@mozilla.org/security/certoverride;1");
   if (icos) {
     icos->ClearValidityOverride("all:temporary-certificates"_ns, 0);
   }
 
-  nsNSSComponent::ClearSSLExternalAndInternalSessionCacheNative();
+  nsCOMPtr<nsIClientAuthRememberService> svc =
+      do_GetService(NS_CLIENTAUTHREMEMBERSERVICE_CONTRACTID);
+
+  if (svc) {
+    nsresult rv = svc->ClearRememberedDecisions();
+
+    Unused << NS_WARN_IF(NS_FAILED(rv));
+  }
 
   nsCOMPtr<nsIObserverService> os = mozilla::services::GetObserverService();
   if (os) {
     os->NotifyObservers(nullptr, "net:cancel-all-connections", nullptr);
   }
 
   return NS_OK;
 }
--- a/security/manager/ssl/nsNSSIOLayer.cpp
+++ b/security/manager/ssl/nsNSSIOLayer.cpp
@@ -2337,22 +2337,17 @@ void ClientAuthDataRunnable::RunOnTarget
     nsCString rememberedDBKey;
     bool found;
     nsresult rv =
         cars->HasRememberedDecision(hostname, mInfo.OriginAttributesRef(),
                                     mServerCert, rememberedDBKey, &found);
     if (NS_WARN_IF(NS_FAILED(rv))) {
       return;
     }
-    if (found) {
-      // An empty dbKey indicates that the user chose not to use a certificate
-      // and chose to remember this decision
-      if (rememberedDBKey.IsEmpty()) {
-        return;
-      }
+    if (found && !rememberedDBKey.IsEmpty()) {
       nsCOMPtr<nsIX509CertDB> certdb = do_GetService(NS_X509CERTDB_CONTRACTID);
       if (NS_WARN_IF(!certdb)) {
         return;
       }
       nsCOMPtr<nsIX509Cert> foundCert;
       nsresult rv =
           certdb->FindCertByDBKey(rememberedDBKey, getter_AddRefs(foundCert));
       if (NS_WARN_IF(NS_FAILED(rv))) {
--- a/security/manager/ssl/tests/mochitest/browser/browser_clientAuthRememberService.js
+++ b/security/manager/ssl/tests/mochitest/browser/browser_clientAuthRememberService.js
@@ -6,17 +6,16 @@
 /**
  * Test certificate (i.e. build/pgo/certs/mochitest.client).
  * @type nsIX509Cert
  */
 var cert;
 var cert2;
 var cert3;
 
-var sdr = Cc["@mozilla.org/security/sdr;1"].getService(Ci.nsISecretDecoderRing);
 var certDB = Cc["@mozilla.org/security/x509certdb;1"].getService(
   Ci.nsIX509CertDB
 );
 
 var deleted = false;
 
 const { MockRegistrar } = ChromeUtils.import(
   "resource://testing-common/MockRegistrar.jsm"
@@ -26,61 +25,16 @@ function findCertByCommonName(commonName
   for (let cert of certDB.getCerts()) {
     if (cert.commonName == commonName) {
       return cert;
     }
   }
   return null;
 }
 
-async function testHelper(connectURL, expectedURL) {
-  let win = await BrowserTestUtils.openNewBrowserWindow();
-
-  await SpecialPowers.pushPrefEnv({
-    set: [["security.default_personal_cert", "Ask Every Time"]],
-  });
-
-  await BrowserTestUtils.loadURI(win.gBrowser.selectedBrowser, connectURL);
-
-  await BrowserTestUtils.browserLoaded(
-    win.gBrowser.selectedBrowser,
-    false,
-    expectedURL,
-    true
-  );
-  let loadedURL = win.gBrowser.selectedBrowser.documentURI.spec;
-  Assert.ok(
-    loadedURL.startsWith(expectedURL),
-    `Expected and actual URLs should match (got '${loadedURL}', expected '${expectedURL}')`
-  );
-
-  await win.close();
-
-  // This clears the TLS session cache so we don't use a previously-established
-  // ticket to connect and bypass selecting a client auth certificate in
-  // subsequent tests.
-  sdr.logout();
-}
-
-async function openRequireClientCert() {
-  gClientAuthDialogs.chooseCertificateCalled = false;
-  await testHelper(
-    "https://requireclientcert.example.com:443",
-    "https://requireclientcert.example.com/"
-  );
-}
-
-async function openRequireClientCert2() {
-  gClientAuthDialogs.chooseCertificateCalled = false;
-  await testHelper(
-    "https://requireclientcert-2.example.com:443",
-    "https://requireclientcert-2.example.com/"
-  );
-}
-
 // Mock implementation of nsIClientAuthRememberService
 const gClientAuthRememberService = {
   forgetRememberedDecision(key) {
     deleted = true;
     Assert.equal(
       key,
       "exampleKey2",
       "Expected to get the same key that was passed in getDecisions()"
@@ -105,58 +59,33 @@ const gClientAuthRememberService = {
         entryKey: "exampleKey3",
       },
     ];
   },
 
   QueryInterface: ChromeUtils.generateQI(["nsIClientAuthRememberService"]),
 };
 
-const gClientAuthDialogs = {
-  _chooseCertificateCalled: false,
-
-  get chooseCertificateCalled() {
-    return this._chooseCertificateCalled;
-  },
-
-  set chooseCertificateCalled(value) {
-    this._chooseCertificateCalled = value;
-  },
-
-  chooseCertificate(
-    hostname,
-    port,
-    organization,
-    issuerOrg,
-    certList,
-    selectedIndex,
-    rememberClientAuthCertificate
-  ) {
-    rememberClientAuthCertificate.value = true;
-    this.chooseCertificateCalled = true;
-    selectedIndex.value = 0;
-    return true;
-  },
-
-  QueryInterface: ChromeUtils.generateQI([Ci.nsIClientAuthDialogs]),
-};
-
 add_task(async function testRememberedDecisionsUI() {
   cert = findCertByCommonName("Mochitest client");
   cert2 = await readCertificate("pgo-ca-all-usages.pem", ",,");
   cert3 = await readCertificate("client-cert-via-intermediate.pem", ",,");
   isnot(cert, null, "Should be able to find the test client cert");
   isnot(cert2, null, "Should be able to find pgo-ca-all-usages.pem");
   isnot(cert3, null, "Should be able to find client-cert-via-intermediate.pem");
 
   let clientAuthRememberServiceCID = MockRegistrar.register(
     "@mozilla.org/security/clientAuthRememberService;1",
     gClientAuthRememberService
   );
 
+  registerCleanupFunction(() => {
+    MockRegistrar.unregister(clientAuthRememberServiceCID);
+  });
+
   let win = await openCertManager();
 
   let listItems = win.document
     .getElementById("rememberedList")
     .querySelectorAll("richlistitem");
 
   Assert.equal(
     listItems.length,
@@ -202,56 +131,9 @@ add_task(async function testRememberedDe
   win.document.getElementById("rememberedList").selectedIndex = 1;
 
   win.document.getElementById("remembered_deleteButton").click();
 
   Assert.ok(deleted, "Expected forgetRememberedDecision() to get called");
 
   win.document.getElementById("certmanager").acceptDialog();
   await BrowserTestUtils.windowClosed(win);
-
-  MockRegistrar.unregister(clientAuthRememberServiceCID);
 });
-
-add_task(async function testDeletingRememberedDecisions() {
-  let clientAuthDialogsCID = MockRegistrar.register(
-    "@mozilla.org/nsClientAuthDialogs;1",
-    gClientAuthDialogs
-  );
-  let cars = Cc["@mozilla.org/security/clientAuthRememberService;1"].getService(
-    Ci.nsIClientAuthRememberService
-  );
-
-  await openRequireClientCert();
-  Assert.ok(
-    gClientAuthDialogs.chooseCertificateCalled,
-    "chooseCertificate should have been called if visiting 'requireclientcert.example.com' for the first time"
-  );
-
-  await openRequireClientCert();
-  Assert.ok(
-    !gClientAuthDialogs.chooseCertificateCalled,
-    "chooseCertificate should not have been called if visiting 'requireclientcert.example.com' for the second time"
-  );
-
-  await openRequireClientCert2();
-  Assert.ok(
-    gClientAuthDialogs.chooseCertificateCalled,
-    "chooseCertificate should have been called if visiting'requireclientcert-2.example.com' for the first time"
-  );
-
-  let originAttributes = { privateBrowsingId: 0 };
-  cars.deleteDecisionsByHost("requireclientcert.example.com", originAttributes);
-
-  await openRequireClientCert();
-  Assert.ok(
-    gClientAuthDialogs.chooseCertificateCalled,
-    "chooseCertificate should have been called after removing all remembered decisions for 'requireclientcert.example.com'"
-  );
-
-  await openRequireClientCert2();
-  Assert.ok(
-    !gClientAuthDialogs.chooseCertificateCalled,
-    "chooseCertificate should not have been called if visiting 'requireclientcert-2.example.com' for the second time"
-  );
-
-  MockRegistrar.unregister(clientAuthDialogsCID);
-});
--- a/security/manager/ssl/tests/mochitest/browser/browser_clientAuth_connection.js
+++ b/security/manager/ssl/tests/mochitest/browser/browser_clientAuth_connection.js
@@ -16,19 +16,16 @@ const DialogState = {
   ASSERT_NOT_CALLED: "ASSERT_NOT_CALLED",
   // Return that the user selected the first given cert.
   RETURN_CERT_SELECTED: "RETURN_CERT_SELECTED",
   // Return that the user canceled.
   RETURN_CERT_NOT_SELECTED: "RETURN_CERT_NOT_SELECTED",
 };
 
 var sdr = Cc["@mozilla.org/security/sdr;1"].getService(Ci.nsISecretDecoderRing);
-let cars = Cc["@mozilla.org/security/clientAuthRememberService;1"].getService(
-  Ci.nsIClientAuthRememberService
-);
 
 var gExpectedClientCertificateChoices;
 
 // Mock implementation of nsIClientAuthDialogs.
 const gClientAuthDialogs = {
   _state: DialogState.ASSERT_NOT_CALLED,
   _rememberClientAuthCertificate: false,
   _chooseCertificateCalled: false,
@@ -158,27 +155,20 @@ add_task(async function setup() {
  * Test helper for the tests below.
  *
  * @param {String} prefValue
  *        Value to set the "security.default_personal_cert" pref to.
  * @param {String} expectedURL
  *        If the connection is expected to load successfully, the URL that
  *        should load. If the connection is expected to fail and result in an
  *        error page, |undefined|.
- * @param {Boolean} expectCallingChooseCertificate
- *        Determines whether we expect chooseCertificate to be called.
  * @param {Object} options
  *        Optional options object to pass on to the window that gets opened.
  */
-async function testHelper(
-  prefValue,
-  expectedURL,
-  expectCallingChooseCertificate,
-  options = undefined
-) {
+async function testHelper(prefValue, expectedURL, options = undefined) {
   gClientAuthDialogs.chooseCertificateCalled = false;
   await SpecialPowers.pushPrefEnv({
     set: [["security.default_personal_cert", prefValue]],
   });
 
   let win = await BrowserTestUtils.openNewBrowserWindow(options);
 
   await BrowserTestUtils.loadURI(
@@ -194,17 +184,17 @@ async function testHelper(
   );
   let loadedURL = win.gBrowser.selectedBrowser.documentURI.spec;
   Assert.ok(
     loadedURL.startsWith(expectedURL),
     `Expected and actual URLs should match (got '${loadedURL}', expected '${expectedURL}')`
   );
   Assert.equal(
     gClientAuthDialogs.chooseCertificateCalled,
-    expectCallingChooseCertificate,
+    prefValue == "Ask Every Time",
     "chooseCertificate should have been called if we were expecting it to be called"
   );
 
   await win.close();
 
   // This clears the TLS session cache so we don't use a previously-established
   // ticket to connect and bypass selecting a client auth certificate in
   // subsequent tests.
@@ -212,101 +202,64 @@ async function testHelper(
 }
 
 // Test that if a certificate is chosen automatically the connection succeeds,
 // and that nsIClientAuthDialogs.chooseCertificate() is never called.
 add_task(async function testCertChosenAutomatically() {
   gClientAuthDialogs.state = DialogState.ASSERT_NOT_CALLED;
   await testHelper(
     "Select Automatically",
-    "https://requireclientcert.example.com/",
-    false
+    "https://requireclientcert.example.com/"
   );
   // This clears all saved client auth certificate state so we don't influence
   // subsequent tests.
-  cars.clearRememberedDecisions();
+  sdr.logoutAndTeardown();
 });
 
 // Test that if the user doesn't choose a certificate, the connection fails and
 // an error page is displayed.
 add_task(async function testCertNotChosenByUser() {
   gClientAuthDialogs.state = DialogState.RETURN_CERT_NOT_SELECTED;
   await testHelper(
     "Ask Every Time",
-    "about:neterror?e=nssFailure2&u=https%3A//requireclientcert.example.com/",
-    true
+    "about:neterror?e=nssFailure2&u=https%3A//requireclientcert.example.com/"
   );
-  cars.clearRememberedDecisions();
+  sdr.logoutAndTeardown();
 });
 
 // Test that if the user chooses a certificate the connection suceeeds.
 add_task(async function testCertChosenByUser() {
   gClientAuthDialogs.state = DialogState.RETURN_CERT_SELECTED;
-  await testHelper(
-    "Ask Every Time",
-    "https://requireclientcert.example.com/",
-    true
-  );
-  cars.clearRememberedDecisions();
-});
-
-// Test that the cancel decision is remembered correctly
-add_task(async function testEmptyCertChosenByUser() {
-  gClientAuthDialogs.state = DialogState.RETURN_CERT_NOT_SELECTED;
-  gClientAuthDialogs.rememberClientAuthCertificate = true;
-  await testHelper(
-    "Ask Every Time",
-    "about:neterror?e=nssFailure2&u=https%3A//requireclientcert.example.com/",
-    true
-  );
-  await testHelper(
-    "Ask Every Time",
-    "about:neterror?e=nssFailure2&u=https%3A//requireclientcert.example.com/",
-    false
-  );
-  cars.clearRememberedDecisions();
+  await testHelper("Ask Every Time", "https://requireclientcert.example.com/");
+  sdr.logoutAndTeardown();
 });
 
 // Test that if the user chooses a certificate in a private browsing window,
 // configures Firefox to remember this certificate for the duration of the
 // session, closes that window (and thus all private windows), reopens a private
 // window, and visits that site again, they are re-asked for a certificate (i.e.
 // any state from the previous private session should be gone). Similarly, after
 // closing that private window, if the user opens a non-private window, they
 // again should be asked to choose a certificate (i.e. private state should not
 // be remembered/used in non-private contexts).
 add_task(async function testClearPrivateBrowsingState() {
   gClientAuthDialogs.rememberClientAuthCertificate = true;
   gClientAuthDialogs.state = DialogState.RETURN_CERT_SELECTED;
-  await testHelper(
-    "Ask Every Time",
-    "https://requireclientcert.example.com/",
-    true,
-    {
-      private: true,
-    }
-  );
-  await testHelper(
-    "Ask Every Time",
-    "https://requireclientcert.example.com/",
-    true,
-    {
-      private: true,
-    }
-  );
-  await testHelper(
-    "Ask Every Time",
-    "https://requireclientcert.example.com/",
-    true
-  );
-  // NB: we don't `cars.clearRememberedDecisions()` in between the two calls to
+  await testHelper("Ask Every Time", "https://requireclientcert.example.com/", {
+    private: true,
+  });
+  await testHelper("Ask Every Time", "https://requireclientcert.example.com/", {
+    private: true,
+  });
+  await testHelper("Ask Every Time", "https://requireclientcert.example.com/");
+  // NB: we don't `sdr.logoutAndTeardown()` in between the two calls to
   // `testHelper` because that would clear all client auth certificate state and
   // obscure what we're testing (that Firefox properly clears the relevant state
   // when the last private window closes).
-  cars.clearRememberedDecisions();
+  sdr.logoutAndTeardown();
 });
 
 // Test that 3rd party certificates are taken into account when filtering client
 // certificates based on the acceptible CA list sent by the server.
 add_task(async function testCertFilteringWithIntermediate() {
   let intermediateBytes = await OS.File.read(
     getTestFilePath("intermediate.pem")
   ).then(
@@ -324,19 +277,15 @@ add_task(async function testCertFilterin
     error => {
       throw error;
     }
   );
   let nssComponent = Cc["@mozilla.org/psm;1"].getService(Ci.nsINSSComponent);
   nssComponent.addEnterpriseIntermediate(intermediateBytes);
   gExpectedClientCertificateChoices = 4;
   gClientAuthDialogs.state = DialogState.RETURN_CERT_SELECTED;
-  await testHelper(
-    "Ask Every Time",
-    "https://requireclientcert.example.com/",
-    true
-  );
-  cars.clearRememberedDecisions();
+  await testHelper("Ask Every Time", "https://requireclientcert.example.com/");
+  sdr.logoutAndTeardown();
   // This will reset the added intermediate.
   await SpecialPowers.pushPrefEnv({
     set: [["security.enterprise_roots.enabled", true]],
   });
 });
--- a/toolkit/components/cleardata/ClearDataService.jsm
+++ b/toolkit/components/cleardata/ClearDataService.jsm
@@ -923,38 +923,29 @@ const SecuritySettingsCleaner = {
           sss.resetState(
             Ci.nsISiteSecurityService.HEADER_HSTS,
             uri,
             0,
             entry.originAttributes
           );
         }
       }
-      let cars = Cc[
-        "@mozilla.org/security/clientAuthRememberService;1"
-      ].getService(Ci.nsIClientAuthRememberService);
-
-      cars.deleteDecisionsByHost(aHost, aOriginAttributes);
 
       aResolve();
     });
   },
 
   deleteAll() {
     return new Promise(aResolve => {
       // Clear site security settings - no support for ranges in this
       // interface either, so we clearAll().
       let sss = Cc["@mozilla.org/ssservice;1"].getService(
         Ci.nsISiteSecurityService
       );
       sss.clearAll();
-      let cars = Cc[
-        "@mozilla.org/security/clientAuthRememberService;1"
-      ].getService(Ci.nsIClientAuthRememberService);
-      cars.clearRememberedDecisions();
       aResolve();
     });
   },
 };
 
 const EMECleaner = {
   deleteByHost(aHost, aOriginAttributes) {
     return new Promise(aResolve => {