summaryrefslogtreecommitdiffstats
path: root/dom/indexedDB/ActorsParentCommon.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/indexedDB/ActorsParentCommon.h')
-rw-r--r--dom/indexedDB/ActorsParentCommon.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/dom/indexedDB/ActorsParentCommon.h b/dom/indexedDB/ActorsParentCommon.h
new file mode 100644
index 0000000000..e515e3ddda
--- /dev/null
+++ b/dom/indexedDB/ActorsParentCommon.h
@@ -0,0 +1,125 @@
+/* -*- 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_indexeddb_actorsparentcommon_h__
+#define mozilla_dom_indexeddb_actorsparentcommon_h__
+
+// Declares functions and types used locally within IndexedDB, which are defined
+// in ActorsParent.cpp
+
+#include <stdint.h>
+#include <tuple>
+#include <utility>
+#include "ErrorList.h"
+#include "mozilla/Result.h"
+#include "mozilla/Span.h"
+#include "mozilla/UniquePtr.h"
+#include "mozilla/UniquePtrExtensions.h"
+#include "mozilla/dom/indexedDB/Key.h"
+#include "nscore.h"
+#include "nsISupports.h"
+#include "nsStringFwd.h"
+#include "nsTArray.h"
+
+struct JSContext;
+class JSObject;
+class mozIStorageConnection;
+class mozIStorageStatement;
+class mozIStorageValueArray;
+
+namespace mozilla::dom::indexedDB {
+
+class DatabaseFileManager;
+struct StructuredCloneFileParent;
+struct StructuredCloneReadInfoParent;
+
+extern const nsLiteralString kJournalDirectoryName;
+
+// At the moment, the encrypted stream block size is assumed to be unchangeable
+// between encrypting and decrypting blobs. This assumptions holds as long as we
+// only encrypt in private browsing mode, but when we support encryption for
+// persistent storage, this needs to be changed.
+constexpr uint32_t kEncryptedStreamBlockSize = 4096;
+
+using IndexOrObjectStoreId = int64_t;
+
+struct IndexDataValue final {
+ IndexOrObjectStoreId mIndexId;
+ Key mPosition;
+ Key mLocaleAwarePosition;
+ bool mUnique;
+
+ IndexDataValue();
+
+#if defined(DEBUG) || defined(NS_BUILD_REFCNT_LOGGING)
+ IndexDataValue(IndexDataValue&& aOther) noexcept;
+#else
+ IndexDataValue(IndexDataValue&& aOther) = default;
+#endif
+
+ IndexDataValue(IndexOrObjectStoreId aIndexId, bool aUnique,
+ const Key& aPosition);
+
+ IndexDataValue(IndexOrObjectStoreId aIndexId, bool aUnique,
+ const Key& aPosition, const Key& aLocaleAwarePosition);
+
+#ifdef NS_BUILD_REFCNT_LOGGING
+ MOZ_COUNTED_DTOR(IndexDataValue)
+#endif
+
+ IndexDataValue& operator=(IndexDataValue&& aOther) = default;
+
+ bool operator==(const IndexDataValue& aOther) const;
+
+ bool operator<(const IndexDataValue& aOther) const;
+};
+
+JSObject* GetSandbox(JSContext* aCx);
+
+// The success value of the Result is a a pair of a pointer to the compressed
+// index data values buffer and its size. The function does not return a
+// nsTArray because the result is typically passed to a function that acquires
+// ownership of the pointer.
+Result<std::pair<UniqueFreePtr<uint8_t>, uint32_t>, nsresult>
+MakeCompressedIndexDataValues(const nsTArray<IndexDataValue>& aIndexValues);
+
+// aOutIndexValues is an output parameter, since its storage is reused.
+nsresult ReadCompressedIndexDataValues(
+ mozIStorageStatement& aStatement, uint32_t aColumnIndex,
+ nsTArray<IndexDataValue>& aOutIndexValues);
+
+using IndexDataValuesAutoArray = AutoTArray<IndexDataValue, 32>;
+
+template <typename T>
+Result<IndexDataValuesAutoArray, nsresult> ReadCompressedIndexDataValues(
+ T& aValues, uint32_t aColumnIndex);
+
+Result<std::tuple<IndexOrObjectStoreId, bool, Span<const uint8_t>>, nsresult>
+ReadCompressedIndexId(Span<const uint8_t> aData);
+
+Result<std::pair<uint64_t, mozilla::Span<const uint8_t>>, nsresult>
+ReadCompressedNumber(Span<const uint8_t> aSpan);
+
+Result<StructuredCloneReadInfoParent, nsresult>
+GetStructuredCloneReadInfoFromValueArray(
+ mozIStorageValueArray* aValues, uint32_t aDataIndex, uint32_t aFileIdsIndex,
+ const DatabaseFileManager& aFileManager);
+
+Result<StructuredCloneReadInfoParent, nsresult>
+GetStructuredCloneReadInfoFromStatement(
+ mozIStorageStatement* aStatement, uint32_t aDataIndex,
+ uint32_t aFileIdsIndex, const DatabaseFileManager& aFileManager);
+
+Result<nsTArray<StructuredCloneFileParent>, nsresult>
+DeserializeStructuredCloneFiles(const DatabaseFileManager& aFileManager,
+ const nsAString& aText);
+
+nsresult ExecuteSimpleSQLSequence(mozIStorageConnection& aConnection,
+ Span<const nsLiteralCString> aSQLCommands);
+
+} // namespace mozilla::dom::indexedDB
+
+#endif // mozilla_dom_indexeddb_actorsparent_h__