Title: [201602] trunk/Source
Revision
201602
Author
[email protected]
Date
2016-06-02 10:59:56 -0700 (Thu, 02 Jun 2016)

Log Message

Modernize various lambda captures
https://bugs.webkit.org/show_bug.cgi?id=158292

Reviewed by Brady Eidson.

Modernize various lambda captures, especially the ones unnecessarily
allocating objects on the heap and destroying them in the lambda.

Source/WebCore:

* Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
(WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
(WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
(WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
(WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
(WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
(WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
(WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageError):
(WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
(WebCore::ThreadableWebSocketChannelClientWrapper::resume): Deleted.
* Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
(WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
* bindings/js/JSCallbackData.h:
(WebCore::DeleteCallbackDataTask::DeleteCallbackDataTask):
* loader/WorkerThreadableLoader.cpp:
(WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
(WebCore::WorkerThreadableLoader::MainThreadBridge::destroy):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didSendData):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didFailAccessControlCheck):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didFailRedirectCheck):
(WebCore::WorkerThreadableLoader::MainThreadBridge::cancel): Deleted.

Source/WebKit2:

* NetworkProcess/NetworkProcess.cpp:
(WebKit::fetchDiskCacheEntries):
(WebKit::clearDiskCacheEntries):
(WebKit::NetworkProcess::fetchWebsiteData): Deleted.
* NetworkProcess/cache/NetworkCache.cpp:
(WebKit::NetworkCache::Cache::traverse):
* NetworkProcess/cache/NetworkCache.h:
* NetworkProcess/cache/NetworkCacheStorage.cpp:
(WebKit::NetworkCache::Storage::TraverseOperation::TraverseOperation):
* NetworkProcess/cache/NetworkCacheStorage.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (201601 => 201602)


--- trunk/Source/WebCore/ChangeLog	2016-06-02 17:50:25 UTC (rev 201601)
+++ trunk/Source/WebCore/ChangeLog	2016-06-02 17:59:56 UTC (rev 201602)
@@ -1,3 +1,39 @@
+2016-06-02  Chris Dumez  <[email protected]>
+
+        Modernize various lambda captures
+        https://bugs.webkit.org/show_bug.cgi?id=158292
+
+        Reviewed by Brady Eidson.
+
+        Modernize various lambda captures, especially the ones unnecessarily
+        allocating objects on the heap and destroying them in the lambda.
+
+        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageError):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::resume): Deleted.
+        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
+        (WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
+        * bindings/js/JSCallbackData.h:
+        (WebCore::DeleteCallbackDataTask::DeleteCallbackDataTask):
+        * loader/WorkerThreadableLoader.cpp:
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::destroy):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didSendData):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailAccessControlCheck):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailRedirectCheck):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::cancel): Deleted.
+
 2016-06-02  Adam Bergkvist  <[email protected]>
 
         WebRTC: Update RTCPeerConnection.addTrack() to create (or reuse) an RTCRtpTransceiver

Modified: trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp (201601 => 201602)


--- trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp	2016-06-02 17:50:25 UTC (rev 201601)
+++ trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp	2016-06-02 17:59:56 UTC (rev 201602)
@@ -155,11 +155,9 @@
 
 void ThreadableWebSocketChannelClientWrapper::didConnect()
 {
-    ref();
-    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this] (ScriptExecutionContext&) {
+    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this, protectedThis = Ref<ThreadableWebSocketChannelClientWrapper>(*this)] (ScriptExecutionContext&) {
         if (m_client)
             m_client->didConnect();
-        deref();
     }));
 
     if (!m_suspended)
@@ -168,12 +166,9 @@
 
 void ThreadableWebSocketChannelClientWrapper::didReceiveMessage(const String& message)
 {
-    ref();
-    String messageCopy = message.isolatedCopy();
-    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this, message] (ScriptExecutionContext&) {
+    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this, protectedThis = Ref<ThreadableWebSocketChannelClientWrapper>(*this), message = message.isolatedCopy()] (ScriptExecutionContext&) {
         if (m_client)
             m_client->didReceiveMessage(message);
-        deref();
     }));
 
     if (!m_suspended)
