From a1e4ee6d4f17cb94ce617065ee69930ba6ef4581 Mon Sep 17 00:00:00 2001 From: Franz Pletz Date: Sat, 7 Dec 2019 19:22:10 +0100 Subject: [PATCH] firefox: fix indexedDB for 71.0 Adapted original patch[0] to also fix dom localstorage. [0]: https://bugzilla.mozilla.org/show_bug.cgi?id=1601707#c6 --- .../networking/browsers/firefox/common.nix | 3 +- .../browsers/firefox/fix-ff71-lto.patch | 100 ++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 pkgs/applications/networking/browsers/firefox/fix-ff71-lto.patch diff --git a/pkgs/applications/networking/browsers/firefox/common.nix b/pkgs/applications/networking/browsers/firefox/common.nix index f17f4401236c..c6dcd20d62f1 100644 --- a/pkgs/applications/networking/browsers/firefox/common.nix +++ b/pkgs/applications/networking/browsers/firefox/common.nix @@ -110,7 +110,8 @@ let url = "https://raw.githubusercontent.com/archlinuxarm/PKGBUILDs/09c7fa0dc1d87922e3b464c0fa084df1227fca79/extra/firefox/build-arm-libopus.patch"; sha256 = "1zg56v3lc346fkzcjjx21vjip2s9hb2xw4pvza1dsfdnhsnzppfp"; }) - ] ++ patches; + ] ++ lib.optional (lib.versionAtLeast ffversion "71") ./fix-ff71-lto.patch + ++ patches; in diff --git a/pkgs/applications/networking/browsers/firefox/fix-ff71-lto.patch b/pkgs/applications/networking/browsers/firefox/fix-ff71-lto.patch new file mode 100644 index 000000000000..f48cad9e67a2 --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox/fix-ff71-lto.patch @@ -0,0 +1,100 @@ +Original Patch: https://bugzilla.mozilla.org/show_bug.cgi?id=1601707#c6 + +Also fixes the issues with dom localstorage. + +--- a/dom/indexedDB/ActorsParent.cpp ++++ b/dom/indexedDB/ActorsParent.cpp +@@ -24311,11 +24311,11 @@ nsresult ObjectStoreAddOrPutRequestOp::DoDatabaseWork( + // if we allow overwrite or not. By not allowing overwrite we raise + // detectable errors rather than corrupting data. + DatabaseConnection::CachedStatement stmt; +- const auto& optReplaceDirective = (!mOverwrite || keyUnset) +- ? NS_LITERAL_CSTRING("") +- : NS_LITERAL_CSTRING("OR REPLACE "); + rv = aConnection->GetCachedStatement( +- NS_LITERAL_CSTRING("INSERT ") + optReplaceDirective + ++ NS_LITERAL_CSTRING("INSERT ") + ++ ((!mOverwrite || keyUnset) ++ ? NS_LITERAL_CSTRING("") ++ : NS_LITERAL_CSTRING("OR REPLACE ")) + + NS_LITERAL_CSTRING("INTO object_data " + "(object_store_id, key, file_ids, data) " + "VALUES (:") + +@@ -26076,9 +26076,6 @@ nsresult Cursor::OpenOp::DoIndexDatabaseWork(DatabaseConnection* aConnection) { + + const bool usingKeyRange = mOptionalKeyRange.isSome(); + +- const auto& indexTable = mCursor->mUniqueIndex +- ? NS_LITERAL_CSTRING("unique_index_data") +- : NS_LITERAL_CSTRING("index_data"); + + NS_NAMED_LITERAL_CSTRING(sortColumn, "sort_column"); + +@@ -26099,7 +26096,9 @@ nsresult Cursor::OpenOp::DoIndexDatabaseWork(DatabaseConnection* aConnection) { + "object_data.file_ids, " + "object_data.data " + "FROM ") + +- indexTable + ++ (mCursor->mUniqueIndex ++ ? NS_LITERAL_CSTRING("unique_index_data") ++ : NS_LITERAL_CSTRING("index_data")) + + NS_LITERAL_CSTRING( + " AS index_table " + "JOIN object_data " +@@ -26198,9 +26197,6 @@ nsresult Cursor::OpenOp::DoIndexKeyDatabaseWork( + + const bool usingKeyRange = mOptionalKeyRange.isSome(); + +- const auto& table = mCursor->mUniqueIndex +- ? NS_LITERAL_CSTRING("unique_index_data") +- : NS_LITERAL_CSTRING("index_data"); + + NS_NAMED_LITERAL_CSTRING(sortColumn, "sort_column"); + +@@ -26218,7 +26214,10 @@ nsresult Cursor::OpenOp::DoIndexKeyDatabaseWork( + NS_LITERAL_CSTRING( + "object_data_key " + " FROM ") + +- table + NS_LITERAL_CSTRING(" WHERE index_id = :") + ++ (mCursor->mUniqueIndex ++ ? NS_LITERAL_CSTRING("unique_index_data") ++ : NS_LITERAL_CSTRING("index_data")) + ++ NS_LITERAL_CSTRING(" WHERE index_id = :") + + kStmtParamNameId; + + const auto keyRangeClause = +diff --git a/dom/localstorage/ActorsParent.cpp b/dom/localstorage/ActorsParent.cpp +index 9c46c20670..642cef1701 100644 +--- a/dom/localstorage/ActorsParent.cpp ++++ b/dom/localstorage/ActorsParent.cpp +@@ -6959,13 +6959,10 @@ nsresult PrepareDatastoreOp::Start() { + MOZ_ASSERT(!QuotaClient::IsShuttingDownOnBackgroundThread()); + MOZ_ASSERT(MayProceed()); + +- const LSRequestCommonParams& commonParams = +- mForPreload +- ? mParams.get_LSRequestPreloadDatastoreParams().commonParams() +- : mParams.get_LSRequestPrepareDatastoreParams().commonParams(); +- + const PrincipalInfo& storagePrincipalInfo = +- commonParams.storagePrincipalInfo(); ++ mForPreload ++ ? mParams.get_LSRequestPreloadDatastoreParams().commonParams().storagePrincipalInfo() ++ : mParams.get_LSRequestPrepareDatastoreParams().commonParams().storagePrincipalInfo(); + + if (storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo) { + QuotaManager::GetInfoForChrome(&mSuffix, &mGroup, &mOrigin); +@@ -6996,10 +6993,9 @@ nsresult PrepareDatastoreOp::CheckExistingOperations() { + return NS_ERROR_FAILURE; + } + +- const LSRequestCommonParams& commonParams = +- mForPreload +- ? mParams.get_LSRequestPreloadDatastoreParams().commonParams() +- : mParams.get_LSRequestPrepareDatastoreParams().commonParams(); ++ const LSRequestCommonParams& preloadCommonParams = mParams.get_LSRequestPreloadDatastoreParams().commonParams(); ++ const LSRequestCommonParams& prepareCommonParams = mParams.get_LSRequestPrepareDatastoreParams().commonParams(); ++ const LSRequestCommonParams& commonParams = mForPreload ? preloadCommonParams : prepareCommonParams; + + const PrincipalInfo& storagePrincipalInfo = + commonParams.storagePrincipalInfo();