Diff
Modified: trunk/Source/WebKit2/ChangeLog (148160 => 148161)
--- trunk/Source/WebKit2/ChangeLog 2013-04-11 01:03:03 UTC (rev 148160)
+++ trunk/Source/WebKit2/ChangeLog 2013-04-11 01:22:52 UTC (rev 148161)
@@ -1,5 +1,45 @@
2013-04-10 Anders Carlsson <[email protected]>
+ Make StorageAreaImpl a wrapper around StorageAreaMap
+ https://bugs.webkit.org/show_bug.cgi?id=114404
+
+ Reviewed by Oliver Hunt.
+
+ Prepare for moving all the code that deals with local storage values to StorageAreaMap,
+ and make StorageAreaImpl a dumb wrapper that simply calls through to the map.
+
+ * WebProcess/Storage/StorageAreaImpl.cpp:
+ (WebKit::StorageAreaImpl::create):
+ (WebKit::StorageAreaImpl::StorageAreaImpl):
+ (WebKit::StorageAreaImpl::~StorageAreaImpl):
+ (WebKit::StorageAreaImpl::storageType):
+ (WebKit::StorageAreaImpl::length):
+ (WebKit::StorageAreaImpl::key):
+ (WebKit::StorageAreaImpl::getItem):
+ (WebKit::StorageAreaImpl::setItem):
+ (WebKit::StorageAreaImpl::contains):
+ * WebProcess/Storage/StorageAreaImpl.h:
+ (WebKit::StorageAreaImpl::storageAreaID):
+ * WebProcess/Storage/StorageAreaMap.cpp:
+ (WebKit::generateStorageMapID):
+ (WebKit::StorageAreaMap::create):
+ (WebKit::StorageAreaMap::StorageAreaMap):
+ (WebKit::StorageAreaMap::storageType):
+ (WebKit::StorageAreaMap::length):
+ (WebKit::StorageAreaMap::key):
+ (WebKit::StorageAreaMap::item):
+ (WebKit::StorageAreaMap::setItem):
+ (WebKit::StorageAreaMap::contains):
+ (WebKit::StorageAreaMap::didSetItem):
+ (WebKit::StorageAreaMap::dispatchStorageEvent):
+ * WebProcess/Storage/StorageAreaMap.h:
+ * WebProcess/Storage/StorageNamespaceImpl.cpp:
+ (WebKit::StorageNamespaceImpl::storageArea):
+ * WebProcess/Storage/StorageNamespaceImpl.h:
+ (StorageNamespaceImpl):
+
+2013-04-10 Anders Carlsson <[email protected]>
+
Rename StorageManager messages to refer to the StorageMap instead of the StorageArea
https://bugs.webkit.org/show_bug.cgi?id=114401
Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.cpp (148160 => 148161)
--- trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.cpp 2013-04-11 01:03:03 UTC (rev 148160)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.cpp 2013-04-11 01:22:52 UTC (rev 148161)
@@ -26,17 +26,12 @@
#include "config.h"
#include "StorageAreaImpl.h"
-#include "SecurityOriginData.h"
-#include "StorageAreaMapMessages.h"
-#include "StorageManagerMessages.h"
-#include "StorageNamespaceImpl.h"
-#include "WebProcess.h"
+#include "StorageAreaMap.h"
#include <WebCore/ExceptionCode.h>
#include <WebCore/Frame.h>
#include <WebCore/Page.h>
#include <WebCore/SchemeRegistry.h>
-#include <WebCore/SecurityOrigin.h>
-#include <WebCore/StorageMap.h>
+#include <WebCore/Settings.h>
using namespace WebCore;
@@ -48,27 +43,26 @@
return ++storageAreaID;
}
-PassRefPtr<StorageAreaImpl> StorageAreaImpl::create(StorageNamespaceImpl* StorageNamespaceImpl, PassRefPtr<SecurityOrigin> securityOrigin)
+PassRefPtr<StorageAreaImpl> StorageAreaImpl::create(PassRefPtr<StorageAreaMap> storageAreaMap)
{
- return adoptRef(new StorageAreaImpl(StorageNamespaceImpl, securityOrigin));
+ return adoptRef(new StorageAreaImpl(storageAreaMap));
}
-StorageAreaImpl::StorageAreaImpl(StorageNamespaceImpl* StorageNamespaceImpl, PassRefPtr<SecurityOrigin> securityOrigin)
- : m_storageNamespaceID(StorageNamespaceImpl->storageNamespaceID())
- , m_quotaInBytes(StorageNamespaceImpl->quotaInBytes())
- , m_storageAreaID(generateStorageAreaID())
- , m_securityOrigin(securityOrigin)
+StorageAreaImpl::StorageAreaImpl(PassRefPtr<StorageAreaMap> storageAreaMap)
+ : m_storageAreaID(generateStorageAreaID())
+ , m_storageAreaMap(storageAreaMap)
{
- WebProcess::shared().connection()->send(Messages::StorageManager::CreateStorageMap(m_storageAreaID, StorageNamespaceImpl->storageNamespaceID(), SecurityOriginData::fromSecurityOrigin(m_securityOrigin.get())), 0);
- WebProcess::shared().addMessageReceiver(Messages::StorageAreaMap::messageReceiverName(), m_storageAreaID, this);
}
StorageAreaImpl::~StorageAreaImpl()
{
- WebProcess::shared().connection()->send(Messages::StorageManager::DestroyStorageMap(m_storageAreaID), 0);
- WebProcess::shared().removeMessageReceiver(Messages::StorageAreaMap::messageReceiverName(), m_storageAreaID);
}
+StorageType StorageAreaImpl::storageType() const
+{
+ return m_storageAreaMap->storageType();
+}
+
unsigned StorageAreaImpl::length(ExceptionCode& ec, Frame* sourceFrame)
{
ec = 0;
@@ -80,8 +74,7 @@
if (disabledByPrivateBrowsingInFrame(sourceFrame))
return 0;
- loadValuesIfNeeded();
- return m_storageMap->length();
+ return m_storageAreaMap->length();
}
String StorageAreaImpl::key(unsigned index, ExceptionCode& ec, Frame* sourceFrame)
@@ -91,12 +84,11 @@
ec = SECURITY_ERR;
return String();
}
+
if (disabledByPrivateBrowsingInFrame(sourceFrame))
return String();
- loadValuesIfNeeded();
-
- return m_storageMap->key(index);
+ return m_storageAreaMap->key(index);
}
String StorageAreaImpl::getItem(const String& key, ExceptionCode& ec, Frame* sourceFrame)
@@ -106,11 +98,11 @@
ec = SECURITY_ERR;
return String();
}
+
if (disabledByPrivateBrowsingInFrame(sourceFrame))
return String();
- loadValuesIfNeeded();
- return m_storageMap->getItem(key);
+ return m_storageAreaMap->item(key);
}
void StorageAreaImpl::setItem(const String& key, const String& value, ExceptionCode& ec, Frame* sourceFrame)
@@ -128,24 +120,11 @@
return;
}
- loadValuesIfNeeded();
-
- ASSERT(m_storageMap->hasOneRef());
- String oldValue;
bool quotaException;
- m_storageMap->setItem(key, value, oldValue, quotaException);
+ m_storageAreaMap->setItem(this, key, value, quotaException);
- if (quotaException) {
+ if (quotaException)
ec = QUOTA_EXCEEDED_ERR;
- return;
- }
-
- if (oldValue == value)
- return;
-
- m_pendingValueChanges.add(key);
-
- WebProcess::shared().connection()->send(Messages::StorageManager::SetItem(m_storageAreaID, key, value, sourceFrame->document()->url()), 0);
}
void StorageAreaImpl::removeItem(const String& key, ExceptionCode&, Frame* sourceFrame)
@@ -173,9 +152,7 @@
if (disabledByPrivateBrowsingInFrame(sourceFrame))
return false;
- loadValuesIfNeeded();
-
- return m_storageMap->contains(key);
+ return m_storageAreaMap->contains(key);
}
bool StorageAreaImpl::canAccessStorage(Frame* frame)
@@ -204,43 +181,6 @@
ASSERT_NOT_REACHED();
}
-
-void StorageAreaImpl::didSetItem(const String& key, bool quotaError)
-{
- ASSERT(m_pendingValueChanges.contains(key));
-
- m_pendingValueChanges.remove(key);
-
- if (quotaError)
- resetValues();
-}
-
-void StorageAreaImpl::dispatchStorageEvent(const String& key, const String& oldValue, const String& newValue, const String& urlString)
-{
- if (!shouldApplyChangesForKey(key))
- return;
-
- ASSERT(!key.isNull());
- ASSERT(!newValue.isNull());
-
- ASSERT(m_storageMap->hasOneRef());
- m_storageMap->setItemIgnoringQuota(key, newValue);
-
- if (storageType() == SessionStorage)
- dispatchSessionStorageEvent(key, oldValue, newValue, urlString);
- else
- dispatchLocalStorageEvent(key, oldValue, newValue, urlString);
-}
-
-StorageType StorageAreaImpl::storageType() const
-{
- // A zero storage namespace ID is used for local storage.
- if (!m_storageNamespaceID)
- return LocalStorage;
-
- return SessionStorage;
-}
-
bool StorageAreaImpl::disabledByPrivateBrowsingInFrame(const Frame* sourceFrame) const
{
if (!sourceFrame->page()->settings()->privateBrowsingEnabled())
@@ -252,61 +192,4 @@
return !SchemeRegistry::allowsLocalStorageAccessInPrivateBrowsing(sourceFrame->document()->securityOrigin()->protocol());
}
-bool StorageAreaImpl::shouldApplyChangesForKey(const String& key) const
-{
- // We have not yet loaded anything from this storage map.
- if (!m_storageMap)
- return false;
-
- // Check if this storage area is currently waiting for the storage manager to update the given key.
- // If that is the case, we don't want to apply any changes made by other storage areas, since
- // our change was made last.
- if (m_pendingValueChanges.contains(key))
- return false;
-
- return true;
-}
-
-void StorageAreaImpl::loadValuesIfNeeded()
-{
- if (m_storageMap)
- return;
-
- HashMap<String, String> values;
- // FIXME: This should use a special sendSync flag to indicate that we don't want to process incoming messages while waiting for a reply.
- // (This flag does not yet exist).
- WebProcess::shared().connection()->sendSync(Messages::StorageManager::GetValues(m_storageAreaID), Messages::StorageManager::GetValues::Reply(values), 0);
-
- m_storageMap = StorageMap::create(m_quotaInBytes);
- m_storageMap->importItems(values);
-}
-
-void StorageAreaImpl::resetValues()
-{
- m_storageMap = nullptr;
- m_pendingValueChanges.clear();
-}
-
-void StorageAreaImpl::dispatchSessionStorageEvent(const String& key, const String& oldValue, const String& newValue, const String& urlString)
-{
- ASSERT(storageType() == SessionStorage);
-
- // FIXME: Implement.
- UNUSED_PARAM(key);
- UNUSED_PARAM(oldValue);
- UNUSED_PARAM(newValue);
- UNUSED_PARAM(urlString);
-}
-
-void StorageAreaImpl::dispatchLocalStorageEvent(const String& key, const String& oldValue, const String& newValue, const String& urlString)
-{
- ASSERT(storageType() == LocalStorage);
-
- // FIXME: Implement.
- UNUSED_PARAM(key);
- UNUSED_PARAM(oldValue);
- UNUSED_PARAM(newValue);
- UNUSED_PARAM(urlString);
-}
-
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.h (148160 => 148161)
--- trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.h 2013-04-11 01:03:03 UTC (rev 148160)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.h 2013-04-11 01:22:52 UTC (rev 148161)
@@ -31,21 +31,20 @@
#include <wtf/HashCountedSet.h>
#include <wtf/HashMap.h>
-namespace WebCore {
-class StorageMap;
-}
-
namespace WebKit {
-class StorageNamespaceImpl;
+class StorageAreaMap;
-class StorageAreaImpl : public WebCore::StorageArea, private CoreIPC::MessageReceiver {
+class StorageAreaImpl : public WebCore::StorageArea {
public:
- static PassRefPtr<StorageAreaImpl> create(StorageNamespaceImpl*, PassRefPtr<WebCore::SecurityOrigin>);
+ static PassRefPtr<StorageAreaImpl> create(PassRefPtr<StorageAreaMap>);
virtual ~StorageAreaImpl();
+ uint64_t storageAreaID() const { return m_storageAreaID; }
+ WebCore::StorageType storageType() const;
+
private:
- StorageAreaImpl(StorageNamespaceImpl*, PassRefPtr<WebCore::SecurityOrigin>);
+ StorageAreaImpl(PassRefPtr<StorageAreaMap>);
// WebCore::StorageArea.
virtual unsigned length(WebCore::ExceptionCode&, WebCore::Frame* sourceFrame) OVERRIDE;
@@ -61,30 +60,10 @@
virtual void decrementAccessCount() OVERRIDE;
virtual void closeDatabaseIfIdle() OVERRIDE;
- // CoreIPC::MessageReceiver
- virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageDecoder&) OVERRIDE;
-
- void didSetItem(const String& key, bool quotaError);
- void dispatchStorageEvent(const String& key, const String& oldValue, const String& newValue, const String& urlString);
-
- WebCore::StorageType storageType() const;
bool disabledByPrivateBrowsingInFrame(const WebCore::Frame* sourceFrame) const;
- bool shouldApplyChangesForKey(const String& key) const;
- void loadValuesIfNeeded();
- void resetValues();
-
- void dispatchSessionStorageEvent(const String& key, const String& oldValue, const String& newValue, const String& urlString);
- void dispatchLocalStorageEvent(const String& key, const String& oldValue, const String& newValue, const String& urlString);
-
- uint64_t m_storageNamespaceID;
- unsigned m_quotaInBytes;
uint64_t m_storageAreaID;
-
- RefPtr<WebCore::SecurityOrigin> m_securityOrigin;
- RefPtr<WebCore::StorageMap> m_storageMap;
-
- HashCountedSet<String> m_pendingValueChanges;
+ RefPtr<StorageAreaMap> m_storageAreaMap;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp (148160 => 148161)
--- trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp 2013-04-11 01:03:03 UTC (rev 148160)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp 2013-04-11 01:22:52 UTC (rev 148161)
@@ -26,27 +26,82 @@
#include "config.h"
#include "StorageAreaMap.h"
+#include "StorageNamespaceImpl.h"
+#include <WebCore/StorageMap.h>
+
+using namespace WebCore;
+
namespace WebKit {
-PassRefPtr<StorageAreaMap> StorageAreaMap::create()
+static uint64_t generateStorageMapID()
{
- return adoptRef(new StorageAreaMap);
+ static uint64_t storageMapID;
+ return ++storageMapID;
}
-StorageAreaMap::StorageAreaMap()
+PassRefPtr<StorageAreaMap> StorageAreaMap::create(StorageNamespaceImpl* storageNamespace, PassRefPtr<WebCore::SecurityOrigin> securityOrigin)
{
+ return adoptRef(new StorageAreaMap(storageNamespace, securityOrigin));
}
+StorageAreaMap::StorageAreaMap(StorageNamespaceImpl* storageNamespace, PassRefPtr<WebCore::SecurityOrigin> securityOrigin)
+ : m_storageMapID(generateStorageMapID())
+ , m_storageNamespaceID(storageNamespace->storageNamespaceID())
+ , m_quotaInBytes(storageNamespace->quotaInBytes())
+ , m_securityOrigin(securityOrigin)
+{
+}
+
StorageAreaMap::~StorageAreaMap()
{
}
+StorageType StorageAreaMap::storageType() const
+{
+ // A zero storage namespace ID is used for local storage.
+ if (!m_storageNamespaceID)
+ return LocalStorage;
+
+ return SessionStorage;
+}
+
+unsigned StorageAreaMap::length()
+{
+ // FIXME: Implement.
+ return 0;
+}
+
+String StorageAreaMap::key(unsigned index)
+{
+ // FIXME: Implement.
+ return String();
+}
+
+String StorageAreaMap::item(const String& key)
+{
+ // FIXME: Implement.
+ return String();
+}
+
+void StorageAreaMap::setItem(StorageAreaImpl* sourceArea, const String& key, const String& value, bool& quotaException)
+{
+ // FIXME: Implement.
+}
+
+bool StorageAreaMap::contains(const String& key)
+{
+ // FIXME: Implement.
+ return false;
+}
+
void StorageAreaMap::didSetItem(const String& key, bool quotaError)
{
+ // FIXME: Implement.
}
void StorageAreaMap::dispatchStorageEvent(const String& key, const String& oldValue, const String& newValue, const String& urlString)
{
+ // FIXME: Implement.
}
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.h (148160 => 148161)
--- trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.h 2013-04-11 01:03:03 UTC (rev 148160)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.h 2013-04-11 01:22:52 UTC (rev 148161)
@@ -27,25 +27,53 @@
#define StorageAreaMap_h
#include "MessageReceiver.h"
+#include <WebCore/SecurityOrigin.h>
+#include <WebCore/StorageArea.h>
#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
+namespace WebCore {
+class SecurityOrigin;
+class StorageMap;
+}
+
namespace WebKit {
+class StorageAreaImpl;
+class StorageNamespaceImpl;
+
class StorageAreaMap : public RefCounted<StorageAreaMap>, private CoreIPC::MessageReceiver {
public:
- static PassRefPtr<StorageAreaMap> create();
+ static PassRefPtr<StorageAreaMap> create(StorageNamespaceImpl*, PassRefPtr<WebCore::SecurityOrigin>);
~StorageAreaMap();
+ WebCore::StorageType storageType() const;
+
+ unsigned length();
+ String key(unsigned index);
+ String item(const String& key);
+ void setItem(StorageAreaImpl* sourceArea, const String& key, const String& value, bool& quotaException);
+ bool contains(const String& key);
+
private:
- StorageAreaMap();
+ StorageAreaMap(StorageNamespaceImpl*, PassRefPtr<WebCore::SecurityOrigin>);
// CoreIPC::MessageReceiver
virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageDecoder&) OVERRIDE;
void didSetItem(const String& key, bool quotaError);
void dispatchStorageEvent(const String& key, const String& oldValue, const String& newValue, const String& urlString);
+
+ void loadValuesIfNeeded();
+
+ uint64_t m_storageMapID;
+ uint64_t m_storageNamespaceID;
+ unsigned m_quotaInBytes;
+ RefPtr<WebCore::SecurityOrigin> m_securityOrigin;
+
+
+ RefPtr<WebCore::StorageMap> m_storageMap;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp (148160 => 148161)
--- trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp 2013-04-11 01:03:03 UTC (rev 148160)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp 2013-04-11 01:22:52 UTC (rev 148161)
@@ -27,6 +27,7 @@
#include "StorageNamespaceImpl.h"
#include "StorageAreaImpl.h"
+#include "StorageAreaMap.h"
#include "WebPage.h"
#include <WebCore/SecurityOrigin.h>
#include <WebCore/Settings.h>
@@ -52,11 +53,11 @@
PassRefPtr<StorageArea> StorageNamespaceImpl::storageArea(PassRefPtr<SecurityOrigin> securityOrigin)
{
- HashMap<RefPtr<WebCore::SecurityOrigin>, RefPtr<StorageAreaImpl> >::AddResult result = m_storageAreaMap.add(securityOrigin.get(), 0);
+ HashMap<RefPtr<WebCore::SecurityOrigin>, RefPtr<StorageAreaMap> >::AddResult result = m_storageAreaMaps.add(securityOrigin.get(), 0);
if (result.isNewEntry)
- result.iterator->value = StorageAreaImpl::create(this, securityOrigin);
+ result.iterator->value = StorageAreaMap::create(this, securityOrigin);
- return result.iterator->value;
+ return StorageAreaImpl::create(result.iterator->value);
}
PassRefPtr<StorageNamespace> StorageNamespaceImpl::copy()
Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.h (148160 => 148161)
--- trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.h 2013-04-11 01:03:03 UTC (rev 148160)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.h 2013-04-11 01:22:52 UTC (rev 148161)
@@ -33,7 +33,7 @@
namespace WebKit {
-class StorageAreaImpl;
+class StorageAreaMap;
class WebPage;
class StorageNamespaceImpl : public WebCore::StorageNamespace {
@@ -58,7 +58,7 @@
uint64_t m_storageNamespaceID;
unsigned m_quotaInBytes;
- HashMap<RefPtr<WebCore::SecurityOrigin>, RefPtr<StorageAreaImpl> > m_storageAreaMap;
+ HashMap<RefPtr<WebCore::SecurityOrigin>, RefPtr<StorageAreaMap> > m_storageAreaMaps;
};
} // namespace WebKit