@@ -182,13 +177,9 @@
 
 void ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData(Vector<uint8_t>&& binaryData)
 {
-    ref();
-    Vector<uint8_t>* capturedData = new Vector<uint8_t>(WTFMove(binaryData));
-    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this, capturedData] (ScriptExecutionContext&) {
+    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this, protectedThis = Ref<ThreadableWebSocketChannelClientWrapper>(*this), binaryData = WTFMove(binaryData)] (ScriptExecutionContext&) mutable {
         if (m_client)
-            m_client->didReceiveBinaryData(WTFMove(*capturedData));
-        delete capturedData;
-        deref();
+            m_client->didReceiveBinaryData(WTFMove(binaryData));
     }));
 
     if (!m_suspended)
@@ -197,11 +188,9 @@
 
 void ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount(unsigned long bufferedAmount)
 {
-    ref();
-    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this, bufferedAmount] (ScriptExecutionContext&) {
+    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this, protectedThis = Ref<ThreadableWebSocketChannelClientWrapper>(*this), bufferedAmount] (ScriptExecutionContext&) {
         if (m_client)
             m_client->didUpdateBufferedAmount(bufferedAmount);
-        deref();
     }));
 
     if (!m_suspended)
@@ -210,11 +199,9 @@
 
 void ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake()
 {
-    ref();
-    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this] (ScriptExecutionContext&) {
+    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this, protectedThis = Ref<ThreadableWebSocketChannelClientWrapper>(*this)] (ScriptExecutionContext&) {
         if (m_client)
             m_client->didStartClosingHandshake();
-        deref();
     }));
 
     if (!m_suspended)
@@ -223,13 +210,9 @@
 
 void ThreadableWebSocketChannelClientWrapper::didClose(unsigned long unhandledBufferedAmount, WebSocketChannelClient::ClosingHandshakeCompletionStatus closingHandshakeCompletion, unsigned short code, const String& reason)
 {
-    ref();
-    String reasonCopy = reason.isolatedCopy();
-    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>(
-        [this, unhandledBufferedAmount, closingHandshakeCompletion, code, reasonCopy] (ScriptExecutionContext&) {
+    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this, protectedThis = Ref<ThreadableWebSocketChannelClientWrapper>(*this), unhandledBufferedAmount, closingHandshakeCompletion, code, reason = reason.isolatedCopy()] (ScriptExecutionContext&) {
             if (m_client)
-                m_client->didClose(unhandledBufferedAmount, closingHandshakeCompletion, code, reasonCopy);
-            deref();
+                m_client->didClose(unhandledBufferedAmount, closingHandshakeCompletion, code, reason);
         }));
 
     if (!m_suspended)
