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)