Changeset 201603 in webkit
- Timestamp:
- Jun 2, 2016, 11:17:47 AM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 14 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/loader/WorkerThreadableLoader.cpp (modified) (4 diffs)
-
WebCore/loader/cache/MemoryCache.cpp (modified) (1 diff)
-
WebCore/platform/network/ResourceErrorBase.cpp (modified) (1 diff)
-
WebCore/platform/network/ResourceErrorBase.h (modified) (3 diffs)
-
WebCore/platform/network/ResourceRequestBase.cpp (modified) (2 diffs)
-
WebCore/platform/network/ResourceRequestBase.h (modified) (1 diff)
-
WebCore/platform/network/ResourceResponseBase.cpp (modified) (1 diff)
-
WebCore/platform/network/ResourceResponseBase.h (modified) (4 diffs)
-
WebCore/platform/network/cf/ResourceError.h (modified) (3 diffs)
-
WebCore/platform/network/cf/ResourceRequest.h (modified) (2 diffs)
-
WebCore/platform/network/cf/ResourceResponse.h (modified) (1 diff)
-
WebKit2/ChangeLog (modified) (1 diff)
-
WebKit2/NetworkProcess/cache/NetworkCacheEntry.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r201602 r201603 1 2016-06-02 Brady Eidson <beidson@apple.com> 2 3 Overhaul cross-thread use of ResourceRequest, ResourceResponse, and ResourceError. 4 https://bugs.webkit.org/show_bug.cgi?id=158293 5 6 Reviewed by Darin Adler. 7 8 No new tests (Refactor, no behavior change). 9 10 * loader/WorkerThreadableLoader.cpp: 11 (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge): 12 (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse): 13 (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail): 14 (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailAccessControlCheck): 15 16 * loader/cache/MemoryCache.cpp: 17 (WebCore::MemoryCache::removeRequestFromSessionCaches): 18 19 * platform/network/ResourceErrorBase.cpp: 20 (WebCore::ResourceErrorBase::isolatedCopy): 21 (WebCore::ResourceErrorBase::copy): Deleted. 22 * platform/network/ResourceErrorBase.h: 23 24 * platform/network/ResourceRequestBase.cpp: 25 (WebCore::ResourceRequestBase::isolatedCopy): 26 (WebCore::ResourceRequestBase::setAsIsolatedCopy): 27 (WebCore::ResourceRequestBase::adopt): Deleted. 28 29 Made copyData private, and made "adopt" be "isolatedCopy". 30 Rest of the changes are all re-indenting the file. 31 * platform/network/ResourceRequestBase.h: 32 (WebCore::ResourceRequestBase::responseContentDispositionEncodingFallbackArray): 33 (WebCore::ResourceRequestBase::reportUploadProgress): 34 (WebCore::ResourceRequestBase::setReportUploadProgress): 35 (WebCore::ResourceRequestBase::reportLoadTiming): 36 (WebCore::ResourceRequestBase::setReportLoadTiming): 37 (WebCore::ResourceRequestBase::reportRawHeaders): 38 (WebCore::ResourceRequestBase::setReportRawHeaders): 39 (WebCore::ResourceRequestBase::hiddenFromInspector): 40 (WebCore::ResourceRequestBase::setHiddenFromInspector): 41 (WebCore::ResourceRequestBase::requester): 42 (WebCore::ResourceRequestBase::setRequester): 43 (WebCore::ResourceRequestBase::encodingRequiresPlatformData): 44 (WebCore::ResourceRequestBase::ResourceRequestBase): 45 (WebCore::ResourceRequestBase::platformCompare): 46 (WebCore::operator==): 47 (WebCore::operator!=): 48 49 * platform/network/ResourceResponseBase.cpp: 50 (WebCore::ResourceResponseBase::isolatedCopy): 51 (WebCore::ResourceResponseBase::adopt): Deleted. 52 * platform/network/ResourceResponseBase.h: 53 54 * platform/network/cf/ResourceError.h: 55 (WebCore::ResourceError::isolatedCopy): Deleted. 56 57 Removed platform-specific isolatedCopy, and re-indented the header: 58 * platform/network/cf/ResourceRequest.h: 59 (WebCore::ResourceRequest::ResourceRequest): 60 (WebCore::ResourceRequest::encodingRequiresPlatformData): 61 (WebCore::ResourceRequest::cachePartition): 62 (WebCore::ResourceRequest::setCachePartition): 63 (WebCore::ResourceRequest::setDomainForCachePartition): 64 (WebCore::ResourceRequest::resourcePrioritiesEnabled): 65 (WebCore::ResourceRequest::isolatedCopy): Deleted. 66 67 * platform/network/cf/ResourceResponse.h: 68 (WebCore::ResourceResponse::isolatedCopy): Deleted. 69 1 70 2016-06-02 Chris Dumez <cdumez@apple.com> 2 71 -
trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp
r201602 r201603 97 97 contentSecurityPolicyCopy->copyStateFrom(contentSecurityPolicy); 98 98 99 m_loaderProxy.postTaskToLoader([this, request Data = request.copyData(), options = options.isolatedCopy(), contentSecurityPolicyCopy = WTFMove(contentSecurityPolicyCopy), outgoingReferrer = outgoingReferrer.isolatedCopy()](ScriptExecutionContext& context) mutable {99 m_loaderProxy.postTaskToLoader([this, request = request.isolatedCopy(), options = options.isolatedCopy(), contentSecurityPolicyCopy = WTFMove(contentSecurityPolicyCopy), outgoingReferrer = outgoingReferrer.isolatedCopy()](ScriptExecutionContext& context) mutable { 100 100 ASSERT(isMainThread()); 101 101 Document& document = downcast<Document>(context); 102 102 103 auto request = ResourceRequest::adopt(WTFMove(requestData)); 104 request->setHTTPReferrer(outgoingReferrer); 103 request.setHTTPReferrer(outgoingReferrer); 105 104 106 105 // FIXME: If the a site requests a local resource, then this will return a non-zero value but the sync path 107 106 // will return a 0 value. Either this should return 0 or the other code path should do a callback with 108 107 // a failure. 109 m_mainThreadLoader = DocumentThreadableLoader::create(document, *this, *request, *options, WTFMove(contentSecurityPolicyCopy));108 m_mainThreadLoader = DocumentThreadableLoader::create(document, *this, request, *options, WTFMove(contentSecurityPolicyCopy)); 110 109 ASSERT(m_mainThreadLoader || m_loadingFinished); 111 110 }); … … 164 163 { 165 164 Ref<ThreadableLoaderClientWrapper> protectedWorkerClientWrapper = *m_workerClientWrapper; 166 m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = WTFMove(protectedWorkerClientWrapper), identifier, responseData = response.copyData()] (ScriptExecutionContext& context) mutable { 167 ASSERT_UNUSED(context, context.isWorkerGlobalScope()); 168 auto response(ResourceResponse::adopt(WTFMove(responseData))); 169 protectedWorkerClientWrapper->didReceiveResponse(identifier, *response); 165 m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = WTFMove(protectedWorkerClientWrapper), identifier, response = response.isolatedCopy()] (ScriptExecutionContext& context) mutable { 166 ASSERT_UNUSED(context, context.isWorkerGlobalScope()); 167 protectedWorkerClientWrapper->didReceiveResponse(identifier, response); 170 168 }, m_taskMode); 171 169 } … … 195 193 { 196 194 m_loadingFinished = true; 197 Ref<ThreadableLoaderClientWrapper> protectedWorkerClientWrapper = *m_workerClientWrapper; 198 m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = WTFMove(protectedWorkerClientWrapper), error = error.copy()] (ScriptExecutionContext& context) mutable { 199 ASSERT_UNUSED(context, context.isWorkerGlobalScope()); 200 protectedWorkerClientWrapper->didFail(error); 195 m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = Ref<ThreadableLoaderClientWrapper>(*m_workerClientWrapper), error = error.isolatedCopy()] (ScriptExecutionContext& context) mutable { 196 ASSERT_UNUSED(context, context.isWorkerGlobalScope()); 197 workerClientWrapper->didFail(error); 201 198 }, m_taskMode); 202 199 } … … 205 202 { 206 203 m_loadingFinished = true; 207 Ref<ThreadableLoaderClientWrapper> protectedWorkerClientWrapper = *m_workerClientWrapper; 208 m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = WTFMove(protectedWorkerClientWrapper), error = error.copy()] (ScriptExecutionContext& context) mutable { 209 ASSERT_UNUSED(context, context.isWorkerGlobalScope()); 210 protectedWorkerClientWrapper->didFailAccessControlCheck(error); 204 m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = Ref<ThreadableLoaderClientWrapper>(*m_workerClientWrapper), error = error.isolatedCopy()] (ScriptExecutionContext& context) mutable { 205 ASSERT_UNUSED(context, context.isWorkerGlobalScope()); 206 workerClientWrapper->didFailAccessControlCheck(error); 211 207 }, m_taskMode); 212 208 } -
trunk/Source/WebCore/loader/cache/MemoryCache.cpp
r200066 r201603 656 656 { 657 657 if (is<WorkerGlobalScope>(context)) { 658 CrossThreadResourceRequestData* requestData = request.copyData().release(); 659 downcast<WorkerGlobalScope>(context).thread().workerLoaderProxy().postTaskToLoader([requestData] (ScriptExecutionContext& context) { 660 auto request(ResourceRequest::adopt(std::unique_ptr<CrossThreadResourceRequestData>(requestData))); 661 MemoryCache::removeRequestFromSessionCaches(context, *request); 658 downcast<WorkerGlobalScope>(context).thread().workerLoaderProxy().postTaskToLoader([request = request.isolatedCopy()] (ScriptExecutionContext& context) { 659 MemoryCache::removeRequestFromSessionCaches(context, request); 662 660 }); 663 661 return; -
trunk/Source/WebCore/platform/network/ResourceErrorBase.cpp
r171600 r201603 32 32 const char* const errorDomainWebKitInternal = "WebKitInternal"; 33 33 34 ResourceError ResourceErrorBase:: copy() const34 ResourceError ResourceErrorBase::isolatedCopy() const 35 35 { 36 36 lazyInit(); -
trunk/Source/WebCore/platform/network/ResourceErrorBase.h
r194419 r201603 24 24 */ 25 25 26 #ifndef ResourceErrorBase_h 27 #define ResourceErrorBase_h 26 #pragma once 28 27 29 28 #include "URL.h" … … 38 37 class ResourceErrorBase { 39 38 public: 40 // Makes a deep copy. Useful for when you need to use a ResourceError on another thread. 41 ResourceError copy() const; 39 ResourceError isolatedCopy() const; 42 40 43 41 bool isNull() const { return m_isNull; } … … 100 98 101 99 } // namespace WebCore 102 103 #endif // ResourceErrorBase_h -
trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp
r200493 r201603 50 50 } 51 51 52 std::unique_ptr<ResourceRequest> ResourceRequestBase::adopt(std::unique_ptr<CrossThreadResourceRequestData> data) 53 { 54 auto request = std::make_unique<ResourceRequest>(); 55 request->setURL(data->url); 56 request->setCachePolicy(data->cachePolicy); 57 request->setTimeoutInterval(data->timeoutInterval); 58 request->setFirstPartyForCookies(data->firstPartyForCookies); 59 request->setHTTPMethod(data->httpMethod); 60 request->setPriority(data->priority); 61 request->setRequester(data->requester); 62 63 request->updateResourceRequest(); 64 request->m_httpHeaderFields.adopt(WTFMove(data->httpHeaders)); 52 ResourceRequest ResourceRequestBase::isolatedCopy() const 53 { 54 ResourceRequest request; 55 request.setAsIsolatedCopy(*this); 56 return request; 57 } 58 59 void ResourceRequestBase::setAsIsolatedCopy(const ResourceRequestBase& other) 60 { 61 auto data = other.copyData(); 62 63 setURL(data->url); 64 setCachePolicy(data->cachePolicy); 65 setTimeoutInterval(data->timeoutInterval); 66 setFirstPartyForCookies(data->firstPartyForCookies); 67 setHTTPMethod(data->httpMethod); 68 setPriority(data->priority); 69 setRequester(data->requester); 70 71 updateResourceRequest(); 72 m_httpHeaderFields.adopt(WTFMove(data->httpHeaders)); 65 73 66 74 size_t encodingCount = data->responseContentDispositionEncodingFallbackArray.size(); … … 75 83 } 76 84 ASSERT(encodingCount <= 3); 77 request->setResponseContentDispositionEncodingFallbackArray(encoding1, encoding2, encoding3);85 setResponseContentDispositionEncodingFallbackArray(encoding1, encoding2, encoding3); 78 86 } 79 request->setHTTPBody(data->httpBody.copyRef());80 request->setAllowCookies(data->allowCookies);81 request->doPlatformAdopt(WTFMove(data)); 82 return request;87 setHTTPBody(data->httpBody.copyRef()); 88 setAllowCookies(data->allowCookies); 89 90 const_cast<ResourceRequest&>(asResourceRequest()).doPlatformAdopt(WTFMove(data)); 83 91 } 84 92 -
trunk/Source/WebCore/platform/network/ResourceRequestBase.h
r200909 r201603 36 36 namespace WebCore { 37 37 38 enum ResourceRequestCachePolicy { 39 UseProtocolCachePolicy, // normal load 40 ReloadIgnoringCacheData, // reload 41 ReturnCacheDataElseLoad, // back/forward or encoding change - allow stale data 42 ReturnCacheDataDontLoad // results of a post - allow stale data and only use cache 43 }; 44 45 enum HTTPBodyUpdatePolicy { 46 DoNotUpdateHTTPBody, 47 UpdateHTTPBody 48 }; 49 50 class ResourceRequest; 51 struct CrossThreadResourceRequestData; 52 53 // Do not use this type directly. Use ResourceRequest instead. 54 class ResourceRequestBase { 55 WTF_MAKE_FAST_ALLOCATED; 56 public: 57 WEBCORE_EXPORT static std::unique_ptr<ResourceRequest> adopt(std::unique_ptr<CrossThreadResourceRequestData>); 58 59 // Gets a copy of the data suitable for passing to another thread. 60 WEBCORE_EXPORT std::unique_ptr<CrossThreadResourceRequestData> copyData() const; 61 62 WEBCORE_EXPORT bool isNull() const; 63 WEBCORE_EXPORT bool isEmpty() const; 64 65 WEBCORE_EXPORT const URL& url() const; 66 WEBCORE_EXPORT void setURL(const URL& url); 67 68 WEBCORE_EXPORT void removeCredentials(); 69 70 WEBCORE_EXPORT ResourceRequestCachePolicy cachePolicy() const; 71 WEBCORE_EXPORT void setCachePolicy(ResourceRequestCachePolicy cachePolicy); 72 73 double timeoutInterval() const; // May return 0 when using platform default. 74 void setTimeoutInterval(double timeoutInterval); 75 76 WEBCORE_EXPORT const URL& firstPartyForCookies() const; 77 WEBCORE_EXPORT void setFirstPartyForCookies(const URL&); 78 79 WEBCORE_EXPORT const String& httpMethod() const; 80 WEBCORE_EXPORT void setHTTPMethod(const String& httpMethod); 81 82 WEBCORE_EXPORT const HTTPHeaderMap& httpHeaderFields() const; 83 WEBCORE_EXPORT void setHTTPHeaderFields(HTTPHeaderMap); 84 85 WEBCORE_EXPORT String httpHeaderField(const String& name) const; 86 WEBCORE_EXPORT String httpHeaderField(HTTPHeaderName) const; 87 WEBCORE_EXPORT void setHTTPHeaderField(const String& name, const String& value); 88 WEBCORE_EXPORT void setHTTPHeaderField(HTTPHeaderName, const String& value); 89 void addHTTPHeaderField(HTTPHeaderName, const String& value); 90 void addHTTPHeaderField(const String& name, const String& value); 91 92 // Instead of passing a string literal to any of these functions, just use a HTTPHeaderName instead. 93 template<size_t length> String httpHeaderField(const char (&)[length]) const = delete; 94 template<size_t length> void setHTTPHeaderField(const char (&)[length], const String&) = delete; 95 template<size_t length> void addHTTPHeaderField(const char (&)[length], const String&) = delete; 96 97 WEBCORE_EXPORT void clearHTTPAuthorization(); 98 99 WEBCORE_EXPORT String httpContentType() const; 100 WEBCORE_EXPORT void setHTTPContentType(const String&); 101 void clearHTTPContentType(); 102 103 WEBCORE_EXPORT String httpReferrer() const; 104 WEBCORE_EXPORT void setHTTPReferrer(const String&); 105 WEBCORE_EXPORT void clearHTTPReferrer(); 106 107 String httpOrigin() const; 108 void setHTTPOrigin(const String&); 109 WEBCORE_EXPORT void clearHTTPOrigin(); 110 111 WEBCORE_EXPORT String httpUserAgent() const; 112 WEBCORE_EXPORT void setHTTPUserAgent(const String&); 113 void clearHTTPUserAgent(); 114 115 String httpAccept() const; 116 void setHTTPAccept(const String&); 117 void clearHTTPAccept(); 118 119 void clearHTTPAcceptEncoding(); 120 121 const Vector<String>& responseContentDispositionEncodingFallbackArray() const { return m_responseContentDispositionEncodingFallbackArray; } 122 WEBCORE_EXPORT void setResponseContentDispositionEncodingFallbackArray(const String& encoding1, const String& encoding2 = String(), const String& encoding3 = String()); 123 124 WEBCORE_EXPORT FormData* httpBody() const; 125 WEBCORE_EXPORT void setHTTPBody(RefPtr<FormData>&&); 126 127 bool allowCookies() const; 128 void setAllowCookies(bool allowCookies); 129 130 WEBCORE_EXPORT ResourceLoadPriority priority() const; 131 WEBCORE_EXPORT void setPriority(ResourceLoadPriority); 132 133 WEBCORE_EXPORT bool isConditional() const; 134 WEBCORE_EXPORT void makeUnconditional(); 135 136 // Whether the associated ResourceHandleClient needs to be notified of 137 // upload progress made for that resource. 138 bool reportUploadProgress() const { return m_reportUploadProgress; } 139 void setReportUploadProgress(bool reportUploadProgress) { m_reportUploadProgress = reportUploadProgress; } 140 141 // Whether the timing information should be collected for the request. 142 bool reportLoadTiming() const { return m_reportLoadTiming; } 143 void setReportLoadTiming(bool reportLoadTiming) { m_reportLoadTiming = reportLoadTiming; } 144 145 // Whether actual headers being sent/received should be collected and reported for the request. 146 bool reportRawHeaders() const { return m_reportRawHeaders; } 147 void setReportRawHeaders(bool reportRawHeaders) { m_reportRawHeaders = reportRawHeaders; } 148 149 // Whether this request should be hidden from the Inspector. 150 bool hiddenFromInspector() const { return m_hiddenFromInspector; } 151 void setHiddenFromInspector(bool hiddenFromInspector) { m_hiddenFromInspector = hiddenFromInspector; } 152 153 enum class Requester { Unspecified, Main, XHR, Media }; 154 Requester requester() const { return m_requester; } 155 void setRequester(Requester requester) { m_requester = requester; } 38 enum ResourceRequestCachePolicy { 39 UseProtocolCachePolicy, // normal load 40 ReloadIgnoringCacheData, // reload 41 ReturnCacheDataElseLoad, // back/forward or encoding change - allow stale data 42 ReturnCacheDataDontLoad // results of a post - allow stale data and only use cache 43 }; 44 45 enum HTTPBodyUpdatePolicy { 46 DoNotUpdateHTTPBody, 47 UpdateHTTPBody 48 }; 49 50 class ResourceRequest; 51 struct CrossThreadResourceRequestData; 52 53 // Do not use this type directly. Use ResourceRequest instead. 54 class ResourceRequestBase { 55 WTF_MAKE_FAST_ALLOCATED; 56 public: 57 ResourceRequest isolatedCopy() const; 58 WEBCORE_EXPORT void setAsIsolatedCopy(const ResourceRequestBase&); 59 60 WEBCORE_EXPORT bool isNull() const; 61 WEBCORE_EXPORT bool isEmpty() const; 62 63 WEBCORE_EXPORT const URL& url() const; 64 WEBCORE_EXPORT void setURL(const URL& url); 65 66 WEBCORE_EXPORT void removeCredentials(); 67 68 WEBCORE_EXPORT ResourceRequestCachePolicy cachePolicy() const; 69 WEBCORE_EXPORT void setCachePolicy(ResourceRequestCachePolicy cachePolicy); 70 71 double timeoutInterval() const; // May return 0 when using platform default. 72 void setTimeoutInterval(double timeoutInterval); 73 74 WEBCORE_EXPORT const URL& firstPartyForCookies() const; 75 WEBCORE_EXPORT void setFirstPartyForCookies(const URL&); 76 77 WEBCORE_EXPORT const String& httpMethod() const; 78 WEBCORE_EXPORT void setHTTPMethod(const String& httpMethod); 79 80 WEBCORE_EXPORT const HTTPHeaderMap& httpHeaderFields() const; 81 WEBCORE_EXPORT void setHTTPHeaderFields(HTTPHeaderMap); 82 83 WEBCORE_EXPORT String httpHeaderField(const String& name) const; 84 WEBCORE_EXPORT String httpHeaderField(HTTPHeaderName) const; 85 WEBCORE_EXPORT void setHTTPHeaderField(const String& name, const String& value); 86 WEBCORE_EXPORT void setHTTPHeaderField(HTTPHeaderName, const String& value); 87 void addHTTPHeaderField(HTTPHeaderName, const String& value); 88 void addHTTPHeaderField(const String& name, const String& value); 89 90 // Instead of passing a string literal to any of these functions, just use a HTTPHeaderName instead. 91 template<size_t length> String httpHeaderField(const char (&)[length]) const = delete; 92 template<size_t length> void setHTTPHeaderField(const char (&)[length], const String&) = delete; 93 template<size_t length> void addHTTPHeaderField(const char (&)[length], const String&) = delete; 94 95 WEBCORE_EXPORT void clearHTTPAuthorization(); 96 97 WEBCORE_EXPORT String httpContentType() const; 98 WEBCORE_EXPORT void setHTTPContentType(const String&); 99 void clearHTTPContentType(); 100 101 WEBCORE_EXPORT String httpReferrer() const; 102 WEBCORE_EXPORT void setHTTPReferrer(const String&); 103 WEBCORE_EXPORT void clearHTTPReferrer(); 104 105 String httpOrigin() const; 106 void setHTTPOrigin(const String&); 107 WEBCORE_EXPORT void clearHTTPOrigin(); 108 109 WEBCORE_EXPORT String httpUserAgent() const; 110 WEBCORE_EXPORT void setHTTPUserAgent(const String&); 111 void clearHTTPUserAgent(); 112 113 String httpAccept() const; 114 void setHTTPAccept(const String&); 115 void clearHTTPAccept(); 116 117 void clearHTTPAcceptEncoding(); 118 119 const Vector<String>& responseContentDispositionEncodingFallbackArray() const { return m_responseContentDispositionEncodingFallbackArray; } 120 WEBCORE_EXPORT void setResponseContentDispositionEncodingFallbackArray(const String& encoding1, const String& encoding2 = String(), const String& encoding3 = String()); 121 122 WEBCORE_EXPORT FormData* httpBody() const; 123 WEBCORE_EXPORT void setHTTPBody(RefPtr<FormData>&&); 124 125 bool allowCookies() const; 126 void setAllowCookies(bool allowCookies); 127 128 WEBCORE_EXPORT ResourceLoadPriority priority() const; 129 WEBCORE_EXPORT void setPriority(ResourceLoadPriority); 130 131 WEBCORE_EXPORT bool isConditional() const; 132 WEBCORE_EXPORT void makeUnconditional(); 133 134 // Whether the associated ResourceHandleClient needs to be notified of 135 // upload progress made for that resource. 136 bool reportUploadProgress() const { return m_reportUploadProgress; } 137 void setReportUploadProgress(bool reportUploadProgress) { m_reportUploadProgress = reportUploadProgress; } 138 139 // Whether the timing information should be collected for the request. 140 bool reportLoadTiming() const { return m_reportLoadTiming; } 141 void setReportLoadTiming(bool reportLoadTiming) { m_reportLoadTiming = reportLoadTiming; } 142 143 // Whether actual headers being sent/received should be collected and reported for the request. 144 bool reportRawHeaders() const { return m_reportRawHeaders; } 145 void setReportRawHeaders(bool reportRawHeaders) { m_reportRawHeaders = reportRawHeaders; } 146 147 // Whether this request should be hidden from the Inspector. 148 bool hiddenFromInspector() const { return m_hiddenFromInspector; } 149 void setHiddenFromInspector(bool hiddenFromInspector) { m_hiddenFromInspector = hiddenFromInspector; } 150 151 enum class Requester { Unspecified, Main, XHR, Media }; 152 Requester requester() const { return m_requester; } 153 void setRequester(Requester requester) { m_requester = requester; } 156 154 157 155 #if !PLATFORM(COCOA) 158 bool encodingRequiresPlatformData() const { return true; }159 #endif 160 template<class Encoder> void encodeWithoutPlatformData(Encoder&) const;161 template<class Decoder> bool decodeWithoutPlatformData(Decoder&);162 163 WEBCORE_EXPORT static double defaultTimeoutInterval(); // May return 0 when using platform default.164 WEBCORE_EXPORT static void setDefaultTimeoutInterval(double);156 bool encodingRequiresPlatformData() const { return true; } 157 #endif 158 template<class Encoder> void encodeWithoutPlatformData(Encoder&) const; 159 template<class Decoder> bool decodeWithoutPlatformData(Decoder&); 160 161 WEBCORE_EXPORT static double defaultTimeoutInterval(); // May return 0 when using platform default. 162 WEBCORE_EXPORT static void setDefaultTimeoutInterval(double); 165 163 166 164 #if PLATFORM(IOS) 167 WEBCORE_EXPORT static bool defaultAllowCookies();168 WEBCORE_EXPORT static void setDefaultAllowCookies(bool);169 #endif 170 171 static bool compare(const ResourceRequest&, const ResourceRequest&);172 173 protected:174 // Used when ResourceRequest is initialized from a platform representation of the request175 ResourceRequestBase()176 : m_platformRequestUpdated(true)177 , m_platformRequestBodyUpdated(true)178 {179 }180 181 ResourceRequestBase(const URL& url, ResourceRequestCachePolicy policy)182 : m_url(url)183 , m_timeoutInterval(s_defaultTimeoutInterval)184 , m_httpMethod(ASCIILiteral("GET"))185 , m_cachePolicy(policy)165 WEBCORE_EXPORT static bool defaultAllowCookies(); 166 WEBCORE_EXPORT static void setDefaultAllowCookies(bool); 167 #endif 168 169 static bool compare(const ResourceRequest&, const ResourceRequest&); 170 171 protected: 172 // Used when ResourceRequest is initialized from a platform representation of the request 173 ResourceRequestBase() 174 : m_platformRequestUpdated(true) 175 , m_platformRequestBodyUpdated(true) 176 { 177 } 178 179 ResourceRequestBase(const URL& url, ResourceRequestCachePolicy policy) 180 : m_url(url) 181 , m_timeoutInterval(s_defaultTimeoutInterval) 182 , m_httpMethod(ASCIILiteral("GET")) 183 , m_cachePolicy(policy) 186 184 #if !PLATFORM(IOS) 187 , m_allowCookies(true)185 , m_allowCookies(true) 188 186 #else 189 , m_allowCookies(ResourceRequestBase::defaultAllowCookies()) 190 #endif 191 , m_resourceRequestUpdated(true) 192 , m_resourceRequestBodyUpdated(true) 193 { 194 } 195 196 void updatePlatformRequest(HTTPBodyUpdatePolicy = DoNotUpdateHTTPBody) const; 197 void updateResourceRequest(HTTPBodyUpdatePolicy = DoNotUpdateHTTPBody) const; 198 199 // The ResourceRequest subclass may "shadow" this method to compare platform specific fields 200 static bool platformCompare(const ResourceRequest&, const ResourceRequest&) { return true; } 201 202 URL m_url; 203 double m_timeoutInterval; // 0 is a magic value for platform default on platforms that have one. 204 URL m_firstPartyForCookies; 205 String m_httpMethod; 206 HTTPHeaderMap m_httpHeaderFields; 207 Vector<String> m_responseContentDispositionEncodingFallbackArray; 208 RefPtr<FormData> m_httpBody; 209 ResourceRequestCachePolicy m_cachePolicy { UseProtocolCachePolicy }; 210 bool m_allowCookies { false }; 211 mutable bool m_resourceRequestUpdated { false }; 212 mutable bool m_platformRequestUpdated { false }; 213 mutable bool m_resourceRequestBodyUpdated { false }; 214 mutable bool m_platformRequestBodyUpdated { false }; 215 bool m_reportUploadProgress { false }; 216 bool m_reportLoadTiming { false }; 217 bool m_reportRawHeaders { false }; 218 bool m_hiddenFromInspector { false }; 219 ResourceLoadPriority m_priority { ResourceLoadPriority::Low }; 220 Requester m_requester { Requester::Unspecified }; 221 222 private: 223 const ResourceRequest& asResourceRequest() const; 224 225 WEBCORE_EXPORT static double s_defaultTimeoutInterval; 187 , m_allowCookies(ResourceRequestBase::defaultAllowCookies()) 188 #endif 189 , m_resourceRequestUpdated(true) 190 , m_resourceRequestBodyUpdated(true) 191 { 192 } 193 194 void updatePlatformRequest(HTTPBodyUpdatePolicy = DoNotUpdateHTTPBody) const; 195 void updateResourceRequest(HTTPBodyUpdatePolicy = DoNotUpdateHTTPBody) const; 196 197 // The ResourceRequest subclass may "shadow" this method to compare platform specific fields 198 static bool platformCompare(const ResourceRequest&, const ResourceRequest&) { return true; } 199 200 URL m_url; 201 double m_timeoutInterval; // 0 is a magic value for platform default on platforms that have one. 202 URL m_firstPartyForCookies; 203 String m_httpMethod; 204 HTTPHeaderMap m_httpHeaderFields; 205 Vector<String> m_responseContentDispositionEncodingFallbackArray; 206 RefPtr<FormData> m_httpBody; 207 ResourceRequestCachePolicy m_cachePolicy { UseProtocolCachePolicy }; 208 bool m_allowCookies { false }; 209 mutable bool m_resourceRequestUpdated { false }; 210 mutable bool m_platformRequestUpdated { false }; 211 mutable bool m_resourceRequestBodyUpdated { false }; 212 mutable bool m_platformRequestBodyUpdated { false }; 213 bool m_reportUploadProgress { false }; 214 bool m_reportLoadTiming { false }; 215 bool m_reportRawHeaders { false }; 216 bool m_hiddenFromInspector { false }; 217 ResourceLoadPriority m_priority { ResourceLoadPriority::Low }; 218 Requester m_requester { Requester::Unspecified }; 219 220 private: 221 const ResourceRequest& asResourceRequest() const; 222 223 // Gets a copy of the data suitable for passing to another thread. 224 std::unique_ptr<CrossThreadResourceRequestData> copyData() const; 225 226 WEBCORE_EXPORT static double s_defaultTimeoutInterval; 226 227 #if PLATFORM(IOS) 227 static bool s_defaultAllowCookies;228 #endif 229 };230 231 bool equalIgnoringHeaderFields(const ResourceRequestBase&, const ResourceRequestBase&);232 233 inline bool operator==(const ResourceRequest& a, const ResourceRequest& b) { return ResourceRequestBase::compare(a, b); }234 inline bool operator!=(ResourceRequest& a, const ResourceRequest& b) { return !(a == b); }235 236 struct CrossThreadResourceRequestDataBase {237 URL url;238 ResourceRequestCachePolicy cachePolicy;239 double timeoutInterval;240 URL firstPartyForCookies;241 String httpMethod;242 std::unique_ptr<CrossThreadHTTPHeaderMapData> httpHeaders;243 Vector<String> responseContentDispositionEncodingFallbackArray;244 RefPtr<FormData> httpBody;245 bool allowCookies;246 ResourceLoadPriority priority;247 ResourceRequestBase::Requester requester;248 };249 250 WEBCORE_EXPORT unsigned initializeMaximumHTTPConnectionCountPerHost();228 static bool s_defaultAllowCookies; 229 #endif 230 }; 231 232 bool equalIgnoringHeaderFields(const ResourceRequestBase&, const ResourceRequestBase&); 233 234 inline bool operator==(const ResourceRequest& a, const ResourceRequest& b) { return ResourceRequestBase::compare(a, b); } 235 inline bool operator!=(ResourceRequest& a, const ResourceRequest& b) { return !(a == b); } 236 237 struct CrossThreadResourceRequestDataBase { 238 URL url; 239 ResourceRequestCachePolicy cachePolicy; 240 double timeoutInterval; 241 URL firstPartyForCookies; 242 String httpMethod; 243 std::unique_ptr<CrossThreadHTTPHeaderMapData> httpHeaders; 244 Vector<String> responseContentDispositionEncodingFallbackArray; 245 RefPtr<FormData> httpBody; 246 bool allowCookies; 247 ResourceLoadPriority priority; 248 ResourceRequestBase::Requester requester; 249 }; 250 251 WEBCORE_EXPORT unsigned initializeMaximumHTTPConnectionCountPerHost(); 251 252 #if PLATFORM(IOS) 252 WEBCORE_EXPORT void initializeHTTPConnectionSettingsOnStartup();253 WEBCORE_EXPORT void initializeHTTPConnectionSettingsOnStartup(); 253 254 #endif 254 255 -
trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp
r201324 r201603 64 64 } 65 65 66 std::unique_ptr<ResourceResponse> ResourceResponseBase::adopt(std::unique_ptr<CrossThreadResourceResponseData> data) 67 { 68 auto response = std::make_unique<ResourceResponse>(); 69 response->setURL(data->m_url); 70 response->setMimeType(data->m_mimeType); 71 response->setExpectedContentLength(data->m_expectedContentLength); 72 response->setTextEncodingName(data->m_textEncodingName); 73 74 response->setHTTPStatusCode(data->m_httpStatusCode); 75 response->setHTTPStatusText(data->m_httpStatusText); 76 response->setHTTPVersion(data->m_httpVersion); 77 78 response->lazyInit(AllFields); 79 response->m_httpHeaderFields.adopt(WTFMove(data->m_httpHeaders)); 80 response->m_resourceLoadTiming = data->m_resourceLoadTiming; 81 response->m_type = data->m_type; 82 response->doPlatformAdopt(WTFMove(data)); 66 ResourceResponse ResourceResponseBase::isolatedCopy() const 67 { 68 ResourceResponse response; 69 auto data = copyData(); 70 71 response.setURL(data->m_url); 72 response.setMimeType(data->m_mimeType); 73 response.setExpectedContentLength(data->m_expectedContentLength); 74 response.setTextEncodingName(data->m_textEncodingName); 75 76 response.setHTTPStatusCode(data->m_httpStatusCode); 77 response.setHTTPStatusText(data->m_httpStatusText); 78 response.setHTTPVersion(data->m_httpVersion); 79 80 response.lazyInit(AllFields); 81 response.m_httpHeaderFields.adopt(WTFMove(data->m_httpHeaders)); 82 response.m_resourceLoadTiming = data->m_resourceLoadTiming; 83 response.m_type = data->m_type; 84 response.doPlatformAdopt(WTFMove(data)); 85 83 86 return response; 84 87 } -
trunk/Source/WebCore/platform/network/ResourceResponseBase.h
r201324 r201603 25 25 */ 26 26 27 #ifndef ResourceResponseBase_h 28 #define ResourceResponseBase_h 27 #pragma once 29 28 30 29 #include "CacheValidation.h" … … 48 47 WTF_MAKE_FAST_ALLOCATED; 49 48 public: 50 static std::unique_ptr<ResourceResponse> adopt(std::unique_ptr<CrossThreadResourceResponseData>); 51 52 // Gets a copy of the data suitable for passing to another thread. 53 std::unique_ptr<CrossThreadResourceResponseData> copyData() const; 49 ResourceResponse isolatedCopy() const; 54 50 55 51 bool isNull() const { return m_isNull; } … … 164 160 void updateHeaderParsedState(HTTPHeaderName); 165 161 162 // Gets a copy of the data suitable for passing to another thread. 163 std::unique_ptr<CrossThreadResourceResponseData> copyData() const; 164 166 165 protected: 167 166 bool m_isNull; … … 294 293 295 294 } // namespace WebCore 296 297 #endif // ResourceResponseBase_h -
trunk/Source/WebCore/platform/network/cf/ResourceError.h
r201504 r201603 24 24 */ 25 25 26 #ifndef ResourceError_h 27 #define ResourceError_h 26 #pragma once 28 27 29 28 #include "ResourceErrorBase.h" … … 61 60 WEBCORE_EXPORT CFErrorRef cfError() const; 62 61 WEBCORE_EXPORT operator CFErrorRef() const; 63 64 ResourceError isolatedCopy() const { return copy(); }65 62 66 63 #if USE(CFNETWORK) … … 103 100 104 101 } // namespace WebCore 105 106 #endif // ResourceError_h -
trunk/Source/WebCore/platform/network/cf/ResourceRequest.h
r201504 r201603 39 39 namespace WebCore { 40 40 41 class ResourceRequest : public ResourceRequestBase {42 public:43 ResourceRequest(const String& url)44 : ResourceRequestBase(URL(ParsedURLString, url), UseProtocolCachePolicy)45 {46 }41 class ResourceRequest : public ResourceRequestBase { 42 public: 43 ResourceRequest(const String& url) 44 : ResourceRequestBase(URL(ParsedURLString, url), UseProtocolCachePolicy) 45 { 46 } 47 47 48 ResourceRequest(const URL& url)49 : ResourceRequestBase(url, UseProtocolCachePolicy)50 {51 }48 ResourceRequest(const URL& url) 49 : ResourceRequestBase(url, UseProtocolCachePolicy) 50 { 51 } 52 52 53 ResourceRequest(const URL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy)54 : ResourceRequestBase(url, policy)55 {56 setHTTPReferrer(referrer);57 }58 59 ResourceRequest()60 : ResourceRequestBase(URL(), UseProtocolCachePolicy)61 {62 }63 53 ResourceRequest(const URL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy) 54 : ResourceRequestBase(url, policy) 55 { 56 setHTTPReferrer(referrer); 57 } 58 59 ResourceRequest() 60 : ResourceRequestBase(URL(), UseProtocolCachePolicy) 61 { 62 } 63 64 64 #if USE(CFNETWORK) 65 65 #if PLATFORM(COCOA) 66 WEBCORE_EXPORT ResourceRequest(NSURLRequest *);67 void updateNSURLRequest();68 void clearOrUpdateNSURLRequest();66 WEBCORE_EXPORT ResourceRequest(NSURLRequest *); 67 void updateNSURLRequest(); 68 void clearOrUpdateNSURLRequest(); 69 69 #endif 70 70 71 ResourceRequest(CFURLRequestRef cfRequest)72 : ResourceRequestBase()73 , m_cfRequest(cfRequest)74 {75 }71 ResourceRequest(CFURLRequestRef cfRequest) 72 : ResourceRequestBase() 73 , m_cfRequest(cfRequest) 74 { 75 } 76 76 #else 77 ResourceRequest(NSURLRequest *nsRequest)78 : ResourceRequestBase()79 , m_nsRequest(nsRequest)80 {81 }77 ResourceRequest(NSURLRequest *nsRequest) 78 : ResourceRequestBase() 79 , m_nsRequest(nsRequest) 80 { 81 } 82 82 #endif 83 83 84 ResourceRequest isolatedCopy() const { return *ResourceRequest::adopt(copyData()); } 85 86 WEBCORE_EXPORT void updateFromDelegatePreservingOldProperties(const ResourceRequest&); 84 WEBCORE_EXPORT void updateFromDelegatePreservingOldProperties(const ResourceRequest&); 87 85 88 86 #if PLATFORM(MAC) 89 void applyWebArchiveHackForMail();87 void applyWebArchiveHackForMail(); 90 88 #endif 91 89 #if PLATFORM(COCOA) 92 90 #if USE(CFNETWORK) 93 bool encodingRequiresPlatformData() const { return m_httpBody || m_cfRequest; }91 bool encodingRequiresPlatformData() const { return m_httpBody || m_cfRequest; } 94 92 #else 95 bool encodingRequiresPlatformData() const { return m_httpBody || m_nsRequest; }93 bool encodingRequiresPlatformData() const { return m_httpBody || m_nsRequest; } 96 94 #endif 97 WEBCORE_EXPORT NSURLRequest *nsURLRequest(HTTPBodyUpdatePolicy) const;95 WEBCORE_EXPORT NSURLRequest *nsURLRequest(HTTPBodyUpdatePolicy) const; 98 96 99 WEBCORE_EXPORT static CFStringRef isUserInitiatedKey();97 WEBCORE_EXPORT static CFStringRef isUserInitiatedKey(); 100 98 #endif 101 99 102 100 #if ENABLE(CACHE_PARTITIONING) 103 WEBCORE_EXPORT static String partitionName(const String& domain);104 const String& cachePartition() const { return m_cachePartition.isNull() ? emptyString() : m_cachePartition; }105 void setCachePartition(const String& cachePartition)106 {107 ASSERT(cachePartition == partitionName(cachePartition));108 m_cachePartition = cachePartition;109 }110 void setDomainForCachePartition(const String& domain) { m_cachePartition = partitionName(domain); }101 WEBCORE_EXPORT static String partitionName(const String& domain); 102 const String& cachePartition() const { return m_cachePartition.isNull() ? emptyString() : m_cachePartition; } 103 void setCachePartition(const String& cachePartition) 104 { 105 ASSERT(cachePartition == partitionName(cachePartition)); 106 m_cachePartition = cachePartition; 107 } 108 void setDomainForCachePartition(const String& domain) { m_cachePartition = partitionName(domain); } 111 109 #endif 112 110 113 111 #if PLATFORM(COCOA) || USE(CFNETWORK) 114 WEBCORE_EXPORT CFURLRequestRef cfURLRequest(HTTPBodyUpdatePolicy) const;115 void setStorageSession(CFURLStorageSessionRef);112 WEBCORE_EXPORT CFURLRequestRef cfURLRequest(HTTPBodyUpdatePolicy) const; 113 void setStorageSession(CFURLStorageSessionRef); 116 114 #endif 117 115 118 WEBCORE_EXPORT static bool httpPipeliningEnabled();119 WEBCORE_EXPORT static void setHTTPPipeliningEnabled(bool);116 WEBCORE_EXPORT static bool httpPipeliningEnabled(); 117 WEBCORE_EXPORT static void setHTTPPipeliningEnabled(bool); 120 118 121 static bool resourcePrioritiesEnabled();119 static bool resourcePrioritiesEnabled(); 122 120 123 private:124 friend class ResourceRequestBase;121 private: 122 friend class ResourceRequestBase; 125 123 126 void doUpdatePlatformRequest();127 void doUpdateResourceRequest();128 void doUpdatePlatformHTTPBody();129 void doUpdateResourceHTTPBody();124 void doUpdatePlatformRequest(); 125 void doUpdateResourceRequest(); 126 void doUpdatePlatformHTTPBody(); 127 void doUpdateResourceHTTPBody(); 130 128 131 std::unique_ptr<CrossThreadResourceRequestData> doPlatformCopyData(std::unique_ptr<CrossThreadResourceRequestData>) const;132 void doPlatformAdopt(std::unique_ptr<CrossThreadResourceRequestData>);129 std::unique_ptr<CrossThreadResourceRequestData> doPlatformCopyData(std::unique_ptr<CrossThreadResourceRequestData>) const; 130 void doPlatformAdopt(std::unique_ptr<CrossThreadResourceRequestData>); 133 131 134 132 #if USE(CFNETWORK) 135 RetainPtr<CFURLRequestRef> m_cfRequest;133 RetainPtr<CFURLRequestRef> m_cfRequest; 136 134 #endif 137 135 #if PLATFORM(COCOA) 138 RetainPtr<NSURLRequest> m_nsRequest;136 RetainPtr<NSURLRequest> m_nsRequest; 139 137 #endif 140 138 #if ENABLE(CACHE_PARTITIONING) 141 String m_cachePartition;139 String m_cachePartition; 142 140 #endif 143 141 144 static bool s_httpPipeliningEnabled;145 };142 static bool s_httpPipeliningEnabled; 143 }; 146 144 147 struct CrossThreadResourceRequestData : public CrossThreadResourceRequestDataBase {145 struct CrossThreadResourceRequestData : public CrossThreadResourceRequestDataBase { 148 146 #if ENABLE(CACHE_PARTITIONING) 149 String m_cachePartition;147 String m_cachePartition; 150 148 #endif 151 };149 }; 152 150 153 inline bool ResourceRequest::resourcePrioritiesEnabled()154 {151 inline bool ResourceRequest::resourcePrioritiesEnabled() 152 { 155 153 #if PLATFORM(MAC) 156 154 return true; … … 160 158 return false; 161 159 #endif 162 } 163 160 } 164 161 165 162 } // namespace WebCore -
trunk/Source/WebCore/platform/network/cf/ResourceResponse.h
r201504 r201603 73 73 } 74 74 75 ResourceResponse isolatedCopy() const { return *ResourceResponse::adopt(copyData()); }76 77 75 unsigned memoryUsage() const 78 76 { -
trunk/Source/WebKit2/ChangeLog
r201602 r201603 1 2016-06-02 Brady Eidson <beidson@apple.com> 2 3 Overhaul cross-thread use of ResourceRequest, ResourceResponse, and ResourceError. 4 https://bugs.webkit.org/show_bug.cgi?id=158293 5 6 Reviewed by Darin Adler. 7 8 * NetworkProcess/cache/NetworkCacheEntry.cpp: 9 (WebKit::NetworkCache::Entry::Entry): 10 1 11 2016-06-02 Chris Dumez <cdumez@apple.com> 2 12 -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheEntry.cpp
r197879 r201603 55 55 , m_response(response) 56 56 , m_varyingRequestHeaders(varyingRequestHeaders) 57 , m_redirectRequest(WebCore::ResourceRequest::adopt(redirectRequest.copyData())) // Don't include the underlying platform request object.58 57 { 59 58 ASSERT(m_key.type() == "resource"); 60 59 // Redirect body is not needed even if exists. 60 61 m_redirectRequest = std::make_unique<WebCore::ResourceRequest>(); 62 m_redirectRequest->setAsIsolatedCopy(redirectRequest); 61 63 m_redirectRequest->setHTTPBody(nullptr); 62 64 }
Note:
See TracChangeset
for help on using the changeset viewer.