@@ -238,11 +221,9 @@
 
 void ThreadableWebSocketChannelClientWrapper::didReceiveMessageError()
 {
-    ref();
-    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this] (ScriptExecutionContext&) {
+    m_pendingTasks.append(std::make_unique<ScriptExecutionContext::Task>([this, protectedThis = Ref<ThreadableWebSocketChannelClientWrapper>(*this)] (ScriptExecutionContext&) {
         if (m_client)
             m_client->didReceiveMessageError();
-        deref();
     }));
 
     if (!m_suspended)
@@ -267,11 +248,9 @@
     if (!m_syncMethodDone) {
         // When a synchronous operation is in progress (i.e. the execution stack contains
         // WorkerThreadableWebSocketChannel::waitForMethodCompletion()), we cannot invoke callbacks in this run loop.
-        ref();
-        m_context->postTask([this] (ScriptExecutionContext& context) {
+        m_context->postTask([this, protectedThis = Ref<ThreadableWebSocketChannelClientWrapper>(*this)] (ScriptExecutionContext& context) {
             ASSERT_UNUSED(context, context.isWorkerGlobalScope());
             processPendingTasks();
-            deref();
         });
         return;
     }

Modified: trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp (201601 => 201602)


--- trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp	2016-06-02 17:50:25 UTC (rev 201601)
+++ trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp	2016-06-02 17:59:56 UTC (rev 201602)
@@ -544,10 +544,9 @@
 {
     clearClientWrapper();
     if (m_peer) {
-        m_loaderProxy.postTaskToLoader([peer = m_peer] (ScriptExecutionContext& context) {
+        m_loaderProxy.postTaskToLoader([peer = std::unique_ptr<Peer>(m_peer)] (ScriptExecutionContext& context) {
             ASSERT(isMainThread());
             ASSERT_UNUSED(context, context.isDocument());
-            delete peer;
         });
         m_peer = nullptr;
     }

Modified: trunk/Source/WebCore/bindings/js/JSCallbackData.h (201601 => 201602)


--- trunk/Source/WebCore/bindings/js/JSCallbackData.h	2016-06-02 17:50:25 UTC (rev 201601)
+++ trunk/Source/WebCore/bindings/js/JSCallbackData.h	2016-06-02 17:59:56 UTC (rev 201602)
@@ -116,8 +116,7 @@
 public:
     template <typename CallbackDataType>
     explicit DeleteCallbackDataTask(CallbackDataType* data)
-        : ScriptExecutionContext::Task(ScriptExecutionContext::Task::CleanupTask, [data] (ScriptExecutionContext&) {
-            delete data;
+        : ScriptExecutionContext::Task(ScriptExecutionContext::Task::CleanupTask, [data = "" (ScriptExecutionContext&) {
         })
     {
     }

Modified: trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp (201601 => 201602)


--- trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp	2016-06-02 17:50:25 UTC (rev 201601)
+++ trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp	2016-06-02 17:59:56 UTC (rev 201602)
@@ -117,10 +117,9 @@
     clearClientWrapper();
 
     // "delete this" and m_mainThreadLoader::deref() on the worker object's thread.
-    m_loaderProxy.postTaskToLoader([this] (ScriptExecutionContext& context) {
+    m_loaderProxy.postTaskToLoader([self = std::unique_ptr<WorkerThreadableLoader::MainThreadBridge>(this)] (ScriptExecutionContext& context) {
         ASSERT(isMainThread());
         ASSERT_UNUSED(context, context.isDocument());
-        delete this;
     });
 }
 
@@ -154,81 +153,71 @@
 
 void WorkerThreadableLoader::MainThreadBridge::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
 {
-    RefPtr<ThreadableLoaderClientWrapper> workerClientWrapper = m_workerClientWrapper;
-    m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper, bytesSent, totalBytesToBeSent] (ScriptExecutionContext& context) {
+    Ref<ThreadableLoaderClientWrapper> protectedWorkerClientWrapper = *m_workerClientWrapper;
+    m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = WTFMove(protectedWorkerClientWrapper), bytesSent, totalBytesToBeSent] (ScriptExecutionContext& context) mutable {
         ASSERT_UNUSED(context, context.isWorkerGlobalScope());
-        workerClientWrapper->didSendData(bytesSent, totalBytesToBeSent);
+        protectedWorkerClientWrapper->didSendData(bytesSent, totalBytesToBeSent);
     }, m_taskMode);
 }
 
 void WorkerThreadableLoader::MainThreadBridge::didReceiveResponse(unsigned long identifier, const ResourceResponse& response)
 {
-    RefPtr<ThreadableLoaderClientWrapper> workerClientWrapper = m_workerClientWrapper;
-    auto* responseData = response.copyData().release();
-    if (!m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper, identifier, responseData] (ScriptExecutionContext& context) {
+    Ref<ThreadableLoaderClientWrapper> protectedWorkerClientWrapper = *m_workerClientWrapper;
+    m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = WTFMove(protectedWorkerClientWrapper), identifier, responseData = response.copyData()] (ScriptExecutionContext& context) mutable {
         ASSERT_UNUSED(context, context.isWorkerGlobalScope());
-        auto response(ResourceResponse::adopt(std::unique_ptr<CrossThreadResourceResponseData>(responseData)));
-        workerClientWrapper->didReceiveResponse(identifier, *response);
-    }, m_taskMode))
-        delete responseData;
+        auto response(ResourceResponse::adopt(WTFMove(responseData)));
+        protectedWorkerClientWrapper->didReceiveResponse(identifier, *response);
+    }, m_taskMode);
 }
 
 void WorkerThreadableLoader::MainThreadBridge::didReceiveData(const char* data, int dataLength)
 {
-    RefPtr<ThreadableLoaderClientWrapper> workerClientWrapper = m_workerClientWrapper;
-    Vector<char>* vectorPtr = new Vector<char>(dataLength);
-    memcpy(vectorPtr->data(), data, dataLength);
-    if (!m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper, vectorPtr] (ScriptExecutionContext& context) {
+    Ref<ThreadableLoaderClientWrapper> protectedWorkerClientWrapper = *m_workerClientWrapper;
+    Vector<char> vector(dataLength);
+    memcpy(vector.data(), data, dataLength);
+    m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = WTFMove(protectedWorkerClientWrapper), vector = WTFMove(vector)] (ScriptExecutionContext& context) mutable {
         ASSERT_UNUSED(context, context.isWorkerGlobalScope());
-        workerClientWrapper->didReceiveData(vectorPtr->data(), vectorPtr->size());
-        delete vectorPtr;
-    }, m_taskMode))
-        delete vectorPtr;
+        protectedWorkerClientWrapper->didReceiveData(vector.data(), vector.size());
+    }, m_taskMode);
 }
 
 void WorkerThreadableLoader::MainThreadBridge::didFinishLoading(unsigned long identifier, double finishTime)
 {
     m_loadingFinished = true;
-    RefPtr<ThreadableLoaderClientWrapper> workerClientWrapper = m_workerClientWrapper;
-    m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper, identifier, finishTime] (ScriptExecutionContext& context) {
+    Ref<ThreadableLoaderClientWrapper> protectedWorkerClientWrapper = *m_workerClientWrapper;
+    m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = WTFMove(protectedWorkerClientWrapper), identifier, finishTime] (ScriptExecutionContext& context) mutable {
         ASSERT_UNUSED(context, context.isWorkerGlobalScope());
-        workerClientWrapper->didFinishLoading(identifier, finishTime);
+        protectedWorkerClientWrapper->didFinishLoading(identifier, finishTime);
     }, m_taskMode);
 }
 
 void WorkerThreadableLoader::MainThreadBridge::didFail(const ResourceError& error)
 {
     m_loadingFinished = true;
-    RefPtr<ThreadableLoaderClientWrapper> workerClientWrapper = m_workerClientWrapper;
-    ResourceError* capturedError = new ResourceError(error.copy());
-    if (!m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper, capturedError] (ScriptExecutionContext& context) {
+    Ref<ThreadableLoaderClientWrapper> protectedWorkerClientWrapper = *m_workerClientWrapper;
+    m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = WTFMove(protectedWorkerClientWrapper), error = error.copy()] (ScriptExecutionContext& context) mutable {
         ASSERT_UNUSED(context, context.isWorkerGlobalScope());
-        workerClientWrapper->didFail(*capturedError);
-        delete capturedError;
-    }, m_taskMode))
-        delete capturedError;
+        protectedWorkerClientWrapper->didFail(error);
+    }, m_taskMode);
 }
 
 void WorkerThreadableLoader::MainThreadBridge::didFailAccessControlCheck(const ResourceError& error)
 {
     m_loadingFinished = true;
-    RefPtr<ThreadableLoaderClientWrapper> workerClientWrapper = m_workerClientWrapper;
-    ResourceError* capturedError = new ResourceError(error.copy());
-    if (!m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper, capturedError] (ScriptExecutionContext& context) {
+    Ref<ThreadableLoaderClientWrapper> protectedWorkerClientWrapper = *m_workerClientWrapper;
+    m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = WTFMove(protectedWorkerClientWrapper), error = error.copy()] (ScriptExecutionContext& context) mutable {
         ASSERT_UNUSED(context, context.isWorkerGlobalScope());
-        workerClientWrapper->didFailAccessControlCheck(*capturedError);
-        delete capturedError;
-    }, m_taskMode))
-        delete capturedError;
+        protectedWorkerClientWrapper->didFailAccessControlCheck(error);
+    }, m_taskMode);
 }
 
 void WorkerThreadableLoader::MainThreadBridge::didFailRedirectCheck()
 {
     m_loadingFinished = true;
-    RefPtr<ThreadableLoaderClientWrapper> workerClientWrapper = m_workerClientWrapper;
-    m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper] (ScriptExecutionContext& context) {
+    Ref<ThreadableLoaderClientWrapper> protectedWorkerClientWrapper = *m_workerClientWrapper;
+    m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = WTFMove(protectedWorkerClientWrapper)] (ScriptExecutionContext& context) mutable {
         ASSERT_UNUSED(context, context.isWorkerGlobalScope());
-        workerClientWrapper->didFailRedirectCheck();
+        protectedWorkerClientWrapper->didFailRedirectCheck();
     }, m_taskMode);
 }
 

