Title: [176806] trunk/Source/WebKit2
Revision
176806
Author
[email protected]
Date
2014-12-04 11:39:48 -0800 (Thu, 04 Dec 2014)

Log Message

Simplify StorageManager callback functions
https://bugs.webkit.org/show_bug.cgi?id=139257

Reviewed by Antti Koivisto.

* UIProcess/Storage/StorageManager.cpp:
(WebKit::StorageManager::getOrigins):
(WebKit::StorageManager::getStorageDetailsByOrigin):
(WebKit::callCallbackFunction): Deleted.
(WebKit::StorageManager::getOriginsInternal): Deleted.
(WebKit::StorageManager::getStorageDetailsByOriginInternal): Deleted.
* UIProcess/Storage/StorageManager.h:
* UIProcess/WebKeyValueStorageManager.cpp:
(WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
(WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):
(WebKit::didGetKeyValueStorageOrigins): Deleted.
(WebKit::didGetStorageDetailsByOrigin): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (176805 => 176806)


--- trunk/Source/WebKit2/ChangeLog	2014-12-04 19:22:35 UTC (rev 176805)
+++ trunk/Source/WebKit2/ChangeLog	2014-12-04 19:39:48 UTC (rev 176806)
@@ -1,3 +1,23 @@
+2014-12-04  Anders Carlsson  <[email protected]>
+
+        Simplify StorageManager callback functions
+        https://bugs.webkit.org/show_bug.cgi?id=139257
+
+        Reviewed by Antti Koivisto.
+
+        * UIProcess/Storage/StorageManager.cpp:
+        (WebKit::StorageManager::getOrigins):
+        (WebKit::StorageManager::getStorageDetailsByOrigin):
+        (WebKit::callCallbackFunction): Deleted.
+        (WebKit::StorageManager::getOriginsInternal): Deleted.
+        (WebKit::StorageManager::getStorageDetailsByOriginInternal): Deleted.
+        * UIProcess/Storage/StorageManager.h:
+        * UIProcess/WebKeyValueStorageManager.cpp:
+        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
+        (WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):
+        (WebKit::didGetKeyValueStorageOrigins): Deleted.
+        (WebKit::didGetStorageDetailsByOrigin): Deleted.
+
 2014-12-04  Csaba Osztrogonác  <[email protected]>
 
         URTBF after r176794.

Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp (176805 => 176806)


--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp	2014-12-04 19:22:35 UTC (rev 176805)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp	2014-12-04 19:39:48 UTC (rev 176806)
@@ -418,14 +418,30 @@
     m_queue->dispatch(bind(&StorageManager::invalidateConnectionInternal, this, RefPtr<IPC::Connection>(webProcessProxy->connection())));
 }
 
-void StorageManager::getOrigins(FunctionDispatcher& callbackDispatcher, void* context, void (*callback)(const Vector<RefPtr<WebCore::SecurityOrigin>>& securityOrigins, void* context))
+void StorageManager::getOrigins(std::function<void (Vector<RefPtr<WebCore::SecurityOrigin>>)> completionHandler)
 {
-    m_queue->dispatch(bind(&StorageManager::getOriginsInternal, this, RefPtr<FunctionDispatcher>(&callbackDispatcher), context, callback));
+    RefPtr<StorageManager> storageManager(this);
+
+    m_queue->dispatch([storageManager, completionHandler] {
+        auto origins = storageManager->m_localStorageDatabaseTracker->origins();
+
+        RunLoop::main().dispatch([origins, completionHandler]() mutable {
+            completionHandler(WTF::move(origins));
+        });
+    });
 }
 
-void StorageManager::getStorageDetailsByOrigin(FunctionDispatcher& callbackDispatcher, void* context, void (*callback)(const Vector<LocalStorageDetails>& storageDetails, void* context))
+void StorageManager::getStorageDetailsByOrigin(std::function<void (Vector<LocalStorageDetails>)> completionHandler)
 {
-    m_queue->dispatch(bind(&StorageManager::getStorageDetailsByOriginInternal, this, RefPtr<FunctionDispatcher>(&callbackDispatcher), context, callback));
+    RefPtr<StorageManager> storageManager(this);
+
+    m_queue->dispatch([storageManager, completionHandler] {
+        auto storageDetails = storageManager->m_localStorageDatabaseTracker->details();
+
+        RunLoop::main().dispatch([storageDetails, completionHandler]() mutable {
+            completionHandler(WTF::move(storageDetails));
+        });
+    });
 }
 
 void StorageManager::deleteEntriesForOrigin(const SecurityOrigin& securityOrigin)
