Index: head/mail/thunderbird/Makefile =================================================================== --- head/mail/thunderbird/Makefile (revision 479659) +++ head/mail/thunderbird/Makefile (revision 479660) @@ -1,83 +1,84 @@ # Created by: Joe Marcus Clarke # $FreeBSD$ PORTNAME= thunderbird -DISTVERSION= 60.0 -PORTREVISION= 3 +DISTVERSION= 60.1.0 CATEGORIES= mail news net-im ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build4/source + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source DISTFILES= ${DISTNAME}.source${EXTRACT_SUFX} MAINTAINER= gecko@FreeBSD.org COMMENT= Mozilla Thunderbird is standalone mail and news that stands above BUILD_DEPENDS= nspr>=4.19:devel/nspr \ nss>=3.36.1:security/nss \ icu>=59.1,1:devel/icu \ libevent>=2.1.8:devel/libevent \ harfbuzz>=1.7.6:print/harfbuzz \ graphite2>=1.3.11:graphics/graphite2 \ png>=1.6.34:graphics/png \ libvorbis>=1.3.6,3:audio/libvorbis \ libvpx>=1.5.0:multimedia/libvpx \ sqlite3>=3.22.0:databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \ v4l_compat>0:multimedia/v4l_compat \ autoconf-2.13:devel/autoconf213 \ yasm:devel/yasm \ zip:archivers/zip # soundtouch>=1.9.0:audio/soundtouch \ SSP_UNSAFE= yes USE_GECKO= gecko USE_MOZILLA= -cairo -soundtouch USE_GL= gl USES= tar:xz + +WRKSRC= ${WRKDIR}/${PORTNAME}-60.0.1 MOZ_OPTIONS= --enable-application=comm/mail --enable-official-branding MOZ_MK_OPTIONS= MOZ_THUNDERBIRD=1 MAIL_PKG_SHARED=1 MOZ_EXPORT= MOZ_THUNDERBIRD=1 MAIL_PKG_SHARED=1 MOZ_PKGCONFIG_FILES= PORTNAME_ICON= ${MOZILLA}.png PORTNAME_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/chrome/icons/default/default48.png SYSTEM_PREFS= ${FAKEDIR}/lib/${PORTNAME}/defaults/pref/${PORTNAME}.js MOZ_PIS_SCRIPTS=moz_pis_S50cleanhome OPTIONS_DEFINE= LIGHTNING OPTIONS_DEFAULT=CANBERRA LIGHTNING OPTIONS_EXCLUDE=BUNDLED_CAIRO .include "${.CURDIR}/../../www/firefox/Makefile.options" .include .if ${PORT_OPTIONS:MLIGHTNING} MOZ_OPTIONS+= --enable-calendar .else MOZ_OPTIONS+= --disable-calendar .endif post-extract: @${SED} -e 's|@PORTNAME_ICON@|${PORTNAME_ICON}|;s|@MOZILLA@|${MOZILLA}|' \ <${FILESDIR}/thunderbird.desktop.in >${WRKDIR}/${MOZILLA_EXEC_NAME}.desktop post-patch: @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/comm/mail/app/nsMailApp.cpp pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${MOZSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${MOZSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) port-pre-install: ${MKDIR} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/defaults post-install: ${INSTALL_DATA} ${WRKDIR}/${MOZILLA_EXEC_NAME}.desktop ${STAGEDIR}${PREFIX}/share/applications ${LN} -sf ${PORTNAME_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${PORTNAME_ICON} .include Index: head/mail/thunderbird/distinfo =================================================================== --- head/mail/thunderbird/distinfo (revision 479659) +++ head/mail/thunderbird/distinfo (revision 479660) @@ -1,3 +1,3 @@ -TIMESTAMP = 1533061306 -SHA256 (thunderbird-60.0.source.tar.xz) = bd7da88dcc03c448a4e975b5a1d3e9bf466ec9151b1059392bcdb50955a22056 -SIZE (thunderbird-60.0.source.tar.xz) = 282494428 +TIMESTAMP = 1536716545 +SHA256 (thunderbird-60.1.0.source.tar.xz) = 4734f5381140d6f905591ac3698fde77fabf6c846e5f097944b25601ee188baf +SIZE (thunderbird-60.1.0.source.tar.xz) = 284897004 Index: head/mail/thunderbird/files/patch-addon-search =================================================================== --- head/mail/thunderbird/files/patch-addon-search (revision 479659) +++ head/mail/thunderbird/files/patch-addon-search (revision 479660) @@ -1,59 +1,59 @@ https://github.com/mozilla/addons/issues/708 https://github.com/mozilla/addons-frontend/issues/4610 diff --git mail/app/profile/all-thunderbird.js mail/app/profile/all-thunderbird.js index 75c2c5e435e35..4d8c09c02759b 100644 --- comm/mail/app/profile/all-thunderbird.js +++ comm/mail/app/profile/all-thunderbird.js @@ -166,10 +166,10 @@ pref("extensions.getAddons.maxResults", 15); pref("extensions.getAddons.get.url", "https://live.thunderbird.net/services.addons/api/v3/addons/search/?guid=%IDS%&lang=%LOCALE%"); pref("extensions.getAddons.compatOverides.url", "https://live.thunderbird.net/services.addons/api/v3/addons/compat-override/?guid=%IDS%&lang=%LOCALE%"); pref("extensions.getAddons.link.url", "https://addons.thunderbird.net/%LOCALE%/%APP%/"); -pref("extensions.getAddons.recommended.url", "https://services.addons.thunderbird.net/%LOCALE%/%APP%/api/%API_VERSION%/list/recommended/all/%MAX_RESULTS%/%OS%/%VERSION%?src=thunderbird"); +pref("extensions.getAddons.recommended.url", "https://services.addons.thunderbird.net/%LOCALE%/%APP%/api/%API_VERSION%/list/recommended/all/%MAX_RESULTS%/Linux/%VERSION%?src=thunderbird"); pref("extensions.getAddons.search.browseURL", "https://addons.thunderbird.net/%LOCALE%/%APP%/search/?q=%TERMS%"); -pref("extensions.getAddons.search.url", "https://services.addons.thunderbird.net/%LOCALE%/%APP%/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%?src=thunderbird"); -pref("extensions.webservice.discoverURL", "https://services.addons.thunderbird.net/%LOCALE%/%APP%/discovery/pane/%VERSION%/%OS%"); +pref("extensions.getAddons.search.url", "https://services.addons.thunderbird.net/%LOCALE%/%APP%/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/Linux/%VERSION%/%COMPATIBILITY_MODE%?src=thunderbird"); +pref("extensions.webservice.discoverURL", "https://services.addons.thunderbird.net/%LOCALE%/%APP%/discovery/pane/%VERSION%/Linux"); pref("extensions.getAddons.themes.browseURL", "https://addons.thunderbird.net/%LOCALE%/thunderbird/themes/?src=thunderbird"); pref("extensions.getAddons.siteRegExp", "^https://.*addons\\.thunderbird\\.net"); @@ -190,9 +190,9 @@ pref("security.cert_pinning.enforcement_level", 1); // .. etc .. // pref("extensions.update.enabled", true); -pref("extensions.update.url", "https://versioncheck.addons.thunderbird.net/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%¤tAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%"); +pref("extensions.update.url", "https://versioncheck.addons.thunderbird.net/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=Linux&appABI=%APP_ABI%&locale=%APP_LOCALE%¤tAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%"); -pref("extensions.update.background.url", "https://versioncheck-bg.addons.thunderbird.net/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%¤tAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%"); +pref("extensions.update.background.url", "https://versioncheck-bg.addons.thunderbird.net/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=Linux&appABI=%APP_ABI%&locale=%APP_LOCALE%¤tAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%"); pref("extensions.update.interval", 86400); // Check for updates to Extensions and // Themes every day diff --git toolkit/mozapps/extensions/internal/AddonRepository.jsm toolkit/mozapps/extensions/internal/AddonRepository.jsm index f70fd8d7e3bd8..81e8cd7764fdf 100644 --- toolkit/mozapps/extensions/internal/AddonRepository.jsm +++ toolkit/mozapps/extensions/internal/AddonRepository.jsm -@@ -588,7 +588,7 @@ var AddonRepository = { +@@ -602,7 +602,7 @@ var AddonRepository = { addon.version = String(aEntry.current_version.version); if (Array.isArray(aEntry.current_version.files)) { for (let file of aEntry.current_version.files) { -- if (file.platform == "all" || file.platform == Services.appinfo.OS.toLowerCase()) { -+ if (file.platform == "all" || file.platform == "linux" || file.platform == Services.appinfo.OS.toLowerCase()) { +- if (file.platform == "all" || file.platform == PLATFORM) { ++ if (file.platform == "all" || file.platform == "linux" || file.platform == PLATFORM) { if (file.url) { addon.sourceURI = NetUtil.newURI(file.url); } diff --git toolkit/mozapps/extensions/internal/XPIProvider.jsm toolkit/mozapps/extensions/internal/XPIProvider.jsm index f70fd8d7e3bd8..81e8cd7764fdf 100644 --- toolkit/mozapps/extensions/internal/XPIProvider.jsm +++ toolkit/mozapps/extensions/internal/XPIProvider.jsm @@ -4974,7 +4974,7 @@ AddonInternal.prototype = { // Something is causing errors in here try { for (let platform of this.targetPlatforms) { - if (platform.os == Services.appinfo.OS) { + if (platform.os == "Linux" || platform.os == Services.appinfo.OS) { if (platform.abi) { needsABI = true; if (platform.abi === abi) Index: head/mail/thunderbird/files/patch-z-bug1436911 =================================================================== --- head/mail/thunderbird/files/patch-z-bug1436911 (revision 479659) +++ head/mail/thunderbird/files/patch-z-bug1436911 (revision 479660) @@ -1,1163 +1,1164 @@ commit 6b81d0b99f20 Author: Nicholas Nethercote Date: Thu Mar 8 15:47:24 2018 +1100 Bug 1436911 - Avoid the early/late prefs split. r=glandium All prefs that need to be sent to a new content process are now put into the shared memory segment, and they are identified by the pref name instead of an index into a list. The old IPC used at process startup (in XPCOMInitData) is removed. Benefits: - It removes the need for the early prefs list (dom/ipc/ContentProcesses.{h,cpp}) and the associated checking, which is ugly and often trips people up (e.g. bug 1432979, bug 1439406). - Using prefnames instead of indices fixes some fragility (fixing bug 1419432). - It fixes the problem of early prefs being installed as unlocked default values even if they are locked and/or have user values. MozReview-Commit-ID: FRIzHF8Tjd --- dom/ipc/ContentChild.cpp | 2 - dom/ipc/ContentParent.cpp | 4 +- dom/ipc/ContentPrefs.cpp | 357 ------------------------------ dom/ipc/ContentPrefs.h | 27 --- dom/ipc/ContentProcess.cpp | 5 +- dom/ipc/PContent.ipdl | 7 +- dom/ipc/moz.build | 2 - layout/style/nsCSSProps.h | 2 +- modules/libpref/Preferences.cpp | 470 ++++++++++++++++++++++------------------ modules/libpref/Preferences.h | 15 +- 10 files changed, 278 insertions(+), 613 deletions(-) diff --git dom/ipc/ContentChild.cpp dom/ipc/ContentChild.cpp index f61ab07b81e2..af1ef9cf4c7e 100644 --- dom/ipc/ContentChild.cpp +++ dom/ipc/ContentChild.cpp @@ -1185,8 +1185,6 @@ void ContentChild::InitXPCOM(const XPCOMInitData& aXPCOMInit, const mozilla::dom::ipc::StructuredCloneData& aInitialData) { - Preferences::SetLatePreferences(&aXPCOMInit.prefs()); - // Do this as early as possible to get the parent process to initialize the // background thread since we'll likely need database information very soon. BackgroundChild::Startup(); diff --git dom/ipc/ContentParent.cpp dom/ipc/ContentParent.cpp index 208bb47a970b..4ce5c6bf23d5 100644 --- dom/ipc/ContentParent.cpp +++ dom/ipc/ContentParent.cpp @@ -197,7 +197,6 @@ #include "nsLayoutStylesheetCache.h" -#include "ContentPrefs.h" #include "mozilla/Sprintf.h" #ifdef MOZ_WEBRTC @@ -2009,7 +2008,7 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR // Serialize the early prefs. nsAutoCStringN<1024> prefs; - Preferences::SerializeEarlyPreferences(prefs); + Preferences::SerializePreferences(prefs); // Set up the shared memory. base::SharedMemory shm; @@ -2228,7 +2227,6 @@ ContentParent::InitInternal(ProcessPriority aInitialPriority) XPCOMInitData xpcomInit; - Preferences::GetPreferences(&xpcomInit.prefs()); nsCOMPtr io(do_GetIOService()); MOZ_ASSERT(io, "No IO service?"); DebugOnly rv = io->GetOffline(&xpcomInit.isOffline()); diff --git dom/ipc/ContentPrefs.cpp dom/ipc/ContentPrefs.cpp deleted file mode 100644 index 808b797d9bee..000000000000 --- dom/ipc/ContentPrefs.cpp +++ /dev/null -@@ -1,361 +0,0 @@ +@@ -1,362 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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 "ContentPrefs.h" - -/****************************************************************************** - * - * DO NOT ADD PREFS TO THIS LIST WITHOUT DOM PEER REVIEW - * - * This is the list of preferences that are sent to the content process on - * startup. Only prefs that are required immediately upon startup should be - * listed here. The first IPC message received in the content process will - * contain all the other prefs. Prefs should only be listed here if they must be - * read before the first IPC message is received. - * - ******************************************************************************/ - -const char* mozilla::dom::ContentPrefs::gEarlyPrefs[] = { - "accessibility.monoaudio.enable", - "accessibility.mouse_focuses_formcontrol", - "accessibility.tabfocus_applies_to_xul", - "app.update.channel", - "browser.autofocus", - "browser.dom.window.dump.enabled", - "browser.sessionhistory.max_entries", - "browser.sessionhistory.max_total_viewers", -#if defined(NIGHTLY_BUILD) || defined(DEBUG) - "browser.startup.record", -#endif -#if defined(ANDROID) - "consoleservice.logcat", -#endif - "content.cors.disable", - "content.cors.no_private_data", - "content.notify.backoffcount", - "content.notify.interval", - "content.notify.ontimer", - "content.sink.enable_perf_mode", - "content.sink.event_probe_rate", - "content.sink.initial_perf_time", - "content.sink.interactive_deflect_count", - "content.sink.interactive_parse_time", - "content.sink.interactive_time", - "content.sink.pending_event_mode", - "content.sink.perf_deflect_count", - "content.sink.perf_parse_time", - "device.storage.prompt.testing", - "device.storage.writable.name", - "devtools.enabled", - "dom.allow_XUL_XBL_for_file", - "dom.allow_cut_copy", - "dom.animations-api.core.enabled", - "dom.animations-api.element-animate.enabled", - "dom.animations-api.pending-member.enabled", - "dom.enable_frame_timing", - "dom.enable_performance", - "dom.enable_performance_navigation_timing", - "dom.enable_resource_timing", - "dom.event.handling-user-input-time-limit", - "dom.event.touch.coalescing.enabled", - "dom.forms.autocomplete.formautofill", - "dom.forms.inputmode", - "dom.input.skip_cursor_move_for_same_value_set", - "dom.ipc.processPriorityManager.backgroundGracePeriodMS", - "dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS", - "dom.ipc.useNativeEventProcessing.content", - "dom.max_chrome_script_run_time", - "dom.max_ext_content_script_run_time", - "dom.max_script_run_time", - "dom.mozBrowserFramesEnabled", - "dom.performance.enable_notify_performance_timing", - "dom.performance.enable_user_timing_logging", - "dom.placeholder.show_on_focus", - "dom.requestIdleCallback.enabled", - "dom.script_loader.bytecode_cache.enabled", - "dom.script_loader.bytecode_cache.strategy", - "dom.storage.testing", - "dom.url.encode_decode_hash", - "dom.url.getters_decode_hash", - "dom.use_watchdog", - "dom.vibrator.enabled", - "dom.vibrator.max_vibrate_list_len", - "dom.vibrator.max_vibrate_ms", - "dom.webcomponents.customelements.enabled", - "dom.webcomponents.shadowdom.enabled", - "focusmanager.testmode", - "font.size.inflation.disabledInMasterProcess", - "font.size.inflation.emPerLine", - "font.size.inflation.forceEnabled", - "font.size.inflation.lineThreshold", - "font.size.inflation.mappingIntercept", - "font.size.inflation.maxRatio", - "font.size.inflation.minTwips", - "font.size.systemFontScale", - "full-screen-api.allow-trusted-requests-only", - "full-screen-api.enabled", - "full-screen-api.unprefix.enabled", -#ifdef FUZZING - "fuzzing.enabled", -#endif - "gfx.font_rendering.opentype_svg.enabled", - "hangmonitor.timeout", - "html5.flushtimer.initialdelay", - "html5.flushtimer.subsequentdelay", - "html5.offmainthread", - "intl.charset.fallback.tld", - "intl.charset.fallback.utf8_for_file", - "intl.ime.hack.on_ime_unaware_apps.fire_key_events_for_composition", - "javascript.enabled", - "javascript.options.array_prototype_values", - "javascript.options.asmjs", - "javascript.options.asyncstack", - "javascript.options.baselinejit", - "javascript.options.baselinejit.threshold", - "javascript.options.baselinejit.unsafe_eager_compilation", - "javascript.options.discardSystemSource", - "javascript.options.dump_stack_on_debuggee_would_run", - "javascript.options.gczeal", - "javascript.options.gczeal.frequency", - "javascript.options.ion", - "javascript.options.ion.offthread_compilation", - "javascript.options.ion.threshold", - "javascript.options.ion.unsafe_eager_compilation", - "javascript.options.jit.full_debug_checks", - "javascript.options.native_regexp", - "javascript.options.parallel_parsing", - "javascript.options.shared_memory", - "javascript.options.spectre.index_masking", - "javascript.options.spectre.jit_to_C++_calls", - "javascript.options.spectre.object_mitigations.barriers", - "javascript.options.spectre.object_mitigations.misc", - "javascript.options.spectre.string_mitigations", - "javascript.options.spectre.value_masking", - "javascript.options.streams", - "javascript.options.strict", - "javascript.options.strict.debug", - "javascript.options.throw_on_asmjs_validation_failure", - "javascript.options.throw_on_debuggee_would_run", - "javascript.options.wasm", - "javascript.options.wasm_baselinejit", - "javascript.options.wasm_ionjit", - "javascript.options.werror", - "javascript.use_us_english_locale", - "jsloader.shareGlobal", - "layout.css.all-shorthand.enabled", - "layout.css.background-blend-mode.enabled", - "layout.css.box-decoration-break.enabled", - "layout.css.color-adjust.enabled", - "layout.css.column-span.enabled", - "layout.css.contain.enabled", - "layout.css.control-characters.visible", - "layout.css.emulate-moz-box-with-flex", - "layout.css.expensive-style-struct-assertions.enabled", - "layout.css.float-logical-values.enabled", - "layout.css.font-display.enabled", - "layout.css.font-variations.enabled", - "layout.css.frames-timing.enabled", - "layout.css.getBoxQuads.enabled", - "layout.css.grid-template-subgrid-value.enabled", - "layout.css.grid.enabled", - "layout.css.image-orientation.enabled", - "layout.css.individual-transform.enabled", - "layout.css.initial-letter.enabled", - "layout.css.isolation.enabled", - "layout.css.mix-blend-mode.enabled", - "layout.css.moz-document.content.enabled", - "layout.css.osx-font-smoothing.enabled", - "layout.css.overflow-clip-box.enabled", - "layout.css.overscroll-behavior.enabled", - "layout.css.prefixes.animations", - "layout.css.prefixes.border-image", - "layout.css.prefixes.box-sizing", - "layout.css.prefixes.device-pixel-ratio-webkit", - "layout.css.prefixes.font-features", - "layout.css.prefixes.gradients", - "layout.css.prefixes.transforms", - "layout.css.prefixes.transitions", - "layout.css.prefixes.webkit", - "layout.css.scope-pseudo.enabled", - "layout.css.scoped-style.enabled", - "layout.css.scroll-behavior.property-enabled", - "layout.css.scroll-snap.enabled", -#ifdef MOZ_STYLO - "layout.css.servo.chrome.enabled", - "layout.css.servo.enabled", -#endif - "layout.css.shape-outside.enabled", - "layout.css.text-align-unsafe-value.enabled", - "layout.css.text-combine-upright-digits.enabled", - "layout.css.text-combine-upright.enabled", - "layout.css.text-justify.enabled", - "layout.css.touch_action.enabled", - "layout.css.visited_links_enabled", - "layout.idle_period.required_quiescent_frames", - "layout.idle_period.time_limit", - "layout.interruptible-reflow.enabled", - "mathml.disabled", - "media.audio-max-decode-error", - "media.cache_readahead_limit", - "media.cache_resume_threshold", - "media.cache_size", - "media.clearkey.persistent-license.enabled", - "media.cubeb.backend", - "media.cubeb.sandbox", - "media.cubeb_latency_msg_frames", - "media.cubeb_latency_playback_ms", - "media.decoder-doctor.wmf-disabled-is-failure", - "media.decoder.recycle.enabled", - "media.decoder.skip-to-next-key-frame.enabled", - "media.dormant-on-pause-timeout-ms", - "media.eme.audio.blank", - "media.eme.chromium-api.video-shmems", - "media.eme.enabled", - "media.eme.video.blank", - "media.ffmpeg.enabled", - "media.ffmpeg.low-latency.enabled", - "media.ffvpx.enabled", - "media.ffvpx.low-latency.enabled", - "media.flac.enabled", - "media.forcestereo.enabled", - "media.gmp.decoder.enabled", - "media.gmp.insecure.allow", - "media.gpu-process-decoder", - "media.hls.enabled", - "media.libavcodec.allow-obsolete", - "media.memory_cache_max_size", - "media.memory_caches_combined_limit_kb", - "media.memory_caches_combined_limit_pc_sysmem", - "media.mp4.enabled", - "media.navigator.mediadatadecoder_enabled", - "media.ogg.enabled", - "media.ogg.flac.enabled", - "media.playback.warnings-as-errors", - "media.playback.warnings-as-errors.stagefright-vs-rust", - "media.resampling.enabled", - "media.resume-bkgnd-video-on-tabhover", - "media.ruin-av-sync.enabled", - "media.rust.mp4parser", - "media.rust.test_mode", - "media.seamless-looping", - "media.suspend-bkgnd-video.delay-ms", - "media.suspend-bkgnd-video.enabled", - "media.use-blank-decoder", - "media.video-max-decode-error", - "media.video_stats.enabled", - "media.videocontrols.lock-video-orientation", - "media.volume_scale", - "media.webspeech.recognition.enable", - "media.webspeech.recognition.force_enable", - "media.webspeech.synth.force_global_queue", - "media.webspeech.test.enable", - "media.webspeech.test.fake_fsm_events", - "media.webspeech.test.fake_recognition_service", - "media.wmf.allow-unsupported-resolutions", - "media.wmf.enabled", - "media.wmf.skip-blacklist", - "media.wmf.vp9.enabled", - "network.IDN.blacklist_chars", - "network.IDN.restriction_profile", - "network.IDN.use_whitelist", - "network.IDN_show_punycode", - "network.buffer.cache.count", - "network.buffer.cache.size", - "network.captive-portal-service.enabled", - "network.cookie.cookieBehavior", - "network.cookie.lifetimePolicy", - "network.dns.disablePrefetch", - "network.dns.disablePrefetchFromHTTPS", - "network.file.disable_unc_paths", +- "network.file.path_blacklist", - "network.http.tailing.enabled", - "network.jar.block-remote-files", - "network.loadinfo.skip_type_assertion", - "network.notify.changed", - "network.offline-mirrors-connectivity", - "network.protocol-handler.external.jar", - "network.proxy.type", - "network.security.ports.banned", - "network.security.ports.banned.override", - "network.standard-url.enable-rust", - "network.standard-url.max-length", - "network.standard-url.punycode-host", - "network.sts.max_time_for_events_between_two_polls", - "network.sts.max_time_for_pr_close_during_shutdown", - "network.tcp.keepalive.enabled", - "network.tcp.keepalive.idle_time", - "network.tcp.keepalive.probe_count", - "network.tcp.keepalive.retry_interval", - "network.tcp.sendbuffer", - "nglayout.debug.invalidation", - "privacy.donottrackheader.enabled", - "privacy.firstparty.isolate", - "privacy.firstparty.isolate.restrict_opener_access", - "privacy.reduceTimerPrecision", - "privacy.resistFingerprinting", - "privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts", - "privacy.resistFingerprinting.reduceTimerPrecision.jitter", - "privacy.resistFingerprinting.reduceTimerPrecision.microseconds", - "privacy.resistFingerprinting.target_video_res", - "privacy.resistFingerprinting.video_dropped_ratio", - "privacy.resistFingerprinting.video_frames_per_sec", - "privacy.trackingprotection.lower_network_priority", - "privacy.window.maxInnerHeight", - "privacy.window.maxInnerWidth", - "security.csp.enable", - "security.data_uri.block_toplevel_data_uri_navigations", - "security.data_uri.unique_opaque_origin", - "security.fileuri.strict_origin_policy", - "security.mixed_content.block_active_content", - "security.mixed_content.block_display_content", - "security.mixed_content.block_object_subrequest", - "security.mixed_content.hsts_priming_cache_timeout", - "security.mixed_content.send_hsts_priming", - "security.mixed_content.upgrade_display_content", - "security.mixed_content.use_hsts", - "security.sandbox.content.level", - "security.sandbox.content.tempDirSuffix", - "security.sandbox.logging.enabled", - "security.sandbox.mac.track.violations", - "security.sandbox.windows.log.stackTraceDepth", - "svg.disabled", - "svg.display-lists.hit-testing.enabled", - "svg.display-lists.painting.enabled", - "svg.new-getBBox.enabled", - "svg.path-caching.enabled", - "svg.transform-box.enabled", - "toolkit.asyncshutdown.crash_timeout", - "toolkit.asyncshutdown.log", - "toolkit.osfile.log", - "toolkit.osfile.log.redirect", - "toolkit.telemetry.enabled", - "toolkit.telemetry.idleTimeout", - "toolkit.telemetry.initDelay", - "toolkit.telemetry.log.dump", - "toolkit.telemetry.log.level", - "toolkit.telemetry.minSubsessionLength", - "toolkit.telemetry.scheduler.idleTickInterval", - "toolkit.telemetry.scheduler.tickInterval", - "toolkit.telemetry.testing.overridePreRelease", - "toolkit.telemetry.unified", - "ui.key.menuAccessKeyFocuses", - "ui.popup.disable_autohide", - "ui.use_activity_cursor", - "view_source.editor.external", - "zoom.maxPercent", - "zoom.minPercent" -}; - -const char** mozilla::dom::ContentPrefs::GetEarlyPrefs(size_t* aCount) -{ - *aCount = ArrayLength(ContentPrefs::gEarlyPrefs); - return gEarlyPrefs; -} - -const char* mozilla::dom::ContentPrefs::GetEarlyPref(size_t aIndex) -{ - MOZ_ASSERT(aIndex < ArrayLength(ContentPrefs::gEarlyPrefs)); - return gEarlyPrefs[aIndex]; -} diff --git dom/ipc/ContentPrefs.h dom/ipc/ContentPrefs.h deleted file mode 100644 index 72ce8d236c11..000000000000 --- dom/ipc/ContentPrefs.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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/. */ - -#ifndef mozilla_dom_ContentPrefs_h -#define mozilla_dom_ContentPrefs_h - -// See the comment in ContentPrefs.cpp for more information. - -namespace mozilla { -namespace dom { - -class ContentPrefs { -public: - static const char** GetEarlyPrefs(size_t* aCount); - static const char* GetEarlyPref(size_t aIndex); - -private: - static const char* gEarlyPrefs[]; -}; - -} -} - -#endif diff --git dom/ipc/ContentProcess.cpp dom/ipc/ContentProcess.cpp index 2441c8cb9224..c00283dc5084 100644 --- dom/ipc/ContentProcess.cpp +++ dom/ipc/ContentProcess.cpp @@ -7,7 +7,6 @@ #include "mozilla/ipc/IOThreadChild.h" #include "ContentProcess.h" -#include "ContentPrefs.h" #include "base/shared_memory.h" #include "mozilla/Preferences.h" #include "mozilla/Scheduler.h" @@ -226,8 +225,8 @@ ContentProcess::Init(int aArgc, char* aArgv[]) NS_ERROR("failed to map shared memory in the child"); return false; } - Preferences::DeserializeEarlyPreferences(static_cast(shm.memory()), - prefsLen); + Preferences::DeserializePreferences(static_cast(shm.memory()), + prefsLen); Scheduler::SetPrefs(schedulerPrefs); mContent.Init(IOThreadChild::message_loop(), diff --git dom/ipc/PContent.ipdl dom/ipc/PContent.ipdl index 5d077976569a..fb967ffc53a9 100644 --- dom/ipc/PContent.ipdl +++ dom/ipc/PContent.ipdl @@ -155,6 +155,12 @@ union MaybePrefValue { null_t; }; +// This serialization form mirrors that used in mozilla::Pref in +// Preferences.cpp. The two should be kept in sync, e.g. if something is added +// to one it should also be added to the other. +// +// Note: there is no need to pass the isSticky attribute because that's an +// immutable attribute obtained from file at startup. struct Pref { nsCString name; bool isLocked; @@ -273,7 +279,6 @@ struct XPCOMInitData ClipboardCapabilities clipboardCaps; DomainPolicyClone domainPolicy; OptionalURIParams userContentSheetURL; - Pref[] prefs; GfxVarUpdate[] gfxNonDefaultVarUpdates; ContentDeviceData contentDeviceData; GfxInfoFeatureStatus[] gfxFeatureStatus; diff --git dom/ipc/moz.build dom/ipc/moz.build index 3c5541c7791b..5e92a0d52b5d 100644 --- dom/ipc/moz.build +++ dom/ipc/moz.build @@ -26,7 +26,6 @@ EXPORTS.mozilla.dom += [ 'ContentBridgeParent.h', 'ContentChild.h', 'ContentParent.h', - 'ContentPrefs.h', 'ContentProcess.h', 'ContentProcessHost.h', 'ContentProcessManager.h', @@ -59,7 +58,6 @@ UNIFIED_SOURCES += [ 'ContentBridgeChild.cpp', 'ContentBridgeParent.cpp', 'ContentParent.cpp', - 'ContentPrefs.cpp', 'ContentProcess.cpp', 'ContentProcessHost.cpp', 'ContentProcessManager.cpp', diff --git layout/style/nsCSSProps.h layout/style/nsCSSProps.h index dce44bf61b35..80288336a08b 100644 --- layout/style/nsCSSProps.h +++ layout/style/nsCSSProps.h @@ -645,7 +645,7 @@ public: // In the child process, assert that we're not trying to parse stylesheets // before we've gotten all our prefs. MOZ_ASSERT_IF(!XRE_IsParentProcess(), - mozilla::Preferences::AreAllPrefsSetInContentProcess()); + mozilla::Preferences::ArePrefsInitedInContentProcess()); return gPropertyEnabled[aProperty]; } diff --git modules/libpref/Preferences.cpp modules/libpref/Preferences.cpp index fe780686f2eb..488095f49236 100644 --- modules/libpref/Preferences.cpp +++ modules/libpref/Preferences.cpp @@ -15,7 +15,6 @@ #include "mozilla/ArenaAllocator.h" #include "mozilla/ArrayUtils.h" #include "mozilla/Attributes.h" -#include "mozilla/dom/ContentPrefs.h" #include "mozilla/dom/PContent.h" #include "mozilla/HashFunctions.h" #include "mozilla/Logging.h" @@ -131,6 +130,29 @@ enum class PrefType : uint8_t Bool = 3, }; +// This is used for pref names and string pref values. We encode the string +// length, then a '/', then the string chars. This encoding means there are no +// special chars that are forbidden or require escaping. +static void +SerializeAndAppendString(const char* aChars, nsCString& aStr) +{ + aStr.AppendInt(uint32_t(strlen(aChars))); + aStr.Append('/'); + aStr.Append(aChars); +} + +static char* +DeserializeString(char* aChars, nsCString& aStr) +{ + char* p = aChars; + uint32_t length = strtol(p, &p, 10); + MOZ_ASSERT(p[0] == '/'); + p++; // move past the '/' + aStr.Assign(p, length); + p += length; // move past the string itself + return p; +} + // Keep this in sync with PrefValue in prefs_parser/src/lib.rs. union PrefValue { const char* mStringVal; @@ -223,6 +245,64 @@ union PrefValue { MOZ_CRASH(); } } + + void SerializeAndAppend(PrefType aType, nsCString& aStr) + { + switch (aType) { + case PrefType::Bool: + aStr.Append(mBoolVal ? 'T' : 'F'); + break; + + case PrefType::Int: + aStr.AppendInt(mIntVal); + break; + + case PrefType::String: { + SerializeAndAppendString(mStringVal, aStr); + break; + } + + case PrefType::None: + default: + MOZ_CRASH(); + } + } + + static char* Deserialize(PrefType aType, + char* aStr, + dom::MaybePrefValue* aDomValue) + { + char* p = aStr; + + switch (aType) { + case PrefType::Bool: + if (*p == 'T') { + *aDomValue = true; + } else if (*p == 'F') { + *aDomValue = false; + } else { + *aDomValue = false; + NS_ERROR("bad bool pref value"); + } + p++; + return p; + + case PrefType::Int: { + *aDomValue = int32_t(strtol(p, &p, 10)); + return p; + } + + case PrefType::String: { + nsCString str; + p = DeserializeString(p, str); + *aDomValue = str; + return p; + } + + default: + MOZ_CRASH(); + } + } }; #ifdef DEBUG @@ -694,6 +774,159 @@ public: return false; } + // Prefs are serialized in a manner that mirrors dom::Pref. The two should be + // kept in sync. E.g. if something is added to one it should also be added to + // the other. (It would be nice to be able to use the code generated from + // IPDL for serializing dom::Pref here instead of writing by hand this + // serialization/deserialization. Unfortunately, that generated code is + // difficult to use directly, outside of the IPDL IPC code.) + // + // The grammar for the serialized prefs has the following form. + // + // = ':' ':' ? ':' ? '\n' + // = 'B' | 'I' | 'S' + // = 'L' | '-' + // = + // = | | + // = 'T' | 'F' + // = an integer literal accepted by strtol() + // = '/' + // = any char sequence of length dictated by the preceding + // . + // + // No whitespace is tolerated between tokens. must match the types of + // the values. + // + // The serialization is text-based, rather than binary, for the following + // reasons. + // + // - The size difference wouldn't be much different between text-based and + // binary. Most of the space is for strings (pref names and string pref + // values), which would be the same in both styles. And other differences + // would be minimal, e.g. small integers are shorter in text but long + // integers are longer in text. + // + // - Likewise, speed differences should be negligible. + // + // - It's much easier to debug a text-based serialization. E.g. you can + // print it and inspect it easily in a debugger. + // + // Examples of unlocked boolean prefs: + // - "B-:8/my.bool1:F:T\n" + // - "B-:8/my.bool2:F:\n" + // - "B-:8/my.bool3::T\n" + // + // Examples of locked integer prefs: + // - "IL:7/my.int1:0:1\n" + // - "IL:7/my.int2:123:\n" + // - "IL:7/my.int3::-99\n" + // + // Examples of unlocked string prefs: + // - "S-:10/my.string1:3/abc:4/wxyz\n" + // - "S-:10/my.string2:5/1.234:\n" + // - "S-:10/my.string3::7/string!\n" + + void SerializeAndAppend(nsCString& aStr) + { + switch (Type()) { + case PrefType::Bool: + aStr.Append('B'); + break; + + case PrefType::Int: + aStr.Append('I'); + break; + + case PrefType::String: { + aStr.Append('S'); + break; + } + + case PrefType::None: + default: + MOZ_CRASH(); + } + + aStr.Append(mIsLocked ? 'L' : '-'); + aStr.Append(':'); + + SerializeAndAppendString(mName, aStr); + aStr.Append(':'); + + if (mHasDefaultValue) { + mDefaultValue.SerializeAndAppend(Type(), aStr); + } + aStr.Append(':'); + + if (mHasUserValue) { + mUserValue.SerializeAndAppend(Type(), aStr); + } + aStr.Append('\n'); + } + + static char* Deserialize(char* aStr, dom::Pref* aDomPref) + { + char* p = aStr; + + // The type. + PrefType type; + if (*p == 'B') { + type = PrefType::Bool; + } else if (*p == 'I') { + type = PrefType::Int; + } else if (*p == 'S') { + type = PrefType::String; + } else { + NS_ERROR("bad pref type"); + type = PrefType::None; + } + p++; // move past the type char + + // Locked? + bool isLocked; + if (*p == 'L') { + isLocked = true; + } else if (*p == '-') { + isLocked = false; + } else { + NS_ERROR("bad pref locked status"); + isLocked = false; + } + p++; // move past the isLocked char + + MOZ_ASSERT(*p == ':'); + p++; // move past the ':' + + // The pref name. + nsCString name; + p = DeserializeString(p, name); + + MOZ_ASSERT(*p == ':'); + p++; // move past the ':' preceding the default value + + dom::MaybePrefValue maybeDefaultValue; + if (*p != ':') { + dom::PrefValue defaultValue; + p = PrefValue::Deserialize(type, p, &maybeDefaultValue); + } + + MOZ_ASSERT(*p == ':'); + p++; // move past the ':' between the default and user values + + dom::MaybePrefValue maybeUserValue; + if (*p != '\n') { + dom::PrefValue userValue; + p = PrefValue::Deserialize(type, p, &maybeUserValue); + } + + MOZ_ASSERT(*p == '\n'); + p++; // move past the '\n' following the user value + + *aDomPref = dom::Pref(name, isLocked, maybeDefaultValue, maybeUserValue); + + return p; + } + void AddSizeOfIncludingThis(MallocSizeOf aMallocSizeOf, PrefsSizes& aSizes) { // Note: mName is allocated in gPrefNameArena, measured elsewhere. @@ -880,41 +1113,9 @@ pref_savePrefs() #ifdef DEBUG -// For content processes, what prefs have been initialized? -enum class ContentProcessPhase -{ - eNoPrefsSet, - eEarlyPrefsSet, - eEarlyAndLatePrefsSet, -}; - // Note that this never changes in the parent process, and is only read in // content processes. -static ContentProcessPhase gPhase = ContentProcessPhase::eNoPrefsSet; - -struct StringComparator -{ - const char* mPrefName; - - explicit StringComparator(const char* aPrefName) - : mPrefName(aPrefName) - { - } - - int operator()(const char* aPrefName) const - { - return strcmp(mPrefName, aPrefName); - } -}; - -static bool -IsEarlyPref(const char* aPrefName) -{ - size_t prefsLen; - size_t found; - const char** list = mozilla::dom::ContentPrefs::GetEarlyPrefs(&prefsLen); - return BinarySearchIf(list, 0, prefsLen, StringComparator(aPrefName), &found); -} +static bool gContentProcessPrefsAreInited = false; #endif // DEBUG @@ -923,23 +1124,7 @@ pref_HashTableLookupInner(const char* aPrefName) { MOZ_ASSERT(NS_IsMainThread() || mozilla::ServoStyleSet::IsInServoTraversal()); -#ifdef DEBUG - if (!XRE_IsParentProcess()) { - if (gPhase == ContentProcessPhase::eNoPrefsSet) { - MOZ_CRASH_UNSAFE_PRINTF("accessing pref %s before early prefs are set", - aPrefName); - } - - if (gPhase == ContentProcessPhase::eEarlyPrefsSet && - !IsEarlyPref(aPrefName)) { - // If you hit this crash, you have an early access of a non-early pref. - // Consider moving the access later or add the pref to the whitelist of - // early prefs in ContentPrefs.cpp and get review from a DOM peer. - MOZ_CRASH_UNSAFE_PRINTF( - "accessing non-early pref %s before late prefs are set", aPrefName); - } - } -#endif + MOZ_ASSERT_IF(!XRE_IsParentProcess(), gContentProcessPrefsAreInited); return static_cast(gHashTable->Search(aPrefName)); } @@ -2932,8 +3117,8 @@ public: } // namespace -// A list of prefs sent early from the parent, via shared memory. -static InfallibleTArray* gEarlyDomPrefs; +// A list of changed prefs sent from the parent via shared memory. +static InfallibleTArray* gChangedDomPrefs; static const char kTelemetryPref[] = "toolkit.telemetry.enabled"; static const char kChannelPref[] = "app.update.channel"; @@ -3050,12 +3235,12 @@ Preferences::GetInstanceForService() } if (!XRE_IsParentProcess()) { - MOZ_ASSERT(gEarlyDomPrefs); - for (unsigned int i = 0; i < gEarlyDomPrefs->Length(); i++) { - Preferences::SetPreference(gEarlyDomPrefs->ElementAt(i)); + MOZ_ASSERT(gChangedDomPrefs); + for (unsigned int i = 0; i < gChangedDomPrefs->Length(); i++) { + Preferences::SetPreference(gChangedDomPrefs->ElementAt(i)); } - delete gEarlyDomPrefs; - gEarlyDomPrefs = nullptr; + delete gChangedDomPrefs; + gChangedDomPrefs = nullptr; } else { // Check if there is a deployment configuration file. If so, set up the @@ -3179,149 +3364,44 @@ NS_IMPL_ISUPPORTS(Preferences, nsISupportsWeakReference) /* static */ void -Preferences::SerializeEarlyPreferences(nsCString& aStr) +Preferences::SerializePreferences(nsCString& aStr) { MOZ_RELEASE_ASSERT(InitStaticMembers()); - nsAutoCStringN<256> boolPrefs, intPrefs, stringPrefs; - size_t numEarlyPrefs; - dom::ContentPrefs::GetEarlyPrefs(&numEarlyPrefs); - - for (unsigned int i = 0; i < numEarlyPrefs; i++) { - const char* prefName = dom::ContentPrefs::GetEarlyPref(i); - MOZ_ASSERT_IF(i > 0, - strcmp(prefName, dom::ContentPrefs::GetEarlyPref(i - 1)) > 0); - - Pref* pref = pref_HashTableLookup(prefName); - if (!pref || !pref->MustSendToContentProcesses()) { - continue; - } + aStr.Truncate(); - switch (pref->Type()) { - case PrefType::Bool: - boolPrefs.Append( - nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName))); - break; - case PrefType::Int: - intPrefs.Append( - nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName))); - break; - case PrefType::String: { - nsAutoCString value; - Preferences::GetCString(prefName, value); - stringPrefs.Append( - nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get())); - } break; - case PrefType::None: - break; - default: - printf_stderr("preference type: %d\n", int(pref->Type())); - MOZ_CRASH(); + for (auto iter = gHashTable->Iter(); !iter.Done(); iter.Next()) { + Pref* pref = static_cast(iter.Get())->mPref; + if (pref->MustSendToContentProcesses() && pref->HasAdvisablySizedValues()) { + pref->SerializeAndAppend(aStr); } } - aStr.Truncate(); - aStr.Append(boolPrefs); - aStr.Append('\n'); - aStr.Append(intPrefs); - aStr.Append('\n'); - aStr.Append(stringPrefs); - aStr.Append('\n'); aStr.Append('\0'); } /* static */ void -Preferences::DeserializeEarlyPreferences(char* aStr, size_t aStrLen) +Preferences::DeserializePreferences(char* aStr, size_t aPrefsLen) { MOZ_ASSERT(!XRE_IsParentProcess()); - MOZ_ASSERT(!gEarlyDomPrefs); - gEarlyDomPrefs = new InfallibleTArray(); + MOZ_ASSERT(!gChangedDomPrefs); + gChangedDomPrefs = new InfallibleTArray(); char* p = aStr; - - // XXX: we assume these pref values are default values, which may not be - // true. We also assume they are unlocked. Fortunately, these prefs get reset - // properly by the first IPC message. - - // Get the bool prefs. - while (*p != '\n') { - int32_t index = strtol(p, &p, 10); - MOZ_ASSERT(p[0] == ':'); - p++; - int v = strtol(p, &p, 10); - MOZ_ASSERT(v == 0 || v == 1); - dom::MaybePrefValue value(dom::PrefValue(!!v)); - MOZ_ASSERT(p[0] == '|'); - p++; - dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), - /* isLocked */ false, - value, - dom::MaybePrefValue()); - gEarlyDomPrefs->AppendElement(pref); - } - p++; - - // Get the int prefs. - while (*p != '\n') { - int32_t index = strtol(p, &p, 10); - MOZ_ASSERT(p[0] == ':'); - p++; - dom::MaybePrefValue value( - dom::PrefValue(static_cast(strtol(p, &p, 10)))); - MOZ_ASSERT(p[0] == '|'); - p++; - dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), - /* isLocked */ false, - value, - dom::MaybePrefValue()); - gEarlyDomPrefs->AppendElement(pref); - } - p++; - - // Get the string prefs. - while (*p != '\n') { - int32_t index = strtol(p, &p, 10); - MOZ_ASSERT(p[0] == ':'); - p++; - int32_t length = strtol(p, &p, 10); - MOZ_ASSERT(p[0] == ';'); - p++; - dom::MaybePrefValue value(dom::PrefValue(nsCString(p, length))); - dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), - /* isLocked */ false, - value, - dom::MaybePrefValue()); - gEarlyDomPrefs->AppendElement(pref); - p += length + 1; - MOZ_ASSERT(*(p - 1) == '|'); - } - p++; - - MOZ_ASSERT(*p == '\0'); + while (*p != '\0') { + dom::Pref pref; + p = Pref::Deserialize(p, &pref); + gChangedDomPrefs->AppendElement(pref); + } // We finished parsing on a '\0'. That should be the last char in the shared - // memory. - MOZ_ASSERT(aStr + aStrLen - 1 == p); - -#ifdef DEBUG - MOZ_ASSERT(gPhase == ContentProcessPhase::eNoPrefsSet); - gPhase = ContentProcessPhase::eEarlyPrefsSet; -#endif -} - -/* static */ void -Preferences::SetLatePreferences(const nsTArray* aDomPrefs) -{ - MOZ_ASSERT(!XRE_IsParentProcess()); - - for (unsigned int i = 0; i < aDomPrefs->Length(); i++) { - Preferences::SetPreference(aDomPrefs->ElementAt(i)); - } + // memory. (aPrefsLen includes the '\0'.) + MOZ_ASSERT(p == aStr + aPrefsLen - 1); #ifdef DEBUG - MOZ_ASSERT(gPhase == ContentProcessPhase::eEarlyPrefsSet); - gPhase = ContentProcessPhase::eEarlyAndLatePrefsSet; + MOZ_ASSERT(!gContentProcessPrefsAreInited); + gContentProcessPrefsAreInited = true; #endif } @@ -3558,36 +3638,12 @@ Preferences::GetPreference(dom::Pref* aDomPref) } } -void -Preferences::GetPreferences(InfallibleTArray* aDomPrefs) -{ - MOZ_ASSERT(XRE_IsParentProcess()); - MOZ_ASSERT(NS_IsMainThread()); - - aDomPrefs->SetCapacity(gHashTable->EntryCount()); - for (auto iter = gHashTable->Iter(); !iter.Done(); iter.Next()) { - Pref* pref = static_cast(iter.Get())->mPref; - - if (!pref->MustSendToContentProcesses()) { - // The pref value hasn't changed since it was initialized at startup. - // Don't bother sending it, because the content process will initialize - // it the same way. - continue; - } - - if (pref->HasAdvisablySizedValues()) { - dom::Pref* setting = aDomPrefs->AppendElement(); - pref->ToDomPref(setting); - } - } -} - #ifdef DEBUG bool -Preferences::AreAllPrefsSetInContentProcess() +Preferences::ArePrefsInitedInContentProcess() { MOZ_ASSERT(!XRE_IsParentProcess()); - return gPhase == ContentProcessPhase::eEarlyAndLatePrefsSet; + return gContentProcessPrefsAreInited; } #endif diff --git modules/libpref/Preferences.h modules/libpref/Preferences.h index 0d976483daae..901425b5b663 100644 --- modules/libpref/Preferences.h +++ modules/libpref/Preferences.h @@ -328,15 +328,10 @@ public: const char* aPref, float aDefault = 0.0f); - // When a content process is created these methods are used to pass prefs in - // bulk from the parent process. "Early" preferences are ones that are needed - // very early on in the content process's lifetime; they are passed via a - // special shared memory segment. "Late" preferences are the remainder, which - // are passed via a standard IPC message. - static void SerializeEarlyPreferences(nsCString& aStr); - static void DeserializeEarlyPreferences(char* aStr, size_t aStrLen); - static void GetPreferences(InfallibleTArray* aSettings); - static void SetLatePreferences(const nsTArray* aSettings); + // When a content process is created these methods are used to pass changed + // prefs in bulk from the parent process, via shared memory. + static void SerializePreferences(nsCString& aStr); + static void DeserializePreferences(char* aStr, size_t aPrefsLen); // When a single pref is changed in the parent process, these methods are // used to pass the update to content processes. @@ -344,7 +339,7 @@ public: static void SetPreference(const dom::Pref& aPref); #ifdef DEBUG - static bool AreAllPrefsSetInContentProcess(); + static bool ArePrefsInitedInContentProcess(); #endif static void AddSizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf, Index: head/mail/thunderbird-i18n/Makefile =================================================================== --- head/mail/thunderbird-i18n/Makefile (revision 479659) +++ head/mail/thunderbird-i18n/Makefile (revision 479660) @@ -1,81 +1,80 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= thunderbird-i18n -PORTVERSION= 60.0 -PORTREVISION= 2 +PORTVERSION= 60.1.0 CATEGORIES= mail news net-im MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \ - MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build4/linux-i686/xpi + MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi PKGNAMEPREFIX= DISTFILES= ${THUNDERBIRD_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} MAINTAINER= gecko@FreeBSD.org COMMENT= Localized interface for Thunderbird USES= gecko:thunderbird zip USE_XPI= thunderbird NO_BUILD= yes NO_ARCH= yes USE_SUBMAKE= yes WDIR= langpack-*@thunderbird.mozilla.org XPI_DISTNAMES= ${THUNDERBIRD_I18N_} PLIST?= ${WRKDIR}/plist PLISTF?= ${WRKDIR}/plist_files .include "${.CURDIR}/Makefile.option" .include .ifndef WITHOUT_SWITCHER RUN_DEPENDS+= xpi-quick-locale-switcher>=0:www/xpi-quick-locale-switcher .endif .include "${.CURDIR}/Makefile.lang" THUNDERBIRD_I18N_?= ${THUNDERBIRD_I18N} .for dist in ${XPI_DISTNAMES} XPI_ID_${dist}= langpack-${dist}@thunderbird.mozilla.org .endfor do-extract: @${RM} -r ${WRKDIR} @${MKDIR} ${WRKDIR} ${WRKSRC} @for lang in ${THUNDERBIRD_I18N_}; do \ if ! (${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${_DISTDIR}/$$lang.xpi -d ${WRKSRC}/langpack-$$lang@thunderbird.mozilla.org);\ then \ exit 1; \ fi; \ cd ${WRKSRC}/langpack-$$lang@thunderbird.mozilla.org/; \ ${FIND} -H -s * ! -type d | \ ${SED} -e "s|^|lib/xpi/langpack-$$lang@thunderbird.mozilla.org/|" >> ${PLISTF}; \ done ${CAT} ${PLISTF} | ${SORT} >> ${PLIST} do-install: @${MKDIR} ${STAGEDIR}${XPI_LIBDIR} ${XPI_LINKFARMS:S,^,${STAGEDIR},} cd ${WRKSRC}; ${PAX} -rw . ${STAGEDIR}${XPI_LIBDIR} ${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${WDIR}/ @for sldir in ${XPI_LINKFARMS}; do \ ${ECHO_CMD} "@dir $${sldir}" ${_A}; \ done @${ECHO_CMD} '@exec for _dir in ${XPI_LINKFARMS} ; { \ ${LN} -sf ${XPI_LIBDIR}/${WDIR} $$_dir/ ${_Q}; }' ${_A} @${ECHO_CMD} '@unexec for _dir in ${XPI_LINKFARMS}; { ${RM} $$_dir/${WDIR} ; }' ${_A} post-patch: ${FIND} ${WRKSRC} -name install.rdf -print0 | \ ${XARGS} -0L1 ${REINPLACE_CMD} -i '' -e '/ Index: head/mail/thunderbird-i18n/distinfo =================================================================== --- head/mail/thunderbird-i18n/distinfo (revision 479659) +++ head/mail/thunderbird-i18n/distinfo (revision 479660) @@ -1,117 +1,117 @@ -TIMESTAMP = 1533061306 -SHA256 (xpi/thunderbird-i18n-60.0/ar.xpi) = 782066f815ee65cbc6984bd64855c71e7c625f19d456b9153e5ac9361ce2dbac -SIZE (xpi/thunderbird-i18n-60.0/ar.xpi) = 627180 -SHA256 (xpi/thunderbird-i18n-60.0/ast.xpi) = 097a7f1632d1e701891423876af06e9b2474584661d618352fc47cc137a90a4b -SIZE (xpi/thunderbird-i18n-60.0/ast.xpi) = 560866 -SHA256 (xpi/thunderbird-i18n-60.0/be.xpi) = 66e701e8d6505c42aed613f78de84e19f08a9b3a99143c6206094756009628b0 -SIZE (xpi/thunderbird-i18n-60.0/be.xpi) = 659078 -SHA256 (xpi/thunderbird-i18n-60.0/bg.xpi) = bcf46ba1484d442d821e812d49eafd2f6c2616604e930585234454eda579aff1 -SIZE (xpi/thunderbird-i18n-60.0/bg.xpi) = 665512 -SHA256 (xpi/thunderbird-i18n-60.0/br.xpi) = 749b91a82cb4eba11887b89e0a8143e49b4ad05aa7757441eca2ab9552444a52 -SIZE (xpi/thunderbird-i18n-60.0/br.xpi) = 581592 -SHA256 (xpi/thunderbird-i18n-60.0/ca.xpi) = bb95ded8f696e47c55b9734aa0635c21d645db229fccfdb10282e57f4ace1fe1 -SIZE (xpi/thunderbird-i18n-60.0/ca.xpi) = 591969 -SHA256 (xpi/thunderbird-i18n-60.0/cs.xpi) = dc7256dce7b23528c3d6cf02bab89037e65593e142ca4cb8f574afa6884593a4 -SIZE (xpi/thunderbird-i18n-60.0/cs.xpi) = 611202 -SHA256 (xpi/thunderbird-i18n-60.0/cy.xpi) = 96551f70f1e026c14fa04f8bd868f5a7e5ad5b6667a6d482f94fa934a5bc40a1 -SIZE (xpi/thunderbird-i18n-60.0/cy.xpi) = 582232 -SHA256 (xpi/thunderbird-i18n-60.0/da.xpi) = 0d009a143331305d475cc3cd494f8270dab3aebc66c836296beee0873a66b494 -SIZE (xpi/thunderbird-i18n-60.0/da.xpi) = 570805 -SHA256 (xpi/thunderbird-i18n-60.0/de.xpi) = 0e03e79c6eb6a4be604825c86376cabce050a00f84c03264bfac417bc320bdfb -SIZE (xpi/thunderbird-i18n-60.0/de.xpi) = 582574 -SHA256 (xpi/thunderbird-i18n-60.0/dsb.xpi) = a2ee9e48e97e83741454ffdf96bb7cfd31721422ff1f16216e26885292ac0b29 -SIZE (xpi/thunderbird-i18n-60.0/dsb.xpi) = 613758 -SHA256 (xpi/thunderbird-i18n-60.0/el.xpi) = 50309bab799d60c95ac43d3383bdae06f7e2a563241743adf130f449bcde3150 -SIZE (xpi/thunderbird-i18n-60.0/el.xpi) = 691054 -SHA256 (xpi/thunderbird-i18n-60.0/en-GB.xpi) = b2d7466e287a5c8eb0e49c2dca5497f0fc8763d79c5541abdf8c77f6cbfb3d81 -SIZE (xpi/thunderbird-i18n-60.0/en-GB.xpi) = 550354 -SHA256 (xpi/thunderbird-i18n-60.0/en-US.xpi) = 3cc758ced1e4cc317808c52bcf5258accb6be8ef5ebc83812e9fc10791d12a30 -SIZE (xpi/thunderbird-i18n-60.0/en-US.xpi) = 547036 -SHA256 (xpi/thunderbird-i18n-60.0/es-AR.xpi) = d2fc146fc036c672c7d12ddfe90d7446e0c18556480a17a966d8ce39951227f8 -SIZE (xpi/thunderbird-i18n-60.0/es-AR.xpi) = 595048 -SHA256 (xpi/thunderbird-i18n-60.0/es-ES.xpi) = 98d82eda7a4a3a4e7eb7495e939ad82dc9b53a01866e93ad5f648dd06126fd17 -SIZE (xpi/thunderbird-i18n-60.0/es-ES.xpi) = 492211 -SHA256 (xpi/thunderbird-i18n-60.0/et.xpi) = ef18fb04c4fe849d7f5685e15aba69db614f11c32dfeaccae9cab9dbbcce0927 -SIZE (xpi/thunderbird-i18n-60.0/et.xpi) = 570865 -SHA256 (xpi/thunderbird-i18n-60.0/eu.xpi) = 5d00497f10b000c8739a25520d02e2612f89d7b7b73b4515f1b956fdfc8a0358 -SIZE (xpi/thunderbird-i18n-60.0/eu.xpi) = 577579 -SHA256 (xpi/thunderbird-i18n-60.0/fi.xpi) = 765064373cf2cf2bbe0913eef27353e536af912f38009d0932b20cfd9aa2df04 -SIZE (xpi/thunderbird-i18n-60.0/fi.xpi) = 575754 -SHA256 (xpi/thunderbird-i18n-60.0/fr.xpi) = 9765224e7ca9d130abb4c82eee8b9a0aca8f77b4f93d12556aa8e8ed054a3aab -SIZE (xpi/thunderbird-i18n-60.0/fr.xpi) = 608466 -SHA256 (xpi/thunderbird-i18n-60.0/fy-NL.xpi) = 640fddfd90b10e444d2d1c0566c9fe5abf68ed810836663a073e673038a1bfe3 -SIZE (xpi/thunderbird-i18n-60.0/fy-NL.xpi) = 590033 -SHA256 (xpi/thunderbird-i18n-60.0/ga-IE.xpi) = 8fc908661bd403b7f9e0273339ea1cf73402cb88abe40cf3080fb9fbbaecb896 -SIZE (xpi/thunderbird-i18n-60.0/ga-IE.xpi) = 603505 -SHA256 (xpi/thunderbird-i18n-60.0/gd.xpi) = 0e94e72a16dd8cabe1edd2202effc05541488d40fe2dd79cd6933de8b0af9b6f -SIZE (xpi/thunderbird-i18n-60.0/gd.xpi) = 599261 -SHA256 (xpi/thunderbird-i18n-60.0/gl.xpi) = dc4fe160e7ec2c58261636a06e39e40f019de3fae57c977b6a3fd1edad86c64f -SIZE (xpi/thunderbird-i18n-60.0/gl.xpi) = 576546 -SHA256 (xpi/thunderbird-i18n-60.0/he.xpi) = 6d9511733d081383f2651e8ab10d819892960a9657cf56109309db72fbd3e86d -SIZE (xpi/thunderbird-i18n-60.0/he.xpi) = 618364 -SHA256 (xpi/thunderbird-i18n-60.0/hr.xpi) = 03beb1cf7bb9f50cad093b09ad70a2ec64ee0dd4d980ed449ff0d625cdbe5ddf -SIZE (xpi/thunderbird-i18n-60.0/hr.xpi) = 583459 -SHA256 (xpi/thunderbird-i18n-60.0/hsb.xpi) = 7a49eabab067b9b7bd9ff0e646803759149021f2e0e13d37a4a42970563fcafc -SIZE (xpi/thunderbird-i18n-60.0/hsb.xpi) = 611322 -SHA256 (xpi/thunderbird-i18n-60.0/hu.xpi) = 0f51d80b0b15b8ab5e6cca5b84530e6da9f8cf69f3a3026b838f4265ec3893c4 -SIZE (xpi/thunderbird-i18n-60.0/hu.xpi) = 615345 -SHA256 (xpi/thunderbird-i18n-60.0/hy-AM.xpi) = e655d59dfac3d1f7930a65e3236e70cdd3577b3506dffa0460d57e26d57c3e61 -SIZE (xpi/thunderbird-i18n-60.0/hy-AM.xpi) = 649712 -SHA256 (xpi/thunderbird-i18n-60.0/id.xpi) = 9e5cc84bc4b5a43ec50c15a3ef513fef24d564653a8a7cfd0020bf6bc5be40cd -SIZE (xpi/thunderbird-i18n-60.0/id.xpi) = 568860 -SHA256 (xpi/thunderbird-i18n-60.0/is.xpi) = e81ef7bece622d734f67893472660ad40dc28503011979063623066b58e792d9 -SIZE (xpi/thunderbird-i18n-60.0/is.xpi) = 579047 -SHA256 (xpi/thunderbird-i18n-60.0/it.xpi) = 3cb0d809c41ab096058c87a18235b06e031608fdf32d8758970aa490f553019c -SIZE (xpi/thunderbird-i18n-60.0/it.xpi) = 477499 -SHA256 (xpi/thunderbird-i18n-60.0/ja.xpi) = d3c55915a6872f81144a57439be7a0625771e17f45b73bddba008d0a6a7032de -SIZE (xpi/thunderbird-i18n-60.0/ja.xpi) = 653343 -SHA256 (xpi/thunderbird-i18n-60.0/kab.xpi) = b91bee1dc1f351f2bca179c10a855a8e035881912dd0327ecae1d6dcb1d5e9eb -SIZE (xpi/thunderbird-i18n-60.0/kab.xpi) = 595240 -SHA256 (xpi/thunderbird-i18n-60.0/kk.xpi) = 7619e1ae13f2df1008b51dd288f038c2618becdf3dae2819aaac685ea2e06d4b -SIZE (xpi/thunderbird-i18n-60.0/kk.xpi) = 670450 -SHA256 (xpi/thunderbird-i18n-60.0/ko.xpi) = 804fddde57a4b8db0e2a21ba8931543daaeee81fe27482aa299004352b444d4c -SIZE (xpi/thunderbird-i18n-60.0/ko.xpi) = 619729 -SHA256 (xpi/thunderbird-i18n-60.0/lt.xpi) = 9ed53901d3589f542b06406332a1478b5dd378e34ccbc63195d3dac0040c3a25 -SIZE (xpi/thunderbird-i18n-60.0/lt.xpi) = 605439 -SHA256 (xpi/thunderbird-i18n-60.0/ms.xpi) = 3a97bf7d754fc6c121c8ec40e2e27c5ad120935d951318107a2ad4706dea9ff2 -SIZE (xpi/thunderbird-i18n-60.0/ms.xpi) = 574307 -SHA256 (xpi/thunderbird-i18n-60.0/nb-NO.xpi) = 563e9f8f6b6d471fc19c53ae0f810d239c3fe7e3c337506c420c2989afb1c22d -SIZE (xpi/thunderbird-i18n-60.0/nb-NO.xpi) = 578233 -SHA256 (xpi/thunderbird-i18n-60.0/nl.xpi) = 61ced037011c34544af7c57663b693320ca0a7fb590b40f68c13203bbc6320d5 -SIZE (xpi/thunderbird-i18n-60.0/nl.xpi) = 583912 -SHA256 (xpi/thunderbird-i18n-60.0/nn-NO.xpi) = 9e7a0b0c08cc0904e002f23237a0405fb9bb8c1db7f7399d94d2ee372ed72cbc -SIZE (xpi/thunderbird-i18n-60.0/nn-NO.xpi) = 577653 -SHA256 (xpi/thunderbird-i18n-60.0/pl.xpi) = 9cb507d86d019e8023fa6b0b04d28c679f20db8b733407d9fcf92ccb10555f91 -SIZE (xpi/thunderbird-i18n-60.0/pl.xpi) = 480724 -SHA256 (xpi/thunderbird-i18n-60.0/pt-BR.xpi) = 50f23a5eddbd2e170cf00903e0cbf6fb0ffa52dc55ea02d2b141d4904ef7a0ba -SIZE (xpi/thunderbird-i18n-60.0/pt-BR.xpi) = 585017 -SHA256 (xpi/thunderbird-i18n-60.0/pt-PT.xpi) = 3021391b383a3809b3a66de3553b0e75cae78f87c4e5303c30b9864bda823e36 -SIZE (xpi/thunderbird-i18n-60.0/pt-PT.xpi) = 593185 -SHA256 (xpi/thunderbird-i18n-60.0/rm.xpi) = 7c1a7ddba15a4bf3b89e68dc8ca2dd5fc669899bec76d2570906ded57f184306 -SIZE (xpi/thunderbird-i18n-60.0/rm.xpi) = 578383 -SHA256 (xpi/thunderbird-i18n-60.0/ro.xpi) = 8ac6a5e21a53507447f5122a19933b5773352046b79b94babfd126dabe90c4dc -SIZE (xpi/thunderbird-i18n-60.0/ro.xpi) = 584308 -SHA256 (xpi/thunderbird-i18n-60.0/ru.xpi) = 24c9ae3ad312785baa4c10e8e2280d80e44a060174f2d99d575c46b7e063e483 -SIZE (xpi/thunderbird-i18n-60.0/ru.xpi) = 694703 -SHA256 (xpi/thunderbird-i18n-60.0/si.xpi) = 04a5b6551eefa734e7b7f55627811694b90ea39b313dd812ac748ae12617ce1b -SIZE (xpi/thunderbird-i18n-60.0/si.xpi) = 643790 -SHA256 (xpi/thunderbird-i18n-60.0/sk.xpi) = 11589c026e80d278aea96b1cd9340ecc4297841119135e73d0e5935d378eeab5 -SIZE (xpi/thunderbird-i18n-60.0/sk.xpi) = 612216 -SHA256 (xpi/thunderbird-i18n-60.0/sl.xpi) = 43dc11f8340bf8661f31e485c321a005582487b684ddafbf88f9de798a29ed1f -SIZE (xpi/thunderbird-i18n-60.0/sl.xpi) = 589945 -SHA256 (xpi/thunderbird-i18n-60.0/sq.xpi) = 995ab184916ad470f53bef9736225e2c2413d9384c59ddb4cc4cbfff1f4b689c -SIZE (xpi/thunderbird-i18n-60.0/sq.xpi) = 593093 -SHA256 (xpi/thunderbird-i18n-60.0/sr.xpi) = 8a538a47a15f320567e56643c0120abaed3ab0536cdd2ddf9ae70c73809d1f11 -SIZE (xpi/thunderbird-i18n-60.0/sr.xpi) = 637721 -SHA256 (xpi/thunderbird-i18n-60.0/sv-SE.xpi) = 5dd538eb760792a6eac74b79cafe29181908b91ad8bfd825398b24cd3fb88783 -SIZE (xpi/thunderbird-i18n-60.0/sv-SE.xpi) = 594078 -SHA256 (xpi/thunderbird-i18n-60.0/tr.xpi) = 0dbbe8b2fbf9c1528d3b569cfc84da4344a20b3fce129a333c1792f620d565c8 -SIZE (xpi/thunderbird-i18n-60.0/tr.xpi) = 598009 -SHA256 (xpi/thunderbird-i18n-60.0/uk.xpi) = f4f5d92f130e6a7f13bdb02728490bb64720dfd3d48a7757487e4996a8496539 -SIZE (xpi/thunderbird-i18n-60.0/uk.xpi) = 684154 -SHA256 (xpi/thunderbird-i18n-60.0/vi.xpi) = cb057b7af5b0ab9f9bb253d9e431b0a11656eb30bd670fce22a1bdf6145bd48b -SIZE (xpi/thunderbird-i18n-60.0/vi.xpi) = 638422 -SHA256 (xpi/thunderbird-i18n-60.0/zh-CN.xpi) = ea07363d1363e44c0c55465a34d8d009fec92aab83ca5ef1259b7dbb6780e29b -SIZE (xpi/thunderbird-i18n-60.0/zh-CN.xpi) = 622464 -SHA256 (xpi/thunderbird-i18n-60.0/zh-TW.xpi) = b15600749266bc94a45d68a814fa1ff99037201cb637d393254b798417c18b55 -SIZE (xpi/thunderbird-i18n-60.0/zh-TW.xpi) = 626189 +TIMESTAMP = 1536716545 +SHA256 (xpi/thunderbird-i18n-60.1.0/ar.xpi) = 50f627e14883a9ad7c83855840c619175cea63ef03b1237cead2729da6a86908 +SIZE (xpi/thunderbird-i18n-60.1.0/ar.xpi) = 627179 +SHA256 (xpi/thunderbird-i18n-60.1.0/ast.xpi) = db429264f08aaa73ff93a3033350236196f0bf78300ebdcf550123fe08185052 +SIZE (xpi/thunderbird-i18n-60.1.0/ast.xpi) = 560865 +SHA256 (xpi/thunderbird-i18n-60.1.0/be.xpi) = fbe19b49c3355c68d5ffdffc040897ebc5f7c86dfdcd66b7a6d10562b698af12 +SIZE (xpi/thunderbird-i18n-60.1.0/be.xpi) = 659077 +SHA256 (xpi/thunderbird-i18n-60.1.0/bg.xpi) = ed3666663dad3165a91f7589c954989c401edb4300834e5d30e75f27bdf4e521 +SIZE (xpi/thunderbird-i18n-60.1.0/bg.xpi) = 665511 +SHA256 (xpi/thunderbird-i18n-60.1.0/br.xpi) = 7f9e160b013eabf16fb048d2902bfe8bc0730a79d6e6a0e4dd3b61153639c6cd +SIZE (xpi/thunderbird-i18n-60.1.0/br.xpi) = 581591 +SHA256 (xpi/thunderbird-i18n-60.1.0/ca.xpi) = 20c7531d3f5345f144cdf70c291bd180b5875077c62b74e8eb16c03392d14128 +SIZE (xpi/thunderbird-i18n-60.1.0/ca.xpi) = 591968 +SHA256 (xpi/thunderbird-i18n-60.1.0/cs.xpi) = 30b8d5cbdfa4ac3b42bcf92fee0c25f8b331071aa0bce79e78beff3a06a261a0 +SIZE (xpi/thunderbird-i18n-60.1.0/cs.xpi) = 611199 +SHA256 (xpi/thunderbird-i18n-60.1.0/cy.xpi) = 7c2b04979df18c76bbf197c03747a8e710a5ea8a1bd1452b9dc4a25e87ea1848 +SIZE (xpi/thunderbird-i18n-60.1.0/cy.xpi) = 582232 +SHA256 (xpi/thunderbird-i18n-60.1.0/da.xpi) = b8a56bca09c619d9b985aacc4d76653512fd76239aa920d4c4d80307a6160f9b +SIZE (xpi/thunderbird-i18n-60.1.0/da.xpi) = 570805 +SHA256 (xpi/thunderbird-i18n-60.1.0/de.xpi) = 81ac640f672d7c4e1f7423449f179fce366f20173edef758ad9e9a07abab17e9 +SIZE (xpi/thunderbird-i18n-60.1.0/de.xpi) = 582573 +SHA256 (xpi/thunderbird-i18n-60.1.0/dsb.xpi) = 06eb9865ab1fc9d20f89b0fee2ddee84f0b92ce01e6d26e6ab1aa9eda9d12fe1 +SIZE (xpi/thunderbird-i18n-60.1.0/dsb.xpi) = 613757 +SHA256 (xpi/thunderbird-i18n-60.1.0/el.xpi) = ee5308531090601a655428a1e942953dd0e971cd47d4565e9293f4c2a6dbbf31 +SIZE (xpi/thunderbird-i18n-60.1.0/el.xpi) = 691053 +SHA256 (xpi/thunderbird-i18n-60.1.0/en-GB.xpi) = 160634a59704234d13f3de93c559c171d41bf31d2afbc8a5cd5c821f71f8cd10 +SIZE (xpi/thunderbird-i18n-60.1.0/en-GB.xpi) = 550354 +SHA256 (xpi/thunderbird-i18n-60.1.0/en-US.xpi) = 8110707b5f18d0fae39c4b72e1e3bc874e6e136483a0f5723f8f4626bbe3a6c4 +SIZE (xpi/thunderbird-i18n-60.1.0/en-US.xpi) = 547034 +SHA256 (xpi/thunderbird-i18n-60.1.0/es-AR.xpi) = fbc578bfa4d18983d95201f4866234c42b0ece0220b6df141f8d09fa309fcf73 +SIZE (xpi/thunderbird-i18n-60.1.0/es-AR.xpi) = 595046 +SHA256 (xpi/thunderbird-i18n-60.1.0/es-ES.xpi) = 39800e439ed7277bde9f79a500655dc4e97151f361dd21c98ae3208dc63a15e1 +SIZE (xpi/thunderbird-i18n-60.1.0/es-ES.xpi) = 492209 +SHA256 (xpi/thunderbird-i18n-60.1.0/et.xpi) = c78281795e9fb06b9af4b5f38bd38109fb6b114c372f52604c28a9eb8411a45f +SIZE (xpi/thunderbird-i18n-60.1.0/et.xpi) = 570866 +SHA256 (xpi/thunderbird-i18n-60.1.0/eu.xpi) = 0cb0dbb2b8a2d18176a29f6dc783e81786c2b162526b31cf06bbc4894bb2f7eb +SIZE (xpi/thunderbird-i18n-60.1.0/eu.xpi) = 577576 +SHA256 (xpi/thunderbird-i18n-60.1.0/fi.xpi) = fdb0664ec555ec607a3f84f2e4ea9a94ce923935565160d2b7f7b12d477bff5d +SIZE (xpi/thunderbird-i18n-60.1.0/fi.xpi) = 575752 +SHA256 (xpi/thunderbird-i18n-60.1.0/fr.xpi) = 534f79359c187e2fee9e903bc715f2372bd1c3bbbd610d12746b1c714e2cd2fc +SIZE (xpi/thunderbird-i18n-60.1.0/fr.xpi) = 608464 +SHA256 (xpi/thunderbird-i18n-60.1.0/fy-NL.xpi) = 35afd4518f08187f5706ba5b026836242dfa5a2fb0ae6d62c1d609ffe853c7ef +SIZE (xpi/thunderbird-i18n-60.1.0/fy-NL.xpi) = 590032 +SHA256 (xpi/thunderbird-i18n-60.1.0/ga-IE.xpi) = ebf0e4e2b487ea9246e8fe50764be4557a2138b05b1097bd262b8ab746c09111 +SIZE (xpi/thunderbird-i18n-60.1.0/ga-IE.xpi) = 603505 +SHA256 (xpi/thunderbird-i18n-60.1.0/gd.xpi) = 46dc016d37abee04aa7213095b5a341c1122460d419f03b2f5b20d817ba0dda2 +SIZE (xpi/thunderbird-i18n-60.1.0/gd.xpi) = 599260 +SHA256 (xpi/thunderbird-i18n-60.1.0/gl.xpi) = 83d0dc27fe7b3a15a505adcadfd2dd34e2c04019c5dc2d54105549576a7a3904 +SIZE (xpi/thunderbird-i18n-60.1.0/gl.xpi) = 576546 +SHA256 (xpi/thunderbird-i18n-60.1.0/he.xpi) = 05f0c9faeaec375b20fc33a061a4c863b70a757ef863d07287118ea91bf7b437 +SIZE (xpi/thunderbird-i18n-60.1.0/he.xpi) = 618364 +SHA256 (xpi/thunderbird-i18n-60.1.0/hr.xpi) = 6e6087be80a143ea6662266d2b00834b854e89f59ed9ee3bb955cbc047a2410b +SIZE (xpi/thunderbird-i18n-60.1.0/hr.xpi) = 583459 +SHA256 (xpi/thunderbird-i18n-60.1.0/hsb.xpi) = 47272a717b5760423ee8c0d4a2676c36edb505af679501cfede25bf389be19e7 +SIZE (xpi/thunderbird-i18n-60.1.0/hsb.xpi) = 611321 +SHA256 (xpi/thunderbird-i18n-60.1.0/hu.xpi) = 8bc5ae84f7d3029c46d5e65d5cdc5a03b0870cb64f9c85495af5b234daf96197 +SIZE (xpi/thunderbird-i18n-60.1.0/hu.xpi) = 615344 +SHA256 (xpi/thunderbird-i18n-60.1.0/hy-AM.xpi) = 9b805ce0eef763603059616e356741c50fe30eecdaaa2232843aa20c630e1cf0 +SIZE (xpi/thunderbird-i18n-60.1.0/hy-AM.xpi) = 649711 +SHA256 (xpi/thunderbird-i18n-60.1.0/id.xpi) = e32bd7c9ed59388fb5da1349b4617e98e32c4921f527b4bcc99a89edc12ea8c8 +SIZE (xpi/thunderbird-i18n-60.1.0/id.xpi) = 568859 +SHA256 (xpi/thunderbird-i18n-60.1.0/is.xpi) = 05b980d65a7b6dc1d10692ba060786c7e1e9ad9fe980cc6534a665b40516cd44 +SIZE (xpi/thunderbird-i18n-60.1.0/is.xpi) = 579046 +SHA256 (xpi/thunderbird-i18n-60.1.0/it.xpi) = 1975d923449e2a91dd27ed09a95a632b4bf33d238e889841a2a2d81fd4a76bf9 +SIZE (xpi/thunderbird-i18n-60.1.0/it.xpi) = 477498 +SHA256 (xpi/thunderbird-i18n-60.1.0/ja.xpi) = 319b15f75866d6046e99c4d71471ae6e1ce63ade0faa09cc5415acf7c230c76c +SIZE (xpi/thunderbird-i18n-60.1.0/ja.xpi) = 653342 +SHA256 (xpi/thunderbird-i18n-60.1.0/kab.xpi) = 65ce8f245dddc1d0ad0927427af77218b37f7fc0ccc8f0c6a45d01fca94bf796 +SIZE (xpi/thunderbird-i18n-60.1.0/kab.xpi) = 595237 +SHA256 (xpi/thunderbird-i18n-60.1.0/kk.xpi) = a806c4b5717b910e6f9a85223e4eff2f8ed7064b6e83625d091092f725036ff0 +SIZE (xpi/thunderbird-i18n-60.1.0/kk.xpi) = 670449 +SHA256 (xpi/thunderbird-i18n-60.1.0/ko.xpi) = 9b58a4396cc9dc3a6b3e80fd2239a07c1a6e80a1be014d81456e545797254f40 +SIZE (xpi/thunderbird-i18n-60.1.0/ko.xpi) = 619728 +SHA256 (xpi/thunderbird-i18n-60.1.0/lt.xpi) = 614c831937067b79bdf80b5056acbe70d6cc7c2d43eb9cac40738ad6444a0cfc +SIZE (xpi/thunderbird-i18n-60.1.0/lt.xpi) = 605440 +SHA256 (xpi/thunderbird-i18n-60.1.0/ms.xpi) = aff11e2e1c9698b6fdb5f638e9f4a9aca93124977fbf8464e335ae0f758bc423 +SIZE (xpi/thunderbird-i18n-60.1.0/ms.xpi) = 574306 +SHA256 (xpi/thunderbird-i18n-60.1.0/nb-NO.xpi) = 8916b2940494bc87ffff317de572e1a7620521d9dd5f77c8567b18e59aa8e030 +SIZE (xpi/thunderbird-i18n-60.1.0/nb-NO.xpi) = 578232 +SHA256 (xpi/thunderbird-i18n-60.1.0/nl.xpi) = 7a91e62c463399e3f3bfc5b38928838d113c589516833606ebbbbf0fd2bf181d +SIZE (xpi/thunderbird-i18n-60.1.0/nl.xpi) = 583912 +SHA256 (xpi/thunderbird-i18n-60.1.0/nn-NO.xpi) = b75b4282769fbcecdc217ad0e0e5ce4795b8a4b4c942226414f71353eb1191b0 +SIZE (xpi/thunderbird-i18n-60.1.0/nn-NO.xpi) = 577652 +SHA256 (xpi/thunderbird-i18n-60.1.0/pl.xpi) = 74e709108a966947dc461508f860442895d2b7cb50166189946b9cdbaecbde21 +SIZE (xpi/thunderbird-i18n-60.1.0/pl.xpi) = 480723 +SHA256 (xpi/thunderbird-i18n-60.1.0/pt-BR.xpi) = 2d52da60a1fd39aeee47560c7f96a2dec70abd90c2109f5d5c4b0d6b980a0e7a +SIZE (xpi/thunderbird-i18n-60.1.0/pt-BR.xpi) = 585016 +SHA256 (xpi/thunderbird-i18n-60.1.0/pt-PT.xpi) = 5fd7d874640325c4d7d07a37ce21a8ded45990f87d7045b33d7ca86e60d7d726 +SIZE (xpi/thunderbird-i18n-60.1.0/pt-PT.xpi) = 593184 +SHA256 (xpi/thunderbird-i18n-60.1.0/rm.xpi) = ff24116ef338ab157f71a5a80ddfb1b23d6198989b0259daf70b9f314297891f +SIZE (xpi/thunderbird-i18n-60.1.0/rm.xpi) = 578382 +SHA256 (xpi/thunderbird-i18n-60.1.0/ro.xpi) = e4ce3c4d447cd60f0b39ede94dbd63b77e60ba8394ec9d24892e4d8f7c8c2bc1 +SIZE (xpi/thunderbird-i18n-60.1.0/ro.xpi) = 584306 +SHA256 (xpi/thunderbird-i18n-60.1.0/ru.xpi) = 4b77434128c45967437dacf0dad6b24ff6da953f2b2d8d5dbf3cb03103e0d0b7 +SIZE (xpi/thunderbird-i18n-60.1.0/ru.xpi) = 694704 +SHA256 (xpi/thunderbird-i18n-60.1.0/si.xpi) = 6692f166e27d8a1a255bf02ec9a43df44bcfb322131313c7374ca9c086c8173f +SIZE (xpi/thunderbird-i18n-60.1.0/si.xpi) = 643790 +SHA256 (xpi/thunderbird-i18n-60.1.0/sk.xpi) = 88c99ca7ef08e39b1455dd0aaf0347bbcef75bd81ef71fd0adb06612e2ac287f +SIZE (xpi/thunderbird-i18n-60.1.0/sk.xpi) = 612214 +SHA256 (xpi/thunderbird-i18n-60.1.0/sl.xpi) = fcdecaf98be19c925b29a6e91ce5837b7ee91c1cfcf6e6d5def427cbd5fe69d3 +SIZE (xpi/thunderbird-i18n-60.1.0/sl.xpi) = 589945 +SHA256 (xpi/thunderbird-i18n-60.1.0/sq.xpi) = 0d3b2d18107aeb4d0e76c3d35ef904fb6f82e52f12210a7b1f00a4b1b677da71 +SIZE (xpi/thunderbird-i18n-60.1.0/sq.xpi) = 593095 +SHA256 (xpi/thunderbird-i18n-60.1.0/sr.xpi) = 4f89725e876a99a9446c0b1ba195bae8b964b8d315c6f8396840b89199d60d67 +SIZE (xpi/thunderbird-i18n-60.1.0/sr.xpi) = 637720 +SHA256 (xpi/thunderbird-i18n-60.1.0/sv-SE.xpi) = 1c2622d8c7b64e1288e14ffa0d667f83fa4a7656f25baa3d75010f608e754516 +SIZE (xpi/thunderbird-i18n-60.1.0/sv-SE.xpi) = 594076 +SHA256 (xpi/thunderbird-i18n-60.1.0/tr.xpi) = ee969e2e9d96954dba06ba1b4c8b1d30683dfbf6ad318364d200eceef18958b3 +SIZE (xpi/thunderbird-i18n-60.1.0/tr.xpi) = 598008 +SHA256 (xpi/thunderbird-i18n-60.1.0/uk.xpi) = 503e0f15e5b062fbb44fe73e7ce777c04f685b218c612f12a3f324100e19dc24 +SIZE (xpi/thunderbird-i18n-60.1.0/uk.xpi) = 684153 +SHA256 (xpi/thunderbird-i18n-60.1.0/vi.xpi) = c648008e0ab238268e30af5e7bfbb9ce11c848ecb93b95ac85861718d1577401 +SIZE (xpi/thunderbird-i18n-60.1.0/vi.xpi) = 638421 +SHA256 (xpi/thunderbird-i18n-60.1.0/zh-CN.xpi) = 2d43f63fc5f73b799255b819ee64c4f0a3801ec95845329dc8895d267c66d0bd +SIZE (xpi/thunderbird-i18n-60.1.0/zh-CN.xpi) = 622464 +SHA256 (xpi/thunderbird-i18n-60.1.0/zh-TW.xpi) = ff594850e9b565bd8cba2b46fd11c78be5e6db6e7e604137ccb2d85db63ebc16 +SIZE (xpi/thunderbird-i18n-60.1.0/zh-TW.xpi) = 626188