- 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()));