Modified: trunk/Source/WebKit2/ChangeLog (201601 => 201602)


--- trunk/Source/WebKit2/ChangeLog	2016-06-02 17:50:25 UTC (rev 201601)
+++ trunk/Source/WebKit2/ChangeLog	2016-06-02 17:59:56 UTC (rev 201602)
@@ -1,5 +1,26 @@
 2016-06-02  Chris Dumez  <[email protected]>
 
+        Modernize various lambda captures
+        https://bugs.webkit.org/show_bug.cgi?id=158292
+
+        Reviewed by Brady Eidson.
+
+        Modernize various lambda captures, especially the ones unnecessarily
+        allocating objects on the heap and destroying them in the lambda.
+
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::fetchDiskCacheEntries):
+        (WebKit::clearDiskCacheEntries):
+        (WebKit::NetworkProcess::fetchWebsiteData): Deleted.
+        * NetworkProcess/cache/NetworkCache.cpp:
+        (WebKit::NetworkCache::Cache::traverse):
+        * NetworkProcess/cache/NetworkCache.h:
+        * NetworkProcess/cache/NetworkCacheStorage.cpp:
+        (WebKit::NetworkCache::Storage::TraverseOperation::TraverseOperation):
+        * NetworkProcess/cache/NetworkCacheStorage.h:
+
+2016-06-02  Chris Dumez  <[email protected]>
+
         Speculative revalidated request returns 200 instead of 304
         https://bugs.webkit.org/show_bug.cgi?id=158256
 

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (201601 => 201602)


