Changeset 256857 in webkit
- Timestamp:
- Feb 18, 2020 3:09:01 PM (4 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r256853 r256857 1 2020-02-18 Youenn Fablet <youenn@apple.com> 2 3 NetworkDataTask should not expect its session wrapper to be always live 4 https://bugs.webkit.org/show_bug.cgi?id=207903 5 rdar://problem/59291486 6 7 Reviewed by Alex Christensen. 8 9 NetworkDataTaskCocoa should take a weak pointer to its session wrapper. 10 If the session wrapper is still valid, then we can remove the task from the session wrapper map. 11 We cannot guarantee session wrapper is valid since NetworkDataTask is ref counted. 12 13 * NetworkProcess/cocoa/NetworkDataTaskCocoa.h: 14 * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: 15 (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa): 16 (WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa): 17 1 18 2020-02-18 Antti Koivisto <antti@apple.com> 2 19 -
trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h
r255846 r256857 91 91 bool isAlwaysOnLoggingAllowed() const; 92 92 93 SessionWrapper&m_sessionWrapper;93 WeakPtr<SessionWrapper> m_sessionWrapper; 94 94 RefPtr<SandboxExtension> m_sandboxExtension; 95 95 RetainPtr<NSURLSessionDataTask> m_task; -
trunk/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm
r255846 r256857 231 231 NetworkDataTaskCocoa::NetworkDataTaskCocoa(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& requestWithCredentials, WebCore::FrameIdentifier frameID, WebCore::PageIdentifier pageID, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy shouldContentEncodingSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly shouldPreconnectOnly, bool dataTaskIsForMainFrameNavigation, bool dataTaskIsForMainResourceNavigationForAnyFrame, Optional<NetworkActivityTracker> networkActivityTracker) 232 232 : NetworkDataTask(session, client, requestWithCredentials, storedCredentialsPolicy, shouldClearReferrerOnHTTPSToHTTPRedirect, dataTaskIsForMainFrameNavigation) 233 , m_sessionWrapper( static_cast<NetworkSessionCocoa&>(session).sessionWrapperForTask(requestWithCredentials, storedCredentialsPolicy))233 , m_sessionWrapper(makeWeakPtr(static_cast<NetworkSessionCocoa&>(session).sessionWrapperForTask(requestWithCredentials, storedCredentialsPolicy))) 234 234 , m_frameID(frameID) 235 235 , m_pageID(pageID) … … 278 278 applySniffingPoliciesAndBindRequestToInferfaceIfNeeded(nsRequest, shouldContentSniff == WebCore::ContentSniffingPolicy::SniffContent && !url.isLocalFile(), shouldContentEncodingSniff == WebCore::ContentEncodingSniffingPolicy::Sniff); 279 279 280 m_task = [m_sessionWrapper .session dataTaskWithRequest:nsRequest];280 m_task = [m_sessionWrapper->session dataTaskWithRequest:nsRequest]; 281 281 282 282 BEGIN_SIGNPOST(m_task, "%{public}s pri: %f preconnect: %d", url.string().ascii().data(), toNSURLSessionTaskPriority(request.priority()), shouldPreconnectOnly == PreconnectOnly::Yes); 283 283 284 RELEASE_ASSERT(!m_sessionWrapper .dataTaskMap.contains([m_task taskIdentifier]));285 m_sessionWrapper .dataTaskMap.add([m_task taskIdentifier], this);284 RELEASE_ASSERT(!m_sessionWrapper->dataTaskMap.contains([m_task taskIdentifier])); 285 m_sessionWrapper->dataTaskMap.add([m_task taskIdentifier], this); 286 286 LOG(NetworkSession, "%llu Creating NetworkDataTask with URL %s", [m_task taskIdentifier], nsRequest.URL.absoluteString.UTF8String); 287 287 … … 319 319 NetworkDataTaskCocoa::~NetworkDataTaskCocoa() 320 320 { 321 if (!m_task || !m_session )321 if (!m_task || !m_sessionWrapper) 322 322 return; 323 323 324 RELEASE_ASSERT(m_sessionWrapper .dataTaskMap.get([m_task taskIdentifier]) == this);325 m_sessionWrapper .dataTaskMap.remove([m_task taskIdentifier]);324 RELEASE_ASSERT(m_sessionWrapper->dataTaskMap.get([m_task taskIdentifier]) == this); 325 m_sessionWrapper->dataTaskMap.remove([m_task taskIdentifier]); 326 326 } 327 327
Note: See TracChangeset
for help on using the changeset viewer.