From eef773ad6c6d6f507ceaf55f26d11126b1223f94 Mon Sep 17 00:00:00 2001 From: Jan Varga Date: Tue, 7 May 2019 12:54:02 +0200 Subject: [PATCH 1/2] Bug 1549654 - LSNG: Compress specific values during migration; r=asuth Differential Revision: https://phabricator.services.mozilla.com/D30181 --- dom/localstorage/ActorsParent.cpp | 135 +++++++++++++++++- .../test/unit/corruptedDatabase_profile.zip | Bin 4095 -> 4096 bytes dom/quota/ActorsParent.cpp | 42 +++--- dom/quota/QuotaManager.h | 10 +- .../localStorageArchive2upgrade_profile.zip | Bin 7792 -> 0 bytes .../localStorageArchive3upgrade_profile.zip | Bin 7986 -> 0 bytes .../localStorageArchive4upgrade_profile.zip | Bin 0 -> 7853 bytes .../unit/test_localStorageArchive3upgrade.js | 65 --------- ...js => test_localStorageArchive4upgrade.js} | 44 +++++- dom/quota/test/unit/xpcshell.ini | 6 +- 10 files changed, 191 insertions(+), 111 deletions(-) delete mode 100644 dom/quota/test/unit/localStorageArchive2upgrade_profile.zip delete mode 100644 dom/quota/test/unit/localStorageArchive3upgrade_profile.zip create mode 100644 dom/quota/test/unit/localStorageArchive4upgrade_profile.zip delete mode 100644 dom/quota/test/unit/test_localStorageArchive3upgrade.js rename dom/quota/test/unit/{test_localStorageArchive2upgrade.js => test_localStorageArchive4upgrade.js} (62%) diff --git a/dom/localstorage/ActorsParent.cpp b/dom/localstorage/ActorsParent.cpp index 8ec161433293..21ff65b51d2f 100644 --- a/dom/localstorage/ActorsParent.cpp +++ b/dom/localstorage/ActorsParent.cpp @@ -38,6 +38,7 @@ #include "mozilla/ipc/PBackgroundParent.h" #include "mozilla/ipc/PBackgroundSharedTypes.h" #include "mozilla/Logging.h" +#include "mozilla/storage/Variant.h" #include "nsClassHashtable.h" #include "nsDataHashtable.h" #include "nsExceptionHandler.h" @@ -2344,6 +2345,9 @@ class PrepareDatastoreOp public SupportsCheckedUnsafePtr> { class LoadDataOp; + class CompressFunction; + class CompressibleFunction; + enum class NestedState { // The nesting has not yet taken place. Next step is // CheckExistingOperations. @@ -2537,6 +2541,23 @@ class PrepareDatastoreOp::LoadDataOp final void Cleanup() override; }; +class PrepareDatastoreOp::CompressFunction final : public mozIStorageFunction { + private: + ~CompressFunction() = default; + + NS_DECL_ISUPPORTS + NS_DECL_MOZISTORAGEFUNCTION +}; + +class PrepareDatastoreOp::CompressibleFunction final + : public mozIStorageFunction { + private: + ~CompressibleFunction() = default; + + NS_DECL_ISUPPORTS + NS_DECL_MOZISTORAGEFUNCTION +}; + class PrepareObserverOp : public LSRequestBase { const LSRequestPrepareObserverParams mParams; nsCString mOrigin; @@ -7034,15 +7055,33 @@ nsresult PrepareDatastoreOp::DatabaseWork() { mozStorageTransaction transaction( connection, false, mozIStorageConnection::TRANSACTION_IMMEDIATE); + nsCOMPtr function = new CompressFunction(); + + rv = + connection->CreateFunction(NS_LITERAL_CSTRING("compress"), 1, function); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + + function = new CompressibleFunction(); + + rv = connection->CreateFunction(NS_LITERAL_CSTRING("compressible"), 1, + function); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + nsCOMPtr stmt; rv = connection->CreateStatement( - NS_LITERAL_CSTRING("INSERT INTO data (key, value, utf16Length) " - "SELECT key, value, utf16Length(value) " - "FROM webappsstore2 " - "WHERE originKey = :originKey " - "AND originAttributes = :originAttributes;" + NS_LITERAL_CSTRING( + "INSERT INTO data (key, value, utf16Length, compressed) " + "SELECT key, compress(value), utf16Length(value), " + "compressible(value) " + "FROM webappsstore2 " + "WHERE originKey = :originKey " + "AND originAttributes = :originAttributes;" - ), + ), getter_AddRefs(stmt)); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; @@ -7058,6 +7097,16 @@ nsresult PrepareDatastoreOp::DatabaseWork() { return rv; } + rv = connection->RemoveFunction(NS_LITERAL_CSTRING("compress")); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + + rv = connection->RemoveFunction(NS_LITERAL_CSTRING("compressible")); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + rv = connection->CreateStatement( NS_LITERAL_CSTRING("UPDATE database SET usage = :usage;"), getter_AddRefs(stmt)); @@ -7766,6 +7815,80 @@ void PrepareDatastoreOp::LoadDataOp::Cleanup() { ConnectionDatastoreOperationBase::Cleanup(); } +NS_IMPL_ISUPPORTS(PrepareDatastoreOp::CompressFunction, mozIStorageFunction) + +NS_IMETHODIMP +PrepareDatastoreOp::CompressFunction::OnFunctionCall( + mozIStorageValueArray* aFunctionArguments, nsIVariant** aResult) { + AssertIsOnIOThread(); + MOZ_ASSERT(aFunctionArguments); + MOZ_ASSERT(aResult); + +#ifdef DEBUG + { + uint32_t argCount; + MOZ_ALWAYS_SUCCEEDS(aFunctionArguments->GetNumEntries(&argCount)); + MOZ_ASSERT(argCount == 1); + + int32_t type; + MOZ_ALWAYS_SUCCEEDS(aFunctionArguments->GetTypeOfIndex(0, &type)); + MOZ_ASSERT(type == mozIStorageValueArray::VALUE_TYPE_TEXT); + } +#endif + + nsCString value; + nsresult rv = aFunctionArguments->GetUTF8String(0, value); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + + nsCString compressed; + if (!SnappyCompress(value, compressed)) { + compressed = value; + } + + nsCOMPtr result = new storage::UTF8TextVariant(compressed); + + result.forget(aResult); + return NS_OK; +} + +NS_IMPL_ISUPPORTS(PrepareDatastoreOp::CompressibleFunction, mozIStorageFunction) + +NS_IMETHODIMP +PrepareDatastoreOp::CompressibleFunction::OnFunctionCall( + mozIStorageValueArray* aFunctionArguments, nsIVariant** aResult) { + AssertIsOnIOThread(); + MOZ_ASSERT(aFunctionArguments); + MOZ_ASSERT(aResult); + +#ifdef DEBUG + { + uint32_t argCount; + MOZ_ALWAYS_SUCCEEDS(aFunctionArguments->GetNumEntries(&argCount)); + MOZ_ASSERT(argCount == 1); + + int32_t type; + MOZ_ALWAYS_SUCCEEDS(aFunctionArguments->GetTypeOfIndex(0, &type)); + MOZ_ASSERT(type == mozIStorageValueArray::VALUE_TYPE_TEXT); + } +#endif + + nsCString value; + nsresult rv = aFunctionArguments->GetUTF8String(0, value); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + + nsCString compressed; + bool compressible = SnappyCompress(value, compressed); + + nsCOMPtr result = new storage::IntegerVariant(compressible); + + result.forget(aResult); + return NS_OK; +} + /******************************************************************************* * PrepareObserverOp ******************************************************************************/ diff --git a/dom/localstorage/test/unit/corruptedDatabase_profile.zip b/dom/localstorage/test/unit/corruptedDatabase_profile.zip index 6ee654e4223e64a0443995bed683e4f044e83efc..2f60db2a456b9b918418888847d82c95dbaf2064 100644 GIT binary patch delta 564 zcmew_-=HwThf`a9xnEw4-M*U>LpAFKzg&oU{`o>oX$3a}BgOs7O#HqI$4lWdU60KYyJJLr(bV9d$wXy`L6Vvp36DrevDnS z$IeG8Q|QvM)oDU?VcYdLUEE>*qJ3}JtUbPb&e`_7Ys)rEmQ6PAEi>lzf4zCfmcZ&g zqUYnj{8GPp{oso4E3ezzoz?5l|D+$e-B_mY_|JqXw%Yn>ncKhd-SYf+?d}teJMTGu zuibEEYwd3rWsmdjd*4;g>n#_veZT4S+<-4v)A=9w-U{2;_U-JmX}hLRx^&5GdS0vj zGS1ARDgVr_E6LYO@N7Q%^=0hWMa5-x(QCt>$5-!qw4WF3Aq7Sj4()FVb+gu02*Lz7 zHzZw6Ix_k73JaK@x%O|Cn|`WLbKM_?2~wNenZ!5|ku`Z4w>dK~wk9`ni%s_75u41z z!^fC6xsXSAvL25U;|?GzgIScBVX`5!{$y@m2j&G}w(jI=UROrl$p?9}8GC`G=Hv@3 s?2}{p92kFtd3LP4ldk}I|0av_2Q!vU&g73^ESh|X-<-{b8<-9l0GD|CoB#j- delta 544 zcmZor_%A=fhqEVhrr(S&JCEI%7^+z>KJ8%4mZ=A0N-MY-7+JnDGBB`+FfcH@z37;I zIYENq!4h3*E!KQn-hH>jW++vCNh%F&TbgX#de`msqA6#$ZMpeOFZ;LlpXvV?ZD-`& z-5`7hhXvHRp?Wewf+99#@ z#d`s*iUAmBEK08sp@^*&#)QTKrTt-@`;F|@ zrR&yu&sLYJw0l*0{!`ALy)P=~$L6&!T5ne^vi`bRx9OJk=G(9Aoib(Gww)!~e++#+ zCLjK?eW%#ZACD7e=&tjBx9a)a%bRCs?X~)U>$2$oT#$dbf&Piu*#7x)$%Jnv6W7c)qN4=D1_I=gUXP?tA<9peP4%^gf)oQRm3yqw#d85mWQA97nU=1!L3 z31!;OGf{+bPD~=qU?wB4H`9CwvzXV9QD^deKF!Imd7T)0z^rgScg9~pRvF{p a$zuG$jHQ#a_#+q#Cm-fFXLANQkpTdP&-q9I diff --git a/dom/quota/ActorsParent.cpp b/dom/quota/ActorsParent.cpp index ca7d54b3871f..bb6ab858cffa 100644 --- a/dom/quota/ActorsParent.cpp +++ b/dom/quota/ActorsParent.cpp @@ -218,7 +218,7 @@ const char kResourceOriginPrefix[] = "resource://"; #define LS_ARCHIVE_FILE_NAME "ls-archive.sqlite" #define LS_ARCHIVE_TMP_FILE_NAME "ls-archive-tmp.sqlite" -const uint32_t kLocalStorageArchiveVersion = 3; +const uint32_t kLocalStorageArchiveVersion = 4; const char kProfileDoChangeTopic[] = "profile-do-change"; @@ -446,6 +446,7 @@ nsresult LoadLocalStorageArchiveVersion(mozIStorageConnection* aConnection, return NS_OK; } +/* nsresult SaveLocalStorageArchiveVersion(mozIStorageConnection* aConnection, uint32_t aVersion) { AssertIsOnIOThread(); @@ -471,6 +472,7 @@ nsresult SaveLocalStorageArchiveVersion(mozIStorageConnection* aConnection, return NS_OK; } +*/ /****************************************************************************** * Quota manager class declarations @@ -5331,7 +5333,7 @@ nsresult QuotaManager::DowngradeLocalStorageArchive( return NS_OK; } -nsresult QuotaManager::UpgradeLocalStorageArchiveFrom0To1( +nsresult QuotaManager::UpgradeLocalStorageArchiveFromLessThan4To4( nsCOMPtr& aConnection) { AssertIsOnIOThread(); MOZ_ASSERT(CachedNextGenLocalStorageEnabled()); @@ -5341,7 +5343,7 @@ nsresult QuotaManager::UpgradeLocalStorageArchiveFrom0To1( return rv; } - rv = InitializeLocalStorageArchive(aConnection, 1); + rv = InitializeLocalStorageArchive(aConnection, 4); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } @@ -5349,25 +5351,20 @@ nsresult QuotaManager::UpgradeLocalStorageArchiveFrom0To1( return NS_OK; } -nsresult QuotaManager::UpgradeLocalStorageArchiveFrom1To2( +/* +nsresult QuotaManager::UpgradeLocalStorageArchiveFrom4To5( nsCOMPtr& aConnection) { - nsresult rv = SaveLocalStorageArchiveVersion(aConnection, 2); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - - return NS_OK; -} - -nsresult QuotaManager::UpgradeLocalStorageArchiveFrom2To3( - nsCOMPtr& aConnection) { - nsresult rv = SaveLocalStorageArchiveVersion(aConnection, 3); + AssertIsOnIOThread(); + MOZ_ASSERT(CachedNextGenLocalStorageEnabled()); + + nsresult rv = SaveLocalStorageArchiveVersion(aConnection, 5); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } return NS_OK; } +*/ #ifdef DEBUG @@ -5591,18 +5588,17 @@ nsresult QuotaManager::EnsureStorageIsInitialized() { return rv; } } else { - static_assert(kLocalStorageArchiveVersion == 3, + static_assert(kLocalStorageArchiveVersion == 4, "Upgrade function needed due to LocalStorage archive " "version increase."); while (version != kLocalStorageArchiveVersion) { - if (version == 0) { - rv = UpgradeLocalStorageArchiveFrom0To1(connection); - } else if (version == 1) { - rv = UpgradeLocalStorageArchiveFrom1To2(connection); - } else if (version == 2) { - rv = UpgradeLocalStorageArchiveFrom2To3(connection); - } else { + if (version < 4) { + rv = UpgradeLocalStorageArchiveFromLessThan4To4(connection); + } /* else if (version == 4) { + rv = UpgradeLocalStorageArchiveFrom4To5(connection); + } */ + else { QM_WARNING( "Unable to initialize LocalStorage archive, no upgrade path is " "available!"); diff --git a/dom/quota/QuotaManager.h b/dom/quota/QuotaManager.h index 479f85ada9ba..fc9afad4e565 100644 --- a/dom/quota/QuotaManager.h +++ b/dom/quota/QuotaManager.h @@ -483,14 +483,12 @@ class QuotaManager final : public BackgroundThreadObject { nsresult DowngradeLocalStorageArchive( nsCOMPtr& aConnection); - nsresult UpgradeLocalStorageArchiveFrom0To1( + nsresult UpgradeLocalStorageArchiveFromLessThan4To4( nsCOMPtr& aConnection); - nsresult UpgradeLocalStorageArchiveFrom1To2( - nsCOMPtr& aConnection); - - nsresult UpgradeLocalStorageArchiveFrom2To3( - nsCOMPtr& aConnection); + /* + nsresult UpgradeLocalStorageArchiveFrom4To5(); + */ nsresult InitializeRepository(PersistenceType aPersistenceType); diff --git a/dom/quota/test/unit/localStorageArchive2upgrade_profile.zip b/dom/quota/test/unit/localStorageArchive2upgrade_profile.zip deleted file mode 100644 index 8883ea4630468f1c63076254109d53429752b8ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7792 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 diff --git a/dom/quota/test/unit/localStorageArchive4upgrade_profile.zip b/dom/quota/test/unit/localStorageArchive4upgrade_profile.zip new file mode 100644 index 0000000000000000000000000000000000000000..cf5b29adae091387926af9a1c9c8b54cf10cc606 GIT binary patch literal 7853 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 literal 0 HcmV?d00001 diff --git a/dom/quota/test/unit/test_localStorageArchive3upgrade.js b/dom/quota/test/unit/test_localStorageArchive3upgrade.js deleted file mode 100644 index 134d21e61d44..000000000000 --- a/dom/quota/test/unit/test_localStorageArchive3upgrade.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -/** - * This test is mainly to verify that local storage directories are not removed - * during local storage archive upgrade from version 2 to version 3. - * See bug 1513937. - */ - -async function testSteps() { - const lsDirs = [ - "storage/default/http+++example.com/ls", - "storage/default/http+++localhost/ls", - "storage/default/http+++www.mozilla.org/ls", - ]; - - info("Clearing"); - - let request = clear(); - await requestFinished(request); - - info("Installing package"); - - // The profile contains three initialized origin directories with local - // storage data, local storage archive, a script for origin initialization, - // the storage database and the web apps store database: - // - storage/default/https+++example.com - // - storage/default/https+++localhost - // - storage/default/https+++www.mozilla.org - // - storage/ls-archive.sqlite - // - create_db.js - // - storage.sqlite - // - webappsstore.sqlite - // The file create_db.js in the package was run locally (with a build with - // local storage archive version 2), specifically it was temporarily added to - // xpcshell.ini and then executed: - // mach xpcshell-test --interactive dom/localstorage/test/unit/create_db.js - // Note: to make it become the profile in the test, additional manual steps - // are needed. - // 1. Remove the folder "storage/temporary". - installPackage("localStorageArchive3upgrade_profile"); - - info("Checking ls dirs"); - - for (let lsDir of lsDirs) { - let dir = getRelativeFile(lsDir); - - exists = dir.exists(); - ok(exists, "ls directory does exist"); - } - - request = init(); - request = await requestFinished(request); - - info("Checking ls dirs"); - - for (let lsDir of lsDirs) { - let dir = getRelativeFile(lsDir); - - exists = dir.exists(); - ok(exists, "ls directory does exist"); - } -} diff --git a/dom/quota/test/unit/test_localStorageArchive2upgrade.js b/dom/quota/test/unit/test_localStorageArchive4upgrade.js similarity index 62% rename from dom/quota/test/unit/test_localStorageArchive2upgrade.js rename to dom/quota/test/unit/test_localStorageArchive4upgrade.js index 8067575223f8..df256bab28f3 100644 --- a/dom/quota/test/unit/test_localStorageArchive2upgrade.js +++ b/dom/quota/test/unit/test_localStorageArchive4upgrade.js @@ -4,18 +4,34 @@ */ /** - * This test is mainly to verify that local storage directories are not removed - * during local storage archive upgrade from version 1 to version 2. - * See bug 1546310. + * This test is mainly to verify that local storage directories are removed + * during local storage archive upgrade from version 3 to version 4. + * See bug 1549654. */ async function testSteps() { const lsDirs = [ - "storage/default/http+++example.com/ls", "storage/default/http+++localhost/ls", "storage/default/http+++www.mozilla.org/ls", + "storage/default/http+++example.com/ls", ]; + const principalInfos = [ + "http://localhost", + "http://www.mozilla.org", + "http://example.com", + ]; + + const data = [ + { key: "foo0", value: "bar" }, + { key: "foo1", value: "A" }, + { key: "foo2", value: "A".repeat(100) }, + ]; + + function getLocalStorage(principal) { + return Services.domStorageManager.createStorage(null, principal, ""); + } + info("Clearing"); let request = clear(); @@ -34,13 +50,13 @@ async function testSteps() { // - storage.sqlite // - webappsstore.sqlite // The file create_db.js in the package was run locally (with a build with - // local storage archive version 1), specifically it was temporarily added to + // local storage archive version 3), specifically it was temporarily added to // xpcshell.ini and then executed: // mach xpcshell-test --interactive dom/localstorage/test/unit/create_db.js // Note: to make it become the profile in the test, additional manual steps // are needed. // 1. Remove the folder "storage/temporary". - installPackage("localStorageArchive2upgrade_profile"); + installPackage("localStorageArchive4upgrade_profile"); info("Checking ls dirs"); @@ -60,6 +76,20 @@ async function testSteps() { let dir = getRelativeFile(lsDir); exists = dir.exists(); - ok(exists, "ls directory does exist"); + ok(!exists, "ls directory doesn't exist"); + } + + info("Getting storages"); + + let storages = []; + for (let i = 0; i < principalInfos.length; i++) { + let storage = getLocalStorage(getPrincipal(principalInfos[i])); + storages.push(storage); + } + + info("Verifying data"); + + for (let i = 0; i < storages.length; i++) { + is(storages[i].getItem(data[i].key), data[i].value, "Correct value"); } } diff --git a/dom/quota/test/unit/xpcshell.ini b/dom/quota/test/unit/xpcshell.ini index 9717badac9b6..2dcc85c1aee2 100644 --- a/dom/quota/test/unit/xpcshell.ini +++ b/dom/quota/test/unit/xpcshell.ini @@ -14,8 +14,7 @@ support-files = idbSubdirUpgrade1_profile.zip idbSubdirUpgrade2_profile.zip localStorageArchive1upgrade_profile.zip - localStorageArchive2upgrade_profile.zip - localStorageArchive3upgrade_profile.zip + localStorageArchive4upgrade_profile.zip localStorageArchiveDowngrade_profile.zip morgueCleanup_profile.zip obsoleteOriginAttributes_profile.zip @@ -38,8 +37,7 @@ support-files = [test_initTemporaryStorage.js] [test_listInitializedOrigins.js] [test_localStorageArchive1upgrade.js] -[test_localStorageArchive2upgrade.js] -[test_localStorageArchive3upgrade.js] +[test_localStorageArchive4upgrade.js] [test_localStorageArchiveDowngrade.js] [test_morgueCleanup.js] [test_obsoleteOriginAttributesUpgrade.js] From 20b94dcde5d6a8ade3e670a44c2e70a78bba4aba Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Tue, 7 May 2019 23:23:30 +0100 Subject: [PATCH 2/2] Bug 1549833, r=valentin Differential Revision: https://phabricator.services.mozilla.com//D30285 --HG-- extra : rebase_source : dcd2ecd154c5423143f449f52411eda32c61a972 --- modules/libpref/init/all.js | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js index 0c8d0b312b4e..cb323be6aa6b 100644 --- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -1624,6 +1624,7 @@ pref("network.protocol-handler.external.vbscript", false); pref("network.protocol-handler.external.javascript", false); pref("network.protocol-handler.external.data", false); pref("network.protocol-handler.external.ms-help", false); +pref("network.protocol-handler.external.res", false); pref("network.protocol-handler.external.shell", false); pref("network.protocol-handler.external.vnd.ms.radio", false); #ifdef XP_MACOSX