@@ -665,24 +681,6 @@
     return result.iterator->value.get();
 }
 
-static void callCallbackFunction(void* context, void (*callbackFunction)(const Vector<RefPtr<WebCore::SecurityOrigin>>& securityOrigins, void* context), Vector<RefPtr<WebCore::SecurityOrigin>>* securityOriginsPtr)
-{
-    std::unique_ptr<Vector<RefPtr<WebCore::SecurityOrigin>>> securityOrigins(securityOriginsPtr);
-    callbackFunction(*securityOrigins, context);
-}
-
-void StorageManager::getOriginsInternal(FunctionDispatcher* dispatcher, void* context, void (*callbackFunction)(const Vector<RefPtr<WebCore::SecurityOrigin>>& securityOrigins, void* context))
-{
-    auto securityOrigins = std::make_unique<Vector<RefPtr<WebCore::SecurityOrigin>>>(m_localStorageDatabaseTracker->origins());
-    dispatcher->dispatch(bind(callCallbackFunction, context, callbackFunction, securityOrigins.release()));
-}
-
-void StorageManager::getStorageDetailsByOriginInternal(FunctionDispatcher* dispatcher, void* context, void (*callbackFunction)(const Vector<LocalStorageDetails>& storageDetails, void* context))
-{
-    Vector<LocalStorageDetails> storageDetails = m_localStorageDatabaseTracker->details();
-    dispatcher->dispatch(bind(callbackFunction, WTF::move(storageDetails), context));
-}
-
 void StorageManager::deleteEntriesForOriginInternal(SecurityOrigin* securityOrigin)
 {
     for (auto it = m_localStorageNamespaces.begin(), end = m_localStorageNamespaces.end(); it != end; ++it)

Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h (176805 => 176806)


--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h	2014-12-04 19:22:35 UTC (rev 176805)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h	2014-12-04 19:39:48 UTC (rev 176806)
@@ -60,10 +60,8 @@
     void processWillCloseConnection(WebProcessProxy*);
     void applicationWillTerminate();
 
-    // FIXME: Instead of a context + C function, this should take a WTF::Function, but we currently don't
-    // support arguments in functions.
-    void getOrigins(FunctionDispatcher& callbackDispatcher, void* context, void (*callback)(const Vector<RefPtr<WebCore::SecurityOrigin>>&, void* context));
-    void getStorageDetailsByOrigin(FunctionDispatcher& callbackDispatcher, void* context, void (*callback)(const Vector<LocalStorageDetails>&, void* context));
+    void getOrigins(std::function<void (Vector<RefPtr<WebCore::SecurityOrigin>>)> completionHandler);
+    void getStorageDetailsByOrigin(std::function<void (Vector<LocalStorageDetails>)> completionHandler);
     void deleteEntriesForOrigin(const WebCore::SecurityOrigin&);
     void deleteAllEntries();
 
@@ -99,8 +97,6 @@
     class LocalStorageNamespace;
     LocalStorageNamespace* getOrCreateLocalStorageNamespace(uint64_t storageNamespaceID);
 
-    void getOriginsInternal(FunctionDispatcher* callbackDispatcher, void* context, void (*callback)(const Vector<RefPtr<WebCore::SecurityOrigin>>&, void* context));
-    void getStorageDetailsByOriginInternal(FunctionDispatcher* callbackDispatcher, void* context, void (*callback)(const Vector<LocalStorageDetails>&, void* context));
     void deleteEntriesForOriginInternal(WebCore::SecurityOrigin*);
     void deleteAllEntriesInternal();
 

Modified: trunk/Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp (176805 => 176806)


--- trunk/Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp	2014-12-04 19:22:35 UTC (rev 176805)
+++ trunk/Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp	2014-12-04 19:39:48 UTC (rev 176806)
@@ -86,51 +86,41 @@
     API::Object::deref();
 }
 
