Diff
Modified: trunk/Source/WebCore/ChangeLog (177086 => 177087)
--- trunk/Source/WebCore/ChangeLog 2014-12-10 19:57:33 UTC (rev 177086)
+++ trunk/Source/WebCore/ChangeLog 2014-12-10 20:10:02 UTC (rev 177087)
@@ -1,3 +1,18 @@
+2014-12-10 Anders Carlsson <[email protected]>
+
+ Add WebStorageNamespaceProvider::closeLocalStorage
+ https://bugs.webkit.org/show_bug.cgi?id=139502
+
+ Reviewed by Tim Horton.
+
+ * page/Page.cpp:
+ (WebCore::Page::~Page):
+ Call StorageNamespaceProvider::removePage.
+
+ * storage/StorageNamespaceProvider.h:
+ (WebCore::StorageNamespaceProvider::optionalLocalStorageNamespace):
+ Helper function that returns the local storage namespace if one exists.
+
2014-12-10 Joanmarie Diggs <[email protected]>
AX: [ATK] MathML tokens with text fail to expose their text content via AtkText
Modified: trunk/Source/WebCore/page/Page.cpp (177086 => 177087)
--- trunk/Source/WebCore/page/Page.cpp 2014-12-10 19:57:33 UTC (rev 177086)
+++ trunk/Source/WebCore/page/Page.cpp 2014-12-10 20:10:02 UTC (rev 177087)
@@ -271,6 +271,7 @@
pageCounter.decrement();
#endif
+ m_storageNamespaceProvider->removePage(*this);
if (m_userContentController)
m_userContentController->removePage(*this);
m_visitedLinkStore->removePage(*this);
Modified: trunk/Source/WebCore/storage/StorageNamespaceProvider.h (177086 => 177087)
--- trunk/Source/WebCore/storage/StorageNamespaceProvider.h 2014-12-10 19:57:33 UTC (rev 177086)
+++ trunk/Source/WebCore/storage/StorageNamespaceProvider.h 2014-12-10 20:10:02 UTC (rev 177087)
@@ -49,6 +49,9 @@
void addPage(Page&);
void removePage(Page&);
+protected:
+ StorageNamespace* optionalLocalStorageNamespace() { return m_localStorageNamespace.get(); }
+
private:
virtual RefPtr<StorageNamespace> createLocalStorageNamespace(unsigned quota) = 0;
virtual RefPtr<StorageNamespace> createTransientLocalStorageNamespace(SecurityOrigin&, unsigned quota) = 0;
Modified: trunk/Source/WebKit/ChangeLog (177086 => 177087)
--- trunk/Source/WebKit/ChangeLog 2014-12-10 19:57:33 UTC (rev 177086)
+++ trunk/Source/WebKit/ChangeLog 2014-12-10 20:10:02 UTC (rev 177087)
@@ -1,3 +1,21 @@
+2014-12-10 Anders Carlsson <[email protected]>
+
+ Add WebStorageNamespaceProvider::closeLocalStorage
+ https://bugs.webkit.org/show_bug.cgi?id=139502
+
+ Reviewed by Tim Horton.
+
+ * Storage/WebStorageNamespaceProvider.cpp:
+ (storageNamespaceProviders):
+ (WebStorageNamespaceProvider::WebStorageNamespaceProvider):
+ (WebStorageNamespaceProvider::~WebStorageNamespaceProvider):
+ Keep track of all live storage namespace providers.
+
+ (WebStorageNamespaceProvider::closeLocalStorage):
+ Loop through all storage namespace providers and call close() on their local storage namespaces.
+
+ * Storage/WebStorageNamespaceProvider.h:
+
2014-12-09 Commit Queue <[email protected]>
Unreviewed, rolling out r177037.
Modified: trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.cpp (177086 => 177087)
--- trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.cpp 2014-12-10 19:57:33 UTC (rev 177086)
+++ trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.cpp 2014-12-10 20:10:02 UTC (rev 177087)
@@ -26,9 +26,17 @@
#include "WebStorageNamespaceProvider.h"
#include <WebCore/StorageNamespaceImpl.h>
+#include <wtf/NeverDestroyed.h>
using namespace WebCore;
+static HashSet<WebStorageNamespaceProvider*>& storageNamespaceProviders()
+{
+ static NeverDestroyed<HashSet<WebStorageNamespaceProvider*>> storageNamespaceProviders;
+
+ return storageNamespaceProviders;
+}
+
RefPtr<WebStorageNamespaceProvider> WebStorageNamespaceProvider::create(const String& localStorageDatabasePath)
{
return adoptRef(new WebStorageNamespaceProvider(localStorageDatabasePath));
@@ -37,12 +45,23 @@
WebStorageNamespaceProvider::WebStorageNamespaceProvider(const String& localStorageDatabasePath)
: m_localStorageDatabasePath(localStorageDatabasePath)
{
+ storageNamespaceProviders().add(this);
}
WebStorageNamespaceProvider::~WebStorageNamespaceProvider()
{
+ ASSERT(storageNamespaceProviders().contains(this));
+ storageNamespaceProviders().remove(this);
}
+void WebStorageNamespaceProvider::closeLocalStorage()
+{
+ for (const auto& storageNamespaceProvider : storageNamespaceProviders()) {
+ if (auto* localStorageNamespace = storageNamespaceProvider->optionalLocalStorageNamespace())
+ localStorageNamespace->close();
+ }
+}
+
RefPtr<StorageNamespace> WebStorageNamespaceProvider::createLocalStorageNamespace(unsigned quota)
{
return StorageNamespaceImpl::getOrCreateLocalStorageNamespace(m_localStorageDatabasePath, quota);
Modified: trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.h (177086 => 177087)
--- trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.h 2014-12-10 19:57:33 UTC (rev 177086)
+++ trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.h 2014-12-10 20:10:02 UTC (rev 177087)
@@ -33,6 +33,8 @@
static RefPtr<WebStorageNamespaceProvider> create(const String& localStorageDatabasePath);
virtual ~WebStorageNamespaceProvider();
+ static void closeLocalStorage();
+
private:
explicit WebStorageNamespaceProvider(const String& localStorageDatabasePath);
Modified: trunk/Source/WebKit/mac/ChangeLog (177086 => 177087)
--- trunk/Source/WebKit/mac/ChangeLog 2014-12-10 19:57:33 UTC (rev 177086)
+++ trunk/Source/WebKit/mac/ChangeLog 2014-12-10 20:10:02 UTC (rev 177087)
@@ -1,3 +1,14 @@
+2014-12-10 Anders Carlsson <[email protected]>
+
+ Add WebStorageNamespaceProvider::closeLocalStorage
+ https://bugs.webkit.org/show_bug.cgi?id=139502
+
+ Reviewed by Tim Horton.
+
+ * WebView/WebView.mm:
+ (+[WebView _applicationWillTerminate]):
+ Call WebStorageNamespaceProvider::closeLocalStorage.
+
2014-12-09 Commit Queue <[email protected]>
Unreviewed, rolling out r177037.
Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (177086 => 177087)
--- trunk/Source/WebKit/mac/WebView/WebView.mm 2014-12-10 19:57:33 UTC (rev 177086)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm 2014-12-10 20:10:02 UTC (rev 177087)
@@ -100,6 +100,7 @@
#import "WebScriptWorldInternal.h"
#import "WebSelectionServiceController.h"
#import "WebStorageManagerInternal.h"
+#import "WebStorageNamespaceProvider.h"
#import "WebSystemInterface.h"
#import "WebTextCompletionController.h"
#import "WebTextIterator.h"
@@ -4791,6 +4792,7 @@
if (!pluginDatabaseClientCount)
[WebPluginDatabase closeSharedDatabase];
+ WebStorageNamespaceProvider::closeLocalStorage();
PageGroup::closeLocalStorage();
}
#endif // !PLATFORM(IOS)