Index: branches/2018Q3/www/firefox-esr/Makefile =================================================================== --- branches/2018Q3/www/firefox-esr/Makefile (revision 478609) +++ branches/2018Q3/www/firefox-esr/Makefile (revision 478610) @@ -1,69 +1,68 @@ # Created by: Alan Eldridge # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 60.1.0 -PORTREVISION= 4 +DISTVERSION= 60.2.0 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}esr/source \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}esr-candidates/build2/source + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}esr-candidates/build1/source PKGNAMESUFFIX= -esr DISTFILES= ${DISTNAME}esr.source${EXTRACT_SUFX} MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla 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 \ USE_GECKO= gecko CPE_PRODUCT= ${PORTNAME}_esr CONFLICTS_INSTALL= firefox MOZ_PKGCONFIG_FILES= # empty USE_MOZILLA= -cairo -soundtouch USE_GL= gl USES= tar:xz FIREFOX_ICON= ${MOZILLA}.png FIREFOX_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png FIREFOX_DESKTOP= ${MOZSRC}/taskcluster/docker/${MOZILLA}-snap/${MOZILLA}.desktop MOZ_OPTIONS= --enable-application=browser \ --enable-official-branding OPTIONS_EXCLUDE= BUNDLED_CAIRO .include "${.CURDIR}/../../www/firefox/Makefile.options" post-patch: @${REINPLACE_CMD} -e 's/%u/%U/' -e '/X-MultipleArgs/d' \ -e '/^Icon/s/=.*/=${FIREFOX_ICON:R}/' \ ${FIREFOX_DESKTOP} @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/browser/app/nsBrowserApp.cpp pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${WRKSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) post-install: ${INSTALL_DATA} ${FIREFOX_DESKTOP} ${STAGEDIR}${PREFIX}/share/applications/ ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps ${LN} -sf ${FIREFOX_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${FIREFOX_ICON} .include Index: branches/2018Q3/www/firefox-esr/distinfo =================================================================== --- branches/2018Q3/www/firefox-esr/distinfo (revision 478609) +++ branches/2018Q3/www/firefox-esr/distinfo (revision 478610) @@ -1,3 +1,3 @@ -TIMESTAMP = 1529608108 -SHA256 (firefox-60.1.0esr.source.tar.xz) = a4e7bb80e7ebab19769b2b8940966349136a99aabd497034662cffa54ea30e40 -SIZE (firefox-60.1.0esr.source.tar.xz) = 268770652 +TIMESTAMP = 1535667761 +SHA256 (firefox-60.2.0esr.source.tar.xz) = d0f5eac87646a405a85662535c44fc2b107377f261fcbcdd19d0dde9cc0b22d1 +SIZE (firefox-60.2.0esr.source.tar.xz) = 267895508 Index: branches/2018Q3/www/firefox-esr/files/patch-addon-search =================================================================== --- branches/2018Q3/www/firefox-esr/files/patch-addon-search (revision 478609) +++ branches/2018Q3/www/firefox-esr/files/patch-addon-search (revision 478610) @@ -1,55 +1,55 @@ https://github.com/mozilla/addons/issues/708 https://github.com/mozilla/addons-frontend/issues/4610 diff --git browser/app/profile/firefox.js browser/app/profile/firefox.js index 75c2c5e435e35..4d8c09c02759b 100644 --- browser/app/profile/firefox.js +++ browser/app/profile/firefox.js @@ -45,8 +45,8 @@ pref("extensions.webextOptionalPermissionPrompts", tru pref("extensions.getAddons.cache.enabled", true); pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/api/v3/addons/search/?guid=%IDS%&lang=%LOCALE%"); pref("extensions.getAddons.compatOverides.url", "https://services.addons.mozilla.org/api/v3/addons/compat-override/?guid=%IDS%&lang=%LOCALE%"); -pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/firefox/search?q=%TERMS%&platform=%OS%&appver=%VERSION%"); -pref("extensions.webservice.discoverURL", "https://discovery.addons.mozilla.org/%LOCALE%/firefox/discovery/pane/%VERSION%/%OS%/%COMPATIBILITY_MODE%"); +pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/firefox/search?q=%TERMS%&platform=Linux&appver=%VERSION%"); +pref("extensions.webservice.discoverURL", "https://discovery.addons.mozilla.org/%LOCALE%/firefox/discovery/pane/%VERSION%/Linux/%COMPATIBILITY_MODE%"); pref("extensions.getAddons.link.url", "https://addons.mozilla.org/%LOCALE%/firefox/"); pref("extensions.getAddons.themes.browseURL", "https://addons.mozilla.org/%LOCALE%/firefox/themes/?src=firefox"); @@ -186,8 +186,8 @@ pref("app.update.service.enabled", true); // .. etc .. // pref("extensions.update.enabled", true); -pref("extensions.update.url", "https://versioncheck.addons.mozilla.org/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.mozilla.org/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.mozilla.org/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.mozilla.org/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 // Non-symmetric (not shared by extensions) extension-specific [update] preferences 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: branches/2018Q3/www/firefox-esr/files/patch-z-bug1436911 =================================================================== --- branches/2018Q3/www/firefox-esr/files/patch-z-bug1436911 (revision 478609) +++ branches/2018Q3/www/firefox-esr/files/patch-z-bug1436911 (revision 478610) @@ -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: branches/2018Q3/www/firefox-esr-i18n/Makefile =================================================================== --- branches/2018Q3/www/firefox-esr-i18n/Makefile (revision 478609) +++ branches/2018Q3/www/firefox-esr-i18n/Makefile (revision 478610) @@ -1,91 +1,90 @@ # Created by: Andrew Pantyukhin # $FreeBSD$ PORTNAME= firefox -PORTVERSION= 60.1.0 -PORTREVISION= 1 +PORTVERSION= 60.2.0 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}esr/linux-i686/xpi \ MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}esr-candidates/build2/linux-i686/xpi PKGNAMEPREFIX= PKGNAMESUFFIX= -esr-i18n DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} MAINTAINER= gecko@FreeBSD.org COMMENT= Localized interface for Firefox EXTRACT_DEPENDS= zip:archivers/zip USES= zip:infozip gecko:firefox,build USE_XPI= firefox NO_ARCH= yes USE_SUBMAKE= yes WDIR= langpack-*@firefox.mozilla.org XPI_DISTNAMES= ${FIREFOX_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" FIREFOX_I18N_?= ${FIREFOX_I18N} .for dist in ${XPI_DISTNAMES} XPI_ID_${dist}= langpack-${dist}@firefox.mozilla.org .endfor pre-everything:: @${ECHO_CMD} @${ECHO_CMD} "Please define FIREFOX_I18N_ALL to install all languages." @${ECHO_CMD} do-extract: @${MKDIR} ${WRKSRC} @for lang in ${FIREFOX_I18N_}; do \ if ! (${UNZIP_CMD} -qo ${_DISTDIR}/$$lang.xpi -d ${WRKSRC}/langpack-$$lang@firefox.mozilla.org);\ then \ exit 1; \ fi; \ cd ${WRKSRC}/langpack-$$lang@firefox.mozilla.org/; \ ${FIND} -H -s * ! -type d | \ ${SED} -e "s|^|lib/xpi/langpack-$$lang@firefox.mozilla.org/|" >> ${PLISTF}; \ done ${CAT} ${PLISTF} | ${SORT} >> ${PLIST} do-install: @${MKDIR} ${STAGEDIR}${XPI_LIBDIR} cd ${WRKSRC}; ${PAX} -rw . ${STAGEDIR}${XPI_LIBDIR} ${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${WDIR}/ @for e in ${STAGEDIR}${XPI_LIBDIR}/${WDIR}; do \ for _dir in ${XPI_LINKFARMS} ; do \ ${LN} -sf $${_e##*/} ${STAGEDIR}$$_dir/ ${_Q} ; \ done \ done @${ECHO_CMD} '@exec ${INSTALL} -d ${XPI_SLDIRS_ALL:S,^${PREFIX},%D,}' ${_A} @${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: branches/2018Q3/www/firefox-esr-i18n/distinfo =================================================================== --- branches/2018Q3/www/firefox-esr-i18n/distinfo (revision 478609) +++ branches/2018Q3/www/firefox-esr-i18n/distinfo (revision 478610) @@ -1,197 +1,197 @@ -TIMESTAMP = 1529608108 -SHA256 (xpi/firefox-60.1.0/ach.xpi) = 867c8917c20bd264ec7388438468c861b0684980640ee9f2d35e90ffc78bc48c -SIZE (xpi/firefox-60.1.0/ach.xpi) = 496056 -SHA256 (xpi/firefox-60.1.0/af.xpi) = c632cda90a84f2513615758af6590ab9a742d0cc8118cd15a463482663ec7100 -SIZE (xpi/firefox-60.1.0/af.xpi) = 486532 -SHA256 (xpi/firefox-60.1.0/an.xpi) = 2bda3e03f74015d7d7e8af3b437c8c11bbc6f6d6ad915871c8f9fbeae3dd6863 -SIZE (xpi/firefox-60.1.0/an.xpi) = 519731 -SHA256 (xpi/firefox-60.1.0/ar.xpi) = db903ff36e7e4636b7042f166003e17d797d613248e4e5f5a17eeceba89218f5 -SIZE (xpi/firefox-60.1.0/ar.xpi) = 546955 -SHA256 (xpi/firefox-60.1.0/as.xpi) = efc5fc41c22d96e1e3827d997e418277cf1e3de453aec02734ba513639543eb0 -SIZE (xpi/firefox-60.1.0/as.xpi) = 529943 -SHA256 (xpi/firefox-60.1.0/ast.xpi) = b573efa4c86ad03c2750c17cdd1733fff0ef648578331ee669abf060cefecbad -SIZE (xpi/firefox-60.1.0/ast.xpi) = 507872 -SHA256 (xpi/firefox-60.1.0/az.xpi) = e7eeea07d9dbc66d403b4b1d6dab762002efbfd94db8c609896e43c746090aa8 -SIZE (xpi/firefox-60.1.0/az.xpi) = 523973 -SHA256 (xpi/firefox-60.1.0/be.xpi) = ea085d7a701c447167b1e7928631f2023da9a83c682609bc9ebc1a59511092a0 -SIZE (xpi/firefox-60.1.0/be.xpi) = 579941 -SHA256 (xpi/firefox-60.1.0/bg.xpi) = 8ae009506eeafbece65b118a237df7c91039be5debf7c513625d735f2677780d -SIZE (xpi/firefox-60.1.0/bg.xpi) = 573071 -SHA256 (xpi/firefox-60.1.0/bn-BD.xpi) = 8b579f446ef0521b83448cf2b284a8bfdb64e024c690929049916c018566064f -SIZE (xpi/firefox-60.1.0/bn-BD.xpi) = 589634 -SHA256 (xpi/firefox-60.1.0/bn-IN.xpi) = 544db0c07e39c402c09c69e485697305234cdcdb3a8cda100c411f063ab845d6 -SIZE (xpi/firefox-60.1.0/bn-IN.xpi) = 570084 -SHA256 (xpi/firefox-60.1.0/br.xpi) = 8ba1ce2937b77409c4021a97587b1766de8df07123eb76f33c01085a97d25014 -SIZE (xpi/firefox-60.1.0/br.xpi) = 511250 -SHA256 (xpi/firefox-60.1.0/bs.xpi) = 4ff6cc7c2ce855bdc5adb81c182c07c20f857e78b89a8202ec6c82f7e987f9f1 -SIZE (xpi/firefox-60.1.0/bs.xpi) = 513934 -SHA256 (xpi/firefox-60.1.0/ca.xpi) = 0d6dcfeec6ce9e4dba40d9dc0aa0d8e0f5d47949693efedc426d59c051da20da -SIZE (xpi/firefox-60.1.0/ca.xpi) = 524480 -SHA256 (xpi/firefox-60.1.0/cak.xpi) = 52122df2048402996e66704a58f6ca49059f75eccc945a4ba189dcbfc013411c -SIZE (xpi/firefox-60.1.0/cak.xpi) = 535513 -SHA256 (xpi/firefox-60.1.0/cs.xpi) = f4fa1c7bb1e276c7220f0c33a5968c660f00fb5aa2c412c033034355fcba9934 -SIZE (xpi/firefox-60.1.0/cs.xpi) = 531018 -SHA256 (xpi/firefox-60.1.0/cy.xpi) = a122b18fce6809d68f6ccfe94c4f6d8d84a709036fe5d4ff50f679eed87c4577 -SIZE (xpi/firefox-60.1.0/cy.xpi) = 515867 -SHA256 (xpi/firefox-60.1.0/da.xpi) = 72ed880f72b10526259c4843ebc6ebb92184548de645f409b397949a50fe4b5e -SIZE (xpi/firefox-60.1.0/da.xpi) = 509980 -SHA256 (xpi/firefox-60.1.0/de.xpi) = 9938e29a27ce91c3a9349a04848acc39107283b47c4c01a4517b3cbcfbb31bf7 -SIZE (xpi/firefox-60.1.0/de.xpi) = 525695 -SHA256 (xpi/firefox-60.1.0/dsb.xpi) = c95156a1857a6169851f56961b1b4eed0b5b5315ebb653a2f2d8196f8f3bfdd1 -SIZE (xpi/firefox-60.1.0/dsb.xpi) = 538748 -SHA256 (xpi/firefox-60.1.0/el.xpi) = 911f062ff50c4a5e4f4a7a7683fd6cd5b269e1522a09ae3af3afe76e4717862a -SIZE (xpi/firefox-60.1.0/el.xpi) = 592917 -SHA256 (xpi/firefox-60.1.0/en-GB.xpi) = 3e5c1015b2b12cd6dd65010a6ef41eef040b2d2ecad38528ad36be900b2a0c24 -SIZE (xpi/firefox-60.1.0/en-GB.xpi) = 490907 -SHA256 (xpi/firefox-60.1.0/en-US.xpi) = 596cd31176824b06aa3819b71fe3884fef381c4278a3d924390f2590e6f46994 -SIZE (xpi/firefox-60.1.0/en-US.xpi) = 472382 -SHA256 (xpi/firefox-60.1.0/en-ZA.xpi) = 39fb0edef74f72e6fbe5bbacb75c65200f3b4da2e34f48a0dc11d21bc665f4b1 -SIZE (xpi/firefox-60.1.0/en-ZA.xpi) = 473893 -SHA256 (xpi/firefox-60.1.0/eo.xpi) = 1a061117b9bd79025fb68af98133cab976865a937d27a490a57232515e3aca84 -SIZE (xpi/firefox-60.1.0/eo.xpi) = 510492 -SHA256 (xpi/firefox-60.1.0/es-AR.xpi) = 327de0739ee552e9f64c9029babe9962dedc1d794073639fb1383c61945b3b8c -SIZE (xpi/firefox-60.1.0/es-AR.xpi) = 523820 -SHA256 (xpi/firefox-60.1.0/es-CL.xpi) = 32db21eb540dd077d20033a80d21a8b0a0256ad53cefa38963d48e64bd251645 -SIZE (xpi/firefox-60.1.0/es-CL.xpi) = 526508 -SHA256 (xpi/firefox-60.1.0/es-ES.xpi) = 79321aef66f784670f44078baf2d001284325e6cb3b6e00a1787efbe4fbc12e3 -SIZE (xpi/firefox-60.1.0/es-ES.xpi) = 459134 -SHA256 (xpi/firefox-60.1.0/es-MX.xpi) = 459efa11399edb4fdb07c8834cdac4d9efda227c118178400a46b17a52897e19 -SIZE (xpi/firefox-60.1.0/es-MX.xpi) = 527839 -SHA256 (xpi/firefox-60.1.0/et.xpi) = 95db9f64700f99f0d8a28ea709dbda62a4d9d5ef9c0acb5f224447c779118151 -SIZE (xpi/firefox-60.1.0/et.xpi) = 504171 -SHA256 (xpi/firefox-60.1.0/eu.xpi) = 3800f915928f8355ffac255f5b9ee84e798f5963ae4ff99edf59b8fba5475838 -SIZE (xpi/firefox-60.1.0/eu.xpi) = 510930 -SHA256 (xpi/firefox-60.1.0/fa.xpi) = aac7e55a8f0394600861ce51bbdec6917ef6edf2de67846c308caaa64a7a0f53 -SIZE (xpi/firefox-60.1.0/fa.xpi) = 565490 -SHA256 (xpi/firefox-60.1.0/ff.xpi) = 707c33ac13d7b62b3b255729e35781c3380a38023ca2ae2807e0a9b3fe8ef9b0 -SIZE (xpi/firefox-60.1.0/ff.xpi) = 511431 -SHA256 (xpi/firefox-60.1.0/fi.xpi) = 3a4624873bc81c5c021e120ff9ecaa24b60dd6173070dd9016e692deabc1b7a0 -SIZE (xpi/firefox-60.1.0/fi.xpi) = 505404 -SHA256 (xpi/firefox-60.1.0/fr.xpi) = 73c6707f04764aa79b55c95d817751cfeac5ed01d08140234e6cdc78e277e4af -SIZE (xpi/firefox-60.1.0/fr.xpi) = 535235 -SHA256 (xpi/firefox-60.1.0/fy-NL.xpi) = 90b2d857414f4931745cabf1faa2893510d0e409b8c425389ffff19863cb69fa -SIZE (xpi/firefox-60.1.0/fy-NL.xpi) = 523736 -SHA256 (xpi/firefox-60.1.0/ga-IE.xpi) = dd56b6c4de66e4b6f6f6db56e5b2fa157add2d71faf3b41c7dbd2465a649a98d -SIZE (xpi/firefox-60.1.0/ga-IE.xpi) = 526204 -SHA256 (xpi/firefox-60.1.0/gd.xpi) = 8cac6a092e724249fc691964d297a208a02a7b22f561099296328acc515f38cb -SIZE (xpi/firefox-60.1.0/gd.xpi) = 520090 -SHA256 (xpi/firefox-60.1.0/gl.xpi) = eca1eb8aaa5ce2a1545117213776ccb3033efa63719490937d635e00f4e8d118 -SIZE (xpi/firefox-60.1.0/gl.xpi) = 496591 -SHA256 (xpi/firefox-60.1.0/gn.xpi) = 5670ef65c7597a8928389c2a318073dcf4e20857bf476233047763cedb73fa39 -SIZE (xpi/firefox-60.1.0/gn.xpi) = 532446 -SHA256 (xpi/firefox-60.1.0/gu-IN.xpi) = d8ab0f6ec310078fa7dac47a38cc8ede907080c75485a890df593063bfc698c0 -SIZE (xpi/firefox-60.1.0/gu-IN.xpi) = 589482 -SHA256 (xpi/firefox-60.1.0/he.xpi) = f2f99a9f9b83a47add002c969a29de98e51f5d7030bec80b16c61afc2a813738 -SIZE (xpi/firefox-60.1.0/he.xpi) = 535206 -SHA256 (xpi/firefox-60.1.0/hi-IN.xpi) = 0c7189bbf9989583754c63705d724b6968e5f56c598705943c30febb4a4f798f -SIZE (xpi/firefox-60.1.0/hi-IN.xpi) = 590073 -SHA256 (xpi/firefox-60.1.0/hr.xpi) = c144c9859ad2e11b444093d7c1634c391e4e9f69c20e979bceccf5c90ef0d505 -SIZE (xpi/firefox-60.1.0/hr.xpi) = 515184 -SHA256 (xpi/firefox-60.1.0/hsb.xpi) = 8e4e534ed9559639a49d4dfb671305c7fb9601afcc786f204ebcb8fa34912684 -SIZE (xpi/firefox-60.1.0/hsb.xpi) = 536275 -SHA256 (xpi/firefox-60.1.0/hu.xpi) = c46a58b003016b1b5b313299030d2182a7bc30c36d0a164a035753f1c4ce5bda -SIZE (xpi/firefox-60.1.0/hu.xpi) = 537588 -SHA256 (xpi/firefox-60.1.0/hy-AM.xpi) = cea3206f2fd2a5019fe93217ad28bd16ffd119db1ed566e834426a7277090de9 -SIZE (xpi/firefox-60.1.0/hy-AM.xpi) = 568631 -SHA256 (xpi/firefox-60.1.0/ia.xpi) = 2544ca94fedde308cfa81e62c8ab95f106989a3098b0793716789cc18778e3db -SIZE (xpi/firefox-60.1.0/ia.xpi) = 509957 -SHA256 (xpi/firefox-60.1.0/id.xpi) = 7e84c521512bcd7f5eafb633b064f3f93c32cf3d5db6fb3e6f4f743fe8314436 -SIZE (xpi/firefox-60.1.0/id.xpi) = 501440 -SHA256 (xpi/firefox-60.1.0/is.xpi) = e2ae0ea323ed926b232c52cd78923b06dc50cb5acabac108b91d2a7acd95d863 -SIZE (xpi/firefox-60.1.0/is.xpi) = 512503 -SHA256 (xpi/firefox-60.1.0/it.xpi) = a118b8799c1916c3b6bf211ba926842e5e8d92943429d8079d382a29bf39643a -SIZE (xpi/firefox-60.1.0/it.xpi) = 398250 -SHA256 (xpi/firefox-60.1.0/ja.xpi) = 57fa2f696578a662b9487b542612ea9397df55d0ca4c42f05d438fbbbffb10f0 -SIZE (xpi/firefox-60.1.0/ja.xpi) = 571243 -SHA256 (xpi/firefox-60.1.0/ka.xpi) = 4cb58c6ede9b14304e74c190aca55d9350509699596711a7cdc7ef93fc558a70 -SIZE (xpi/firefox-60.1.0/ka.xpi) = 556074 -SHA256 (xpi/firefox-60.1.0/kab.xpi) = 56f19ec2f09e6371cb499e2ccfdb0593cba6ddc4bf4aa38b76a5ad4f72c1ab06 -SIZE (xpi/firefox-60.1.0/kab.xpi) = 519626 -SHA256 (xpi/firefox-60.1.0/kk.xpi) = 40d120c25c473d423a20ba8c677b27cbdc15fa4efae85b3d7df9a4b83abfec6c -SIZE (xpi/firefox-60.1.0/kk.xpi) = 582197 -SHA256 (xpi/firefox-60.1.0/km.xpi) = 56815cacf17ed91600da39673454726fbf617b6dc68bbe7e07134bcb5053252c -SIZE (xpi/firefox-60.1.0/km.xpi) = 582331 -SHA256 (xpi/firefox-60.1.0/kn.xpi) = 3721d0e7cb25f2b7b094b51a661f5dc673878b5b16cfac199b295cf77043f953 -SIZE (xpi/firefox-60.1.0/kn.xpi) = 585096 -SHA256 (xpi/firefox-60.1.0/ko.xpi) = 861c9a887de3e2ef71eaa96c4b1d63018a854cacd94ce7cb9d7ef77fdea3557a -SIZE (xpi/firefox-60.1.0/ko.xpi) = 547054 -SHA256 (xpi/firefox-60.1.0/lij.xpi) = 6e630bf5a66379abce2f9067fd8d9fa8633f714ece5e2ccc26a5164865a69137 -SIZE (xpi/firefox-60.1.0/lij.xpi) = 512394 -SHA256 (xpi/firefox-60.1.0/lt.xpi) = a86a2e5af7483520191be81878c3db2a984cbf64e84ff76f0bd203d5a041942d -SIZE (xpi/firefox-60.1.0/lt.xpi) = 535630 -SHA256 (xpi/firefox-60.1.0/lv.xpi) = 5edbfe26bfe997991aac3e5b949bd36de286502b8fe1fbfffaade6e4366aebe5 -SIZE (xpi/firefox-60.1.0/lv.xpi) = 525645 -SHA256 (xpi/firefox-60.1.0/mai.xpi) = 645562039d5017658db4bfe0ba09334a239a78ff8fc6a6b39307ee3e1e5affdc -SIZE (xpi/firefox-60.1.0/mai.xpi) = 548472 -SHA256 (xpi/firefox-60.1.0/mk.xpi) = b377a9a7bb7b1a8e121cfee605d6038655a9688417c6665e4259df74039d89e5 -SIZE (xpi/firefox-60.1.0/mk.xpi) = 513030 -SHA256 (xpi/firefox-60.1.0/ml.xpi) = 2f3dcc166342d083a5bc072ad4425e38782696e7c6e1bf96d254b3208b263676 -SIZE (xpi/firefox-60.1.0/ml.xpi) = 598201 -SHA256 (xpi/firefox-60.1.0/mr.xpi) = 735f3c8e1338943b4a44a6726a15ea79353ba4abd65cd490794708f5b196c5b6 -SIZE (xpi/firefox-60.1.0/mr.xpi) = 578334 -SHA256 (xpi/firefox-60.1.0/ms.xpi) = 8c02f34b99bad15972ec2e0b1c418d83a8f698a1f15a095a570f20dd7d2631c9 -SIZE (xpi/firefox-60.1.0/ms.xpi) = 508785 -SHA256 (xpi/firefox-60.1.0/my.xpi) = a939894ef7cc7a2c07e210c248b6204500d732a117bca1e445b64114ee65a875 -SIZE (xpi/firefox-60.1.0/my.xpi) = 569571 -SHA256 (xpi/firefox-60.1.0/nb-NO.xpi) = b2a32401c5820bed992520fe2d5d80ee6131d28437be1169d54b090a9fd4309b -SIZE (xpi/firefox-60.1.0/nb-NO.xpi) = 509101 -SHA256 (xpi/firefox-60.1.0/ne-NP.xpi) = 8346fef354b1a6604ebbf7092ea0d6819591b3e1414b905ff0718b1e2e8b3769 -SIZE (xpi/firefox-60.1.0/ne-NP.xpi) = 554579 -SHA256 (xpi/firefox-60.1.0/nl.xpi) = 3750f9cff8cb57112ed31984c13e4955dd632ff84751da65631e111cfb76811d -SIZE (xpi/firefox-60.1.0/nl.xpi) = 516660 -SHA256 (xpi/firefox-60.1.0/nn-NO.xpi) = 09ab53e8ebcc306fe8fbe93c30fb2109be09f0428fb402145a970e9b5159b787 -SIZE (xpi/firefox-60.1.0/nn-NO.xpi) = 510623 -SHA256 (xpi/firefox-60.1.0/oc.xpi) = 6b80a0cbd8cefd5878c261cf0a63d7eec37e3596f24132a40c6c94d5d5e21914 -SIZE (xpi/firefox-60.1.0/oc.xpi) = 526212 -SHA256 (xpi/firefox-60.1.0/or.xpi) = a174968efac5d26097b9c301df671fbfc441debb6120bdcc137e1159d324219e -SIZE (xpi/firefox-60.1.0/or.xpi) = 540091 -SHA256 (xpi/firefox-60.1.0/pa-IN.xpi) = 167b90a854723e0e90bc2d1275068b2fba456dbc75ee5bad7b7f9f0b6a3925da -SIZE (xpi/firefox-60.1.0/pa-IN.xpi) = 557091 -SHA256 (xpi/firefox-60.1.0/pl.xpi) = 922e3ef88c349620ca5569fd1fc88ec7eb3d89aa17a01453044f8addf98493c7 -SIZE (xpi/firefox-60.1.0/pl.xpi) = 418193 -SHA256 (xpi/firefox-60.1.0/pt-BR.xpi) = 17cff077070827b9eec55fc95fd26ceae58477b73b56b6943232ff87a235809c -SIZE (xpi/firefox-60.1.0/pt-BR.xpi) = 513937 -SHA256 (xpi/firefox-60.1.0/pt-PT.xpi) = 9671b66431047b3c4425893557018cf01a3d07b081f74201d05832312a08ad01 -SIZE (xpi/firefox-60.1.0/pt-PT.xpi) = 518541 -SHA256 (xpi/firefox-60.1.0/rm.xpi) = 0946d1b3960095b92d91c3bebafc05b4bbc2eab6024ca8c0a1aa8eed105228c0 -SIZE (xpi/firefox-60.1.0/rm.xpi) = 505263 -SHA256 (xpi/firefox-60.1.0/ro.xpi) = a780f52650fc9f88543bc27e51ab8aa2ffb5462415076ffcb36ee60d5e9d74f0 -SIZE (xpi/firefox-60.1.0/ro.xpi) = 513284 -SHA256 (xpi/firefox-60.1.0/ru.xpi) = 069546e9323807c299ff5a50bcf397268fdcb475d0c5f4530d62449cffec6b3a -SIZE (xpi/firefox-60.1.0/ru.xpi) = 590514 -SHA256 (xpi/firefox-60.1.0/si.xpi) = eb1945549347a5aaca3512e21cad000160c1893adb5c1056c10fbf5981dc9056 -SIZE (xpi/firefox-60.1.0/si.xpi) = 544798 -SHA256 (xpi/firefox-60.1.0/sk.xpi) = 516f5142ea7515a127e0937e545d30b7658790319dd3bb6f9a6da8b1e2a210d1 -SIZE (xpi/firefox-60.1.0/sk.xpi) = 540938 -SHA256 (xpi/firefox-60.1.0/sl.xpi) = 519c321370b2e917be768f14288cee260c299472d3c443f618c3352df5dd470b -SIZE (xpi/firefox-60.1.0/sl.xpi) = 518570 -SHA256 (xpi/firefox-60.1.0/son.xpi) = 0141ddad70db4b227464a34450eff3fc4266c7849e9ec242ac7b8fcd7e87a5d6 -SIZE (xpi/firefox-60.1.0/son.xpi) = 496918 -SHA256 (xpi/firefox-60.1.0/sq.xpi) = ebd86328ce004157fb66fbeacc887d446f82df6b56da874a266d5bd83431dca6 -SIZE (xpi/firefox-60.1.0/sq.xpi) = 520488 -SHA256 (xpi/firefox-60.1.0/sr.xpi) = 0c4afb5b094808579f61a75d8393d06af2a3138f5c73edcf0954105997363ed0 -SIZE (xpi/firefox-60.1.0/sr.xpi) = 547998 -SHA256 (xpi/firefox-60.1.0/sv-SE.xpi) = 32525901fffdf3f61d6e3654276e61245174435b53382d87d5d8d2448e52341d -SIZE (xpi/firefox-60.1.0/sv-SE.xpi) = 517852 -SHA256 (xpi/firefox-60.1.0/ta.xpi) = 4ed55b788c30e1e2113ff6ccc02777149f1d036781dd87a810d1d759fbe09438 -SIZE (xpi/firefox-60.1.0/ta.xpi) = 577147 -SHA256 (xpi/firefox-60.1.0/te.xpi) = 0e302c329d42ccc38b91a71e14eb9e10efd570455b026d8782c8b941998054cd -SIZE (xpi/firefox-60.1.0/te.xpi) = 590183 -SHA256 (xpi/firefox-60.1.0/th.xpi) = 21dec21431a0675c3e60bf0650a5f3aa7791c9d519c5e89ee5ce5ac574e84675 -SIZE (xpi/firefox-60.1.0/th.xpi) = 562041 -SHA256 (xpi/firefox-60.1.0/tr.xpi) = 0236a1135483a6dc90c4b059f73a6c549b5f1d466c8dd7c934f7d18c76fa1c2e -SIZE (xpi/firefox-60.1.0/tr.xpi) = 525042 -SHA256 (xpi/firefox-60.1.0/uk.xpi) = db131538fe253ba19739288f96f290dafbee8280f13d85476e00b9735c4d1745 -SIZE (xpi/firefox-60.1.0/uk.xpi) = 580148 -SHA256 (xpi/firefox-60.1.0/ur.xpi) = 6c03522bc04ebb7f4dfc0dc433d5b37c82af0be2941d3166fb8e2cbd9fbba3a4 -SIZE (xpi/firefox-60.1.0/ur.xpi) = 562607 -SHA256 (xpi/firefox-60.1.0/uz.xpi) = c662124bdbbe1984015ea7f1e460cf19152e5faa996959b0bbf78eb2ac69f8ba -SIZE (xpi/firefox-60.1.0/uz.xpi) = 512906 -SHA256 (xpi/firefox-60.1.0/vi.xpi) = c2503cfc42092643837ffd3c58c637157bdda76c63a3f5d209e5e251eef0feba -SIZE (xpi/firefox-60.1.0/vi.xpi) = 527416 -SHA256 (xpi/firefox-60.1.0/xh.xpi) = f45cced5035fcaadc04c119a332e8358d17fafea8feae8cd159ff314117e3028 -SIZE (xpi/firefox-60.1.0/xh.xpi) = 511079 -SHA256 (xpi/firefox-60.1.0/zh-CN.xpi) = efc811e67abb016227c73a56163d7db0877f0b3ab09c3c02382baad19a87981f -SIZE (xpi/firefox-60.1.0/zh-CN.xpi) = 542800 -SHA256 (xpi/firefox-60.1.0/zh-TW.xpi) = 81269be88130b77836e55744f7b287d4664fdb1f40940568a31cdb3e024857a4 -SIZE (xpi/firefox-60.1.0/zh-TW.xpi) = 541124 +TIMESTAMP = 1535667761 +SHA256 (xpi/firefox-60.2.0/ach.xpi) = 79f1f9b7da106817053f431a283f7a944acd4e218fb20188dc7ace92bc7f45a1 +SIZE (xpi/firefox-60.2.0/ach.xpi) = 496136 +SHA256 (xpi/firefox-60.2.0/af.xpi) = 291509bd5fafe624c966f94b8197045988e6092e3a8455692be1732d1ef2052b +SIZE (xpi/firefox-60.2.0/af.xpi) = 486621 +SHA256 (xpi/firefox-60.2.0/an.xpi) = b2cf221b6c6b7c750214c854e1f159985c5e81895d223aebd6748bf8dd52b1e3 +SIZE (xpi/firefox-60.2.0/an.xpi) = 519812 +SHA256 (xpi/firefox-60.2.0/ar.xpi) = 5c79bcde0fa069341d452e0fab1a177de9c5a6e4cdc4d8acad7d9b8e8f11e38d +SIZE (xpi/firefox-60.2.0/ar.xpi) = 547036 +SHA256 (xpi/firefox-60.2.0/as.xpi) = ad730ab5de0e4d1c7a90254a96f0ac2e354167d45a568780163bb6428fabfa9f +SIZE (xpi/firefox-60.2.0/as.xpi) = 530033 +SHA256 (xpi/firefox-60.2.0/ast.xpi) = bf175f28e5f7808ac1793a3a778ae0592ae43e6ab1522454a829dcb54fcdbdad +SIZE (xpi/firefox-60.2.0/ast.xpi) = 507951 +SHA256 (xpi/firefox-60.2.0/az.xpi) = 713849af758587731432765a005bf64b96a7017d8281711cfdeadf61f4856ba4 +SIZE (xpi/firefox-60.2.0/az.xpi) = 524052 +SHA256 (xpi/firefox-60.2.0/be.xpi) = ff632732e0087b03adb5163bf47435824b438b93a1bd43b3451a1cea35c41100 +SIZE (xpi/firefox-60.2.0/be.xpi) = 580028 +SHA256 (xpi/firefox-60.2.0/bg.xpi) = d4fd5878992458b848691b57149f4f90892baacdf471cd873a5685c95039b594 +SIZE (xpi/firefox-60.2.0/bg.xpi) = 573157 +SHA256 (xpi/firefox-60.2.0/bn-BD.xpi) = 7991a20a59b311cb2b8e280635198b652196b146893c71dbc1fb27d7ffe8288d +SIZE (xpi/firefox-60.2.0/bn-BD.xpi) = 589719 +SHA256 (xpi/firefox-60.2.0/bn-IN.xpi) = 43739c5bd6339a2f6fda6bca10da1ea95cf8416d77778328b1aa232f18e7fd04 +SIZE (xpi/firefox-60.2.0/bn-IN.xpi) = 570163 +SHA256 (xpi/firefox-60.2.0/br.xpi) = 69043d78afe759f76e218d172a10cca4847390e95a196402f11ac606da452ed2 +SIZE (xpi/firefox-60.2.0/br.xpi) = 511337 +SHA256 (xpi/firefox-60.2.0/bs.xpi) = 658876587fc89a6c5d7caf4490c860a80922ab3340728499d9c2cbc9bc62dd06 +SIZE (xpi/firefox-60.2.0/bs.xpi) = 514012 +SHA256 (xpi/firefox-60.2.0/ca.xpi) = 51e470757a6cd324cb8697c4809b6948dddaffa440f4ef8a2dd23e0e2a911f72 +SIZE (xpi/firefox-60.2.0/ca.xpi) = 524564 +SHA256 (xpi/firefox-60.2.0/cak.xpi) = 98fca4217fdda384c7ae55480a6e125af1ddcb8ccbb3114c5da0fba4a553ce8d +SIZE (xpi/firefox-60.2.0/cak.xpi) = 535599 +SHA256 (xpi/firefox-60.2.0/cs.xpi) = 1d19fb5d495a9101333d7a96625cd3477f3b00f78ef17f9cd6cd4b68fa73bc73 +SIZE (xpi/firefox-60.2.0/cs.xpi) = 531103 +SHA256 (xpi/firefox-60.2.0/cy.xpi) = daf93231787971c396d6d956018051fe90ffb81ce967d87d870b5ee013afabb7 +SIZE (xpi/firefox-60.2.0/cy.xpi) = 515949 +SHA256 (xpi/firefox-60.2.0/da.xpi) = 5c9216c99424c7dd633841695df4df674132410f66676969e508fdade7657720 +SIZE (xpi/firefox-60.2.0/da.xpi) = 510062 +SHA256 (xpi/firefox-60.2.0/de.xpi) = 996a78736cd64977a0eefe9b7601a3c3d4e6ca6176917f53d54eb301aa7481ca +SIZE (xpi/firefox-60.2.0/de.xpi) = 525777 +SHA256 (xpi/firefox-60.2.0/dsb.xpi) = 79295920ba20a13628f659ae71631d734d952d36ed7254f3b399b574f1393ac0 +SIZE (xpi/firefox-60.2.0/dsb.xpi) = 538835 +SHA256 (xpi/firefox-60.2.0/el.xpi) = d8b75532ca5d0fe5c7e9127bcb2b3931c9a0e2c964b42d572a4ef884b837e623 +SIZE (xpi/firefox-60.2.0/el.xpi) = 592997 +SHA256 (xpi/firefox-60.2.0/en-GB.xpi) = 2bb6b24ed20cc402b69bfb6226f6447387ac3e7404a796d90f1101fd9a0d1fe1 +SIZE (xpi/firefox-60.2.0/en-GB.xpi) = 490989 +SHA256 (xpi/firefox-60.2.0/en-US.xpi) = a62f3a20a826b99bb0e942461fa70cb72a62d169bbfb4144a991c73978923ee5 +SIZE (xpi/firefox-60.2.0/en-US.xpi) = 472473 +SHA256 (xpi/firefox-60.2.0/en-ZA.xpi) = a96b6738d15f15543b75775f62f4e44a18e2f88c4975a676ed64ebe1d038a367 +SIZE (xpi/firefox-60.2.0/en-ZA.xpi) = 473982 +SHA256 (xpi/firefox-60.2.0/eo.xpi) = 1b9a3129ff2c3b46ac3e0067656e90490195df96b488bea121739bd713b10957 +SIZE (xpi/firefox-60.2.0/eo.xpi) = 510572 +SHA256 (xpi/firefox-60.2.0/es-AR.xpi) = 5c2b22f8e0a6895e1c3c71227af96fe5554efb24487a86d004f4c02fc04dc1e5 +SIZE (xpi/firefox-60.2.0/es-AR.xpi) = 523906 +SHA256 (xpi/firefox-60.2.0/es-CL.xpi) = ddef412ffbe47eb52a0457e65db48907f11dc7ad9220a4ab379f94ec2520c46e +SIZE (xpi/firefox-60.2.0/es-CL.xpi) = 526592 +SHA256 (xpi/firefox-60.2.0/es-ES.xpi) = dbadd05e0654fe8b4f57f293c66ab7acf84ca6f69f02a7e06f1833cf1e2f9f12 +SIZE (xpi/firefox-60.2.0/es-ES.xpi) = 459224 +SHA256 (xpi/firefox-60.2.0/es-MX.xpi) = 52cf6ff28dfb5ac68526ee1288fd97b6ddc1c8ba299107b7a8c00cf8814ca944 +SIZE (xpi/firefox-60.2.0/es-MX.xpi) = 527926 +SHA256 (xpi/firefox-60.2.0/et.xpi) = dd6717a70c1d6d5a8c2f347945ca17212c070051da153911afc0c1b47c429753 +SIZE (xpi/firefox-60.2.0/et.xpi) = 504263 +SHA256 (xpi/firefox-60.2.0/eu.xpi) = 01d3aabb2a629d6417e984492256b625c8727e0299e4d806ff0561612ab7130d +SIZE (xpi/firefox-60.2.0/eu.xpi) = 511018 +SHA256 (xpi/firefox-60.2.0/fa.xpi) = 28a5255e34eaaad43f8772e890fe17f851c3533f78e35df5a8b8e1351559d84d +SIZE (xpi/firefox-60.2.0/fa.xpi) = 565575 +SHA256 (xpi/firefox-60.2.0/ff.xpi) = f4a4cacf22b71f53c3567ec54ca716446eebbed01080bf41f4841bb378888d9d +SIZE (xpi/firefox-60.2.0/ff.xpi) = 511518 +SHA256 (xpi/firefox-60.2.0/fi.xpi) = 3d0bdd2dd64b88b53f0209ff03852eb5801e907787c3d4d0eade2b81a4aaccbc +SIZE (xpi/firefox-60.2.0/fi.xpi) = 505490 +SHA256 (xpi/firefox-60.2.0/fr.xpi) = fda5c1aaf810766dbce54a403ffad3b7c02aa67ef8c90be3cf68917b0a03ffd6 +SIZE (xpi/firefox-60.2.0/fr.xpi) = 535320 +SHA256 (xpi/firefox-60.2.0/fy-NL.xpi) = 57cbcf0f2c2af2c8fe85f905450b50d90aff0552d230f5e759cccbf18b61f7f0 +SIZE (xpi/firefox-60.2.0/fy-NL.xpi) = 523817 +SHA256 (xpi/firefox-60.2.0/ga-IE.xpi) = e7ce86fafa09b9baecdb68ceba86e29bcbe9e5ad678439fceaafcadaa3ff92be +SIZE (xpi/firefox-60.2.0/ga-IE.xpi) = 526284 +SHA256 (xpi/firefox-60.2.0/gd.xpi) = 81364b69016ac520ad5ff509c94e8b4f65804426fe597c97ff542815275fc552 +SIZE (xpi/firefox-60.2.0/gd.xpi) = 520177 +SHA256 (xpi/firefox-60.2.0/gl.xpi) = 344642f6d72a0cdcc967d2f52250cf1b750a193e91f98470fea3049a738aa807 +SIZE (xpi/firefox-60.2.0/gl.xpi) = 496679 +SHA256 (xpi/firefox-60.2.0/gn.xpi) = 6822db7828191d7b889a0ffca3639417ea917612232ee0152010dfb063c0c5d6 +SIZE (xpi/firefox-60.2.0/gn.xpi) = 532527 +SHA256 (xpi/firefox-60.2.0/gu-IN.xpi) = d0ee2489b1b7e7112718c474f8389e01b8ba44d42f129b583b472f4aab055894 +SIZE (xpi/firefox-60.2.0/gu-IN.xpi) = 589565 +SHA256 (xpi/firefox-60.2.0/he.xpi) = 509facef6364fa407aebf0bb8af7a9de1123b6ca86e68a25900cefddfa4c80bf +SIZE (xpi/firefox-60.2.0/he.xpi) = 535296 +SHA256 (xpi/firefox-60.2.0/hi-IN.xpi) = da87390f6ef0a9d65158e967f1983a8c02f7c95abd62b3338e2326c528a6ea2a +SIZE (xpi/firefox-60.2.0/hi-IN.xpi) = 590158 +SHA256 (xpi/firefox-60.2.0/hr.xpi) = 0be6dc163dadca068f6ff1e82a23324495cd844c9b5db48ef20f1d66761f5378 +SIZE (xpi/firefox-60.2.0/hr.xpi) = 515270 +SHA256 (xpi/firefox-60.2.0/hsb.xpi) = 2d226c4f32b7be1fc8da95f618879f0ce5d38048c94b74762c8ef972a57bcd34 +SIZE (xpi/firefox-60.2.0/hsb.xpi) = 536364 +SHA256 (xpi/firefox-60.2.0/hu.xpi) = bd8429c378681e80d7d3c45cfdfd6b89a5063c7845b12255599cc7138052bd12 +SIZE (xpi/firefox-60.2.0/hu.xpi) = 537668 +SHA256 (xpi/firefox-60.2.0/hy-AM.xpi) = cede12503d84ddb017bf7c8fee7e3c22b0ce52ddd70a83ecabbebe74e18ad296 +SIZE (xpi/firefox-60.2.0/hy-AM.xpi) = 568716 +SHA256 (xpi/firefox-60.2.0/ia.xpi) = ee9722f87f921d4cd5be9054c31cef444a367095ed3e56cf2847cfdb89c0fa71 +SIZE (xpi/firefox-60.2.0/ia.xpi) = 510039 +SHA256 (xpi/firefox-60.2.0/id.xpi) = d2225755d7183e4f55e028a49e2dd72f0a54ba6d5e255182cb12b956e1718801 +SIZE (xpi/firefox-60.2.0/id.xpi) = 501532 +SHA256 (xpi/firefox-60.2.0/is.xpi) = ba0f8e1ee4c95ff3b8d6e71305b310232d762928ddbd3c5294e8717b92e82ae6 +SIZE (xpi/firefox-60.2.0/is.xpi) = 512581 +SHA256 (xpi/firefox-60.2.0/it.xpi) = f03bb2ccbc44c91dabcd6e220fb461bd17171f04f9e551e4b0a175622634ef3d +SIZE (xpi/firefox-60.2.0/it.xpi) = 398346 +SHA256 (xpi/firefox-60.2.0/ja.xpi) = d8592d7827f00c62bb68afe02131cfe83649278669cb44157081ae401dbc591f +SIZE (xpi/firefox-60.2.0/ja.xpi) = 571324 +SHA256 (xpi/firefox-60.2.0/ka.xpi) = a9019b86bc2d2d640433b1711462f12bb1da4aa1c7c9bd9c35106863820c1a27 +SIZE (xpi/firefox-60.2.0/ka.xpi) = 556154 +SHA256 (xpi/firefox-60.2.0/kab.xpi) = b1369c85fc7dc6a2817fbfef564bd7cd60a02d35fd85b0878b51a036089dfcfa +SIZE (xpi/firefox-60.2.0/kab.xpi) = 519704 +SHA256 (xpi/firefox-60.2.0/kk.xpi) = edc722d03be0fb797c78a158fc667fc0ff306bac85b4c821c28d06564ad1f934 +SIZE (xpi/firefox-60.2.0/kk.xpi) = 582289 +SHA256 (xpi/firefox-60.2.0/km.xpi) = 050b0b63777f06f9a5cd398e01642d808c248068889f98b5289dd905287175db +SIZE (xpi/firefox-60.2.0/km.xpi) = 582420 +SHA256 (xpi/firefox-60.2.0/kn.xpi) = 74f3c6adc6af47b7d65948ebad3d1dccc33b7dce3a95c4aab134aa48e3363db4 +SIZE (xpi/firefox-60.2.0/kn.xpi) = 585182 +SHA256 (xpi/firefox-60.2.0/ko.xpi) = 48e57c7d74f7840d0b56184bfb09a7b42f43a0e358c830bf2c67d8174bd9fa31 +SIZE (xpi/firefox-60.2.0/ko.xpi) = 547134 +SHA256 (xpi/firefox-60.2.0/lij.xpi) = be310f068d180dd64eb051b874ddeb78b5e95e93ac88bd6b1d2c9b3f2f34b719 +SIZE (xpi/firefox-60.2.0/lij.xpi) = 512480 +SHA256 (xpi/firefox-60.2.0/lt.xpi) = aba6fcccee03dcef9acc3f0972cac384f5e2dd5418bbcb1c71c7c5b231b747ac +SIZE (xpi/firefox-60.2.0/lt.xpi) = 535719 +SHA256 (xpi/firefox-60.2.0/lv.xpi) = c78d7d51caac84d96fa6806a843c7fd12e2b4213d4ed0566f1d2d82a02f24516 +SIZE (xpi/firefox-60.2.0/lv.xpi) = 525728 +SHA256 (xpi/firefox-60.2.0/mai.xpi) = 544da19c5abd8bbce9649378e0533f956b4722b9ff8288eed61bc9ebbcb792ef +SIZE (xpi/firefox-60.2.0/mai.xpi) = 548552 +SHA256 (xpi/firefox-60.2.0/mk.xpi) = e813a53f0a909041331f4fea9478bf6978dac4390d6f4836cf9d249262f81caa +SIZE (xpi/firefox-60.2.0/mk.xpi) = 513113 +SHA256 (xpi/firefox-60.2.0/ml.xpi) = 6a37983f4be2a26c57f578c499c6f104c13e433a5b45ff67a669e7568ffbbb4d +SIZE (xpi/firefox-60.2.0/ml.xpi) = 598281 +SHA256 (xpi/firefox-60.2.0/mr.xpi) = acfee49a21847ca0a0012e51902fd9edc03a783ee97d8c1ec8265e60efb05ea7 +SIZE (xpi/firefox-60.2.0/mr.xpi) = 578424 +SHA256 (xpi/firefox-60.2.0/ms.xpi) = 497472277df9cd8d621adb21ec7a3d4f7464fc1b41e7e8f4cd2d4ca3bdda6ae4 +SIZE (xpi/firefox-60.2.0/ms.xpi) = 508872 +SHA256 (xpi/firefox-60.2.0/my.xpi) = 678339aa476e13b74152ecadfb124cd7b717681ca2b62f6e9f8c8bc33a821360 +SIZE (xpi/firefox-60.2.0/my.xpi) = 569661 +SHA256 (xpi/firefox-60.2.0/nb-NO.xpi) = 35d1aea3ef493b431f9fdbe10a75351c764a440f6abdc9e8939b6dd2c70a64cf +SIZE (xpi/firefox-60.2.0/nb-NO.xpi) = 509181 +SHA256 (xpi/firefox-60.2.0/ne-NP.xpi) = 52b9ae599a91c79baae12c80b45095894ab7d7a19bce0ca7d8226e4093956d34 +SIZE (xpi/firefox-60.2.0/ne-NP.xpi) = 554662 +SHA256 (xpi/firefox-60.2.0/nl.xpi) = d2f11801d7ce8934e0a87866cbc9a1591b4543ce14a4f167d2aa3ee6e546027e +SIZE (xpi/firefox-60.2.0/nl.xpi) = 516740 +SHA256 (xpi/firefox-60.2.0/nn-NO.xpi) = 8138c2a3fa9c1cc6d2dae5c0fef4e7fb4dbae5abdb4e21f9ba8501e97ad7e918 +SIZE (xpi/firefox-60.2.0/nn-NO.xpi) = 510707 +SHA256 (xpi/firefox-60.2.0/oc.xpi) = 674bbfcca59ef130671ac0dbb76bd7d481ccaa3596f281cd142c3a14ae308386 +SIZE (xpi/firefox-60.2.0/oc.xpi) = 526298 +SHA256 (xpi/firefox-60.2.0/or.xpi) = 0a06f2b21c293126317ea4e882b85eec9d6bf436aff2c6b45873a441a9ba6138 +SIZE (xpi/firefox-60.2.0/or.xpi) = 540172 +SHA256 (xpi/firefox-60.2.0/pa-IN.xpi) = 115d528d90fa93cd8410bbaf132608a5f3890f3d8b0e09ea9ba22ee0ae027127 +SIZE (xpi/firefox-60.2.0/pa-IN.xpi) = 557181 +SHA256 (xpi/firefox-60.2.0/pl.xpi) = b3e97c9519ad47edbfc2d71ed87b36ab54ee1c016f66c1b2673fe694427dc66e +SIZE (xpi/firefox-60.2.0/pl.xpi) = 418275 +SHA256 (xpi/firefox-60.2.0/pt-BR.xpi) = 209ac19efc1e154381a4aaeea4e9b8d0c9c4bbc5f474292635431ff9e0856a2e +SIZE (xpi/firefox-60.2.0/pt-BR.xpi) = 514024 +SHA256 (xpi/firefox-60.2.0/pt-PT.xpi) = 67eb348c8e57deabb134be5d2552aaf902efc2b3a4ab8009296f8b774a3cb5c7 +SIZE (xpi/firefox-60.2.0/pt-PT.xpi) = 518626 +SHA256 (xpi/firefox-60.2.0/rm.xpi) = afa6e32198f69c8d709c88a0483e3e472bb6db15cef098efa825ccc2a387b25c +SIZE (xpi/firefox-60.2.0/rm.xpi) = 505346 +SHA256 (xpi/firefox-60.2.0/ro.xpi) = 1ab357570086e88ca661bd61c488aa2c6226e2df9dfa7fc911986d7bf31a2900 +SIZE (xpi/firefox-60.2.0/ro.xpi) = 513360 +SHA256 (xpi/firefox-60.2.0/ru.xpi) = ef61a58a350cc35e55d231c82edb93797442e57ebc7884e1966af6bd7a569f0e +SIZE (xpi/firefox-60.2.0/ru.xpi) = 590604 +SHA256 (xpi/firefox-60.2.0/si.xpi) = d7d94d32945bbdfcd385968dbfa8ada74a88b47861a22f9111978ecc16e17afc +SIZE (xpi/firefox-60.2.0/si.xpi) = 544884 +SHA256 (xpi/firefox-60.2.0/sk.xpi) = 8c6f1f1cf2d222aa84d601229c273d4097db6c35ca0cc3619b71d67691d6009b +SIZE (xpi/firefox-60.2.0/sk.xpi) = 541016 +SHA256 (xpi/firefox-60.2.0/sl.xpi) = cfeb512711cf1c8de64203cf3ad4f28ee0a9739e28683f29a69cbdfee4d3655b +SIZE (xpi/firefox-60.2.0/sl.xpi) = 518664 +SHA256 (xpi/firefox-60.2.0/son.xpi) = 8dbe4ee4913a8e141de40c780b1583f4507c41e645f7145e0799a1ef0e551515 +SIZE (xpi/firefox-60.2.0/son.xpi) = 497000 +SHA256 (xpi/firefox-60.2.0/sq.xpi) = b9af1ade033d28b13b7fdfe420ed5d4b931d8a98a9c293e18386e45dd43d09a3 +SIZE (xpi/firefox-60.2.0/sq.xpi) = 520573 +SHA256 (xpi/firefox-60.2.0/sr.xpi) = 8b50a65b05502d7717becb8a79dab7de018f9c707a2b103f87fde66eef37a5a7 +SIZE (xpi/firefox-60.2.0/sr.xpi) = 548082 +SHA256 (xpi/firefox-60.2.0/sv-SE.xpi) = 23ab91b93b01c57421af5d4911d8a5f09a9ad8c326d21800d67f439ed0598d02 +SIZE (xpi/firefox-60.2.0/sv-SE.xpi) = 517931 +SHA256 (xpi/firefox-60.2.0/ta.xpi) = 019e0aa55cd844f9209ff816e23fb860419eb25e3dbe355397fa08894e6efea9 +SIZE (xpi/firefox-60.2.0/ta.xpi) = 577227 +SHA256 (xpi/firefox-60.2.0/te.xpi) = 7c548d601d04d0288b513cb20fd2ade360c23d63fdbdbc5489072d82eff7700f +SIZE (xpi/firefox-60.2.0/te.xpi) = 590260 +SHA256 (xpi/firefox-60.2.0/th.xpi) = 2db437945136702bd4187f340f09ffd404b1b105fbff3216585d3d60e8816dde +SIZE (xpi/firefox-60.2.0/th.xpi) = 562122 +SHA256 (xpi/firefox-60.2.0/tr.xpi) = 8b365a5e05cb79bb69c5076048b8fe88143e6f2a395704ff59337af398e3c97c +SIZE (xpi/firefox-60.2.0/tr.xpi) = 525124 +SHA256 (xpi/firefox-60.2.0/uk.xpi) = b43820c2fc7217eea4877979ecc3e15f7ccb0f8d858160e4575ea6140c697eb6 +SIZE (xpi/firefox-60.2.0/uk.xpi) = 580226 +SHA256 (xpi/firefox-60.2.0/ur.xpi) = 2fdd3b54070b6975ba813002316f961f5e104b5c5f7a5b7bdf282d495134825d +SIZE (xpi/firefox-60.2.0/ur.xpi) = 562686 +SHA256 (xpi/firefox-60.2.0/uz.xpi) = 891378527b1d0c599328d0ab912d535d1115f8639b707eb107d30caf293e6967 +SIZE (xpi/firefox-60.2.0/uz.xpi) = 512990 +SHA256 (xpi/firefox-60.2.0/vi.xpi) = 518ae4fd22b2095afa89bad2ab08657927ca96b68ae70588015d635fc04d26a7 +SIZE (xpi/firefox-60.2.0/vi.xpi) = 527494 +SHA256 (xpi/firefox-60.2.0/xh.xpi) = b625258047dfc0671e32bfeaa823fd688a3c455ffd00ac3a4cc206226890f366 +SIZE (xpi/firefox-60.2.0/xh.xpi) = 511172 +SHA256 (xpi/firefox-60.2.0/zh-CN.xpi) = 7291b28cf9e5afbeaaafd8fb6c5f2be4079e529d53fee11afb5771b5678337d2 +SIZE (xpi/firefox-60.2.0/zh-CN.xpi) = 542891 +SHA256 (xpi/firefox-60.2.0/zh-TW.xpi) = ac7dbdae07062a07057a0baad045223656a65225dbfafd96e40c226eea752e86 +SIZE (xpi/firefox-60.2.0/zh-TW.xpi) = 541210 Index: branches/2018Q3 =================================================================== --- branches/2018Q3 (revision 478609) +++ branches/2018Q3 (revision 478610) Property changes on: branches/2018Q3 ___________________________________________________________________ Modified: svn:mergeinfo ## -0,0 +0,1 ## Merged /head:r478507