-static void didGetKeyValueStorageOrigins(const Vector<RefPtr<SecurityOrigin>>& securityOrigins, void* context)
+void WebKeyValueStorageManager::getKeyValueStorageOrigins(std::function<void (API::Array*, CallbackBase::Error)> callbackFunction)
 {
-    RefPtr<ArrayCallback> callback = adoptRef(static_cast<ArrayCallback*>(context));
+    context()->storageManager().getOrigins([callbackFunction](Vector<RefPtr<SecurityOrigin>> securityOrigins) {
+        Vector<RefPtr<API::Object>> webSecurityOrigins;
+        webSecurityOrigins.reserveInitialCapacity(securityOrigins.size());
+        for (auto& origin : securityOrigins)
+            webSecurityOrigins.uncheckedAppend(WebSecurityOrigin::create(WTF::move(origin)));
 
-    Vector<RefPtr<API::Object>> webSecurityOrigins;
-    webSecurityOrigins.reserveInitialCapacity(securityOrigins.size());
-
-    for (unsigned i = 0; i < securityOrigins.size(); ++i)
-        webSecurityOrigins.uncheckedAppend(WebSecurityOrigin::create(securityOrigins[i]));
-
-    callback->performCallbackWithReturnValue(API::Array::create(WTF::move(webSecurityOrigins)).get());
+        callbackFunction(API::Array::create(WTF::move(webSecurityOrigins)).get(), CallbackBase::Error::None);
+    });
 }
 
-void WebKeyValueStorageManager::getKeyValueStorageOrigins(std::function<void (API::Array*, CallbackBase::Error)> callbackFunction)
+void WebKeyValueStorageManager::getStorageDetailsByOrigin(std::function<void (API::Array*, CallbackBase::Error)> callbackFunction)
 {
-    context()->storageManager().getOrigins(RunLoop::main(), ArrayCallback::create(WTF::move(callbackFunction)).leakRef(), didGetKeyValueStorageOrigins);
-}
-
-static void didGetStorageDetailsByOrigin(const Vector<LocalStorageDetails>& storageDetails, void* context)
-{
-    RefPtr<ArrayCallback> callback = adoptRef(static_cast<ArrayCallback*>(context));
-
-    Vector<RefPtr<API::Object>> result;
-    result.reserveInitialCapacity(storageDetails.size());
-
-    for (const LocalStorageDetails& originDetails : storageDetails) {
+    context()->storageManager().getStorageDetailsByOrigin([callbackFunction](Vector<LocalStorageDetails> storageDetails) {
         HashMap<String, RefPtr<API::Object>> detailsMap;
+        Vector<RefPtr<API::Object>> result;
+        result.reserveInitialCapacity(storageDetails.size());
 
-        RefPtr<API::Object> origin = WebSecurityOrigin::create(SecurityOrigin::createFromDatabaseIdentifier(originDetails.originIdentifier));
+        for (const LocalStorageDetails& originDetails : storageDetails) {
+            HashMap<String, RefPtr<API::Object>> detailsMap;
 
-        detailsMap.set(WebKeyValueStorageManager::originKey(), origin);
-        if (originDetails.creationTime)
-            detailsMap.set(WebKeyValueStorageManager::creationTimeKey(), API::Double::create(originDetails.creationTime.valueOr(0)));
-        if (originDetails.modificationTime)
-            detailsMap.set(WebKeyValueStorageManager::modificationTimeKey(), API::Double::create(originDetails.modificationTime.valueOr(0)));
+            RefPtr<API::Object> origin = WebSecurityOrigin::create(SecurityOrigin::createFromDatabaseIdentifier(originDetails.originIdentifier));
 
-        result.uncheckedAppend(ImmutableDictionary::create(WTF::move(detailsMap)));
-    }
+            detailsMap.set(WebKeyValueStorageManager::originKey(), origin);
+            if (originDetails.creationTime)
+                detailsMap.set(WebKeyValueStorageManager::creationTimeKey(), API::Double::create(originDetails.creationTime.valueOr(0)));
+            if (originDetails.modificationTime)
+                detailsMap.set(WebKeyValueStorageManager::modificationTimeKey(), API::Double::create(originDetails.modificationTime.valueOr(0)));
 
-    callback->performCallbackWithReturnValue(API::Array::create(WTF::move(result)).get());
-}
+            result.uncheckedAppend(ImmutableDictionary::create(WTF::move(detailsMap)));
 
-void WebKeyValueStorageManager::getStorageDetailsByOrigin(std::function<void (API::Array*, CallbackBase::Error)> callbackFunction)
-{
-    context()->storageManager().getStorageDetailsByOrigin(RunLoop::main(), ArrayCallback::create(WTF::move(callbackFunction)).leakRef(), didGetStorageDetailsByOrigin);
+            callbackFunction(API::Array::create(WTF::move(result)).get(), CallbackBase::Error::None);
+        }
+    });
 }
 
 void WebKeyValueStorageManager::deleteEntriesForOrigin(WebSecurityOrigin* origin)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to