diff -Nru thunderbird-54.0~b1+build2/debian/changelog thunderbird-54.0~b1+build3/debian/changelog --- thunderbird-54.0~b1+build2/debian/changelog 2017-05-05 20:09:57.000000000 +0000 +++ thunderbird-54.0~b1+build3/debian/changelog 2017-05-18 20:32:57.000000000 +0000 @@ -1,3 +1,9 @@ +thunderbird (1:54.0~b1+build3-0ubuntu0.14.04.1) trusty; urgency=medium + + * New upstream release from the beta channel (THUNDERBIRD_54_0b1_BUILD3) + + -- Rico Tzschichholz Thu, 18 May 2017 22:32:57 +0200 + thunderbird (1:54.0~b1+build2-0ubuntu0.14.04.1) trusty; urgency=medium * New upstream release from the beta channel (THUNDERBIRD_54_0b1_BUILD2) diff -Nru thunderbird-54.0~b1+build2/editor/ui/composer/content/ComposerCommands.js thunderbird-54.0~b1+build3/editor/ui/composer/content/ComposerCommands.js --- thunderbird-54.0~b1+build2/editor/ui/composer/content/ComposerCommands.js 2017-05-05 19:28:11.000000000 +0000 +++ thunderbird-54.0~b1+build3/editor/ui/composer/content/ComposerCommands.js 2017-05-18 20:31:22.000000000 +0000 @@ -351,6 +351,15 @@ } catch(e) {} } +// Copied from jsmime.js. +function stringToTypedArray(buffer) { + var typedarray = new Uint8Array(buffer.length); + for (var i = 0; i < buffer.length; i++) { + typedarray[i] = buffer.charCodeAt(i); + } + return typedarray; +} + function pokeMultiStateUI(uiID, cmdParams) { try @@ -367,6 +376,8 @@ var valuetype = cmdParams.getValueType("state_attribute"); if (valuetype == Components.interfaces.nsICommandParams.eStringType) { desiredAttrib = cmdParams.getCStringValue("state_attribute"); + // Decode UTF-8, for example for font names in Japanese. + desiredAttrib = new TextDecoder("UTF-8").decode(stringToTypedArray(desiredAttrib)); } else { desiredAttrib = cmdParams.getStringValue("state_attribute"); } diff -Nru thunderbird-54.0~b1+build2/l10n/changesets thunderbird-54.0~b1+build3/l10n/changesets --- thunderbird-54.0~b1+build2/l10n/changesets 2017-05-05 19:49:12.000000000 +0000 +++ thunderbird-54.0~b1+build3/l10n/changesets 2017-05-18 20:45:51.000000000 +0000 @@ -1,59 +1,59 @@ -ar 2435:cc9274293b25 -ast 1941:67c7f16365b8 -be 2679:8a54eb6dabc0 -bg 2181:e90b3a6a2401 -bn-BD 1668:f315ebebd133 -br 1987:bce8759715d1 -ca 3211:824e8b0b967e -cs 5105:08643d99a3e9 -cy 1806:fdd64b016c73 -da 2934:b3916745d0cc -de 5729:0a822829c140 -dsb 1007:36f902f45159 -el 2204:857afb168967 -en-GB 2608:c793e79544bc -es-AR 3904:e8b40fd35aef -es-ES 5069:ed2da1f4c148 -et 2406:def06eaaf4ce -eu 2269:6729359444e2 -fi 3025:d07f7a3ed9db -fr 8140:71ed2caac457 -fy-NL 3501:108f8e4158ea -ga-IE 2507:f6e22471cbdc -gd 2320:4d33159c4aa9 -gl 3606:83fc0eba1fe9 -he 2217:dbff3820845b -hr 2359:a6cbc38ab30d -hsb 1195:b3fec7b0954d -hu 3297:267be7e6430c -hy-AM 1878:a2239f7c5ed3 -id 2422:e9d98757b4ae -is 2025:67bffb244e4a -it 7951:d377d6eea9b4 -ja 3141:e5fdd779b282 -ja-JP-mac 2573:39bfb91a4ef0 -kab 551:7887174ef11e -ko 2690:4faafb0e9de7 -lt 3794:0ffae3bba245 -nb-NO 3469:f6ade28bf91f -nl 6350:2c10fd96edf5 -nn-NO 2259:157ddb6a6397 -pa-IN 2391:a8f5308e26b0 -pl 10049:fa274f8fc826 -pt-BR 3413:06f155a65af0 -pt-PT 6042:2d4b18b0c1f7 -rm 1963:ccab1573af2d -ro 2714:24db2735c1f6 -ru 4974:0bb3dca51e84 -si 1650:06a636428ed8 -sk 4822:324416309f9a -sl 3247:683a049cad84 -sq 2586:9659c2fdf150 -sr 1872:fe4cf62b0d4d -sv-SE 5543:e335b69e3a62 -ta-LK 872:2eeaf33d1eab -tr 3030:16c314bcbcf4 -uk 3972:f6b8dc7650b2 -vi 1317:8fce29260275 -zh-CN 3362:da434834f1cc -zh-TW 3378:17cdc4c20091 +ar 2476:330af08f9e54 +ast 1947:a1f1b5cd5998 +be 2692:60d54e3a8efa +bg 2207:757ddeb5afa5 +bn-BD 1675:3304b68bb66b +br 1996:ca37d3631fec +ca 3224:490495e85c12 +cs 5116:8aabc3da79cc +cy 1818:5c07595e515f +da 2947:39657fdcb8a0 +de 5730:4f688e22d41a +dsb 1018:34c26878ae31 +el 2223:8b0631247162 +en-GB 2613:d792de97dd8d +es-AR 3912:7195e5dce2fa +es-ES 5080:f47b638c3914 +et 2452:15502819deef +eu 2277:66d28577bf43 +fi 3051:e35e3203efeb +fr 8156:e971e1bf19d7 +fy-NL 3515:ddd6e2cf4bc3 +ga-IE 2517:9d12fcfbcb61 +gd 2330:6880dae201fe +gl 3611:f9f7f3344738 +he 2225:337b139e119a +hr 2365:9bc0e5d2ecf3 +hsb 1205:755617e626e1 +hu 3328:53badf119ba3 +hy-AM 1888:7121fa0f5ebc +id 2437:c4d319257dff +is 2035:701d4e8fee95 +it 7976:cc7a41b89021 +ja 3142:2118b30db209 +ja-JP-mac 2574:8e11b35bbfc8 +kab 609:1885c62a516b +ko 2704:604fc887a20d +lt 3804:c33fd47435ae +nb-NO 3477:b6707cdd60a9 +nl 6371:7b7e4d800f86 +nn-NO 2275:cc87228baff6 +pa-IN 2395:5201415f30c7 +pl 10056:8ed9c8b51403 +pt-BR 3434:6dca5df5faf0 +pt-PT 6081:b13a6fb74d77 +rm 1968:6131e3af5970 +ro 2723:bdbfa3b401c2 +ru 4989:9296ac67a73d +si 1654:846442438a8e +sk 4831:6abc2099d45e +sl 3268:60c1e8375798 +sq 2592:857088ebdc7a +sr 1895:e19575a6a8f6 +sv-SE 5554:fe64f977e5df +ta-LK 875:704ec0453f38 +tr 3066:43a65ce4866f +uk 3999:5ccd2038268c +vi 1321:aeb94af4ec11 +zh-CN 3386:a9ff5eb56a5b +zh-TW 3390:fcd547d31d4b diff -Nru thunderbird-54.0~b1+build2/mail/app/blocklist.xml thunderbird-54.0~b1+build3/mail/app/blocklist.xml --- thunderbird-54.0~b1+build2/mail/app/blocklist.xml 2017-05-05 19:28:11.000000000 +0000 +++ thunderbird-54.0~b1+build3/mail/app/blocklist.xml 2017-05-18 20:31:22.000000000 +0000 @@ -109,6 +109,10 @@ + + + + @@ -173,6 +177,10 @@ + + + + @@ -2223,6 +2231,11 @@ + + + https://get.adobe.com/flashplayer/ + + https://get.adobe.com/flashplayer/ @@ -2496,6 +2509,11 @@ https://get.adobe.com/flashplayer/ + + + https://get.adobe.com/flashplayer/ + + https://get.adobe.com/flashplayer/ @@ -3031,8 +3049,8 @@ frj5jTuqBnQ4fljPvVU3KA== - - A4g + + AMs= BAAAAAABFqoAZoI= @@ -3085,9 +3103,6 @@ BYyEX2b5+K+myAIR7eXaRQ== - - OGPFrg= - BAAAAAABLF5/Gog= @@ -3142,9 +3157,6 @@ BydiAg== - - QAEy3RIAAAAAAAAMweH5dw= - Eg== @@ -3166,8 +3178,8 @@ Pgyeh2mqlVzqI9hFntRbUQ== - - LAVIFm0MWZYH+Sv8Vf+IqkM + + ByfDtA== Gd/pPu+qLnXUdvP9sW73CQ== @@ -3205,9 +3217,6 @@ KuzHPJLdK5hNgJRo3R47Ag== - - YUlF+VXF2FWFqCo472HfZlw - WJ2qHzWUqTk= @@ -3235,6 +3244,9 @@ EEpERSryZFMagbsNw/WoWQ== + + A4w= + Aw== @@ -3253,6 +3265,9 @@ BAAAAAABM6d3Z0s= + + APt5i5rs4dIIQPwZdk9/ISc= + CjM= @@ -3268,15 +3283,9 @@ cDggUYfwJ3A1YcdoeT6s4A== - - RVWTeb5EKqE7cy7MUD2oJ3M - CrTHPEE6AZSfI3jysin2bA== - - RdHgEmEIjdyRFWDRRlk - ATE3ew== @@ -3334,18 +3343,21 @@ UW3oKZKTDsrPy/rfwmGNaQ== + + QAEy3RIAAAAAAAAMweH5dw== + AjpW E77H6yvyFQjO0PcN3x0H+Q== + + DL8= + B+U= - - AZ0 - OUvvVscW0/NltofkmV9qmg== @@ -3361,9 +3373,6 @@ JV/LVzSKI/wsDgg3UuZHlA== - - Byemag= - U+1Y1QpJc0FOR5JdCJ01gQ== @@ -3388,12 +3397,12 @@ GN2Hrh9LtnA= - - A4w - AuhvPsYZfVP6UDsuyjeZ4Q== + + cx0HrIEQg8JHWTP7DzOxSQ== + BAAAAAABJ/ufRdg= @@ -3424,6 +3433,9 @@ QAAnEQ== + + A4g= + d8AtKymQwkOPDBj+hjPzFg== @@ -3439,15 +3451,15 @@ Ew1ee9Jq7Q/Dig3ACF4V6Q== + + RVWTeb5EKqE7cy7MUD2oJ3M= + ORFgmCj072NjcJnrxOMfQA== HxT1XSjIpzjMprp9Qu1gYQ== - - DL8 - BAAAAAABL07hUBg= @@ -3469,18 +3481,12 @@ BydInw== - - ByemaQ= - F7PAjw2k0dTX5escPnyVOBo= Aa8e+91erglSMgsk/mtVaA== - - R/j2qA= - TXxtAQ== @@ -3508,12 +3514,6 @@ EAdmaA== - - RvCM2iRdkCE82ZOO2dU - - - Bydvrw= - EQ== @@ -3526,6 +3526,9 @@ OfJBIhFwAdQ= + + YUlF+VXF2FWFqCo472HfZlw= + BAAAAAABHkSHjz8= @@ -3556,9 +3559,6 @@ BHk= - - UdNjvA= - ByfNeA== @@ -3574,12 +3574,18 @@ BydKkg== + + OGPFrg== + LdbnCbsA9sOgI4mkUpWXPw== e7wSpVxmgAS5/ioLi2iBIA== + + Byemag== + FNISyWWTGi5Yco6fGh58/A== @@ -3640,24 +3646,21 @@ Xrr31RF0DoIzMKXS6XtD+g== - - Rea7UUYH3jl33BryPIo - - - QM1zZ4GZ4gfwpQtUYye3Ne0 - BAAAAAABCFiEp9s= PAdKZPiaac2CvPxbOrsHOw== - - IHj3eiEK3K1Xrpu1uvtBuvE - a9rf7/BmG9JkKvRuy7J5QA== + + QM1zZ4GZ4gfwpQtUYye3Ne0= + + + UbQGvw== + M0VSOewW3WI= @@ -3736,6 +3739,9 @@ GN2Hrh9Ltm4= + + UdNjvA== + Os2rnHWYhryvdOXfgan06A== @@ -3754,9 +3760,6 @@ BAAAAAABJQcQRNU= - - ByfDtA= - VOcIuNbTqkpOMUyI108FOg== @@ -3781,12 +3784,18 @@ AJiU+bpWh2Uc4xFRf8GM9yA= + + AZ0= + CcHC1w== UV9aaDeNRNtQuXjRYk4Skhg= + + RdHgEmEIjdyRFWDRRlk= + AQw= @@ -3844,21 +3853,18 @@ Mq0P6o03FDk0B2bnJ+mYPGo= - - APt5i5rs4dIIQPwZdk9/ISc - ESAyW/JX3+hZIp44EAMlXU2b + + Bydvrw== + Aw== GN2Hrh9Ltms= - - AMs - Qh/QbQ== @@ -3886,6 +3892,9 @@ TAA2G+UIK6mqznQKBT77NA== + + RvCM2iRdkCE82ZOO2dU= + ESCyHU+xOECnh9Rf2IvgR8zS @@ -3898,6 +3907,9 @@ BAAAAAABHkSl5AQ= + + ByemaQ== + K1ftto7Xcb0YKwQ6uMvOIA== @@ -3958,14 +3970,17 @@ ESBrHE7sFC7CQ8EM681xA3CY + + Rea7UUYH3jl33BryPIo= + eR1nUEz8k+nDSBD+bb5uIQ== Ermwtg== - - cx0HrIEQg8JHWTP7DzOxSQ= + + LAVIFm0MWZYH+Sv8Vf+IqkM= STMAeg== @@ -4039,6 +4054,9 @@ J2La+q+JOURNWkX60OP2lQ== + + R/j2qA== + CdWFNw== @@ -4069,9 +4087,6 @@ Aw1SPC56593ZCZ9vCNHKwQ== - - UbQGvw= - JD1wxDd8IgmiqX7MyPPg1g== @@ -4114,6 +4129,9 @@ ATFpsA== + + IHj3eiEK3K1Xrpu1uvtBuvE= + cpqpXVWPk5AXzGw+zNIcBw== diff -Nru thunderbird-54.0~b1+build2/mail/base/content/mailWindowOverlay.js thunderbird-54.0~b1+build3/mail/base/content/mailWindowOverlay.js --- thunderbird-54.0~b1+build2/mail/base/content/mailWindowOverlay.js 2017-05-05 19:28:11.000000000 +0000 +++ thunderbird-54.0~b1+build3/mail/base/content/mailWindowOverlay.js 2017-05-18 20:31:22.000000000 +0000 @@ -180,8 +180,7 @@ function view_init() { let isFeed = gFolderDisplay && - ((gFolderDisplay.displayedFolder && - gFolderDisplay.displayedFolder.server.type == "rss") || + (FeedMessageHandler.isFeedFolder(gFolderDisplay.displayedFolder) || gFolderDisplay.selectedMessageIsFeed); let accountCentralDisplayed = gFolderDisplay.isAccountCentralDisplayed; @@ -1686,8 +1685,9 @@ let archiveKeepFolderStructure; let identity = getIdentityForHeader(msgHdr); - if (!identity) { - // Some servers (RSS) don't have an identity, so we need to figure + if (!identity || FeedMessageHandler.isFeedFolder(msgHdr.folder)) { + // If no identity, or a server (RSS) which doesn't have an identity + // and doesn't want the default unrelated identity value, figure // this out based on the default identity prefs. let enabled = Services.prefs.getBoolPref( "mail.identity.default.archive_enabled" @@ -2079,7 +2079,7 @@ { var preselectedFolder = GetFirstSelectedMsgFolder(); - if (preselectedFolder && preselectedFolder.server.type == "rss") + if (FeedMessageHandler.isFeedFolder(preselectedFolder)) openSubscriptionsDialog(preselectedFolder); // open feed subscription dialog else Subscribe(preselectedFolder); // open imap/nntp subscription dialog diff -Nru thunderbird-54.0~b1+build2/mail/components/cloudfile/nsBox.js thunderbird-54.0~b1+build3/mail/components/cloudfile/nsBox.js --- thunderbird-54.0~b1+build2/mail/components/cloudfile/nsBox.js 2017-05-05 19:28:11.000000000 +0000 +++ thunderbird-54.0~b1+build3/mail/components/cloudfile/nsBox.js 2017-05-18 20:31:23.000000000 +0000 @@ -213,8 +213,8 @@ }.bind(this); let onAuthFailure = function() { - this._urlListener.onStopRequest(null, null, - Ci.nsIMsgCloudFileProvider.authErr); + aCallback.onStopRequest(null, null, + Ci.nsIMsgCloudFileProvider.authErr); }.bind(this); this.log.info("Checking to see if we're logged in"); diff -Nru thunderbird-54.0~b1+build2/mail/components/cloudfile/nsHightail.js thunderbird-54.0~b1+build3/mail/components/cloudfile/nsHightail.js --- thunderbird-54.0~b1+build2/mail/components/cloudfile/nsHightail.js 2017-05-05 19:28:11.000000000 +0000 +++ thunderbird-54.0~b1+build3/mail/components/cloudfile/nsHightail.js 2017-05-18 20:31:23.000000000 +0000 @@ -186,7 +186,6 @@ } this._uploadingFile = aFile; - this._urlListener = aCallback; let finish = function() { this._finishUpload(aFile, aCallback); @@ -197,8 +196,8 @@ }.bind(this); let onAuthFailure = function() { - this._urlListener.onStopRequest(null, null, - Ci.nsIMsgCloudFileProvider.authErr); + aCallback.onStopRequest(null, null, + Ci.nsIMsgCloudFileProvider.authErr); }.bind(this); this.log.info("Checking to see if we're logged in"); diff -Nru thunderbird-54.0~b1+build2/mail/themes/shared/mail/messenger.css thunderbird-54.0~b1+build3/mail/themes/shared/mail/messenger.css --- thunderbird-54.0~b1+build2/mail/themes/shared/mail/messenger.css 2017-05-05 19:28:11.000000000 +0000 +++ thunderbird-54.0~b1+build3/mail/themes/shared/mail/messenger.css 2017-05-18 20:31:23.000000000 +0000 @@ -35,7 +35,7 @@ } #throbber-box[busy="true"] { - list-style-image: url("chrome://messenger/skin/icons/loading.png"); + list-style-image: url("chrome://global/skin/icons/loading.png"); } #wrapper-throbber-box > #throbber-box { diff -Nru thunderbird-54.0~b1+build2/mailnews/base/src/nsMsgContentPolicy.cpp thunderbird-54.0~b1+build3/mailnews/base/src/nsMsgContentPolicy.cpp --- thunderbird-54.0~b1+build2/mailnews/base/src/nsMsgContentPolicy.cpp 2017-05-05 19:28:12.000000000 +0000 +++ thunderbird-54.0~b1+build3/mailnews/base/src/nsMsgContentPolicy.cpp 2017-05-18 20:31:23.000000000 +0000 @@ -239,19 +239,32 @@ // cause content to be rejected. *aDecision = nsIContentPolicy::REJECT_REQUEST; - // If aContentLocation uses a protocol we handle (imap, pop, mailbox, news), - // we require that the load comes from the same scheme/account/server/port. - // This is basically a simplyfied "same origin" test. - // Pre-paths for example are: - // mailbox: mailbox:// - // imap: imap://user@domain@server:port - // news: news://server:port + // If aContentLocation uses a protocol we handle, we require that the load + // comes from the "normalised" principal which exists for imap, mailbox, news + // and other protocols where the URL inherits from nsIMsgMessageUrl. + // This is basically a "same origin" test. For other protocols we check the + // pre-paths. + nsCOMPtr contentURL(do_QueryInterface(aContentLocation)); + if (contentURL) { + nsCOMPtr requestURL(do_QueryInterface(aRequestingLocation)); + // If the request URL is not also a message URL, then we don't accept. + if (requestURL) { + nsCString contentPrincipalSpec, requestPrincipalSpec; + contentURL->GetPrincipalSpec(contentPrincipalSpec); + requestURL->GetPrincipalSpec(requestPrincipalSpec); + if (contentPrincipalSpec.Equals(requestPrincipalSpec)) + *aDecision = nsIContentPolicy::ACCEPT; + } + return NS_OK; + } + + // Compare pre-paths. nsCOMPtr mailnewsUrl(do_QueryInterface(aContentLocation)); if (mailnewsUrl) { nsCString contentPrePath, requestingPrePath; aContentLocation->GetPrePath(contentPrePath); aRequestingLocation->GetPrePath(requestingPrePath); - if (contentPrePath.Equals(requestingPrePath)) { + if (contentPrePath.Equals(requestingPrePath)) { *aDecision = nsIContentPolicy::ACCEPT; return NS_OK; } diff -Nru thunderbird-54.0~b1+build2/mailnews/compose/src/nsMsgComposeService.cpp thunderbird-54.0~b1+build3/mailnews/compose/src/nsMsgComposeService.cpp --- thunderbird-54.0~b1+build2/mailnews/compose/src/nsMsgComposeService.cpp 2017-05-05 19:28:12.000000000 +0000 +++ thunderbird-54.0~b1+build3/mailnews/compose/src/nsMsgComposeService.cpp 2017-05-18 20:31:23.000000000 +0000 @@ -1003,6 +1003,10 @@ folder->GetUriForMsg(aMsgHdr, msgUri); + nsAutoCString uriToOpen(msgUri); + uriToOpen += (uriToOpen.FindChar('?') == kNotFound) ? '?' : '&'; + uriToOpen.Append("fetchCompleteMessage=true"); + // get the MsgIdentity for the above key using AccountManager nsCOMPtr accountManager = do_GetService (NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); @@ -1022,10 +1026,10 @@ } if (aForwardType == nsIMsgComposeService::kForwardInline) - return RunMessageThroughMimeDraft(msgUri, + return RunMessageThroughMimeDraft(uriToOpen, nsMimeOutput::nsMimeMessageDraftOrTemplate, identity, - msgUri.get(), aMsgHdr, + uriToOpen.get(), aMsgHdr, true, forwardTo, false, aMsgWindow); @@ -1049,7 +1053,7 @@ pMsgComposeParams->SetFormat(nsIMsgCompFormat::Default); pMsgComposeParams->SetIdentity(identity); pMsgComposeParams->SetComposeFields(compFields); - pMsgComposeParams->SetOriginalMsgURI(msgUri.get()); + pMsgComposeParams->SetOriginalMsgURI(uriToOpen.get()); // create the nsIMsgCompose object to send the object nsCOMPtr pMsgCompose (do_CreateInstance(NS_MSGCOMPOSE_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); diff -Nru thunderbird-54.0~b1+build2/mailnews/import/content/importDialog.js thunderbird-54.0~b1+build3/mailnews/import/content/importDialog.js --- thunderbird-54.0~b1+build2/mailnews/import/content/importDialog.js 2017-05-05 19:28:12.000000000 +0000 +++ thunderbird-54.0~b1+build3/mailnews/import/content/importDialog.js 2017-05-18 20:31:23.000000000 +0000 @@ -188,7 +188,7 @@ progressTitleEl.setAttribute("label", meterText); deck.selectedIndex = 2; - gPogressInfo.progressWindow = window; + gProgressInfo.progressWindow = window; gProgressInfo.intervalState = setInterval(ContinueImportCallback, 100); return true; } diff -Nru thunderbird-54.0~b1+build2/mailnews/local/src/nsMailboxUrl.cpp thunderbird-54.0~b1+build3/mailnews/local/src/nsMailboxUrl.cpp --- thunderbird-54.0~b1+build2/mailnews/local/src/nsMailboxUrl.cpp 2017-05-05 19:28:12.000000000 +0000 +++ thunderbird-54.0~b1+build3/mailnews/local/src/nsMailboxUrl.cpp 2017-05-18 20:31:23.000000000 +0000 @@ -133,7 +133,8 @@ mailnewsURL->GetSpec(spec); // mailbox: URLs contain a lot of query parts. We want need a normalised form: - // mailbox://folder?number=nn. + // mailbox:///path/to/folder?number=nn. + // We also need to translate the second form mailbox://user@domain@server/folder?number=nn. char* messageKey = extractAttributeValue(spec.get(), "number="); @@ -150,6 +151,18 @@ if (ind != kNotFound) spec.SetLength(ind); + // Check for format lacking absolute path. + if (spec.Find("///") == kNotFound) { + nsCString folderPath; + nsresult rv = nsLocalURI2Path(kMailboxRootURI, spec.get(), folderPath); + if (NS_SUCCEEDED (rv)) { + nsAutoCString buf; + MsgEscapeURL(folderPath, + nsINetUtil::ESCAPE_URL_DIRECTORY | nsINetUtil::ESCAPE_URL_FORCED, buf); + spec = NS_LITERAL_CSTRING("mailbox://") + buf; + } + } + spec += NS_LITERAL_CSTRING("?number="); spec.Append(messageKey); PR_Free(messageKey); diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/app/blocklist.xml thunderbird-54.0~b1+build3/mozilla/browser/app/blocklist.xml --- thunderbird-54.0~b1+build2/mozilla/browser/app/blocklist.xml 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/app/blocklist.xml 2017-05-18 20:33:31.000000000 +0000 @@ -117,6 +117,10 @@ + + + + @@ -181,6 +185,10 @@ + + + + @@ -2636,6 +2644,11 @@ + + + https://get.adobe.com/flashplayer/ + + @@ -3103,6 +3116,11 @@ https://get.adobe.com/flashplayer/ + + + https://get.adobe.com/flashplayer/ + + @@ -3647,8 +3665,8 @@ frj5jTuqBnQ4fljPvVU3KA== - - A4g + + AMs= BAAAAAABFqoAZoI= @@ -3701,9 +3719,6 @@ BYyEX2b5+K+myAIR7eXaRQ== - - OGPFrg= - BAAAAAABLF5/Gog= @@ -3758,9 +3773,6 @@ BydiAg== - - QAEy3RIAAAAAAAAMweH5dw= - Eg== @@ -3782,8 +3794,8 @@ Pgyeh2mqlVzqI9hFntRbUQ== - - LAVIFm0MWZYH+Sv8Vf+IqkM + + ByfDtA== Gd/pPu+qLnXUdvP9sW73CQ== @@ -3821,9 +3833,6 @@ KuzHPJLdK5hNgJRo3R47Ag== - - YUlF+VXF2FWFqCo472HfZlw - WJ2qHzWUqTk= @@ -3851,6 +3860,9 @@ EEpERSryZFMagbsNw/WoWQ== + + A4w= + Aw== @@ -3869,6 +3881,9 @@ BAAAAAABM6d3Z0s= + + APt5i5rs4dIIQPwZdk9/ISc= + CjM= @@ -3884,15 +3899,9 @@ cDggUYfwJ3A1YcdoeT6s4A== - - RVWTeb5EKqE7cy7MUD2oJ3M - CrTHPEE6AZSfI3jysin2bA== - - RdHgEmEIjdyRFWDRRlk - ATE3ew== @@ -3950,18 +3959,21 @@ UW3oKZKTDsrPy/rfwmGNaQ== + + QAEy3RIAAAAAAAAMweH5dw== + AjpW E77H6yvyFQjO0PcN3x0H+Q== + + DL8= + B+U= - - AZ0 - OUvvVscW0/NltofkmV9qmg== @@ -3977,9 +3989,6 @@ JV/LVzSKI/wsDgg3UuZHlA== - - Byemag= - U+1Y1QpJc0FOR5JdCJ01gQ== @@ -4004,12 +4013,12 @@ GN2Hrh9LtnA= - - A4w - AuhvPsYZfVP6UDsuyjeZ4Q== + + cx0HrIEQg8JHWTP7DzOxSQ== + BAAAAAABJ/ufRdg= @@ -4040,6 +4049,9 @@ QAAnEQ== + + A4g= + d8AtKymQwkOPDBj+hjPzFg== @@ -4055,15 +4067,15 @@ Ew1ee9Jq7Q/Dig3ACF4V6Q== + + RVWTeb5EKqE7cy7MUD2oJ3M= + ORFgmCj072NjcJnrxOMfQA== HxT1XSjIpzjMprp9Qu1gYQ== - - DL8 - BAAAAAABL07hUBg= @@ -4085,18 +4097,12 @@ BydInw== - - ByemaQ= - F7PAjw2k0dTX5escPnyVOBo= Aa8e+91erglSMgsk/mtVaA== - - R/j2qA= - TXxtAQ== @@ -4124,12 +4130,6 @@ EAdmaA== - - RvCM2iRdkCE82ZOO2dU - - - Bydvrw= - EQ== @@ -4142,6 +4142,9 @@ OfJBIhFwAdQ= + + YUlF+VXF2FWFqCo472HfZlw= + BAAAAAABHkSHjz8= @@ -4172,9 +4175,6 @@ BHk= - - UdNjvA= - ByfNeA== @@ -4190,12 +4190,18 @@ BydKkg== + + OGPFrg== + LdbnCbsA9sOgI4mkUpWXPw== e7wSpVxmgAS5/ioLi2iBIA== + + Byemag== + FNISyWWTGi5Yco6fGh58/A== @@ -4256,24 +4262,21 @@ Xrr31RF0DoIzMKXS6XtD+g== - - Rea7UUYH3jl33BryPIo - - - QM1zZ4GZ4gfwpQtUYye3Ne0 - BAAAAAABCFiEp9s= PAdKZPiaac2CvPxbOrsHOw== - - IHj3eiEK3K1Xrpu1uvtBuvE - a9rf7/BmG9JkKvRuy7J5QA== + + QM1zZ4GZ4gfwpQtUYye3Ne0= + + + UbQGvw== + M0VSOewW3WI= @@ -4352,6 +4355,9 @@ GN2Hrh9Ltm4= + + UdNjvA== + Os2rnHWYhryvdOXfgan06A== @@ -4370,9 +4376,6 @@ BAAAAAABJQcQRNU= - - ByfDtA= - VOcIuNbTqkpOMUyI108FOg== @@ -4397,12 +4400,18 @@ AJiU+bpWh2Uc4xFRf8GM9yA= + + AZ0= + CcHC1w== UV9aaDeNRNtQuXjRYk4Skhg= + + RdHgEmEIjdyRFWDRRlk= + AQw= @@ -4460,21 +4469,18 @@ Mq0P6o03FDk0B2bnJ+mYPGo= - - APt5i5rs4dIIQPwZdk9/ISc - ESAyW/JX3+hZIp44EAMlXU2b + + Bydvrw== + Aw== GN2Hrh9Ltms= - - AMs - Qh/QbQ== @@ -4502,6 +4508,9 @@ TAA2G+UIK6mqznQKBT77NA== + + RvCM2iRdkCE82ZOO2dU= + ESCyHU+xOECnh9Rf2IvgR8zS @@ -4514,6 +4523,9 @@ BAAAAAABHkSl5AQ= + + ByemaQ== + K1ftto7Xcb0YKwQ6uMvOIA== @@ -4574,14 +4586,17 @@ ESBrHE7sFC7CQ8EM681xA3CY + + Rea7UUYH3jl33BryPIo= + eR1nUEz8k+nDSBD+bb5uIQ== Ermwtg== - - cx0HrIEQg8JHWTP7DzOxSQ= + + LAVIFm0MWZYH+Sv8Vf+IqkM= STMAeg== @@ -4655,6 +4670,9 @@ J2La+q+JOURNWkX60OP2lQ== + + R/j2qA== + CdWFNw== @@ -4685,9 +4703,6 @@ Aw1SPC56593ZCZ9vCNHKwQ== - - UbQGvw= - JD1wxDd8IgmiqX7MyPPg1g== @@ -4730,6 +4745,9 @@ ATFpsA== + + IHj3eiEK3K1Xrpu1uvtBuvE= + cpqpXVWPk5AXzGw+zNIcBw== diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/content/abouthome/aboutHome.css thunderbird-54.0~b1+build3/mozilla/browser/base/content/abouthome/aboutHome.css --- thunderbird-54.0~b1+build2/mozilla/browser/base/content/abouthome/aboutHome.css 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/content/abouthome/aboutHome.css 2017-05-18 20:33:31.000000000 +0000 @@ -358,22 +358,22 @@ display: block; position: relative; /* pin wordmark to edge of document, not of viewport */ -moz-box-ordinal-group: 0; - opacity: .5; + opacity: .2; transition: opacity 150ms; } #aboutMozilla:hover { - opacity: 1; + opacity: .6; } #aboutMozilla::before { - content: url("chrome://browser/content/abouthome/mozilla.png"); + content: url("chrome://browser/content/abouthome/mozilla.svg"); display: block; position: absolute; top: 12px; right: 12px; - width: 69px; - height: 19px; + width: 70px; + height: 20px; } /* [HiDPI] @@ -399,14 +399,12 @@ background-image: url("chrome://browser/content/abouthome/snippet2@2x.png"); } - .launchButton::before, - #aboutMozilla::before { + .launchButton::before { transform: scale(.5); transform-origin: 0 0; } - .launchButton:dir(rtl)::before, - #aboutMozilla:dir(rtl)::before { + .launchButton:dir(rtl)::before { transform: scale(.5) translateX(32px); } @@ -446,9 +444,5 @@ transform: scale(-0.5, 0.5) translateX(24px); transform-origin: top center; } - - #aboutMozilla::before { - content: url("chrome://browser/content/abouthome/mozilla@2x.png"); - } } Binary files /tmp/tmpOBfjt3/ZgeBmIxg_D/thunderbird-54.0~b1+build2/mozilla/browser/base/content/abouthome/mozilla@2x.png and /tmp/tmpOBfjt3/vkEEev250Q/thunderbird-54.0~b1+build3/mozilla/browser/base/content/abouthome/mozilla@2x.png differ Binary files /tmp/tmpOBfjt3/ZgeBmIxg_D/thunderbird-54.0~b1+build2/mozilla/browser/base/content/abouthome/mozilla.png and /tmp/tmpOBfjt3/vkEEev250Q/thunderbird-54.0~b1+build3/mozilla/browser/base/content/abouthome/mozilla.png differ diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/content/abouthome/mozilla.svg thunderbird-54.0~b1+build3/mozilla/browser/base/content/abouthome/mozilla.svg --- thunderbird-54.0~b1+build2/mozilla/browser/base/content/abouthome/mozilla.svg 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/content/abouthome/mozilla.svg 2017-05-18 20:33:31.000000000 +0000 @@ -0,0 +1,3 @@ + + + diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/content/aboutNetError.xhtml thunderbird-54.0~b1+build3/mozilla/browser/base/content/aboutNetError.xhtml --- thunderbird-54.0~b1+build2/mozilla/browser/base/content/aboutNetError.xhtml 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/content/aboutNetError.xhtml 2017-05-18 20:33:31.000000000 +0000 @@ -108,10 +108,6 @@ for (var span of panel.querySelectorAll("span.hostname")) { span.textContent = document.location.hostname; } - if (!gIsCertError) { - panel.replaceChild(document.getElementById("errorLongDesc"), - document.getElementById("advancedLongDesc")); - } // Register click handler for the weakCryptoAdvancedPanel document.getElementById("advancedButton") @@ -288,7 +284,7 @@ } } if (getErrorCode() == "sslv3Used") { - setupAdvancedButton(); + document.getElementById("advancedButton").style.display = "none"; } }, true, true); diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/content/browser.js thunderbird-54.0~b1+build3/mozilla/browser/base/content/browser.js --- thunderbird-54.0~b1+build2/mozilla/browser/base/content/browser.js 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/content/browser.js 2017-05-18 20:33:31.000000000 +0000 @@ -3449,9 +3449,8 @@ getPrintPreviewBrowser() { if (!this._printPreviewTab) { - let browser = gBrowser.selectedBrowser; + let browser = this.getSourceBrowser(); let preferredRemoteType = browser.remoteType; - this._tabBeforePrintPreview = gBrowser.selectedTab; this._printPreviewTab = gBrowser.loadOneTab("about:printpreview", { inBackground: false, preferredRemoteType, @@ -3462,7 +3461,7 @@ return gBrowser.getBrowserForTab(this._printPreviewTab); }, createSimplifiedBrowser() { - let browser = this._tabBeforePrintPreview.linkedBrowser; + let browser = this.getSourceBrowser(); this._simplifyPageTab = gBrowser.loadOneTab("about:printpreview", { inBackground: true, sameProcessAsFrameLoader: browser.frameLoader @@ -3470,8 +3469,10 @@ return this.getSimplifiedSourceBrowser(); }, getSourceBrowser() { - return this._tabBeforePrintPreview ? - this._tabBeforePrintPreview.linkedBrowser : gBrowser.selectedBrowser; + if (!this._tabBeforePrintPreview) { + this._tabBeforePrintPreview = gBrowser.selectedTab; + } + return this._tabBeforePrintPreview.linkedBrowser; }, getSimplifiedSourceBrowser() { return this._simplifyPageTab ? diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/content/browser-media.js thunderbird-54.0~b1+build3/mozilla/browser/base/content/browser-media.js --- thunderbird-54.0~b1+build2/mozilla/browser/base/content/browser-media.js 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/content/browser-media.js 2017-05-18 20:33:31.000000000 +0000 @@ -95,6 +95,22 @@ this.showNotificationBar(browser, notificationId, keySystem, params, buttonCallback); }, + safeGetString(notificationId, msgId, labelParams) { + let message = "" + try { + message = labelParams.length ? + gNavigatorBundle.getFormattedString(msgId, labelParams) : + gNavigatorBundle.getString(msgId); + } catch (ex) { + if (notificationId == "drmContentDisabled") { + // Handle accidentally removed string. + message = "You must enable DRM to play some audio or video on this page. " + labelParams[0]; + } else { + Cu.reportError("Malformed media notification with id=" + msgId); + } + } + return message; + }, showNotificationBar(browser, notificationId, keySystem, labelParams, callback) { let box = gBrowser.getNotificationBox(browser); if (box.getNotificationWithValue(notificationId)) { @@ -103,11 +119,7 @@ let msgPrefix = "emeNotifications." + notificationId + "."; let msgId = msgPrefix + "message"; - - let message = labelParams.length ? - gNavigatorBundle.getFormattedString(msgId, labelParams) : - gNavigatorBundle.getString(msgId); - + let message = this.safeGetString(notificationId, msgId, labelParams); let buttons = []; if (callback) { let btnLabelId = msgPrefix + "button.label"; diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/content/nsContextMenu.js thunderbird-54.0~b1+build3/mozilla/browser/base/content/nsContextMenu.js --- thunderbird-54.0~b1+build2/mozilla/browser/base/content/nsContextMenu.js 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/content/nsContextMenu.js 2017-05-18 20:33:31.000000000 +0000 @@ -958,9 +958,7 @@ } if (!this.isRemote) { - params.frameOuterWindowID = this.target.ownerGlobal - .QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIDOMWindowUtils).outerWindowID; + params.frameOuterWindowID = this.frameOuterWindowID; } // If we want to change userContextId, we must be sure that we don't // propagate the referrer. diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/content/test/tabs/browser_contextmenu_openlink_after_tabnavigated.js thunderbird-54.0~b1+build3/mozilla/browser/base/content/test/tabs/browser_contextmenu_openlink_after_tabnavigated.js --- thunderbird-54.0~b1+build2/mozilla/browser/base/content/test/tabs/browser_contextmenu_openlink_after_tabnavigated.js 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/content/test/tabs/browser_contextmenu_openlink_after_tabnavigated.js 2017-05-18 20:33:31.000000000 +0000 @@ -0,0 +1,43 @@ +"use strict"; + +const example_base = "http://example.com/browser/browser/base/content/test/tabs/"; + +add_task(function* test_contextmenu_openlink_after_tabnavigated() { + let url = example_base + "test_bug1358314.html"; + + const tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, url); + + const contextMenu = document.getElementById("contentAreaContextMenu"); + let awaitPopupShown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown"); + yield BrowserTestUtils.synthesizeMouse("a", 0, 0, { + type: "contextmenu", + button: 2, + }, gBrowser.selectedBrowser); + yield awaitPopupShown; + info("Popup Shown"); + + info("Navigate the tab with the opened context menu"); + gBrowser.selectedBrowser.loadURI("about:blank"); + yield BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser); + + let awaitNewTabOpen = BrowserTestUtils.waitForNewTab(gBrowser, "http://example.com/"); + + info("Click the 'open link in new tab' menu item"); + let openLinkMenuItem = contextMenu.querySelector("#context-openlinkintab"); + openLinkMenuItem.click(); + + info("Wait for the new tab to be opened"); + const newTab = yield awaitNewTabOpen; + + // Close the contextMenu popup if it has not been closed yet. + contextMenu.hidePopup(); + + yield BrowserTestUtils.browserLoaded(newTab.linkedBrowser); + const newTabURL = yield ContentTask.spawn(newTab.linkedBrowser, null, function* () { + return content.location.href; + }); + is(newTabURL, "http://example.com/", "Got the expected URL loaded in the new tab"); + + yield BrowserTestUtils.removeTab(newTab); + yield BrowserTestUtils.removeTab(tab); +}); diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/content/test/tabs/browser.ini thunderbird-54.0~b1+build3/mozilla/browser/base/content/test/tabs/browser.ini --- thunderbird-54.0~b1+build2/mozilla/browser/base/content/test/tabs/browser.ini 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/content/test/tabs/browser.ini 2017-05-18 20:33:31.000000000 +0000 @@ -1,9 +1,11 @@ [DEFAULT] support-files = dummy_page.html + test_bug1358314.html [browser_abandonment_telemetry.js] [browser_allow_process_switches_despite_related_browser.js] +[browser_contextmenu_openlink_after_tabnavigated.js] [browser_tabSpinnerProbe.js] skip-if = !e10s # Tab spinner is e10s only. [browser_tabSwitchPrintPreview.js] diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/content/test/tabs/browser_tabSwitchPrintPreview.js thunderbird-54.0~b1+build3/mozilla/browser/base/content/test/tabs/browser_tabSwitchPrintPreview.js --- thunderbird-54.0~b1+build2/mozilla/browser/base/content/test/tabs/browser_tabSwitchPrintPreview.js 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/content/test/tabs/browser_tabSwitchPrintPreview.js 2017-05-18 20:33:31.000000000 +0000 @@ -1,12 +1,6 @@ const kURL1 = "data:text/html,Should I stay or should I go?"; const kURL2 = "data:text/html,I shouldn't be here!"; -add_task(function* setup() { - yield SpecialPowers.pushPrefEnv({ - set: [["dom.ipc.processCount", 1]] - }); -}); - /** * Verify that if we open a new tab and try to make it the selected tab while * print preview is up, that doesn't happen. diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/content/test/tabs/test_bug1358314.html thunderbird-54.0~b1+build3/mozilla/browser/base/content/test/tabs/test_bug1358314.html --- thunderbird-54.0~b1+build2/mozilla/browser/base/content/test/tabs/test_bug1358314.html 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/content/test/tabs/test_bug1358314.html 2017-05-18 20:33:31.000000000 +0000 @@ -0,0 +1,10 @@ + + + + + + +

