Title: [194570] trunk/Source/WebKit2
Revision
194570
Author
achristen...@apple.com
Date
2016-01-04 18:25:53 -0800 (Mon, 04 Jan 2016)

Log Message

Use unique_ptr for NetworkDataTasks and references for NetworkSessionTaskClients
https://bugs.webkit.org/show_bug.cgi?id=152724

Reviewed by Andy Estes.

There is no reason to have a NetworkSessionTaskClient* instead of a 
NetworkSessionTaskClient& just so we can clear it in the NetworkLoad destructor, 
which immediately calls ~NetworkDataTask.
Also, NetworkDataTasks are owned only by the NetworkLoad, so there's no reason to refcount them.

* NetworkProcess/Downloads/Download.h:
* NetworkProcess/Downloads/DownloadManager.h:
* NetworkProcess/NetworkLoad.cpp:
(WebKit::NetworkLoad::~NetworkLoad):
* NetworkProcess/NetworkLoad.h:
* NetworkProcess/NetworkSession.h:
(WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient):
(WebKit::NetworkDataTask::client):
(WebKit::NetworkDataTask::downloadID):
(WebKit::NetworkDataTask::setDownloadID):
(WebKit::NetworkDataTask::clearClient): Deleted.
* NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
(-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
(-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
(-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
(-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveData:]):
(-[WKNetworkSessionDelegate URLSession:downloadTask:didFinishDownloadingToURL:]):
(-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
(WebKit::NetworkSession::~NetworkSession):
(WebKit::NetworkSession::createDataTaskWithRequest):
(WebKit::NetworkSession::dataTaskForIdentifier):
(WebKit::NetworkDataTask::NetworkDataTask):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (194569 => 194570)


--- trunk/Source/WebKit2/ChangeLog	2016-01-05 02:16:48 UTC (rev 194569)
+++ trunk/Source/WebKit2/ChangeLog	2016-01-05 02:25:53 UTC (rev 194570)
@@ -1,5 +1,41 @@
 2016-01-04  Alex Christensen  <achristen...@webkit.org>
 
+        Use unique_ptr for NetworkDataTasks and references for NetworkSessionTaskClients
+        https://bugs.webkit.org/show_bug.cgi?id=152724
+
+        Reviewed by Andy Estes.
+
+        There is no reason to have a NetworkSessionTaskClient* instead of a 
+        NetworkSessionTaskClient& just so we can clear it in the NetworkLoad destructor, 
+        which immediately calls ~NetworkDataTask.
+        Also, NetworkDataTasks are owned only by the NetworkLoad, so there's no reason to refcount them.
+
+        * NetworkProcess/Downloads/Download.h:
+        * NetworkProcess/Downloads/DownloadManager.h:
+        * NetworkProcess/NetworkLoad.cpp:
+        (WebKit::NetworkLoad::~NetworkLoad):
+        * NetworkProcess/NetworkLoad.h:
+        * NetworkProcess/NetworkSession.h:
+        (WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient):
+        (WebKit::NetworkDataTask::client):
+        (WebKit::NetworkDataTask::downloadID):
+        (WebKit::NetworkDataTask::setDownloadID):
+        (WebKit::NetworkDataTask::clearClient): Deleted.
+        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
+        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
+        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
+        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
+        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
+        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveData:]):
+        (-[WKNetworkSessionDelegate URLSession:downloadTask:didFinishDownloadingToURL:]):
+        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
+        (WebKit::NetworkSession::~NetworkSession):
+        (WebKit::NetworkSession::createDataTaskWithRequest):
+        (WebKit::NetworkSession::dataTaskForIdentifier):
+        (WebKit::NetworkDataTask::NetworkDataTask):
+
+2016-01-04  Alex Christensen  <achristen...@webkit.org>
+
         Progress towards implementing downloads with NetworkSession
         https://bugs.webkit.org/show_bug.cgi?id=152716
 

Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/Download.h (194569 => 194570)


--- trunk/Source/WebKit2/NetworkProcess/Downloads/Download.h	2016-01-05 02:16:48 UTC (rev 194569)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/Download.h	2016-01-05 02:25:53 UTC (rev 194570)
@@ -69,7 +69,6 @@
 
 class DownloadAuthenticationClient;
 class DownloadManager;
-class NetworkDataTask;
 class NetworkSession;
 class WebPage;
 

Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.h (194569 => 194570)


--- trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.h	2016-01-05 02:16:48 UTC (rev 194569)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.h	2016-01-05 02:25:53 UTC (rev 194570)
@@ -51,7 +51,6 @@
 
 class AuthenticationManager;
 class Download;
-class NetworkDataTask;
 class WebPage;
 
 class DownloadManager {

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp (194569 => 194570)


--- trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp	2016-01-05 02:16:48 UTC (rev 194569)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp	2016-01-05 02:25:53 UTC (rev 194570)
@@ -65,7 +65,6 @@
 #if USE(NETWORK_SESSION)
     if (m_responseCompletionHandler)
         m_responseCompletionHandler(PolicyIgnore);
-    m_task->clearClient();
 #else
     if (m_handle)
         m_handle->clearClient();

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h (194569 => 194570)


--- trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h	2016-01-05 02:16:48 UTC (rev 194569)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h	2016-01-05 02:25:53 UTC (rev 194570)
@@ -120,7 +120,7 @@
     const NetworkLoadParameters m_parameters;
     RefPtr<RemoteNetworkingContext> m_networkingContext;
 #if USE(NETWORK_SESSION)
-    Ref<NetworkDataTask> m_task;
+    std::unique_ptr<NetworkDataTask> m_task;
     WebCore::AuthenticationChallenge m_challenge;
     ChallengeCompletionHandler m_challengeCompletionHandler;
     ResponseCompletionHandler m_responseCompletionHandler;

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkSession.h (194569 => 194570)


--- trunk/Source/WebKit2/NetworkProcess/NetworkSession.h	2016-01-05 02:16:48 UTC (rev 194569)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkSession.h	2016-01-05 02:25:53 UTC (rev 194570)
@@ -77,9 +77,15 @@
     virtual ~NetworkSessionTaskClient() { }
 };
 
-class NetworkDataTask : public RefCounted<NetworkDataTask> {
+class NetworkDataTask {
     friend class NetworkSession;
 public:
+#if PLATFORM(COCOA)
+    explicit NetworkDataTask(NetworkSession&, NetworkSessionTaskClient&, RetainPtr<NSURLSessionDataTask>&&);
+#else
+    explicit NetworkDataTask(NetworkSession&, NetworkSessionTaskClient&);
+#endif
+
     void cancel();
     void resume();
 
@@ -88,8 +94,7 @@
 
     ~NetworkDataTask();
 
-    NetworkSessionTaskClient* client() { return m_client; }
-    void clearClient() { m_client = nullptr; }
+    NetworkSessionTaskClient& client() { return m_client; }
 
     DownloadID downloadID() { return m_downloadID; }
     void setDownloadID(DownloadID downloadID)
@@ -101,13 +106,10 @@
     
 private:
     NetworkSession& m_session;
-    NetworkSessionTaskClient* m_client;
+    NetworkSessionTaskClient& m_client;
     DownloadID m_downloadID;
 #if PLATFORM(COCOA)
-    explicit NetworkDataTask(NetworkSession&, NetworkSessionTaskClient&, RetainPtr<NSURLSessionDataTask>&&);
     RetainPtr<NSURLSessionDataTask> m_task;
-#else
-    explicit NetworkDataTask(NetworkSession&, NetworkSessionTaskClient&);
 #endif
 };
 
@@ -123,7 +125,7 @@
 
     static NetworkSession& defaultSession();
     
-    Ref<NetworkDataTask> createDataTaskWithRequest(const WebCore::ResourceRequest&, NetworkSessionTaskClient&);
+    std::unique_ptr<NetworkDataTask> createDataTaskWithRequest(const WebCore::ResourceRequest&, NetworkSessionTaskClient&);
 
     NetworkDataTask* dataTaskForIdentifier(NetworkDataTask::TaskIdentifier);
 

Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm (194569 => 194570)


--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm	2016-01-05 02:16:48 UTC (rev 194569)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm	2016-01-05 02:25:53 UTC (rev 194570)
@@ -94,66 +94,50 @@
 
 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest *))completionHandler
 {
-    if (auto* networkingTask = _session->dataTaskForIdentifier(task.taskIdentifier)) {
-        if (auto* client = networkingTask->client()) {
-            auto completionHandlerCopy = Block_copy(completionHandler);
-            client->willPerformHTTPRedirection(response, request, [completionHandlerCopy](const WebCore::ResourceRequest& request)
-                {
-                    completionHandlerCopy(request.nsURLRequest(WebCore::UpdateHTTPBody));
-                    Block_release(completionHandlerCopy);
-                }
-            );
-        }
+    if (auto* networkDataTask = _session->dataTaskForIdentifier(task.taskIdentifier)) {
+        auto completionHandlerCopy = Block_copy(completionHandler);
+        networkDataTask->client().willPerformHTTPRedirection(response, request, [completionHandlerCopy](const WebCore::ResourceRequest& request) {
+            completionHandlerCopy(request.nsURLRequest(WebCore::UpdateHTTPBody));
+            Block_release(completionHandlerCopy);
+        });
     }
 }
 
 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
 {
-    if (auto* networkingTask = _session->dataTaskForIdentifier(task.taskIdentifier)) {
-        if (auto* client = networkingTask->client()) {
-            auto completionHandlerCopy = Block_copy(completionHandler);
-            client->didReceiveChallenge(challenge, [completionHandlerCopy](WebKit::AuthenticationChallengeDisposition disposition, const WebCore::Credential& credential)
-                {
-                    completionHandlerCopy(toNSURLSessionAuthChallengeDisposition(disposition), credential.nsCredential());
-                    Block_release(completionHandlerCopy);
-                }
-            );
-        }
+    if (auto* networkDataTask = _session->dataTaskForIdentifier(task.taskIdentifier)) {
+        auto completionHandlerCopy = Block_copy(completionHandler);
+        networkDataTask->client().didReceiveChallenge(challenge, [completionHandlerCopy](WebKit::AuthenticationChallengeDisposition disposition, const WebCore::Credential& credential) {
+            completionHandlerCopy(toNSURLSessionAuthChallengeDisposition(disposition), credential.nsCredential());
+            Block_release(completionHandlerCopy);
+        });
     }
 }
 
 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
 {
-    if (auto* networkingTask = _session->dataTaskForIdentifier(task.taskIdentifier)) {
-        if (auto* client = networkingTask->client())
-            client->didCompleteWithError(error);
-    }
+    if (auto* networkDataTask = _session->dataTaskForIdentifier(task.taskIdentifier))
+        networkDataTask->client().didCompleteWithError(error);
 }
 
 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler
 {
-    if (auto* networkingTask = _session->dataTaskForIdentifier(dataTask.taskIdentifier)) {
-        if (auto* client = networkingTask->client()) {
-            ASSERT(isMainThread());
-            WebCore::ResourceResponse resourceResponse(response);
-            copyTimingData([dataTask _timingData], resourceResponse.resourceLoadTiming());
-            auto completionHandlerCopy = Block_copy(completionHandler);
-            client->didReceiveResponse(resourceResponse, [completionHandlerCopy](WebCore::PolicyAction policyAction)
-                {
-                    completionHandlerCopy(toNSURLSessionResponseDisposition(policyAction));
-                    Block_release(completionHandlerCopy);
-                }
-            );
-        }
+    if (auto* networkDataTask = _session->dataTaskForIdentifier(dataTask.taskIdentifier)) {
+        ASSERT(isMainThread());
+        WebCore::ResourceResponse resourceResponse(response);
+        copyTimingData([dataTask _timingData], resourceResponse.resourceLoadTiming());
+        auto completionHandlerCopy = Block_copy(completionHandler);
+        networkDataTask->client().didReceiveResponse(resourceResponse, [completionHandlerCopy](WebCore::PolicyAction policyAction) {
+            completionHandlerCopy(toNSURLSessionResponseDisposition(policyAction));
+            Block_release(completionHandlerCopy);
+        });
     }
 }
 
 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
 {
-    if (auto* networkingTask = _session->dataTaskForIdentifier(dataTask.taskIdentifier)) {
-        if (auto* client = networkingTask->client())
-            client->didReceiveData(WebCore::SharedBuffer::wrapNSData(data));
-    }
+    if (auto* networkDataTask = _session->dataTaskForIdentifier(dataTask.taskIdentifier))
+        networkDataTask->client().didReceiveData(WebCore::SharedBuffer::wrapNSData(data));
 }
 
 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
@@ -188,8 +172,7 @@
         download->didReceiveResponse([downloadTask response]);
         downloadManager.dataTaskBecameDownloadTask(downloadID, WTFMove(download));
 
-        if (auto* client = networkDataTask->client())
-            client->didBecomeDownload();
+        networkDataTask->client().didBecomeDownload();
 
         _session->addDownloadID([downloadTask taskIdentifier], downloadID);
     }
@@ -241,9 +224,9 @@
     [m_session invalidateAndCancel];
 }
 
-Ref<NetworkDataTask> NetworkSession::createDataTaskWithRequest(const WebCore::ResourceRequest& request, NetworkSessionTaskClient& client)
+std::unique_ptr<NetworkDataTask> NetworkSession::createDataTaskWithRequest(const WebCore::ResourceRequest& request, NetworkSessionTaskClient& client)
 {
-    return adoptRef(*new NetworkDataTask(*this, client, [m_session dataTaskWithRequest:request.nsURLRequest(WebCore::UpdateHTTPBody)]));
+    return std::make_unique<NetworkDataTask>(*this, client, [m_session dataTaskWithRequest:request.nsURLRequest(WebCore::UpdateHTTPBody)]);
 }
 
 NetworkDataTask* NetworkSession::dataTaskForIdentifier(NetworkDataTask::TaskIdentifier taskIdentifier)
@@ -277,7 +260,7 @@
 
 NetworkDataTask::NetworkDataTask(NetworkSession& session, NetworkSessionTaskClient& client, RetainPtr<NSURLSessionDataTask>&& task)
     : m_session(session)
-    , m_client(&client)
+    , m_client(client)
     , m_task(WTFMove(task))
 {
     ASSERT(!m_session.m_dataTaskMap.contains(taskIdentifier()));
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to