Add an empty storage namespace provider
authorandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 11 Dec 2014 02:35:06 +0000 (02:35 +0000)
committerandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 11 Dec 2014 02:35:06 +0000 (02:35 +0000)
https://bugs.webkit.org/show_bug.cgi?id=139520

Reviewed by Tim Horton.

* loader/EmptyClients.cpp:
(WebCore::fillWithEmptyClients):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@177126 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/loader/EmptyClients.cpp

index caa402f..9dbf8fb 100644 (file)
@@ -1,3 +1,13 @@
+2014-12-10  Anders Carlsson  <andersca@apple.com>
+
+        Add an empty storage namespace provider
+        https://bugs.webkit.org/show_bug.cgi?id=139520
+
+        Reviewed by Tim Horton.
+
+        * loader/EmptyClients.cpp:
+        (WebCore::fillWithEmptyClients):
+
 2014-12-10  Beth Dakin  <bdakin@apple.com>
 
         Speculative build fix.
index 321b344..d9f7d0c 100644 (file)
@@ -36,6 +36,9 @@
 #include "FrameNetworkingContext.h"
 #include "HTMLFormElement.h"
 #include "PageConfiguration.h"
+#include "StorageArea.h"
+#include "StorageNamespace.h"
+#include "StorageNamespaceProvider.h"
 #include <wtf/NeverDestroyed.h>
 
 #if ENABLE(INPUT_TYPE_COLOR)
 
 namespace WebCore {
 
+class EmptyStorageNamespaceProvider final : public StorageNamespaceProvider {
+    struct EmptyStorageArea : public StorageArea {
+        virtual unsigned length() override { return 0; }
+        virtual String key(unsigned) override { return String(); }
+        virtual String item(const String&) override { return String(); }
+        virtual void setItem(Frame*, const String&, const String&, bool&) override { }
+        virtual void removeItem(Frame*, const String&) override { }
+        virtual void clear(Frame*) override { }
+        virtual bool contains(const String&) override { return false; }
+        virtual bool canAccessStorage(Frame*) override { return false; }
+        virtual StorageType storageType() const override { return LocalStorage; }
+        virtual size_t memoryBytesUsedByCache() override { return 0; }
+    };
+
+    struct EmptyStorageNamespace final : public StorageNamespace {
+        virtual PassRefPtr<StorageArea> storageArea(PassRefPtr<SecurityOrigin>) override { return adoptRef(new EmptyStorageArea); }
+        virtual PassRefPtr<StorageNamespace> copy(Page*) override { return adoptRef(new EmptyStorageNamespace); }
+        virtual void close() override { }
+        virtual void clearOriginForDeletion(SecurityOrigin*) override { }
+        virtual void clearAllOriginsForDeletion() override { }
+        virtual void sync() override { }
+        virtual void closeIdleLocalStorageDatabases() override { }
+    };
+
+    virtual RefPtr<StorageNamespace> createSessionStorageNamespace(Page&, unsigned) override
+    {
+        return adoptRef(new EmptyStorageNamespace);
+    }
+
+    virtual RefPtr<StorageNamespace> createLocalStorageNamespace(unsigned) override
+    {
+        return adoptRef(new EmptyStorageNamespace);
+    }
+
+    virtual RefPtr<StorageNamespace> createTransientLocalStorageNamespace(SecurityOrigin&, unsigned) override
+    {
+        return adoptRef(new EmptyStorageNamespace);
+    }
+};
+
 class EmptyVisitedLinkStore : public VisitedLinkStore {
     virtual bool isLinkVisited(Page&, LinkHash, const URL&, const AtomicString&) override { return false; }
     virtual void addVisitedLink(Page&, LinkHash) override { }
@@ -79,6 +122,7 @@ void fillWithEmptyClients(PageConfiguration& pageConfiguration)
     static NeverDestroyed<EmptyDiagnosticLoggingClient> dummyDiagnosticLoggingClient;
     pageConfiguration.diagnosticLoggingClient = &dummyDiagnosticLoggingClient.get();
 
+    pageConfiguration.storageNamespaceProvider = adoptRef(new EmptyStorageNamespaceProvider);
     pageConfiguration.visitedLinkStore = adoptRef(new EmptyVisitedLinkStore);
 }