Test page

+ Link + + diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/content/test/webrtc/get_user_media_content_script.js thunderbird-54.0~b1+build3/mozilla/browser/base/content/test/webrtc/get_user_media_content_script.js --- thunderbird-54.0~b1+build2/mozilla/browser/base/content/test/webrtc/get_user_media_content_script.js 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/content/test/webrtc/get_user_media_content_script.js 2017-05-18 20:33:31.000000000 +0000 @@ -18,19 +18,27 @@ ]; var gObservedTopics = {}; -function observer(aSubject, aTopic, aData) { + +function ignoreEvent(aSubject, aTopic, aData) { // With e10s disabled, our content script receives notifications for the // preview displayed in our screen sharing permission prompt; ignore them. const kBrowserURL = "chrome://browser/content/browser.xul"; const nsIPropertyBag = Components.interfaces.nsIPropertyBag; if (aTopic == "recording-device-events" && aSubject.QueryInterface(nsIPropertyBag).getProperty("requestURL") == kBrowserURL) { - return; + return true; } if (aTopic == "recording-window-ended") { let win = Services.wm.getOuterWindowWithId(aData).top; if (win.document.documentURI == kBrowserURL) - return; + return true; + } + return false; +} + +function observer(aSubject, aTopic, aData) { + if (ignoreEvent(aSubject, aTopic, aData)) { + return; } if (!(aTopic in gObservedTopics)) @@ -90,7 +98,16 @@ addMessageListener("Test:WaitForObserverCall", ({data}) => { let topic = data; - Services.obs.addObserver(function obs() { + Services.obs.addObserver(function obs(aSubject, aTopic, aData) { + if (aTopic != topic) { + is(aTopic, topic, "Wrong topic observed"); + return; + } + + if (ignoreEvent(aSubject, aTopic, aData)) { + return; + } + sendAsyncMessage("Test:ObserverCalled", topic); Services.obs.removeObserver(obs, topic); diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/content/urlbarBindings.xml thunderbird-54.0~b1+build3/mozilla/browser/base/content/urlbarBindings.xml --- thunderbird-54.0~b1+build2/mozilla/browser/base/content/urlbarBindings.xml 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/content/urlbarBindings.xml 2017-05-18 20:33:31.000000000 +0000 @@ -918,8 +918,13 @@ case "formatting.enabled": this._formattingEnabled = this._prefs.getBoolPref(aData); break; - case "userMadeSearchSuggestionsChoice": case "suggest.searches": + // Mirror the value for future use, see the comment in the + // binding's constructor. + this._prefs.setBoolPref("searchSuggestionsChoice", + this._prefs.getBoolPref("suggest.searches")); + // fall-through. + case "userMadeSearchSuggestionsChoice": this._cacheUserMadeSearchSuggestionsChoice(); if (this._userMadeSearchSuggestionsChoice) { this.popup.searchSuggestionsNotificationWasDismissed( diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/base/jar.mn thunderbird-54.0~b1+build3/mozilla/browser/base/jar.mn --- thunderbird-54.0~b1+build2/mozilla/browser/base/jar.mn 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/base/jar.mn 2017-05-18 20:33:31.000000000 +0000 @@ -27,7 +27,7 @@ content/browser/abouthome/settings.png (content/abouthome/settings.png) content/browser/abouthome/restore.png (content/abouthome/restore.png) content/browser/abouthome/restore-large.png (content/abouthome/restore-large.png) - content/browser/abouthome/mozilla.png (content/abouthome/mozilla.png) + content/browser/abouthome/mozilla.svg (content/abouthome/mozilla.svg) content/browser/abouthome/snippet1@2x.png (content/abouthome/snippet1@2x.png) content/browser/abouthome/snippet2@2x.png (content/abouthome/snippet2@2x.png) content/browser/abouthome/downloads@2x.png (content/abouthome/downloads@2x.png) @@ -38,7 +38,6 @@ content/browser/abouthome/settings@2x.png (content/abouthome/settings@2x.png) content/browser/abouthome/restore@2x.png (content/abouthome/restore@2x.png) content/browser/abouthome/restore-large@2x.png (content/abouthome/restore-large@2x.png) - content/browser/abouthome/mozilla@2x.png (content/abouthome/mozilla@2x.png) content/browser/aboutNetError.xhtml (content/aboutNetError.xhtml) diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/components/extensions/ext-tabs.js thunderbird-54.0~b1+build3/mozilla/browser/components/extensions/ext-tabs.js --- thunderbird-54.0~b1+build2/mozilla/browser/components/extensions/ext-tabs.js 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/components/extensions/ext-tabs.js 2017-05-18 20:33:31.000000000 +0000 @@ -158,7 +158,7 @@ onCreated: new SingletonEventManager(context, "tabs.onCreated", fire => { let listener = (eventName, event) => { - fire.async(tabManager.convert(event.nativeTab)); + fire.async(tabManager.convert(event.nativeTab, event.currentTab)); }; tabTracker.on("tab-created", listener); @@ -402,6 +402,7 @@ options.disallowInheritPrincipal = true; tabListener.initTabReady(); + let currentTab = window.gBrowser.selectedTab; let nativeTab = window.gBrowser.addTab(url || window.BROWSER_NEW_TAB_URL, options); let active = true; @@ -436,7 +437,7 @@ tabListener.initializingTabs.add(nativeTab); } - return tabManager.convert(nativeTab); + return tabManager.convert(nativeTab, currentTab); }); }, diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/components/extensions/ext-utils.js thunderbird-54.0~b1+build3/mozilla/browser/components/extensions/ext-utils.js --- thunderbird-54.0~b1+build2/mozilla/browser/components/extensions/ext-utils.js 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/components/extensions/ext-utils.js 2017-05-18 20:33:31.000000000 +0000 @@ -240,13 +240,18 @@ }); } + // Save the current tab, since the newly-created tab will likely be + // active by the time the promise below resolves and the event is + // dispatched. + let currentTab = nativeTab.ownerGlobal.gBrowser.selectedTab; + // We need to delay sending this event until the next tick, since the // tab does not have its final index when the TabOpen event is dispatched. Promise.resolve().then(() => { if (event.detail.adoptedTab) { this.emitAttached(event.originalTarget); } else { - this.emitCreated(event.originalTarget); + this.emitCreated(event.originalTarget, currentTab); } }); break; @@ -367,10 +372,12 @@ * * @param {NativeTab} nativeTab * The tab element which is being created. + * @param {NativeTab} [currentTab] + * The tab element for the currently active tab. * @private */ - emitCreated(nativeTab) { - this.emit("tab-created", {nativeTab}); + emitCreated(nativeTab, currentTab) { + this.emit("tab-created", {nativeTab, currentTab}); } /** @@ -457,12 +464,18 @@ return this.nativeTab.linkedBrowser; } + get frameLoader() { + // If we don't have a frameLoader yet, just return a dummy with no width and + // height. + return super.frameLoader || {lazyWidth: 0, lazyHeight: 0}; + } + get cookieStoreId() { return getCookieStoreIdForTab(this, this.nativeTab); } get height() { - return this.browser.clientHeight; + return this.frameLoader.lazyHeight; } get index() { @@ -503,7 +516,7 @@ } get width() { - return this.browser.clientWidth; + return this.frameLoader.lazyWidth; } get window() { diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/components/nsBrowserGlue.js thunderbird-54.0~b1+build3/mozilla/browser/components/nsBrowserGlue.js --- thunderbird-54.0~b1+build2/mozilla/browser/components/nsBrowserGlue.js 2017-05-05 19:30:28.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/components/nsBrowserGlue.js 2017-05-18 20:33:31.000000000 +0000 @@ -607,6 +607,21 @@ // handle any UI migration this._migrateUI(); + // This is support code for the location bar search suggestions; passing + // from opt-in to opt-out should respect the user's choice, thus we need + // to cache that choice in a pref for future use. + // Note: this is not in migrateUI because we need to uplift it. This + // code is also short-lived, since we can remove it as soon as opt-out + // search suggestions shipped in release (Bug 1344928). + try { + let urlbarPrefs = Services.prefs.getBranch("browser.urlbar."); + if (!urlbarPrefs.prefHasUserValue("searchSuggestionsChoice") && + urlbarPrefs.getBoolPref("userMadeSearchSuggestionsChoice")) { + urlbarPrefs.setBoolPref("searchSuggestionsChoice", + urlbarPrefs.getBoolPref("suggest.searches")); + } + } catch (ex) { /* missing any of the prefs is not critical */ } + PageThumbs.init(); webrtcUI.init(); AboutHome.init(); diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/components/places/content/editBookmarkOverlay.js thunderbird-54.0~b1+build3/mozilla/browser/components/places/content/editBookmarkOverlay.js --- thunderbird-54.0~b1+build2/mozilla/browser/components/places/content/editBookmarkOverlay.js 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/components/places/content/editBookmarkOverlay.js 2017-05-18 20:33:31.000000000 +0000 @@ -136,6 +136,12 @@ throw new Error("_initKeywordField called unexpectedly"); } + // Reset the field status synchronously now, eventually we'll reinit it + // later if we find an existing keyword. This way we can ensure to be in a + // consistent status when reusing the panel across different bookmarks. + this._keyword = newKeyword; + this._initTextField(this._keywordField, newKeyword); + if (!newKeyword) { let entries = []; yield PlacesUtils.keywords.fetch({ url: this._paneInfo.uri.spec }, @@ -150,11 +156,12 @@ existingKeyword = sameEntry ? sameEntry.keyword : ""; } if (existingKeyword) { - this._keyword = newKeyword = existingKeyword; + this._keyword = existingKeyword; + // Update the text field to the existing keyword. + this._initTextField(this._keywordField, this._keyword); } } } - this._initTextField(this._keywordField, newKeyword); }), _initLoadInSidebar: Task.async(function* () { diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/components/places/tests/chrome/chrome.ini thunderbird-54.0~b1+build3/mozilla/browser/components/places/tests/chrome/chrome.ini --- thunderbird-54.0~b1+build2/mozilla/browser/components/places/tests/chrome/chrome.ini 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/components/places/tests/chrome/chrome.ini 2017-05-18 20:33:31.000000000 +0000 @@ -9,6 +9,7 @@ [test_bug549192.xul] [test_bug549491.xul] [test_bug631374_tags_selector_scroll.xul] +[test_editBookmarkOverlay_keywords.xul] [test_editBookmarkOverlay_tags_liveUpdate.xul] [test_selectItems_on_nested_tree.xul] [test_treeview_date.xul] diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/components/places/tests/chrome/test_editBookmarkOverlay_keywords.xul thunderbird-54.0~b1+build3/mozilla/browser/components/places/tests/chrome/test_editBookmarkOverlay_keywords.xul --- thunderbird-54.0~b1+build2/mozilla/browser/components/places/tests/chrome/test_editBookmarkOverlay_keywords.xul 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/components/places/tests/chrome/test_editBookmarkOverlay_keywords.xul 2017-05-18 20:33:31.000000000 +0000 @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + %editBookmarkOverlayDTD; +]> + + + + + + diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/components/sessionstore/TabState.jsm thunderbird-54.0~b1+build3/mozilla/browser/components/sessionstore/TabState.jsm --- thunderbird-54.0~b1+build2/mozilla/browser/components/sessionstore/TabState.jsm 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/components/sessionstore/TabState.jsm 2017-05-18 20:33:31.000000000 +0000 @@ -126,7 +126,7 @@ // Store the serialized contentPrincipal of this tab to use for the icon. if (!("iconLoadingPrincipal" in tabData)) { - tabData.iconLoadingPrincipal = Utils.serializePrincipal(browser.contentPrincipal); + tabData.iconLoadingPrincipal = Utils.serializePrincipal(browser.mIconLoadingPrincipal); } // If there is a userTypedValue set, then either the user has typed something diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/config/mozconfigs/linux32/devedition thunderbird-54.0~b1+build3/mozilla/browser/config/mozconfigs/linux32/devedition --- thunderbird-54.0~b1+build2/mozilla/browser/config/mozconfigs/linux32/devedition 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/config/mozconfigs/linux32/devedition 2017-05-18 20:33:31.000000000 +0000 @@ -1,3 +1,8 @@ +if [ -n "$ENABLE_RELEASE_PROMOTION" ]; then + MOZ_AUTOMATION_UPLOAD_SYMBOLS=${MOZ_AUTOMATION_UPLOAD_SYMBOLS-1} + MOZ_AUTOMATION_UPDATE_PACKAGING=1 +fi + . "$topsrcdir/browser/config/mozconfigs/linux32/common-opt" # Add-on signing is not required for DevEdition diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/config/mozconfigs/linux64/devedition thunderbird-54.0~b1+build3/mozilla/browser/config/mozconfigs/linux64/devedition --- thunderbird-54.0~b1+build2/mozilla/browser/config/mozconfigs/linux64/devedition 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/config/mozconfigs/linux64/devedition 2017-05-18 20:33:31.000000000 +0000 @@ -1,3 +1,8 @@ +if [ -n "$ENABLE_RELEASE_PROMOTION" ]; then + MOZ_AUTOMATION_UPLOAD_SYMBOLS=${MOZ_AUTOMATION_UPLOAD_SYMBOLS-1} + MOZ_AUTOMATION_UPDATE_PACKAGING=1 +fi + . "$topsrcdir/browser/config/mozconfigs/linux64/common-opt" # Add-on signing is not required for DevEdition diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/config/mozconfigs/macosx64/devedition thunderbird-54.0~b1+build3/mozilla/browser/config/mozconfigs/macosx64/devedition --- thunderbird-54.0~b1+build2/mozilla/browser/config/mozconfigs/macosx64/devedition 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/config/mozconfigs/macosx64/devedition 2017-05-18 20:33:31.000000000 +0000 @@ -1,3 +1,8 @@ +if [ -n "$ENABLE_RELEASE_PROMOTION" ]; then + MOZ_AUTOMATION_UPLOAD_SYMBOLS=1 + MOZ_AUTOMATION_UPDATE_PACKAGING=1 +fi + . "$topsrcdir/browser/config/mozconfigs/macosx64/common-opt" # Add-on signing is not required for DevEdition diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/config/mozconfigs/win32/devedition thunderbird-54.0~b1+build3/mozilla/browser/config/mozconfigs/win32/devedition --- thunderbird-54.0~b1+build2/mozilla/browser/config/mozconfigs/win32/devedition 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/config/mozconfigs/win32/devedition 2017-05-18 20:33:31.000000000 +0000 @@ -1,3 +1,8 @@ +if [ -n "$ENABLE_RELEASE_PROMOTION" ]; then + MOZ_AUTOMATION_UPLOAD_SYMBOLS=1 + MOZ_AUTOMATION_UPDATE_PACKAGING=1 +fi + . "$topsrcdir/build/mozconfig.win-common" . "$topsrcdir/browser/config/mozconfigs/win32/common-opt" diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/config/mozconfigs/win64/devedition thunderbird-54.0~b1+build3/mozilla/browser/config/mozconfigs/win64/devedition --- thunderbird-54.0~b1+build2/mozilla/browser/config/mozconfigs/win64/devedition 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/config/mozconfigs/win64/devedition 2017-05-18 20:33:31.000000000 +0000 @@ -1,3 +1,8 @@ +if [ -n "$ENABLE_RELEASE_PROMOTION" ]; then + MOZ_AUTOMATION_UPLOAD_SYMBOLS=1 + MOZ_AUTOMATION_UPDATE_PACKAGING=1 +fi + . "$topsrcdir/build/mozconfig.win-common" . "$topsrcdir/browser/config/mozconfigs/win64/common-win64" . "$topsrcdir/browser/config/mozconfigs/win64/common-opt" diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/config/version_display.txt thunderbird-54.0~b1+build3/mozilla/browser/config/version_display.txt --- thunderbird-54.0~b1+build2/mozilla/browser/config/version_display.txt 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/config/version_display.txt 2017-05-18 20:33:31.000000000 +0000 @@ -1 +1 @@ -54.0b6 +54.0b9 diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/confvars.sh thunderbird-54.0~b1+build3/mozilla/browser/confvars.sh --- thunderbird-54.0~b1+build2/mozilla/browser/confvars.sh 2017-05-05 19:31:48.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/confvars.sh 2017-05-18 20:33:31.000000000 +0000 @@ -18,6 +18,7 @@ if ! test "$HAVE_64BIT_BUILD"; then if test "$MOZ_UPDATE_CHANNEL" = "nightly" -o \ "$MOZ_UPDATE_CHANNEL" = "aurora" -o \ + "$MOZ_UPDATE_CHANNEL" = "aurora-dev" -o \ "$MOZ_UPDATE_CHANNEL" = "beta" -o \ "$MOZ_UPDATE_CHANNEL" = "beta-dev" -o \ "$MOZ_UPDATE_CHANNEL" = "release" -o \ @@ -48,12 +49,17 @@ MOZ_BRANDING_DIRECTORY=browser/branding/unofficial MOZ_OFFICIAL_BRANDING_DIRECTORY=browser/branding/official MOZ_APP_ID={ec8030f7-c20a-464f-9b0e-13a3a9e97384} -# This should usually be the same as the value MAR_CHANNEL_ID. +# ACCEPTED_MAR_CHANNEL_IDS should usually be the same as the value MAR_CHANNEL_ID. # If more than one ID is needed, then you should use a comma separated list # of values. -ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-beta,firefox-mozilla-release # The MAR_CHANNEL_ID must not contain the following 3 characters: ",\t " -MAR_CHANNEL_ID=firefox-mozilla-beta +if test "$MOZ_UPDATE_CHANNEL" = "aurora"; then + ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-aurora + MAR_CHANNEL_ID=firefox-mozilla-aurora +else + ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-beta,firefox-mozilla-release + MAR_CHANNEL_ID=firefox-mozilla-beta +fi MOZ_PROFILE_MIGRATOR=1 MOZ_JSDOWNLOADS=1 diff -Nru thunderbird-54.0~b1+build2/mozilla/browser/extensions/e10srollout/bootstrap.js thunderbird-54.0~b1+build3/mozilla/browser/extensions/e10srollout/bootstrap.js --- thunderbird-54.0~b1+build2/mozilla/browser/extensions/e10srollout/bootstrap.js 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/browser/extensions/e10srollout/bootstrap.js 2017-05-18 20:33:31.000000000 +0000 @@ -97,15 +97,10 @@ if (updateChannel in ADDON_ROLLOUT_POLICY) { addonPolicy = ADDON_ROLLOUT_POLICY[updateChannel]; Preferences.set(PREF_E10S_ADDON_POLICY, addonPolicy); + // This is also the proper place to set the blocklist pref // in case it is necessary. - - Preferences.set(PREF_E10S_ADDON_BLOCKLIST, - // bug 1185672 - Tab Mix Plus - "{dc572301-7619-498c-a57d-39143191b318};" - // bug 1344345 - Mega - + "firefox@mega.co.nz" - ); + Preferences.set(PREF_E10S_ADDON_BLOCKLIST, ""); } else { Preferences.reset(PREF_E10S_ADDON_POLICY); } @@ -175,16 +170,16 @@ if (!(updateChannel in MULTI_BUCKETS) || !eligibleForMulti || userOptedIn.multi || - disqualified || - getAddonsDisqualifyForMulti()) { + disqualified) { Preferences.reset(PREF_E10S_PROCESSCOUNT + ".web"); return; } // If we got here with a cohortPrefix, it must be "addons-set50allmpc-", - // and we know because of getAddonsDisqualifyForMulti that the addons that - // are installed must be web extensions. - if (cohortPrefix) { + // which means that there's at least one add-on installed. If + // getAddonsDisqualifyForMulti returns false, that means that all installed + // addons are webextension based, so note that in the cohort name. + if (cohortPrefix && !getAddonsDisqualifyForMulti()) { cohortPrefix = "webextensions-"; } diff -Nru thunderbird-54.0~b1+build2/mozilla/build/upload.py thunderbird-54.0~b1+build3/mozilla/build/upload.py --- thunderbird-54.0~b1+build2/mozilla/build/upload.py 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/build/upload.py 2017-05-18 20:33:32.000000000 +0000 @@ -90,6 +90,8 @@ if not ssh_key.startswith('~'): ssh_key = WindowsPathToMsysPath(ssh_key) cmdline.extend(["-o", "IdentityFile=%s" % ssh_key]) + # In case of an issue here we don't want to hang on a password prompt. + cmdline.extend(["-o", "BatchMode=yes"]) def DoSSHCommand(command, user, host, port=None, ssh_key=None): """Execute command on user@host using ssh. Optionally use diff -Nru thunderbird-54.0~b1+build2/mozilla/devtools/client/aboutdebugging/components/workers/multi-e10s-warning.js thunderbird-54.0~b1+build3/mozilla/devtools/client/aboutdebugging/components/workers/multi-e10s-warning.js --- thunderbird-54.0~b1+build2/mozilla/devtools/client/aboutdebugging/components/workers/multi-e10s-warning.js 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/devtools/client/aboutdebugging/components/workers/multi-e10s-warning.js 2017-05-18 20:33:32.000000000 +0000 @@ -25,9 +25,9 @@ displayName: "multiE10SWarning", onUpdatePreferenceClick() { - // Hardcoded string for Aurora 54 + // Hardcoded string for Beta 54 // see (https://bugzilla.mozilla.org/show_bug.cgi?id=1345932#c44) - let message = "Set “dom.ipc.processCount” to 1 and restart the browser?"; + let message = "Opt out of multiple processes?"; if (window.confirm(message)) { // Disable multi until at least the next experiment. Services.prefs.setIntPref(MULTI_OPT_OUT_PREF, @@ -38,13 +38,14 @@ }, render() { - // Hardcoded strings for Aurora 54 + // Hardcoded strings for Beta 54 // see (https://bugzilla.mozilla.org/show_bug.cgi?id=1345932#c44) let multiProcessWarningTitle = "Service Worker debugging is not compatible with " + "multiple content processes at the moment."; - let multiProcessWarningMessage = "The preference “dom.ipc.processCount” can be set " + - "to 1 to force a single content process."; - let multiProcessWarningUpdateLink = "Set dom.ipc.processCount to 1"; + let multiProcessWarningMessage = `The preference “dom.ipc.multiOptOut” can be ` + + `modified to force a single content process ` + + `for the current version.`; + let multiProcessWarningUpdateLink = "Opt out of multiple content processes"; return dom.div( { diff -Nru thunderbird-54.0~b1+build2/mozilla/devtools/client/aboutdebugging/components/workers/panel.js thunderbird-54.0~b1+build3/mozilla/devtools/client/aboutdebugging/components/workers/panel.js --- thunderbird-54.0~b1+build2/mozilla/devtools/client/aboutdebugging/components/workers/panel.js 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/devtools/client/aboutdebugging/components/workers/panel.js 2017-05-18 20:33:32.000000000 +0000 @@ -31,6 +31,7 @@ const WorkerIcon = "chrome://devtools/skin/images/debugging-workers.svg"; const MORE_INFO_URL = "https://developer.mozilla.org/en-US/docs/Tools/about%3Adebugging"; const PROCESS_COUNT_PREF = "dom.ipc.processCount"; +const MULTI_OPTOUT_PREF = "dom.ipc.multiOptOut"; module.exports = createClass({ displayName: "WorkersPanel", @@ -58,7 +59,20 @@ client.addListener("processListChanged", this.updateWorkers); client.addListener("registration-changed", this.updateWorkers); + // Some notes about these observers: + // - nsIPrefBranch.addObserver observes prefixes. In reality, watching + // PROCESS_COUNT_PREF watches two separate prefs: + // dom.ipc.processCount *and* dom.ipc.processCount.web. Because these + // are the two ways that we control the number of content processes, + // that works perfectly fine. + // - The user might opt in or out of multi by setting the multi opt out + // pref. That affects whether we need to show our warning, so we need to + // update our state when that pref changes. + // - In all cases, we don't have to manually check which pref changed to + // what. The platform code in nsIXULRuntime.maxWebProcessCount does all + // of that for us. Services.prefs.addObserver(PROCESS_COUNT_PREF, this.updateMultiE10S, false); + Services.prefs.addObserver(MULTI_OPTOUT_PREF, this.updateMultiE10S, false); this.updateMultiE10S(); this.updateWorkers(); @@ -72,11 +86,12 @@ client.removeListener("registration-changed", this.updateWorkers); Services.prefs.removeObserver(PROCESS_COUNT_PREF, this.updateMultiE10S); + Services.prefs.removeObserver(MULTI_OPTOUT_PREF, this.updateMultiE10S); }, updateMultiE10S() { // We watch the pref but set the state based on - // nsIXULRuntime::maxWebProcessCount. + // nsIXULRuntime.maxWebProcessCount. let processCount = Services.appinfo.maxWebProcessCount; this.setState({ processCount }); }, diff -Nru thunderbird-54.0~b1+build2/mozilla/devtools/client/shared/components/tree/tree-cell.js thunderbird-54.0~b1+build3/mozilla/devtools/client/shared/components/tree/tree-cell.js --- thunderbird-54.0~b1+build2/mozilla/devtools/client/shared/components/tree/tree-cell.js 2017-05-05 19:30:29.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/devtools/client/shared/components/tree/tree-cell.js 2017-05-18 20:33:32.000000000 +0000 @@ -42,7 +42,8 @@ */ shouldComponentUpdate: function (nextProps, nextState) { return (this.props.value != nextProps.value) || - (this.state !== nextState); + (this.state !== nextState) || + (this.props.member.open != nextProps.member.open); }, getCellClass: function (object, id) { diff -Nru thunderbird-54.0~b1+build2/mozilla/docshell/base/nsDocShell.cpp thunderbird-54.0~b1+build3/mozilla/docshell/base/nsDocShell.cpp --- thunderbird-54.0~b1+build2/mozilla/docshell/base/nsDocShell.cpp 2017-05-05 19:30:30.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/docshell/base/nsDocShell.cpp 2017-05-18 20:33:32.000000000 +0000 @@ -5469,11 +5469,16 @@ MOZ_ASSERT(triggeringPrincipal, "Need a valid triggeringPrincipal"); - rv = InternalLoad(mCurrentURI, + // Stack variables to ensure changes to the member variables don't affect to + // the call. + nsCOMPtr currentURI = mCurrentURI; + nsCOMPtr referrerURI = mReferrerURI; + uint32_t referrerPolicy = mReferrerPolicy; + rv = InternalLoad(currentURI, originalURI, loadReplace, - mReferrerURI, - mReferrerPolicy, + referrerURI, + referrerPolicy, triggeringPrincipal, triggeringPrincipal, flags, @@ -5663,6 +5668,11 @@ } shEntry->SetURI(newUri); shEntry->SetOriginalURI(nullptr); + // shEntry's current triggering principal is whoever loaded that page initially. + // But now we're doing another load of the page, via an API that is only exposed + // to system code. The triggering principal for this load should be the system + // principal. + shEntry->SetTriggeringPrincipal(nsContentUtils::GetSystemPrincipal()); } rv = LoadHistoryEntry(shEntry, LOAD_HISTORY); @@ -9813,8 +9823,12 @@ if (!aWindowTarget.IsEmpty()) { // Locate the target DocShell. nsCOMPtr targetItem; - // Only _self, _parent, and _top are supported in noopener case. - if (!(aFlags & INTERNAL_LOAD_FLAGS_NO_OPENER) || + // Only _self, _parent, and _top are supported in noopener case. But we + // have to be careful to not apply that to the noreferrer case. See bug + // 1358469. + bool allowNamedTarget = !(aFlags & INTERNAL_LOAD_FLAGS_NO_OPENER) || + (aFlags & INTERNAL_LOAD_FLAGS_DONT_SEND_REFERRER); + if (allowNamedTarget || aWindowTarget.LowerCaseEqualsLiteral("_self") || aWindowTarget.LowerCaseEqualsLiteral("_parent") || aWindowTarget.LowerCaseEqualsLiteral("_top")) { diff -Nru thunderbird-54.0~b1+build2/mozilla/docshell/test/browser/browser_click_link_within_view_source.js thunderbird-54.0~b1+build3/mozilla/docshell/test/browser/browser_click_link_within_view_source.js --- thunderbird-54.0~b1+build2/mozilla/docshell/test/browser/browser_click_link_within_view_source.js 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/docshell/test/browser/browser_click_link_within_view_source.js 2017-05-18 20:33:33.000000000 +0000 @@ -0,0 +1,60 @@ +"use strict"; + +/** + * Test for Bug 1359204 + * + * Loading a local file, then view-source on that file. Make sure that + * clicking a link within that view-source page is not blocked by security checks. + */ + +add_task(function* test_click_link_within_view_source() { + let TEST_FILE = "file_click_link_within_view_source.html"; + let TEST_FILE_URI = getChromeDir(getResolvedURI(gTestPath)); + TEST_FILE_URI.append(TEST_FILE); + TEST_FILE_URI = Services.io.newFileURI(TEST_FILE_URI).spec; + + let DUMMY_FILE = "dummy_page.html"; + let DUMMY_FILE_URI = getChromeDir(getResolvedURI(gTestPath)); + DUMMY_FILE_URI.append(DUMMY_FILE); + DUMMY_FILE_URI = Services.io.newFileURI(DUMMY_FILE_URI).spec; + + yield BrowserTestUtils.withNewTab(TEST_FILE_URI, function*(aBrowser) { + let tabSpec = gBrowser.selectedBrowser.currentURI.spec; + info("loading: " + tabSpec); + ok(tabSpec.startsWith("file://") && tabSpec.endsWith(TEST_FILE), + "sanity check to make sure html loaded"); + + info("click view-source of html"); + let tabPromise = BrowserTestUtils.waitForNewTab(gBrowser); + document.getElementById("View:PageSource").doCommand(); + + let tab = yield tabPromise; + tabSpec = gBrowser.selectedBrowser.currentURI.spec; + info("loading: " + tabSpec); + ok(tabSpec.startsWith("view-source:file://") && tabSpec.endsWith(TEST_FILE), + "loading view-source of html succeeded"); + + info("click testlink within view-source page"); + let loadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, url => url.endsWith("dummy_page.html")); + yield ContentTask.spawn(gBrowser.selectedBrowser, {}, function*() { + if (content.document.readyState != "complete") { + yield ContentTaskUtils.waitForEvent(content.document, "readystatechange", false, () => + content.document.readyState == "complete"); + } + // document.getElementById() does not work on a view-source page, hence we use document.links + let linksOnPage = content.document.links; + is (linksOnPage.length, 1, "sanity check: make sure only one link is present on page"); + let myLink = content.document.links[0]; + myLink.click(); + }); + + yield loadPromise; + + tabSpec = gBrowser.selectedBrowser.currentURI.spec; + info("loading: " + tabSpec); + ok(tabSpec.startsWith("view-source:file://") && tabSpec.endsWith(DUMMY_FILE), + "loading view-source of html succeeded"); + + yield BrowserTestUtils.removeTab(tab); + }); +}); diff -Nru thunderbird-54.0~b1+build2/mozilla/docshell/test/browser/browser.ini thunderbird-54.0~b1+build3/mozilla/docshell/test/browser/browser.ini --- thunderbird-54.0~b1+build2/mozilla/docshell/test/browser/browser.ini 2017-05-05 19:30:30.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/docshell/test/browser/browser.ini 2017-05-18 20:33:32.000000000 +0000 @@ -46,6 +46,7 @@ browser_timelineMarkers-frame-05.js head.js frame-head.js + file_click_link_within_view_source.html [browser_bug1206879.js] [browser_bug1309900_crossProcessHistoryNavigation.js] @@ -99,3 +100,4 @@ [browser_grouped_shistory_bfcache_cleaning.js] skip-if = !e10s [browser_history_triggeringprincipal_viewsource.js] +[browser_click_link_within_view_source.js] diff -Nru thunderbird-54.0~b1+build2/mozilla/docshell/test/browser/file_click_link_within_view_source.html thunderbird-54.0~b1+build3/mozilla/docshell/test/browser/file_click_link_within_view_source.html --- thunderbird-54.0~b1+build2/mozilla/docshell/test/browser/file_click_link_within_view_source.html 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/docshell/test/browser/file_click_link_within_view_source.html 2017-05-18 20:33:32.000000000 +0000 @@ -0,0 +1,6 @@ + + + + clickme + + diff -Nru thunderbird-54.0~b1+build2/mozilla/dom/animation/test/crashtests/1334583-1.html thunderbird-54.0~b1+build3/mozilla/dom/animation/test/crashtests/1334583-1.html --- thunderbird-54.0~b1+build2/mozilla/dom/animation/test/crashtests/1334583-1.html 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/dom/animation/test/crashtests/1334583-1.html 2017-05-18 20:33:32.000000000 +0000 @@ -0,0 +1,9 @@ +
+
+ diff -Nru thunderbird-54.0~b1+build2/mozilla/dom/animation/test/crashtests/crashtests.list thunderbird-54.0~b1+build3/mozilla/dom/animation/test/crashtests/crashtests.list --- thunderbird-54.0~b1+build2/mozilla/dom/animation/test/crashtests/crashtests.list 2017-05-05 19:30:30.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/dom/animation/test/crashtests/crashtests.list 2017-05-18 20:33:33.000000000 +0000 @@ -25,3 +25,4 @@ skip-if(stylo) pref(dom.animations-api.core.enabled,true) load 1333539-1.html skip-if(stylo) pref(dom.animations-api.core.enabled,true) load 1333539-2.html skip-if(stylo) pref(dom.animations-api.core.enabled,true) load 1333418-1.html # bug 1311257 +skip-if(stylo) pref(dom.animations-api.core.enabled,true) load 1334583-1.html diff -Nru thunderbird-54.0~b1+build2/mozilla/dom/base/crashtests/1353529-inner.html thunderbird-54.0~b1+build3/mozilla/dom/base/crashtests/1353529-inner.html --- thunderbird-54.0~b1+build2/mozilla/dom/base/crashtests/1353529-inner.html 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/dom/base/crashtests/1353529-inner.html 2017-05-18 20:33:33.000000000 +0000 @@ -0,0 +1,12 @@ + + + +
+ + + diff -Nru thunderbird-54.0~b1+build2/mozilla/dom/base/crashtests/1353529.xul thunderbird-54.0~b1+build3/mozilla/dom/base/crashtests/1353529.xul --- thunderbird-54.0~b1+build2/mozilla/dom/base/crashtests/1353529.xul 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/dom/base/crashtests/1353529.xul 2017-05-18 20:33:32.000000000 +0000 @@ -0,0 +1,8 @@ + + + + + + + diff -Nru thunderbird-54.0~b1+build2/mozilla/dom/base/crashtests/crashtests.list thunderbird-54.0~b1+build3/mozilla/dom/base/crashtests/crashtests.list --- thunderbird-54.0~b1+build2/mozilla/dom/base/crashtests/crashtests.list 2017-05-05 19:30:30.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/dom/base/crashtests/crashtests.list 2017-05-18 20:33:33.000000000 +0000 @@ -212,4 +212,5 @@ pref(dom.IntersectionObserver.enabled,true) load 1326194-1.html pref(dom.IntersectionObserver.enabled,true) load 1326194-2.html pref(dom.IntersectionObserver.enabled,true) load 1332939.html +pref(dom.IntersectionObserver.enabled,true) load 1353529.xul pref(dom.webcomponents.enabled,true) load 1341693.html diff -Nru thunderbird-54.0~b1+build2/mozilla/dom/base/DOMIntersectionObserver.cpp thunderbird-54.0~b1+build3/mozilla/dom/base/DOMIntersectionObserver.cpp --- thunderbird-54.0~b1+build2/mozilla/dom/base/DOMIntersectionObserver.cpp 2017-05-05 19:30:30.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/dom/base/DOMIntersectionObserver.cpp 2017-05-18 20:33:33.000000000 +0000 @@ -289,7 +289,12 @@ if (!presContext) { break; } - rootFrame = presContext->PresShell()->GetRootScrollFrame(); + nsIFrame* rootScrollFrame = presContext->PresShell()->GetRootScrollFrame(); + if (rootScrollFrame) { + rootFrame = rootScrollFrame; + } else { + break; + } } root = rootFrame->GetContent()->AsElement(); nsIScrollableFrame* scrollFrame = do_QueryFrame(rootFrame); diff -Nru thunderbird-54.0~b1+build2/mozilla/dom/base/nsDocument.cpp thunderbird-54.0~b1+build3/mozilla/dom/base/nsDocument.cpp --- thunderbird-54.0~b1+build2/mozilla/dom/base/nsDocument.cpp 2017-05-05 19:30:30.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/dom/base/nsDocument.cpp 2017-05-18 20:33:33.000000000 +0000 @@ -220,6 +220,7 @@ #include "mozilla/dom/WebComponentsBinding.h" #include "mozilla/dom/CustomElementRegistryBinding.h" #include "mozilla/dom/CustomElementRegistry.h" +#include "mozilla/dom/TimeoutManager.h" #include "nsFrame.h" #include "nsDOMCaretPosition.h" #include "nsIDOMHTMLTextAreaElement.h" @@ -12744,6 +12745,9 @@ static_cast*>(aData); if (aDoc) { aDoc->SetIsInSyncOperation(true); + if (nsCOMPtr window = aDoc->GetInnerWindow()) { + window->TimeoutManager().BeginSyncOperation(); + } documents->AppendObject(aDoc); aDoc->EnumerateSubDocuments(MarkDocumentTreeToBeInSyncOperation, aData); } @@ -12767,6 +12771,9 @@ nsAutoSyncOperation::~nsAutoSyncOperation() { for (int32_t i = 0; i < mDocuments.Count(); ++i) { + if (nsCOMPtr window = mDocuments[i]->GetInnerWindow()) { + window->TimeoutManager().EndSyncOperation(); + } mDocuments[i]->SetIsInSyncOperation(false); } nsContentUtils::SetMicroTaskLevel(mMicroTaskLevel); diff -Nru thunderbird-54.0~b1+build2/mozilla/dom/base/nsFocusManager.cpp thunderbird-54.0~b1+build3/mozilla/dom/base/nsFocusManager.cpp --- thunderbird-54.0~b1+build2/mozilla/dom/base/nsFocusManager.cpp 2017-05-05 19:30:30.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/dom/base/nsFocusManager.cpp 2017-05-18 20:33:33.000000000 +0000 @@ -1056,8 +1056,9 @@ nsCOMPtr presShell = mDelayedBlurFocusEvents[i].mPresShell; nsCOMPtr relatedTarget = mDelayedBlurFocusEvents[i].mRelatedTarget; mDelayedBlurFocusEvents.RemoveElementAt(i); - SendFocusOrBlurEvent(message, presShell, aDocument, target, 0, - false, false, relatedTarget); + + FireFocusOrBlurEvent(message, presShell, target, false, false, + relatedTarget); --i; } } @@ -2077,7 +2078,7 @@ return node->OwnerDoc(); } -void nsFocusManager::SendFocusInOrOutEvent(EventMessage aEventMessage, +void nsFocusManager::FireFocusInOrOutEvent(EventMessage aEventMessage, nsIPresShell* aPresShell, nsISupports* aTarget, nsPIDOMWindowOuter* aCurrentFocusedWindow, @@ -2085,7 +2086,7 @@ EventTarget* aRelatedTarget) { NS_ASSERTION(aEventMessage == eFocusIn || aEventMessage == eFocusOut, - "Wrong event type for SendFocusInOrOutEvent"); + "Wrong event type for FireFocusInOrOutEvent"); nsContentUtils::AddScriptRunner( new FocusInOutEvent( @@ -2113,11 +2114,6 @@ nsCOMPtr eventTarget = do_QueryInterface(aTarget); nsCOMPtr eventTargetDoc = GetDocumentHelper(eventTarget); nsCOMPtr relatedTargetDoc = GetDocumentHelper(aRelatedTarget); - nsCOMPtr currentWindow = mFocusedWindow; - nsCOMPtr targetWindow = do_QueryInterface(aTarget); - nsCOMPtr targetDocument = do_QueryInterface(aTarget); - nsCOMPtr currentFocusedContent = currentWindow ? - currentWindow->GetFocusedNode() : nullptr; // set aRelatedTarget to null if it's not in the same document as eventTarget if (eventTargetDoc != relatedTargetDoc) { @@ -2145,6 +2141,36 @@ return; } + // If mDelayedBlurFocusEvents queue is not empty, check if there are events + // that belongs to this doc, if yes, fire them first. + if (aDocument && !aDocument->EventHandlingSuppressed() && + mDelayedBlurFocusEvents.Length()) { + FireDelayedEvents(aDocument); + } + + FireFocusOrBlurEvent(aEventMessage, aPresShell, aTarget, aWindowRaised, + aIsRefocus, aRelatedTarget); +} + +void +nsFocusManager::FireFocusOrBlurEvent(EventMessage aEventMessage, + nsIPresShell* aPresShell, + nsISupports* aTarget, + bool aWindowRaised, + bool aIsRefocus, + EventTarget* aRelatedTarget) +{ + nsCOMPtr eventTarget = do_QueryInterface(aTarget); + nsCOMPtr eventTargetDoc = GetDocumentHelper(eventTarget); + nsCOMPtr currentWindow = mFocusedWindow; + nsCOMPtr targetWindow = do_QueryInterface(aTarget); + nsCOMPtr targetDocument = do_QueryInterface(aTarget); + nsCOMPtr currentFocusedContent = currentWindow ? + currentWindow->GetFocusedNode() : nullptr; + + bool dontDispatchEvent = + eventTargetDoc && nsContentUtils::IsUserFocusIgnored(eventTargetDoc); + #ifdef ACCESSIBILITY nsAccessibilityService* accService = GetAccService(); if (accService) { @@ -2170,7 +2196,7 @@ // resolved. if (!targetWindow && !targetDocument) { EventMessage focusInOrOutMessage = aEventMessage == eFocus ? eFocusIn : eFocusOut; - SendFocusInOrOutEvent(focusInOrOutMessage, aPresShell, aTarget, + FireFocusInOrOutEvent(focusInOrOutMessage, aPresShell, aTarget, currentWindow, currentFocusedContent, aRelatedTarget); } } diff -Nru thunderbird-54.0~b1+build2/mozilla/dom/base/nsFocusManager.h thunderbird-54.0~b1+build3/mozilla/dom/base/nsFocusManager.h --- thunderbird-54.0~b1+build2/mozilla/dom/base/nsFocusManager.h 2017-05-05 19:30:30.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/dom/base/nsFocusManager.h 2017-05-18 20:33:33.000000000 +0000 @@ -280,7 +280,8 @@ nsIContent* aContentLostFocus = nullptr); /** - * Fires a focus or blur event at aTarget. + * Send a focus or blur event at aTarget. It may be added to the delayed + * event queue if the document is suppressing events. * * aEventMessage should be either eFocus or eBlur. * For blur events, aFocusMethod should normally be non-zero. @@ -297,7 +298,22 @@ mozilla::dom::EventTarget* aRelatedTarget = nullptr); /** - * Send a focusin or focusout event + * Fire a focus or blur event at aTarget. + * + * aEventMessage should be either eFocus or eBlur. + * For blur events, aFocusMethod should normally be non-zero. + * + * aWindowRaised should only be true if called from WindowRaised. + */ + void FireFocusOrBlurEvent(mozilla::EventMessage aEventMessage, + nsIPresShell* aPresShell, + nsISupports* aTarget, + bool aWindowRaised, + bool aIsRefocus = false, + mozilla::dom::EventTarget* aRelatedTarget = nullptr); + + /** + * Fire a focusin or focusout event * * aEventMessage should be either eFocusIn or eFocusOut. * @@ -313,7 +329,7 @@ * aRelatedTarget is the content related to the event (the object * losing focus for focusin, the object getting focus for focusout). */ - void SendFocusInOrOutEvent(mozilla::EventMessage aEventMessage, + void FireFocusInOrOutEvent(mozilla::EventMessage aEventMessage, nsIPresShell* aPresShell, nsISupports* aTarget, nsPIDOMWindowOuter* aCurrentFocusedWindow, diff -Nru thunderbird-54.0~b1+build2/mozilla/dom/base/test/chrome/test_nsITextInputProcessor.xul thunderbird-54.0~b1+build3/mozilla/dom/base/test/chrome/test_nsITextInputProcessor.xul --- thunderbird-54.0~b1+build2/mozilla/dom/base/test/chrome/test_nsITextInputProcessor.xul 2017-05-05 19:30:30.000000000 +0000 +++ thunderbird-54.0~b1+build3/mozilla/dom/base/test/chrome/test_nsITextInputProcessor.xul 2017-05-18 20:33:33.000000000 +0000 @@ -10,7 +10,6 @@

-