Diff
Modified: branches/safari-612-branch/Source/WebCore/Modules/storage/StorageManager.cpp (284291 => 284292)
--- branches/safari-612-branch/Source/WebCore/Modules/storage/StorageManager.cpp 2021-10-15 23:45:42 UTC (rev 284291)
+++ branches/safari-612-branch/Source/WebCore/Modules/storage/StorageManager.cpp 2021-10-15 23:46:16 UTC (rev 284292)
@@ -42,44 +42,52 @@
}
StorageManager::StorageManager(NavigatorBase& navigator)
- : m_navigator(navigator)
+ : m_navigator(makeWeakPtr(navigator))
{
}
-static ClientOrigin clientOrigin(ScriptExecutionContext& context)
+void StorageManager::persisted(DOMPromiseDeferred<IDLBoolean>&& promise)
{
- auto* origin = context.securityOrigin();
- return { context.topOrigin().data(), origin ? origin->data() : SecurityOriginData { } };
-}
+ if (!m_navigator)
+ return promise.reject(Exception { InvalidStateError, "Navigator does not exist"_s });
-void StorageManager::persisted(DOMPromiseDeferred<IDLBoolean>&& promise)
-{
- auto context = m_navigator.scriptExecutionContext();
+ auto context = m_navigator->scriptExecutionContext();
if (!context)
return promise.reject(Exception { InvalidStateError, "The context is invalid"_s });
- if (auto connection = context->storageConnection()) {
- return connection->persisted(clientOrigin(*context), [promise = WTFMove(promise)](bool persisted) mutable {
- promise.resolve(persisted);
- });
- }
+ auto connection = context->storageConnection();
+ if (!connection)
+ return promise.reject(Exception { InvalidStateError, "The connection is invalid"_s });
- return promise.reject(Exception { InvalidStateError, "The connection is invalid"_s });
+ auto* origin = context->securityOrigin();
+ if (!origin)
+ return promise.reject(Exception { InvalidStateError, "Origin is invalid"_s });
+
+ return connection->persisted({ context->topOrigin().data(), origin->data() }, [promise = WTFMove(promise)](bool persisted) mutable {
+ promise.resolve(persisted);
+ });
}
void StorageManager::persist(DOMPromiseDeferred<IDLBoolean>&& promise)
{
- auto context = m_navigator.scriptExecutionContext();
+ if (!m_navigator)
+ return promise.reject(Exception { InvalidStateError, "Navigator does not exist"_s });
+
+ auto context = m_navigator->scriptExecutionContext();
if (!context)
return promise.reject(Exception { InvalidStateError, "The context is invalid"_s });
- if (auto connection = context->storageConnection()) {
- return connection->persist(clientOrigin(*context), [promise = WTFMove(promise)](bool persisted) mutable {
- promise.resolve(persisted);
- });
- }
+ auto connection = context->storageConnection();
+ if (!connection)
+ return promise.reject(Exception { InvalidStateError, "The connection is invalid"_s });
- return promise.reject(Exception { InvalidStateError, "The connection is invalid"_s });
+ auto* origin = context->securityOrigin();
+ if (!origin)
+ return promise.reject(Exception { InvalidStateError, "Origin is invalid"_s });
+
+ return connection->persist({ context->topOrigin().data(), origin->data() }, [promise = WTFMove(promise)](bool persisted) mutable {
+ promise.resolve(persisted);
+ });
}
} // namespace WebCore
Modified: branches/safari-612-branch/Source/WebCore/Modules/storage/StorageManager.h (284291 => 284292)
--- branches/safari-612-branch/Source/WebCore/Modules/storage/StorageManager.h 2021-10-15 23:45:42 UTC (rev 284291)
+++ branches/safari-612-branch/Source/WebCore/Modules/storage/StorageManager.h 2021-10-15 23:46:16 UTC (rev 284292)
@@ -27,6 +27,7 @@
#include "IDLTypes.h"
#include <wtf/IsoMalloc.h>
+#include <wtf/WeakPtr.h>
namespace WebCore {
@@ -43,7 +44,7 @@
private:
explicit StorageManager(NavigatorBase&);
- NavigatorBase& m_navigator;
+ WeakPtr<NavigatorBase> m_navigator;
};
} // namespace WebCore
Modified: branches/safari-612-branch/Source/WebCore/dom/Document.cpp (284291 => 284292)
--- branches/safari-612-branch/Source/WebCore/dom/Document.cpp 2021-10-15 23:45:42 UTC (rev 284291)
+++ branches/safari-612-branch/Source/WebCore/dom/Document.cpp 2021-10-15 23:46:16 UTC (rev 284292)
@@ -3559,7 +3559,7 @@
return m_idbConnectionProxy.get();
}
-RefPtr<StorageConnection> Document::storageConnection()
+StorageConnection* Document::storageConnection()
{
return page() ? &page()->storageConnection() : nullptr;
}
Modified: branches/safari-612-branch/Source/WebCore/dom/Document.h (284291 => 284292)
--- branches/safari-612-branch/Source/WebCore/dom/Document.h 2021-10-15 23:45:42 UTC (rev 284291)
+++ branches/safari-612-branch/Source/WebCore/dom/Document.h 2021-10-15 23:46:16 UTC (rev 284292)
@@ -701,7 +701,7 @@
void disableWebAssembly(const String& errorMessage) final;
IDBClient::IDBConnectionProxy* idbConnectionProxy() final;
- RefPtr<StorageConnection> storageConnection() final;
+ StorageConnection* storageConnection() final;
SocketProvider* socketProvider() final;
RefPtr<RTCDataChannelRemoteHandlerConnection> createRTCDataChannelRemoteHandlerConnection() final;
Modified: branches/safari-612-branch/Source/WebCore/dom/ScriptExecutionContext.h (284291 => 284292)
--- branches/safari-612-branch/Source/WebCore/dom/ScriptExecutionContext.h 2021-10-15 23:45:42 UTC (rev 284291)
+++ branches/safari-612-branch/Source/WebCore/dom/ScriptExecutionContext.h 2021-10-15 23:46:16 UTC (rev 284292)
@@ -116,7 +116,7 @@
virtual void disableWebAssembly(const String& errorMessage) = 0;
virtual IDBClient::IDBConnectionProxy* idbConnectionProxy() = 0;
- virtual RefPtr<StorageConnection> storageConnection() { return nullptr; }
+ virtual StorageConnection* storageConnection() { return nullptr; }
virtual SocketProvider* socketProvider() = 0;
Modified: branches/safari-612-branch/Source/WebCore/page/NavigatorBase.cpp (284291 => 284292)
--- branches/safari-612-branch/Source/WebCore/page/NavigatorBase.cpp 2021-10-15 23:45:42 UTC (rev 284291)
+++ branches/safari-612-branch/Source/WebCore/page/NavigatorBase.cpp 2021-10-15 23:46:16 UTC (rev 284292)
@@ -140,7 +140,7 @@
return { defaultLanguage() };
}
-ExceptionOr<StorageManager&> NavigatorBase::storage()
+StorageManager& NavigatorBase::storage()
{
if (!m_storageManager)
m_storageManager = StorageManager::create(*this);
Modified: branches/safari-612-branch/Source/WebCore/page/NavigatorBase.h (284291 => 284292)
--- branches/safari-612-branch/Source/WebCore/page/NavigatorBase.h 2021-10-15 23:45:42 UTC (rev 284291)
+++ branches/safari-612-branch/Source/WebCore/page/NavigatorBase.h 2021-10-15 23:46:16 UTC (rev 284292)
@@ -59,7 +59,7 @@
static String language();
static Vector<String> languages();
- ExceptionOr<StorageManager&> storage();
+ StorageManager& storage();
protected:
explicit NavigatorBase(ScriptExecutionContext*);
Modified: branches/safari-612-branch/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp (284291 => 284292)
--- branches/safari-612-branch/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp 2021-10-15 23:45:42 UTC (rev 284291)
+++ branches/safari-612-branch/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp 2021-10-15 23:46:16 UTC (rev 284292)
@@ -91,8 +91,8 @@
{
ASSERT(!RunLoop::isMain());
- return *m_localOriginStorageManagers.ensure(origin, [path = m_path, origin, salt = m_salt] {
- return makeUnique<OriginStorageManager>(originPath(path, origin, salt));
+ return *m_localOriginStorageManagers.ensure(origin, [&] {
+ return makeUnique<OriginStorageManager>(originPath(m_path, origin, m_salt));
}).iterator->value;
}