Loading storage/mozStorageConnection.cpp +17 −20 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ * 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/. */ #include "nsError.h" #include "nsThreadUtils.h" #include "nsIFile.h" #include "nsIFileURL.h" Loading Loading @@ -37,10 +38,13 @@ #include "FileSystemModule.h" #include "mozStorageHelper.h" #include "mozilla/Assertions.h" #include "mozilla/Logging.h" #include "mozilla/Printf.h" #include "mozilla/ProfilerLabels.h" #include "mozilla/RefPtr.h" #include "nsProxyRelease.h" #include "nsStringFwd.h" #include "nsURLHelper.h" #define MIN_AVAILABLE_BYTES_PER_CHUNKED_GROWTH 524288000 // 500 MiB Loading Loading @@ -572,7 +576,8 @@ class AsyncVacuumEvent final : public Runnable { Connection::Connection(Service* aService, int aFlags, ConnectionOperation aSupportedOperations, bool aInterruptible, bool aIgnoreLockingMode) const nsCString& aTelemetryFilename, bool aInterruptible, bool aIgnoreLockingMode) : sharedAsyncExecutionMutex("Connection::sharedAsyncExecutionMutex"), sharedDBMutex("Connection::sharedDBMutex"), eventTargetOpenedOn(WrapNotNull(GetCurrentSerialEventTarget())), Loading @@ -594,6 +599,9 @@ Connection::Connection(Service* aService, int aFlags, MOZ_ASSERT(!mIgnoreLockingMode || mFlags & SQLITE_OPEN_READONLY, "Can't ignore locking for a non-readonly connection!"); mStorageService->registerConnection(this); MOZ_ASSERT(!aTelemetryFilename.IsEmpty(), "A telemetry filename should have been passed-in."); mTelemetryFilename.Assign(aTelemetryFilename); } Connection::~Connection() { Loading Loading @@ -823,8 +831,6 @@ nsresult Connection::initialize(const nsACString& aStorageKey, mName.IsEmpty() ? nsAutoCString(":memory:"_ns) : "file:"_ns + mName + "?mode=memory&cache=shared"_ns; mTelemetryFilename.AssignLiteral(":memory:"); int srv = ::sqlite3_open_v2(path.get(), &mDBConn, mFlags, GetBaseVFSName(true)); if (srv != SQLITE_OK) { Loading Loading @@ -860,7 +866,6 @@ nsresult Connection::initialize(nsIFile* aDatabaseFile) { // Do not set mFileURL here since this is database does not have an associated // URL. mDatabaseFile = aDatabaseFile; aDatabaseFile->GetNativeLeafName(mTelemetryFilename); nsAutoString path; nsresult rv = aDatabaseFile->GetPath(path); Loading Loading @@ -909,8 +914,7 @@ nsresult Connection::initialize(nsIFile* aDatabaseFile) { return NS_OK; } nsresult Connection::initialize(nsIFileURL* aFileURL, const nsACString& aTelemetryFilename) { nsresult Connection::initialize(nsIFileURL* aFileURL) { NS_ASSERTION(aFileURL, "Passed null file URL!"); NS_ASSERTION(!connectionReady(), "Initialize called on already opened database!"); Loading @@ -924,12 +928,6 @@ nsresult Connection::initialize(nsIFileURL* aFileURL, mFileURL = aFileURL; mDatabaseFile = databaseFile; if (!aTelemetryFilename.IsEmpty()) { mTelemetryFilename = aTelemetryFilename; } else { databaseFile->GetNativeLeafName(mTelemetryFilename); } nsAutoCString spec; rv = aFileURL->GetSpec(spec); NS_ENSURE_SUCCESS(rv, rv); Loading Loading @@ -990,9 +988,6 @@ nsresult Connection::initializeInternal() { "SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER should be enabled"); #endif MOZ_ASSERT(!mTelemetryFilename.IsEmpty(), "A telemetry filename should have been set by now."); // Properly wrap the database handle's mutex. sharedDBMutex.initWithMutex(sqlite3_db_mutex(mDBConn)); Loading Loading @@ -1714,7 +1709,7 @@ Connection::AsyncClone(bool aReadOnly, // The cloned connection will still implement the synchronous API, but throw // if any synchronous methods are called on the main thread. RefPtr<Connection> clone = new Connection(mStorageService, flags, ASYNCHRONOUS); new Connection(mStorageService, flags, ASYNCHRONOUS, mTelemetryFilename); RefPtr<AsyncInitializeClone> initEvent = new AsyncInitializeClone(this, clone, aReadOnly, aCallback); Loading @@ -1733,7 +1728,7 @@ nsresult Connection::initializeClone(Connection* aClone, bool aReadOnly) { if (!mStorageKey.IsEmpty()) { rv = aClone->initialize(mStorageKey, mName); } else if (mFileURL) { rv = aClone->initialize(mFileURL, mTelemetryFilename); rv = aClone->initialize(mFileURL); } else { rv = aClone->initialize(mDatabaseFile); } Loading Loading @@ -1878,8 +1873,9 @@ Connection::Clone(bool aReadOnly, mozIStorageConnection** _connection) { flags = (~SQLITE_OPEN_CREATE & flags); } RefPtr<Connection> clone = new Connection( mStorageService, flags, mSupportedOperations, mInterruptible); RefPtr<Connection> clone = new Connection(mStorageService, flags, mSupportedOperations, mTelemetryFilename, mInterruptible); rv = initializeClone(clone, aReadOnly); if (NS_FAILED(rv)) { Loading Loading @@ -2057,8 +2053,9 @@ Connection::GetSchemaVersion(int32_t* _version) { *_version = 0; bool hasResult; if (NS_SUCCEEDED(stmt->ExecuteStep(&hasResult)) && hasResult) if (NS_SUCCEEDED(stmt->ExecuteStep(&hasResult)) && hasResult) { *_version = stmt->AsInt32(0); } return NS_OK; } Loading storage/mozStorageConnection.h +6 −8 Original line number Diff line number Diff line Loading @@ -32,8 +32,7 @@ class nsIEventTarget; class nsISerialEventTarget; class nsIThread; namespace mozilla { namespace storage { namespace mozilla::storage { class Connection final : public mozIStorageConnection, public nsIInterfaceRequestor { Loading Loading @@ -85,7 +84,8 @@ class Connection final : public mozIStorageConnection, */ Connection(Service* aService, int aFlags, ConnectionOperation aSupportedOperations, bool aInterruptible = false, bool aIgnoreLockingMode = false); const nsCString& aTelemetryFilename, bool aInterruptible = false, bool aIgnoreLockingMode = false); /** * Creates the connection to an in-memory database. Loading @@ -108,8 +108,7 @@ class Connection final : public mozIStorageConnection, * The nsIFileURL of the location of the database to open, or create if * it does not exist. */ nsresult initialize(nsIFileURL* aFileURL, const nsACString& aTelemetryFilename); nsresult initialize(nsIFileURL* aFileURL); /** * Same as initialize, but to be used on the async thread. Loading Loading @@ -186,7 +185,7 @@ class Connection final : public mozIStorageConnection, /** * Closes the SQLite database, and warns about any non-finalized statements. */ nsresult internalClose(sqlite3* aDBConn); nsresult internalClose(sqlite3* aNativeconnection); /** * Shuts down the passed-in async thread. Loading Loading @@ -547,8 +546,7 @@ class CallbackComplete final : public Runnable { RefPtr<mozIStorageCompletionCallback> mCallback; }; } // namespace storage } // namespace mozilla } // namespace mozilla::storage /** * Casting Connection to nsISupports is ambiguous. Loading storage/mozStorageService.cpp +40 −21 Original line number Diff line number Diff line Loading @@ -7,7 +7,8 @@ #include "mozilla/Attributes.h" #include "mozilla/DebugOnly.h" #include "mozilla/SpinEventLoopUntil.h" #include "nsIFile.h" #include "nsIFileURL.h" #include "mozStorageService.h" #include "mozStorageConnection.h" #include "nsComponentManagerUtils.h" Loading Loading @@ -35,8 +36,7 @@ using mozilla::intl::Collator; namespace mozilla { namespace storage { namespace mozilla::storage { //////////////////////////////////////////////////////////////////////////////// //// Memory Reporting Loading Loading @@ -467,9 +467,8 @@ Service::OpenSpecialDatabase(const nsACString& aStorageKey, flags |= SQLITE_OPEN_URI; } RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, interruptible); RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, ":memory:"_ns, interruptible); const nsresult rv = msc->initialize(aStorageKey, aName); NS_ENSURE_SUCCESS(rv, rv); Loading Loading @@ -588,8 +587,15 @@ Service::OpenAsyncDatabase(nsIVariant* aDatabaseStore, uint32_t aOpenFlags, } // Create connection on this thread, but initialize it on its helper thread. nsAutoCString telemetryFilename; if (!storageFile) { telemetryFilename.AssignLiteral("memory"); } else { rv = storageFile->GetNativeLeafName(telemetryFilename); NS_ENSURE_SUCCESS(rv, rv); } RefPtr<Connection> msc = new Connection(this, flags, Connection::ASYNCHRONOUS, new Connection(this, flags, Connection::ASYNCHRONOUS, telemetryFilename, /* interruptible */ true, ignoreLockingMode); nsCOMPtr<nsIEventTarget> target = msc->getAsyncExecutionTarget(); MOZ_ASSERT(target, Loading @@ -612,10 +618,12 @@ Service::OpenDatabase(nsIFile* aDatabaseFile, uint32_t aConnectionFlags, // reasons. const int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SHAREDCACHE | SQLITE_OPEN_CREATE; RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, interruptible); const nsresult rv = msc->initialize(aDatabaseFile); nsAutoCString telemetryFilename; nsresult rv = aDatabaseFile->GetNativeLeafName(telemetryFilename); NS_ENSURE_SUCCESS(rv, rv); RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, telemetryFilename, interruptible); rv = msc->initialize(aDatabaseFile); NS_ENSURE_SUCCESS(rv, rv); msc.forget(_connection); Loading @@ -634,10 +642,12 @@ Service::OpenUnsharedDatabase(nsIFile* aDatabaseFile, uint32_t aConnectionFlags, // reasons. const int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_PRIVATECACHE | SQLITE_OPEN_CREATE; RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, interruptible); const nsresult rv = msc->initialize(aDatabaseFile); nsAutoCString telemetryFilename; nsresult rv = aDatabaseFile->GetNativeLeafName(telemetryFilename); NS_ENSURE_SUCCESS(rv, rv); RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, telemetryFilename, interruptible); rv = msc->initialize(aDatabaseFile); NS_ENSURE_SUCCESS(rv, rv); msc.forget(_connection); Loading @@ -658,10 +668,20 @@ Service::OpenDatabaseWithFileURL(nsIFileURL* aFileURL, // reasons. const int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SHAREDCACHE | SQLITE_OPEN_CREATE | SQLITE_OPEN_URI; RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, interruptible); const nsresult rv = msc->initialize(aFileURL, aTelemetryFilename); nsresult rv; nsAutoCString telemetryFilename; if (!aTelemetryFilename.IsEmpty()) { telemetryFilename = aTelemetryFilename; } else { nsCOMPtr<nsIFile> databaseFile; rv = aFileURL->GetFile(getter_AddRefs(databaseFile)); NS_ENSURE_SUCCESS(rv, rv); rv = databaseFile->GetNativeLeafName(telemetryFilename); NS_ENSURE_SUCCESS(rv, rv); } RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, telemetryFilename, interruptible); rv = msc->initialize(aFileURL); NS_ENSURE_SUCCESS(rv, rv); msc.forget(_connection); Loading Loading @@ -758,5 +778,4 @@ Service::Observe(nsISupports*, const char* aTopic, const char16_t*) { return NS_OK; } } // namespace storage } // namespace mozilla } // namespace mozilla::storage Loading
storage/mozStorageConnection.cpp +17 −20 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ * 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/. */ #include "nsError.h" #include "nsThreadUtils.h" #include "nsIFile.h" #include "nsIFileURL.h" Loading Loading @@ -37,10 +38,13 @@ #include "FileSystemModule.h" #include "mozStorageHelper.h" #include "mozilla/Assertions.h" #include "mozilla/Logging.h" #include "mozilla/Printf.h" #include "mozilla/ProfilerLabels.h" #include "mozilla/RefPtr.h" #include "nsProxyRelease.h" #include "nsStringFwd.h" #include "nsURLHelper.h" #define MIN_AVAILABLE_BYTES_PER_CHUNKED_GROWTH 524288000 // 500 MiB Loading Loading @@ -572,7 +576,8 @@ class AsyncVacuumEvent final : public Runnable { Connection::Connection(Service* aService, int aFlags, ConnectionOperation aSupportedOperations, bool aInterruptible, bool aIgnoreLockingMode) const nsCString& aTelemetryFilename, bool aInterruptible, bool aIgnoreLockingMode) : sharedAsyncExecutionMutex("Connection::sharedAsyncExecutionMutex"), sharedDBMutex("Connection::sharedDBMutex"), eventTargetOpenedOn(WrapNotNull(GetCurrentSerialEventTarget())), Loading @@ -594,6 +599,9 @@ Connection::Connection(Service* aService, int aFlags, MOZ_ASSERT(!mIgnoreLockingMode || mFlags & SQLITE_OPEN_READONLY, "Can't ignore locking for a non-readonly connection!"); mStorageService->registerConnection(this); MOZ_ASSERT(!aTelemetryFilename.IsEmpty(), "A telemetry filename should have been passed-in."); mTelemetryFilename.Assign(aTelemetryFilename); } Connection::~Connection() { Loading Loading @@ -823,8 +831,6 @@ nsresult Connection::initialize(const nsACString& aStorageKey, mName.IsEmpty() ? nsAutoCString(":memory:"_ns) : "file:"_ns + mName + "?mode=memory&cache=shared"_ns; mTelemetryFilename.AssignLiteral(":memory:"); int srv = ::sqlite3_open_v2(path.get(), &mDBConn, mFlags, GetBaseVFSName(true)); if (srv != SQLITE_OK) { Loading Loading @@ -860,7 +866,6 @@ nsresult Connection::initialize(nsIFile* aDatabaseFile) { // Do not set mFileURL here since this is database does not have an associated // URL. mDatabaseFile = aDatabaseFile; aDatabaseFile->GetNativeLeafName(mTelemetryFilename); nsAutoString path; nsresult rv = aDatabaseFile->GetPath(path); Loading Loading @@ -909,8 +914,7 @@ nsresult Connection::initialize(nsIFile* aDatabaseFile) { return NS_OK; } nsresult Connection::initialize(nsIFileURL* aFileURL, const nsACString& aTelemetryFilename) { nsresult Connection::initialize(nsIFileURL* aFileURL) { NS_ASSERTION(aFileURL, "Passed null file URL!"); NS_ASSERTION(!connectionReady(), "Initialize called on already opened database!"); Loading @@ -924,12 +928,6 @@ nsresult Connection::initialize(nsIFileURL* aFileURL, mFileURL = aFileURL; mDatabaseFile = databaseFile; if (!aTelemetryFilename.IsEmpty()) { mTelemetryFilename = aTelemetryFilename; } else { databaseFile->GetNativeLeafName(mTelemetryFilename); } nsAutoCString spec; rv = aFileURL->GetSpec(spec); NS_ENSURE_SUCCESS(rv, rv); Loading Loading @@ -990,9 +988,6 @@ nsresult Connection::initializeInternal() { "SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER should be enabled"); #endif MOZ_ASSERT(!mTelemetryFilename.IsEmpty(), "A telemetry filename should have been set by now."); // Properly wrap the database handle's mutex. sharedDBMutex.initWithMutex(sqlite3_db_mutex(mDBConn)); Loading Loading @@ -1714,7 +1709,7 @@ Connection::AsyncClone(bool aReadOnly, // The cloned connection will still implement the synchronous API, but throw // if any synchronous methods are called on the main thread. RefPtr<Connection> clone = new Connection(mStorageService, flags, ASYNCHRONOUS); new Connection(mStorageService, flags, ASYNCHRONOUS, mTelemetryFilename); RefPtr<AsyncInitializeClone> initEvent = new AsyncInitializeClone(this, clone, aReadOnly, aCallback); Loading @@ -1733,7 +1728,7 @@ nsresult Connection::initializeClone(Connection* aClone, bool aReadOnly) { if (!mStorageKey.IsEmpty()) { rv = aClone->initialize(mStorageKey, mName); } else if (mFileURL) { rv = aClone->initialize(mFileURL, mTelemetryFilename); rv = aClone->initialize(mFileURL); } else { rv = aClone->initialize(mDatabaseFile); } Loading Loading @@ -1878,8 +1873,9 @@ Connection::Clone(bool aReadOnly, mozIStorageConnection** _connection) { flags = (~SQLITE_OPEN_CREATE & flags); } RefPtr<Connection> clone = new Connection( mStorageService, flags, mSupportedOperations, mInterruptible); RefPtr<Connection> clone = new Connection(mStorageService, flags, mSupportedOperations, mTelemetryFilename, mInterruptible); rv = initializeClone(clone, aReadOnly); if (NS_FAILED(rv)) { Loading Loading @@ -2057,8 +2053,9 @@ Connection::GetSchemaVersion(int32_t* _version) { *_version = 0; bool hasResult; if (NS_SUCCEEDED(stmt->ExecuteStep(&hasResult)) && hasResult) if (NS_SUCCEEDED(stmt->ExecuteStep(&hasResult)) && hasResult) { *_version = stmt->AsInt32(0); } return NS_OK; } Loading
storage/mozStorageConnection.h +6 −8 Original line number Diff line number Diff line Loading @@ -32,8 +32,7 @@ class nsIEventTarget; class nsISerialEventTarget; class nsIThread; namespace mozilla { namespace storage { namespace mozilla::storage { class Connection final : public mozIStorageConnection, public nsIInterfaceRequestor { Loading Loading @@ -85,7 +84,8 @@ class Connection final : public mozIStorageConnection, */ Connection(Service* aService, int aFlags, ConnectionOperation aSupportedOperations, bool aInterruptible = false, bool aIgnoreLockingMode = false); const nsCString& aTelemetryFilename, bool aInterruptible = false, bool aIgnoreLockingMode = false); /** * Creates the connection to an in-memory database. Loading @@ -108,8 +108,7 @@ class Connection final : public mozIStorageConnection, * The nsIFileURL of the location of the database to open, or create if * it does not exist. */ nsresult initialize(nsIFileURL* aFileURL, const nsACString& aTelemetryFilename); nsresult initialize(nsIFileURL* aFileURL); /** * Same as initialize, but to be used on the async thread. Loading Loading @@ -186,7 +185,7 @@ class Connection final : public mozIStorageConnection, /** * Closes the SQLite database, and warns about any non-finalized statements. */ nsresult internalClose(sqlite3* aDBConn); nsresult internalClose(sqlite3* aNativeconnection); /** * Shuts down the passed-in async thread. Loading Loading @@ -547,8 +546,7 @@ class CallbackComplete final : public Runnable { RefPtr<mozIStorageCompletionCallback> mCallback; }; } // namespace storage } // namespace mozilla } // namespace mozilla::storage /** * Casting Connection to nsISupports is ambiguous. Loading
storage/mozStorageService.cpp +40 −21 Original line number Diff line number Diff line Loading @@ -7,7 +7,8 @@ #include "mozilla/Attributes.h" #include "mozilla/DebugOnly.h" #include "mozilla/SpinEventLoopUntil.h" #include "nsIFile.h" #include "nsIFileURL.h" #include "mozStorageService.h" #include "mozStorageConnection.h" #include "nsComponentManagerUtils.h" Loading Loading @@ -35,8 +36,7 @@ using mozilla::intl::Collator; namespace mozilla { namespace storage { namespace mozilla::storage { //////////////////////////////////////////////////////////////////////////////// //// Memory Reporting Loading Loading @@ -467,9 +467,8 @@ Service::OpenSpecialDatabase(const nsACString& aStorageKey, flags |= SQLITE_OPEN_URI; } RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, interruptible); RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, ":memory:"_ns, interruptible); const nsresult rv = msc->initialize(aStorageKey, aName); NS_ENSURE_SUCCESS(rv, rv); Loading Loading @@ -588,8 +587,15 @@ Service::OpenAsyncDatabase(nsIVariant* aDatabaseStore, uint32_t aOpenFlags, } // Create connection on this thread, but initialize it on its helper thread. nsAutoCString telemetryFilename; if (!storageFile) { telemetryFilename.AssignLiteral("memory"); } else { rv = storageFile->GetNativeLeafName(telemetryFilename); NS_ENSURE_SUCCESS(rv, rv); } RefPtr<Connection> msc = new Connection(this, flags, Connection::ASYNCHRONOUS, new Connection(this, flags, Connection::ASYNCHRONOUS, telemetryFilename, /* interruptible */ true, ignoreLockingMode); nsCOMPtr<nsIEventTarget> target = msc->getAsyncExecutionTarget(); MOZ_ASSERT(target, Loading @@ -612,10 +618,12 @@ Service::OpenDatabase(nsIFile* aDatabaseFile, uint32_t aConnectionFlags, // reasons. const int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SHAREDCACHE | SQLITE_OPEN_CREATE; RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, interruptible); const nsresult rv = msc->initialize(aDatabaseFile); nsAutoCString telemetryFilename; nsresult rv = aDatabaseFile->GetNativeLeafName(telemetryFilename); NS_ENSURE_SUCCESS(rv, rv); RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, telemetryFilename, interruptible); rv = msc->initialize(aDatabaseFile); NS_ENSURE_SUCCESS(rv, rv); msc.forget(_connection); Loading @@ -634,10 +642,12 @@ Service::OpenUnsharedDatabase(nsIFile* aDatabaseFile, uint32_t aConnectionFlags, // reasons. const int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_PRIVATECACHE | SQLITE_OPEN_CREATE; RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, interruptible); const nsresult rv = msc->initialize(aDatabaseFile); nsAutoCString telemetryFilename; nsresult rv = aDatabaseFile->GetNativeLeafName(telemetryFilename); NS_ENSURE_SUCCESS(rv, rv); RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, telemetryFilename, interruptible); rv = msc->initialize(aDatabaseFile); NS_ENSURE_SUCCESS(rv, rv); msc.forget(_connection); Loading @@ -658,10 +668,20 @@ Service::OpenDatabaseWithFileURL(nsIFileURL* aFileURL, // reasons. const int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SHAREDCACHE | SQLITE_OPEN_CREATE | SQLITE_OPEN_URI; RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, interruptible); const nsresult rv = msc->initialize(aFileURL, aTelemetryFilename); nsresult rv; nsAutoCString telemetryFilename; if (!aTelemetryFilename.IsEmpty()) { telemetryFilename = aTelemetryFilename; } else { nsCOMPtr<nsIFile> databaseFile; rv = aFileURL->GetFile(getter_AddRefs(databaseFile)); NS_ENSURE_SUCCESS(rv, rv); rv = databaseFile->GetNativeLeafName(telemetryFilename); NS_ENSURE_SUCCESS(rv, rv); } RefPtr<Connection> msc = new Connection(this, flags, Connection::SYNCHRONOUS, telemetryFilename, interruptible); rv = msc->initialize(aFileURL); NS_ENSURE_SUCCESS(rv, rv); msc.forget(_connection); Loading Loading @@ -758,5 +778,4 @@ Service::Observe(nsISupports*, const char* aTopic, const char16_t*) { return NS_OK; } } // namespace storage } // namespace mozilla } // namespace mozilla::storage