--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp	2016-06-02 17:50:25 UTC (rev 201601)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp	2016-06-02 17:59:56 UTC (rev 201602)
@@ -308,32 +308,26 @@
         handler();
 }
 
-static void fetchDiskCacheEntries(SessionID sessionID, OptionSet<WebsiteDataFetchOption> fetchOptions, std::function<void (Vector<WebsiteData::Entry>)> completionHandler)
+static void fetchDiskCacheEntries(SessionID sessionID, OptionSet<WebsiteDataFetchOption> fetchOptions, NoncopyableFunction<void (Vector<WebsiteData::Entry>)>&& completionHandler)
 {
 #if ENABLE(NETWORK_CACHE)
     if (NetworkCache::singleton().isEnabled()) {
-        auto* originsAndSizes = new HashMap<RefPtr<SecurityOrigin>, uint64_t>();
-
-        NetworkCache::singleton().traverse([fetchOptions, completionHandler, originsAndSizes](auto* traversalEntry) {
+        HashMap<RefPtr<SecurityOrigin>, uint64_t> originsAndSizes;
+        NetworkCache::singleton().traverse([fetchOptions, completionHandler = WTFMove(completionHandler), originsAndSizes = WTFMove(originsAndSizes)](auto* traversalEntry) mutable {
             if (!traversalEntry) {
                 Vector<WebsiteData::Entry> entries;
 
-                for (auto& originAndSize : *originsAndSizes) {
-                    WebsiteData::Entry entry { originAndSize.key, WebsiteDataType::DiskCache, originAndSize.value };
+                for (auto& originAndSize : originsAndSizes)
+                    entries.append(WebsiteData::Entry { originAndSize.key, WebsiteDataType::DiskCache, originAndSize.value });
 
-                    entries.append(WTFMove(entry));
-                }
-
-                delete originsAndSizes;
-
-                RunLoop::main().dispatch([completionHandler, entries = WTFMove(entries)] {
+                RunLoop::main().dispatch([completionHandler = WTFMove(completionHandler), entries = WTFMove(entries)] {
                     completionHandler(entries);
                 });
 
                 return;
             }
 
-            auto result = originsAndSizes->add(SecurityOrigin::create(traversalEntry->entry.response().url()), 0);
+            auto result = originsAndSizes.add(SecurityOrigin::create(traversalEntry->entry.response().url()), 0);
 
             if (fetchOptions.contains(WebsiteDataFetchOption::ComputeSizes))
                 result.iterator->value += traversalEntry->entry.sourceStorageRecord().header.size() + traversalEntry->recordInfo.bodySize;
@@ -350,7 +344,7 @@
         entries.append(WebsiteData::Entry { WTFMove(origin), WebsiteDataType::DiskCache, 0 });
 #endif
 
-    RunLoop::main().dispatch([completionHandler, entries = WTFMove(entries)] {
+    RunLoop::main().dispatch([completionHandler = WTFMove(completionHandler), entries = WTFMove(entries)] {
         completionHandler(entries);
     });
 }
@@ -358,7 +352,7 @@
 void NetworkProcess::fetchWebsiteData(SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, uint64_t callbackID)
 {
     struct CallbackAggregator final : public RefCounted<CallbackAggregator> {
-        explicit CallbackAggregator(std::function<void (WebsiteData)> completionHandler)
+        explicit CallbackAggregator(NoncopyableFunction<void (WebsiteData)>&& completionHandler)
             : m_completionHandler(WTFMove(completionHandler))
         {
         }
@@ -372,11 +366,11 @@
             });
         }
 
-        std::function<void (WebsiteData)> m_completionHandler;
+        NoncopyableFunction<void (WebsiteData)> m_completionHandler;
         WebsiteData m_websiteData;
     };
 
-    RefPtr<CallbackAggregator> callbackAggregator = adoptRef(new CallbackAggregator([this, callbackID] (WebsiteData websiteData) {
+    auto callbackAggregator = adoptRef(*new CallbackAggregator([this, callbackID] (WebsiteData websiteData) {
         parentProcessConnection()->send(Messages::NetworkProcessProxy::DidFetchWebsiteData(callbackID, websiteData), 0);
     }));
 
@@ -386,7 +380,7 @@
     }
 
     if (websiteDataTypes.contains(WebsiteDataType::DiskCache)) {
-        fetchDiskCacheEntries(sessionID, fetchOptions, [callbackAggregator](auto entries) {
+        fetchDiskCacheEntries(sessionID, fetchOptions, [callbackAggregator = WTFMove(callbackAggregator)](auto entries) mutable {
             callbackAggregator->m_websiteData.entries.appendVector(entries);
         });
     }
@@ -418,31 +412,25 @@
     completionHandler();
 }
 
-static void clearDiskCacheEntries(const Vector<SecurityOriginData>& origins, std::function<void ()>&& completionHandler)
+static void clearDiskCacheEntries(const Vector<SecurityOriginData>& origins, NoncopyableFunction<void ()>&& completionHandler)
 {
 #if ENABLE(NETWORK_CACHE)
     if (NetworkCache::singleton().isEnabled()) {
-        auto* originsToDelete = new HashSet<RefPtr<SecurityOrigin>>();
-
+        HashSet<RefPtr<SecurityOrigin>> originsToDelete;
         for (auto& origin : origins)
-            originsToDelete->add(origin.securityOrigin());
+            originsToDelete.add(origin.securityOrigin());
 
-        auto* cacheKeysToDelete = new Vector<NetworkCache::Key>;
-
-        NetworkCache::singleton().traverse([completionHandler = WTFMove(completionHandler), originsToDelete, cacheKeysToDelete](auto* traversalEntry) mutable {
+        Vector<NetworkCache::Key> cacheKeysToDelete;
+        NetworkCache::singleton().traverse([completionHandler = WTFMove(completionHandler), originsToDelete = WTFMove(originsToDelete), cacheKeysToDelete = WTFMove(cacheKeysToDelete)](auto* traversalEntry) mutable {
             if (traversalEntry) {
-                if (originsToDelete->contains(SecurityOrigin::create(traversalEntry->entry.response().url())))
-                    cacheKeysToDelete->append(traversalEntry->entry.key());
+                if (originsToDelete.contains(SecurityOrigin::create(traversalEntry->entry.response().url())))
+                    cacheKeysToDelete.append(traversalEntry->entry.key());
                 return;
             }
 
-            delete originsToDelete;
-
-            for (auto& key : *cacheKeysToDelete)
+            for (auto& key : cacheKeysToDelete)
                 NetworkCache::singleton().remove(key);
 
-            delete cacheKeysToDelete;
-
             RunLoop::main().dispatch(WTFMove(completionHandler));
             return;
         });

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h (201601 => 201602)


--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h	2016-06-02 17:50:25 UTC (rev 201601)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h	2016-06-02 17:59:56 UTC (rev 201602)
@@ -36,6 +36,7 @@
 #include <memory>
 #include <wtf/Forward.h>
 #include <wtf/NeverDestroyed.h>
+#include <wtf/NoncopyableFunction.h>
 #include <wtf/RetainPtr.h>
 
 #if PLATFORM(IOS)

Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp (201601 => 201602)


--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp	2016-06-02 17:50:25 UTC (rev 201601)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp	2016-06-02 17:59:56 UTC (rev 201602)
@@ -521,7 +521,7 @@
     remove(makeCacheKey(request));
 }
 
-void Cache::traverse(std::function<void (const TraversalEntry*)>&& traverseHandler)
+void Cache::traverse(NoncopyableFunction<void (const TraversalEntry*)>&& traverseHandler)
 {
     ASSERT(isEnabled());
 

Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.h (201601 => 201602)


--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.h	2016-06-02 17:50:25 UTC (rev 201601)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.h	2016-06-02 17:59:56 UTC (rev 201602)
@@ -32,6 +32,7 @@
 #include "NetworkCacheStorage.h"
 #include "ShareableResource.h"
 #include <WebCore/ResourceResponse.h>
+#include <wtf/NoncopyableFunction.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
@@ -113,7 +114,7 @@
         const Entry& entry;
         const Storage::RecordInfo& recordInfo;
     };
-    void traverse(std::function<void (const TraversalEntry*)>&&);
+    void traverse(NoncopyableFunction<void (const TraversalEntry*)>&&);
     void remove(const Key&);
     void remove(const WebCore::ResourceRequest&);
 

Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp (201601 => 201602)


--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp	2016-06-02 17:50:25 UTC (rev 201601)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp	2016-06-02 17:59:56 UTC (rev 201602)
@@ -113,10 +113,10 @@
 struct Storage::TraverseOperation {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    TraverseOperation(const String& type, TraverseFlags flags, const TraverseHandler& handler)
+    TraverseOperation(const String& type, TraverseFlags flags, TraverseHandler&& handler)
         : type(type)
         , flags(flags)
-        , handler(handler)
+        , handler(WTFMove(handler))
     { }
 
     const String type;

Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h (201601 => 201602)


--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h	2016-06-02 17:50:25 UTC (rev 201601)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h	2016-06-02 17:59:56 UTC (rev 201602)
@@ -35,6 +35,7 @@
 #include <wtf/BloomFilter.h>
 #include <wtf/Deque.h>
 #include <wtf/HashSet.h>
+#include <wtf/NoncopyableFunction.h>
 #include <wtf/Optional.h>
 #include <wtf/WorkQueue.h>
 #include <wtf/text/WTFString.h>
@@ -78,7 +79,7 @@
         ShareCount = 1 << 1,
     };
     typedef unsigned TraverseFlags;
-    typedef std::function<void (const Record*, const RecordInfo&)> TraverseHandler;
+    typedef NoncopyableFunction<void (const Record*, const RecordInfo&)> TraverseHandler;
     // Null record signals end.
     void traverse(const String& type, TraverseFlags, TraverseHandler&&);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to