From 1ac7543f8bef30dcec518f17515f39cc3c063b52 Mon Sep 17 00:00:00 2001 From: Jan Varga Date: Tue, 25 Oct 2016 21:18:18 +0200 Subject: [PATCH] Bug 964561 - Part 5: Add a data threshold pref; r=asuth --- dom/indexedDB/IndexedDatabaseManager.cpp | 34 ++++++++++++++++++++++++ dom/indexedDB/IndexedDatabaseManager.h | 3 +++ 2 files changed, 37 insertions(+) diff --git a/dom/indexedDB/IndexedDatabaseManager.cpp b/dom/indexedDB/IndexedDatabaseManager.cpp index 9b59ee2120fa..db12d8bdc729 100644 --- a/dom/indexedDB/IndexedDatabaseManager.cpp +++ b/dom/indexedDB/IndexedDatabaseManager.cpp @@ -133,11 +133,17 @@ NS_DEFINE_IID(kIDBRequestIID, PRIVATE_IDBREQUEST_IID); const uint32_t kDeleteTimeoutMs = 1000; +// The threshold we use for structured clone data storing. +// Anything smaller than the threshold is compressed and stored in the database. +// Anything larger is compressed and stored outside the database. +const int32_t kDefaultDataThresholdBytes = 1024 * 1024; // 1MB + #define IDB_PREF_BRANCH_ROOT "dom.indexedDB." const char kTestingPref[] = IDB_PREF_BRANCH_ROOT "testing"; const char kPrefExperimental[] = IDB_PREF_BRANCH_ROOT "experimental"; const char kPrefFileHandle[] = "dom.fileHandle.enabled"; +const char kDataThresholdPref[] = IDB_PREF_BRANCH_ROOT "dataThreshold"; #define IDB_PREF_LOGGING_BRANCH_ROOT IDB_PREF_BRANCH_ROOT "logging." @@ -159,6 +165,7 @@ Atomic gClosed(false); Atomic gTestingMode(false); Atomic gExperimentalFeaturesEnabled(false); Atomic gFileHandleEnabled(false); +Atomic gDataThresholdBytes(0); class DeleteFilesRunnable final : public nsIRunnable @@ -244,6 +251,17 @@ AtomicBoolPrefChangedCallback(const char* aPrefName, void* aClosure) *static_cast*>(aClosure) = Preferences::GetBool(aPrefName); } +void +DataThresholdPrefChangedCallback(const char* aPrefName, void* aClosure) +{ + MOZ_ASSERT(NS_IsMainThread()); + MOZ_ASSERT(!strcmp(aPrefName, kDataThresholdPref)); + MOZ_ASSERT(!aClosure); + + gDataThresholdBytes = + Preferences::GetInt(aPrefName, kDefaultDataThresholdBytes); +} + } // namespace IndexedDatabaseManager::IndexedDatabaseManager() @@ -381,6 +399,9 @@ IndexedDatabaseManager::Init() Preferences::RegisterCallbackAndCall(LoggingModePrefChangedCallback, kPrefLoggingEnabled); + Preferences::RegisterCallbackAndCall(DataThresholdPrefChangedCallback, + kDataThresholdPref); + #ifdef ENABLE_INTL_API const nsAdoptingCString& acceptLang = Preferences::GetLocalizedCString("intl.accept_languages"); @@ -441,6 +462,9 @@ IndexedDatabaseManager::Destroy() Preferences::UnregisterCallback(LoggingModePrefChangedCallback, kPrefLoggingEnabled); + Preferences::UnregisterCallback(DataThresholdPrefChangedCallback, + kDataThresholdPref); + delete this; } @@ -742,6 +766,16 @@ IndexedDatabaseManager::IsFileHandleEnabled() return gFileHandleEnabled; } +// static +uint32_t +IndexedDatabaseManager::DataThreshold() +{ + MOZ_ASSERT(gDBManager, + "DataThreshold() called before indexedDB has been initialized!"); + + return gDataThresholdBytes; +} + void IndexedDatabaseManager::ClearBackgroundActor() { diff --git a/dom/indexedDB/IndexedDatabaseManager.h b/dom/indexedDB/IndexedDatabaseManager.h index f3125594b9e4..3c7cc7e14b1f 100644 --- a/dom/indexedDB/IndexedDatabaseManager.h +++ b/dom/indexedDB/IndexedDatabaseManager.h @@ -131,6 +131,9 @@ public: static bool IsFileHandleEnabled(); + static uint32_t + DataThreshold(); + void ClearBackgroundActor();