Title: [177087] trunk/Source
Revision
177087
Author
[email protected]
Date
2014-12-10 12:10:02 -0800 (Wed, 10 Dec 2014)

Log Message

Add WebStorageNamespaceProvider::closeLocalStorage
https://bugs.webkit.org/show_bug.cgi?id=139502

Reviewed by Tim Horton.

Source/WebCore:

* 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.

Source/WebKit:

* 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:

Source/WebKit/mac:

* WebView/WebView.mm:
(+[WebView _applicationWillTerminate]):
Call WebStorageNamespaceProvider::closeLocalStorage.

Modified Paths

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)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to