diff -Nru firefox-61.0+build3/accessible/ipc/win/HandlerProvider.cpp firefox-61.0.1+build1/accessible/ipc/win/HandlerProvider.cpp --- firefox-61.0+build3/accessible/ipc/win/HandlerProvider.cpp 2018-06-26 22:23:34.000000000 +0000 +++ firefox-61.0.1+build1/accessible/ipc/win/HandlerProvider.cpp 2018-07-04 16:19:47.000000000 +0000 @@ -164,33 +164,6 @@ return S_OK; } -template -class MOZ_RAII ExecuteWhen final -{ -public: - ExecuteWhen(CondFnT& aCondFn, ExeFnT& aExeFn) - : mCondFn(aCondFn) - , mExeFn(aExeFn) - { - } - - ~ExecuteWhen() - { - if (mCondFn()) { - mExeFn(); - } - } - - ExecuteWhen(const ExecuteWhen&) = delete; - ExecuteWhen(ExecuteWhen&&) = delete; - ExecuteWhen& operator=(const ExecuteWhen&) = delete; - ExecuteWhen& operator=(ExecuteWhen&&) = delete; - -private: - CondFnT& mCondFn; - ExeFnT& mExeFn; -}; - void HandlerProvider::BuildStaticIA2Data( NotNull aInterceptor, @@ -278,7 +251,8 @@ CleanupDynamicIA2Data(*aOutIA2Data); }; - ExecuteWhen onFail(hasFailed, cleanup); + mscom::ExecuteWhen + onFail(hasFailed, cleanup); const VARIANT kChildIdSelf = {VT_I4}; VARIANT varVal; Binary files /tmp/tmpPDsKMl/koXjYQiM02/firefox-61.0+build3/browser/branding/aurora/background.png and /tmp/tmpPDsKMl/98U9jOZtKt/firefox-61.0.1+build1/browser/branding/aurora/background.png differ Binary files /tmp/tmpPDsKMl/koXjYQiM02/firefox-61.0+build3/browser/branding/official/background.png and /tmp/tmpPDsKMl/98U9jOZtKt/firefox-61.0.1+build1/browser/branding/official/background.png differ diff -Nru firefox-61.0+build3/browser/components/extensions/parent/ext-chrome-settings-overrides.js firefox-61.0.1+build1/browser/components/extensions/parent/ext-chrome-settings-overrides.js --- firefox-61.0+build3/browser/components/extensions/parent/ext-chrome-settings-overrides.js 2018-06-26 22:23:34.000000000 +0000 +++ firefox-61.0.1+build1/browser/components/extensions/parent/ext-chrome-settings-overrides.js 2018-07-04 16:19:47.000000000 +0000 @@ -185,7 +185,8 @@ if (homepageUrl) { let inControl; - if (extension.startupReason == "ADDON_INSTALL") { + if (extension.startupReason == "ADDON_INSTALL" || + extension.startupReason == "ADDON_ENABLE") { inControl = await ExtensionPreferencesManager.setSetting( extension.id, "homepage_override", homepageUrl); } else { diff -Nru firefox-61.0+build3/browser/config/version_display.txt firefox-61.0.1+build1/browser/config/version_display.txt --- firefox-61.0+build3/browser/config/version_display.txt 2018-06-26 22:23:58.000000000 +0000 +++ firefox-61.0.1+build1/browser/config/version_display.txt 2018-07-04 16:19:47.000000000 +0000 @@ -1 +1 @@ -61.0 +61.0.1 diff -Nru firefox-61.0+build3/browser/config/version.txt firefox-61.0.1+build1/browser/config/version.txt --- firefox-61.0+build3/browser/config/version.txt 2018-06-26 22:23:58.000000000 +0000 +++ firefox-61.0.1+build1/browser/config/version.txt 2018-07-04 16:19:47.000000000 +0000 @@ -1 +1 @@ -61.0 +61.0.1 diff -Nru firefox-61.0+build3/browser/extensions/activity-stream/install.rdf.in firefox-61.0.1+build1/browser/extensions/activity-stream/install.rdf.in --- firefox-61.0+build3/browser/extensions/activity-stream/install.rdf.in 2018-06-26 22:23:34.000000000 +0000 +++ firefox-61.0.1+build1/browser/extensions/activity-stream/install.rdf.in 2018-07-04 16:19:47.000000000 +0000 @@ -8,7 +8,7 @@ 2 true false - 2018.05.30.0900-c6d48b86 + 2018.06.29.1026-fa231556 Activity Stream A rich visual history feed and a reimagined home page make it easier than ever to find exactly what you're looking for in Firefox. true diff -Nru firefox-61.0+build3/browser/extensions/activity-stream/lib/Store.jsm firefox-61.0.1+build1/browser/extensions/activity-stream/lib/Store.jsm --- firefox-61.0+build3/browser/extensions/activity-stream/lib/Store.jsm 2018-06-26 22:23:34.000000000 +0000 +++ firefox-61.0.1+build1/browser/extensions/activity-stream/lib/Store.jsm 2018-07-04 16:19:47.000000000 +0000 @@ -152,7 +152,11 @@ // Accessing the db causes the object stores to be created / migrated. // This needs to happen before other instances try to access the db, which // would update only a subset of the stores to the latest version. - await this.dbStorage.db; // eslint-disable-line no-unused-expressions + try { + await this.dbStorage.db; // eslint-disable-line no-unused-expressions + } catch (e) { + this.dbStorage.telemetry = null; + } } /** diff -Nru firefox-61.0+build3/browser/extensions/activity-stream/test/unit/lib/Store.test.js firefox-61.0.1+build1/browser/extensions/activity-stream/test/unit/lib/Store.test.js --- firefox-61.0+build3/browser/extensions/activity-stream/test/unit/lib/Store.test.js 2018-06-26 22:23:34.000000000 +0000 +++ firefox-61.0.1+build1/browser/extensions/activity-stream/test/unit/lib/Store.test.js 2018-07-04 16:19:47.000000000 +0000 @@ -159,6 +159,16 @@ assert.calledOnce(dbStub); }); + it("should reset ActivityStreamStorage telemetry if opening the db fails", async () => { + store._initIndexedDB.restore(); + // Force an IndexedDB error + dbStub.rejects(); + + await store.init(new Map()); + + assert.calledOnce(dbStub); + assert.isNull(store.dbStorage.telemetry); + }); it("should not initialize the feed if the Pref is set to false", async () => { sinon.stub(store, "initFeed"); store._prefs.set("foo", false); diff -Nru firefox-61.0+build3/config/milestone.txt firefox-61.0.1+build1/config/milestone.txt --- firefox-61.0+build3/config/milestone.txt 2018-06-26 22:23:58.000000000 +0000 +++ firefox-61.0.1+build1/config/milestone.txt 2018-07-04 16:19:48.000000000 +0000 @@ -10,4 +10,4 @@ # hardcoded milestones in the tree from these two files. #-------------------------------------------------------- -61.0 +61.0.1 diff -Nru firefox-61.0+build3/debian/changelog firefox-61.0.1+build1/debian/changelog --- firefox-61.0+build3/debian/changelog 2018-07-03 09:55:18.000000000 +0000 +++ firefox-61.0.1+build1/debian/changelog 2018-07-04 17:51:06.000000000 +0000 @@ -1,3 +1,9 @@ +firefox (61.0.1+build1-0ubuntu0.16.04.1) xenial-security; urgency=medium + + * New upstream stable release (61.0.1build1) + + -- Chris Coulson Wed, 04 Jul 2018 18:51:06 +0100 + firefox (61.0+build3-0ubuntu0.16.04.2) xenial-security; urgency=medium * New upstream stable release (61.0build3) diff -Nru firefox-61.0+build3/dom/crypto/WebCryptoThreadPool.cpp firefox-61.0.1+build1/dom/crypto/WebCryptoThreadPool.cpp --- firefox-61.0+build3/dom/crypto/WebCryptoThreadPool.cpp 2018-06-26 22:23:36.000000000 +0000 +++ firefox-61.0.1+build1/dom/crypto/WebCryptoThreadPool.cpp 2018-07-04 16:19:49.000000000 +0000 @@ -66,6 +66,10 @@ { MutexAutoLock lock(mMutex); + if (mShutdown) { + return NS_ERROR_FAILURE; + } + if (!mPool) { NS_ENSURE_TRUE(EnsureNSSInitializedChromeOrContent(), NS_ERROR_FAILURE); @@ -85,10 +89,21 @@ WebCryptoThreadPool::Shutdown() { MOZ_ASSERT(NS_IsMainThread(), "Wrong thread!"); - MutexAutoLock lock(mMutex); - if (mPool) { - mPool->Shutdown(); + // Limit the scope of locking to avoid deadlocking if DispatchInternal ends + // up getting called during shutdown event processing. + nsCOMPtr pool; + { + MutexAutoLock lock(mMutex); + if (mShutdown) { + return; + } + pool = mPool; + mShutdown = true; + } + + if (pool) { + pool->Shutdown(); } nsCOMPtr obs = mozilla::services::GetObserverService(); diff -Nru firefox-61.0+build3/dom/crypto/WebCryptoThreadPool.h firefox-61.0.1+build1/dom/crypto/WebCryptoThreadPool.h --- firefox-61.0+build3/dom/crypto/WebCryptoThreadPool.h 2018-06-26 22:23:36.000000000 +0000 +++ firefox-61.0.1+build1/dom/crypto/WebCryptoThreadPool.h 2018-07-04 16:19:49.000000000 +0000 @@ -29,6 +29,7 @@ WebCryptoThreadPool() : mMutex("WebCryptoThreadPool::mMutex") , mPool(nullptr) + , mShutdown(false) { } virtual ~WebCryptoThreadPool() { } @@ -48,6 +49,7 @@ mozilla::Mutex mMutex; nsCOMPtr mPool; + bool mShutdown; }; } // namespace dom diff -Nru firefox-61.0+build3/dom/media/platforms/wrappers/H264Converter.cpp firefox-61.0.1+build1/dom/media/platforms/wrappers/H264Converter.cpp --- firefox-61.0+build3/dom/media/platforms/wrappers/H264Converter.cpp 2018-06-26 22:23:37.000000000 +0000 +++ firefox-61.0.1+build1/dom/media/platforms/wrappers/H264Converter.cpp 2018-07-04 16:19:50.000000000 +0000 @@ -409,7 +409,7 @@ H264Converter::CheckForSPSChange(MediaRawData* aSample) { RefPtr extra_data = - H264::ExtractExtraData(aSample); + aSample->mKeyframe ? H264::ExtractExtraData(aSample) : nullptr; if (!H264::HasSPS(extra_data)) { MOZ_ASSERT(mCanRecycleDecoder.isSome()); if (!*mCanRecycleDecoder) { @@ -423,14 +423,12 @@ // This scenario can only occur on Android with devices that can recycle a // decoder. if (!H264::HasSPS(aSample->mExtraData) || - H264::CompareExtraData(aSample->mExtraData, - mOriginalExtraData)) { + H264::CompareExtraData(aSample->mExtraData, mOriginalExtraData)) { return NS_OK; } extra_data = mOriginalExtraData = aSample->mExtraData; } - if (H264::CompareExtraData(extra_data, - mCurrentConfig.mExtraData)) { + if (H264::CompareExtraData(extra_data, mCurrentConfig.mExtraData)) { return NS_OK; } diff -Nru firefox-61.0+build3/dom/plugins/ipc/PluginModuleParent.cpp firefox-61.0.1+build1/dom/plugins/ipc/PluginModuleParent.cpp --- firefox-61.0+build3/dom/plugins/ipc/PluginModuleParent.cpp 2018-06-26 22:23:37.000000000 +0000 +++ firefox-61.0.1+build1/dom/plugins/ipc/PluginModuleParent.cpp 2018-07-04 16:19:50.000000000 +0000 @@ -579,7 +579,7 @@ } { - mozilla::MutexAutoLock lock(mCrashReporterMutex); + mozilla::RecursiveMutexAutoLock lock(mCrashReporterMutex); mCrashReporter = MakeUnique( GeckoProcessType_Plugin, shmem, @@ -716,7 +716,7 @@ PluginModuleChromeParent::WriteExtraDataForMinidump() { // mCrashReporterMutex is already held by the caller - mCrashReporterMutex.AssertCurrentThreadOwns(); + mCrashReporterMutex.AssertCurrentThreadIn(); typedef nsDependentCString cstring; @@ -1082,7 +1082,7 @@ std::function&& aCallback, bool aAsync) { - mozilla::MutexAutoLock lock(mCrashReporterMutex); + mozilla::RecursiveMutexAutoLock lock(mCrashReporterMutex); if (!mCrashReporter || !mTakeFullMinidumpCallback.IsEmpty()) { aCallback(EmptyString()); @@ -1169,7 +1169,7 @@ const nsAString& aBrowserDumpId, bool aAsync) { - mCrashReporterMutex.AssertCurrentThreadOwns(); + mCrashReporterMutex.AssertCurrentThreadIn(); // Generate crash report including plugin and browser process minidumps. // The plugin process is the parent report with additional dumps including @@ -1204,7 +1204,7 @@ base::ProcessId aContentPid, const nsAString& aBrowserDumpId) { - mCrashReporterMutex.AssertCurrentThreadOwns(); + mCrashReporterMutex.AssertCurrentThreadIn(); if (aReportsReady) { nsString dumpId = mCrashReporter->MinidumpID(); @@ -1289,7 +1289,7 @@ PluginModuleChromeParent::TerminateChildProcessOnDumpComplete(MessageLoop* aMsgLoop, const nsCString& aMonitorDescription) { - mCrashReporterMutex.AssertCurrentThreadOwns(); + mCrashReporterMutex.AssertCurrentThreadIn(); if (!mCrashReporter) { // If mCrashReporter is null then the hang has ended, the plugin module @@ -1506,7 +1506,7 @@ void PluginModuleChromeParent::ProcessFirstMinidump() { - mozilla::MutexAutoLock lock(mCrashReporterMutex); + mozilla::RecursiveMutexAutoLock lock(mCrashReporterMutex); if (!mCrashReporter) return; diff -Nru firefox-61.0+build3/dom/plugins/ipc/PluginModuleParent.h firefox-61.0.1+build1/dom/plugins/ipc/PluginModuleParent.h --- firefox-61.0+build3/dom/plugins/ipc/PluginModuleParent.h 2018-06-26 22:23:37.000000000 +0000 +++ firefox-61.0.1+build1/dom/plugins/ipc/PluginModuleParent.h 2018-07-04 16:19:50.000000000 +0000 @@ -17,6 +17,7 @@ #include "mozilla/plugins/PluginMessageUtils.h" #include "mozilla/plugins/PluginTypes.h" #include "mozilla/ipc/TaskFactory.h" +#include "mozilla/RecursiveMutex.h" #include "mozilla/TimeStamp.h" #include "mozilla/Unused.h" #include "npapi.h" @@ -317,9 +318,11 @@ * This mutex protects the crash reporter when the Plugin Hang UI event * handler is executing off main thread. It is intended to protect both * the mCrashReporter variable in addition to the CrashReporterHost object - * that mCrashReporter refers to. + * that mCrashReporter refers to. Sometimes asynchronous crash reporter + * callbacks are dispatched synchronously while the caller is still holding + * the mutex. This requires recursive locking support in the mutex. */ - mozilla::Mutex mCrashReporterMutex; + mozilla::RecursiveMutex mCrashReporterMutex; UniquePtr mCrashReporter; }; diff -Nru firefox-61.0+build3/dom/security/nsContentSecurityManager.cpp firefox-61.0.1+build1/dom/security/nsContentSecurityManager.cpp --- firefox-61.0+build3/dom/security/nsContentSecurityManager.cpp 2018-06-26 22:23:37.000000000 +0000 +++ firefox-61.0.1+build1/dom/security/nsContentSecurityManager.cpp 2018-07-04 16:19:50.000000000 +0000 @@ -175,7 +175,11 @@ } nsContentPolicyType type = loadInfo->GetExternalContentPolicyType(); - if (type == nsIContentPolicy::TYPE_DOCUMENT) { + + // Allow top-level FTP documents and save-as download of FTP files on + // HTTP pages. + if (type == nsIContentPolicy::TYPE_DOCUMENT || + type == nsIContentPolicy::TYPE_SAVEAS_DOWNLOAD) { return NS_OK; } diff -Nru firefox-61.0+build3/gfx/thebes/gfxPlatformGtk.cpp firefox-61.0.1+build1/gfx/thebes/gfxPlatformGtk.cpp --- firefox-61.0+build3/gfx/thebes/gfxPlatformGtk.cpp 2018-06-26 22:23:38.000000000 +0000 +++ firefox-61.0.1+build1/gfx/thebes/gfxPlatformGtk.cpp 2018-07-04 16:19:51.000000000 +0000 @@ -201,6 +201,7 @@ static const char kFontDroidSansFallback[] = "Droid Sans Fallback"; static const char kFontWenQuanYiMicroHei[] = "WenQuanYi Micro Hei"; static const char kFontNanumGothic[] = "NanumGothic"; +static const char kFontSymbola[] = "Symbola"; void gfxPlatformGtk::GetCommonFallbackFonts(uint32_t aCh, uint32_t aNextCh, @@ -221,6 +222,7 @@ aFontList.AppendElement(kFontFreeSerif); aFontList.AppendElement(kFontDejaVuSans); aFontList.AppendElement(kFontFreeSans); + aFontList.AppendElement(kFontSymbola); // add fonts for CJK ranges // xxx - this isn't really correct, should use the same CJK font ordering diff -Nru firefox-61.0+build3/ipc/mscom/Interceptor.cpp firefox-61.0.1+build1/ipc/mscom/Interceptor.cpp --- firefox-61.0+build3/ipc/mscom/Interceptor.cpp 2018-06-26 22:23:38.000000000 +0000 +++ firefox-61.0.1+build1/ipc/mscom/Interceptor.cpp 2018-07-04 16:19:51.000000000 +0000 @@ -542,12 +542,25 @@ MOZ_ASSERT(aTargetIid != IID_IMarshal); MOZ_ASSERT(!IsProxy(aTarget.get())); + HRESULT hr = E_UNEXPECTED; + + auto hasFailed = [&hr]() -> bool { + return FAILED(hr); + }; + + auto cleanup = [&aLiveSetLock]() -> void { + aLiveSetLock.Unlock(); + }; + + ExecuteWhen + onFail(hasFailed, cleanup); + if (aTargetIid == IID_IUnknown) { // We must lock mInterceptorMapMutex so that nothing can race with us once // we have been published to the live set. MutexAutoLock lock(mInterceptorMapMutex); - HRESULT hr = PublishTarget(aLiveSetLock, nullptr, aTargetIid, Move(aTarget)); + hr = PublishTarget(aLiveSetLock, nullptr, aTargetIid, Move(aTarget)); ENSURE_HR_SUCCEEDED(hr); hr = QueryInterface(aTargetIid, aOutInterceptor); @@ -559,7 +572,7 @@ WeakReferenceSupport::StabilizeRefCount stabilizer(*this); RefPtr unkInterceptor; - HRESULT hr = CreateInterceptor(aTargetIid, + hr = CreateInterceptor(aTargetIid, static_cast(this), getter_AddRefs(unkInterceptor)); ENSURE_HR_SUCCEEDED(hr); diff -Nru firefox-61.0+build3/ipc/mscom/Utils.h firefox-61.0.1+build1/ipc/mscom/Utils.h --- firefox-61.0+build3/ipc/mscom/Utils.h 2018-06-26 22:23:38.000000000 +0000 +++ firefox-61.0.1+build1/ipc/mscom/Utils.h 2018-07-04 16:19:52.000000000 +0000 @@ -11,6 +11,7 @@ #include "nsString.h" #endif // defined(MOZILLA_INTERNAL_API) +#include "mozilla/Attributes.h" #include struct IStream; @@ -63,6 +64,40 @@ #endif // defined(ACCESSIBILITY) +/** + * Execute cleanup code when going out of scope if a condition is met. + * This is useful when, for example, particular cleanup needs to be performed + * whenever a call returns a failure HRESULT. + * Both the condition and cleanup code are provided as functions (usually + * lambdas). + */ +template +class MOZ_RAII ExecuteWhen final +{ +public: + ExecuteWhen(CondFnT& aCondFn, ExeFnT& aExeFn) + : mCondFn(aCondFn) + , mExeFn(aExeFn) + { + } + + ~ExecuteWhen() + { + if (mCondFn()) { + mExeFn(); + } + } + + ExecuteWhen(const ExecuteWhen&) = delete; + ExecuteWhen(ExecuteWhen&&) = delete; + ExecuteWhen& operator=(const ExecuteWhen&) = delete; + ExecuteWhen& operator=(ExecuteWhen&&) = delete; + +private: + CondFnT& mCondFn; + ExeFnT& mExeFn; +}; + } // namespace mscom } // namespace mozilla diff -Nru firefox-61.0+build3/layout/xul/nsXULPopupManager.cpp firefox-61.0.1+build1/layout/xul/nsXULPopupManager.cpp --- firefox-61.0+build3/layout/xul/nsXULPopupManager.cpp 2018-06-26 22:23:44.000000000 +0000 +++ firefox-61.0.1+build1/layout/xul/nsXULPopupManager.cpp 2018-07-04 16:19:59.000000000 +0000 @@ -387,7 +387,7 @@ if (frame->PopupType() != ePopupTypePanel) return true; - return frame->GetContent()->AsElement()->AttrValueIs( + return !frame->GetContent()->AsElement()->AttrValueIs( kNameSpaceID_None, nsGkAtoms::type, nsGkAtoms::arrow, eCaseMatters); } diff -Nru firefox-61.0+build3/SOURCE_CHANGESET firefox-61.0.1+build1/SOURCE_CHANGESET --- firefox-61.0+build3/SOURCE_CHANGESET 2018-06-26 22:23:58.000000000 +0000 +++ firefox-61.0.1+build1/SOURCE_CHANGESET 2018-07-04 16:20:17.000000000 +0000 @@ -1 +1 @@ -785d242a5b01d5f1094882aa2144d8e5e2791e06 \ No newline at end of file +7d280b7e277b82ef282325fefb601c10698e075b \ No newline at end of file diff -Nru firefox-61.0+build3/taskcluster/ci/release-mark-as-shipped/kind.yml firefox-61.0.1+build1/taskcluster/ci/release-mark-as-shipped/kind.yml --- firefox-61.0+build3/taskcluster/ci/release-mark-as-shipped/kind.yml 2018-06-26 22:23:47.000000000 +0000 +++ firefox-61.0.1+build1/taskcluster/ci/release-mark-as-shipped/kind.yml 2018-07-04 16:20:03.000000000 +0000 @@ -25,13 +25,21 @@ mozilla-esr60: scriptworker-prov-v1/shipit-v1 default: scriptworker-prov-v1/shipit-dev worker: - implementation: shipit + implementation: shipit-shipped scopes: by-project: - mozilla-beta: ['project:releng:ship-it:production'] - mozilla-release: ['project:releng:ship-it:production'] - mozilla-esr60: ['project:releng:ship-it:production'] - default: ['project:releng:ship-it:staging'] + mozilla-beta: + - project:releng:ship-it:server:production + - project:releng:ship-it:action:mark-as-shipped + mozilla-release: + - project:releng:ship-it:server:production + - project:releng:ship-it:action:mark-as-shipped + mozilla-esr60: + - project:releng:ship-it:server:production + - project:releng:ship-it:action:mark-as-shipped + default: + - project:releng:ship-it:server:staging + - project:releng:ship-it:action:mark-as-shipped run-on-projects: [] shipping-phase: ship diff -Nru firefox-61.0+build3/taskcluster/docker/periodic-updates/scripts/periodic_file_updates.sh firefox-61.0.1+build1/taskcluster/docker/periodic-updates/scripts/periodic_file_updates.sh --- firefox-61.0+build3/taskcluster/docker/periodic-updates/scripts/periodic_file_updates.sh 2018-06-26 22:23:58.000000000 +0000 +++ firefox-61.0.1+build1/taskcluster/docker/periodic-updates/scripts/periodic_file_updates.sh 2018-07-04 16:20:03.000000000 +0000 @@ -27,7 +27,7 @@ CLOSED_TREE=false DONTBUILD=false APPROVAL=false -COMMIT_AUTHOR='ffxbld@mozilla.com' +COMMIT_AUTHOR='ffxbld ' REPODIR='' APP_DIR='' APP_ID='' diff -Nru firefox-61.0+build3/taskcluster/docs/kinds.rst firefox-61.0.1+build1/taskcluster/docs/kinds.rst --- firefox-61.0+build3/taskcluster/docs/kinds.rst 2018-06-26 22:23:46.000000000 +0000 +++ firefox-61.0.1+build1/taskcluster/docs/kinds.rst 2018-07-04 16:20:02.000000000 +0000 @@ -292,7 +292,7 @@ release-mark-as-shipped ----------------------- -Marks releases as shipped in Ship-It. +Marks releases as shipped in Ship-It v1 release-bouncer-aliases ----------------------- diff -Nru firefox-61.0+build3/taskcluster/taskgraph/transforms/beetmover.py firefox-61.0.1+build1/taskcluster/taskgraph/transforms/beetmover.py --- firefox-61.0+build3/taskcluster/taskgraph/transforms/beetmover.py 2018-06-26 22:23:46.000000000 +0000 +++ firefox-61.0.1+build1/taskcluster/taskgraph/transforms/beetmover.py 2018-07-04 16:20:02.000000000 +0000 @@ -24,6 +24,7 @@ # with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/. # See example in bug 1348286 _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [ + 'buildhub.json', "target.common.tests.zip", "target.cppunittest.tests.zip", "target.crashreporter-symbols.zip", @@ -69,6 +70,7 @@ # with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/. # See example in bug 1348286 _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [ + "en-US/buildhub.json", "en-US/target.common.tests.zip", "en-US/target.cppunittest.tests.zip", "en-US/target.crashreporter-symbols.zip", @@ -92,6 +94,7 @@ # with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/. # See example in bug 1348286 _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI = [ + "buildhub.json", "target.json", "target.mozinfo.json", "target.test_packages.json", diff -Nru firefox-61.0+build3/taskcluster/taskgraph/transforms/beetmover_repackage.py firefox-61.0.1+build1/taskcluster/taskgraph/transforms/beetmover_repackage.py --- firefox-61.0+build3/taskcluster/taskgraph/transforms/beetmover_repackage.py 2018-06-26 22:23:47.000000000 +0000 +++ firefox-61.0.1+build1/taskcluster/taskgraph/transforms/beetmover_repackage.py 2018-07-04 16:20:05.000000000 +0000 @@ -40,6 +40,7 @@ # with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/. # See example in bug 1348286 _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [ + "buildhub.json", "target.common.tests.zip", "target.cppunittest.tests.zip", "target.crashreporter-symbols.zip", diff -Nru firefox-61.0+build3/taskcluster/taskgraph/transforms/task.py firefox-61.0.1+build1/taskcluster/taskgraph/transforms/task.py --- firefox-61.0+build3/taskcluster/taskgraph/transforms/task.py 2018-06-26 22:23:47.000000000 +0000 +++ firefox-61.0.1+build1/taskcluster/taskgraph/transforms/task.py 2018-07-04 16:20:03.000000000 +0000 @@ -540,7 +540,7 @@ Required('paths'): [basestring], }], }, { - Required('implementation'): 'shipit', + Required('implementation'): 'shipit-shipped', Required('release-name'): basestring, }, { Required('implementation'): 'treescript', @@ -1093,8 +1093,8 @@ } -@payload_builder('shipit') -def build_ship_it_payload(config, task, task_def): +@payload_builder('shipit-shipped') +def build_ship_it_shipped_payload(config, task, task_def): worker = task['worker'] task_def['payload'] = { diff -Nru firefox-61.0+build3/toolkit/components/downloads/DownloadIntegration.jsm firefox-61.0.1+build1/toolkit/components/downloads/DownloadIntegration.jsm --- firefox-61.0+build3/toolkit/components/downloads/DownloadIntegration.jsm 2018-06-26 22:23:53.000000000 +0000 +++ firefox-61.0.1+build1/toolkit/components/downloads/DownloadIntegration.jsm 2018-07-04 16:20:13.000000000 +0000 @@ -595,7 +595,7 @@ } let isWindowsExe = AppConstants.platform == "win" && - fileExtension.toLowerCase() == "exe"; + fileExtension && fileExtension.toLowerCase() == "exe"; // Ask for confirmation if the file is executable, except for .exe on // Windows where the operating system will show the prompt based on the diff -Nru firefox-61.0+build3/toolkit/components/places/Database.cpp firefox-61.0.1+build1/toolkit/components/places/Database.cpp --- firefox-61.0+build3/toolkit/components/places/Database.cpp 2018-06-26 22:23:53.000000000 +0000 +++ firefox-61.0.1+build1/toolkit/components/places/Database.cpp 2018-07-04 16:20:13.000000000 +0000 @@ -2121,6 +2121,7 @@ "UNION ALL " "SELECT b.id, b.guid FROM moz_bookmarks b " "JOIN itemsToRemove d ON d.id = b.parent " + "WHERE b.guid NOT IN ('menu________', 'toolbar_____', 'tags________', 'unfiled_____', 'mobile______') " ") " "DELETE FROM moz_bookmarks " "WHERE id IN (SELECT id FROM itemsToRemove) " diff -Nru firefox-61.0+build3/toolkit/components/places/tests/migration/test_current_from_v43.js firefox-61.0.1+build1/toolkit/components/places/tests/migration/test_current_from_v43.js --- firefox-61.0+build3/toolkit/components/places/tests/migration/test_current_from_v43.js 2018-06-26 22:23:53.000000000 +0000 +++ firefox-61.0.1+build1/toolkit/components/places/tests/migration/test_current_from_v43.js 2018-07-04 16:20:14.000000000 +0000 @@ -20,6 +20,7 @@ "exaddon1____", "exaddon2____", "exaddon3____", + "test________", ]; const EXPECTED_REMOVED_ANNOTATIONS = [ @@ -53,9 +54,16 @@ let db = await Sqlite.openConnection({ path }); let rows = await db.execute(`SELECT * FROM moz_bookmarks_deleted`); - Assert.equal(rows.length, 0, "Should be nothing in moz_bookmarks_deleted"); + + // Break roots parenting, to test for Bug 1472127. + await db.execute(`INSERT INTO moz_bookmarks (title, parent, position, guid) + VALUES ("test", 1, 0, "test________")`); + await db.execute(`UPDATE moz_bookmarks + SET parent = (SELECT id FROM moz_bookmarks WHERE guid = "test________") + WHERE guid = "menu________"`); + await assertItemIn(db, "moz_anno_attributes", "name", EXPECTED_REMOVED_ANNOTATIONS); await assertItemIn(db, "moz_bookmarks", "guid", EXPECTED_REMOVED_BOOKMARK_GUIDS); await assertItemIn(db, "moz_keywords", "keyword", EXPECTED_REMOVED_KEYWORDS); @@ -85,8 +93,8 @@ rows = await db.execute(` SELECT guid FROM moz_bookmarks WHERE parent = :rootId`, {rootId}); - - Assert.equal(rows.length, EXPECTED_REMAINING_ROOTS.length, + // Note the -1 here is because we reparented the menu root wrongly above. + Assert.equal(rows.length, EXPECTED_REMAINING_ROOTS.length - 1, "Should only have the built-in folder roots."); for (let row of rows) { @@ -94,6 +102,13 @@ Assert.ok(EXPECTED_REMAINING_ROOTS.includes(guid), `Should have only the expected guids remaining, unexpected guid: ${guid}`); } + + // Check the reparented menu now. + rows = await db.execute(` + SELECT id FROM moz_bookmarks + WHERE guid = :guid + `, {guid: PlacesUtils.bookmarks.menuGuid}); + Assert.equal(rows.length, 1, "Should have found the menu root."); }); add_task(async function test_tombstones_added() {