Changeset 271879 in webkit
- Timestamp:
- Jan 26, 2021, 3:49:22 AM (6 years ago)
- Location:
- trunk
- Files:
-
- 5 added
- 11 edited
-
Source/WebCore/platform/gtk/po/ChangeLog (modified) (1 diff)
-
Source/WebCore/platform/gtk/po/POTFILES.in (modified) (1 diff)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp (modified) (9 diffs)
-
Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.h (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/soup/Resources (added)
-
Source/WebKit/NetworkProcess/soup/Resources/directory.css (added)
-
Source/WebKit/NetworkProcess/soup/Resources/directory.js (added)
-
Source/WebKit/NetworkProcess/soup/WebKitDirectoryInputStream.cpp (added)
-
Source/WebKit/NetworkProcess/soup/WebKitDirectoryInputStream.h (added)
-
Source/WebKit/PlatformGTK.cmake (modified) (2 diffs)
-
Source/WebKit/PlatformWPE.cmake (modified) (1 diff)
-
Source/WebKit/SourcesGTK.txt (modified) (1 diff)
-
Source/WebKit/SourcesWPE.txt (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/Scripts/webkitpy/style/checker.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/platform/gtk/po/ChangeLog
r267228 r271879 1 2021-01-26 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [SOUP] Stop using SoupRequest API to load files in preparation for libsoup3 4 https://bugs.webkit.org/show_bug.cgi?id=220509 5 6 Reviewed by Adrian Perez de Castro. 7 8 * POTFILES.in: Add WebKitDirectoryInputStream.cpp 9 1 10 2020-09-18 Rafael Fontenelle <rafaelff@gnome.org> 2 11 -
trunk/Source/WebCore/platform/gtk/po/POTFILES.in
r255231 r271879 5 5 ../../editing/EditAction.cpp 6 6 ../../../JavaScriptCore/API/glib/JSCOptions.cpp 7 ../../../WebKit/NetworkProcess/soup/WebKitDirectoryInputStream.cpp 7 8 ../../../WebKit/Shared/API/glib/WebKitHitTestResult.cpp 8 9 ../../../WebKit/Shared/API/glib/WebKitURIRequest.cpp -
trunk/Source/WebKit/ChangeLog
r271873 r271879 1 2021-01-26 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [SOUP] Stop using SoupRequest API to load files in preparation for libsoup3 4 https://bugs.webkit.org/show_bug.cgi?id=220509 5 6 Reviewed by Adrian Perez de Castro. 7 8 SoupRequest API is gone in libsoup3 and there's no replacement for file requests. GResource and data URI loads 9 already happen in the web process so we only need to care about file and directory loads. 10 11 * NetworkProcess/soup/NetworkDataTaskSoup.cpp: 12 (WebKit::NetworkDataTaskSoup::createRequest): Create a GFile for local files. 13 (WebKit::NetworkDataTaskSoup::clearRequest): Clear the m_file. 14 (WebKit::NetworkDataTaskSoup::resume): Check also if there's a file operation to resume. 15 (WebKit::NetworkDataTaskSoup::didSendRequest): We always have a soup message now here because SoupRequest is 16 only used for HTTP. 17 (WebKit::NetworkDataTaskSoup::readCallback): In case of failure check if this is an HTTP or file request to 18 create the error. 19 (WebKit::NetworkDataTaskSoup::fileQueryInfoCallback): Call didGetFileInfo() and continue reading the file or directory. 20 (WebKit::NetworkDataTaskSoup::didGetFileInfo): Set URL, content type and length of the response for the given GFileInfo. 21 (WebKit::NetworkDataTaskSoup::readFileCallback): Complete the g_file_read_async operation. 22 (WebKit::NetworkDataTaskSoup::enumerateFileChildrenCallback): Create a WebKitDirectoryInputStream. 23 (WebKit::NetworkDataTaskSoup::didReadFile): Set the input stream and notify the response is ready. 24 * NetworkProcess/soup/NetworkDataTaskSoup.h: 25 * NetworkProcess/soup/Resources/directory.css: Added. 26 * NetworkProcess/soup/Resources/directory.js: Added. 27 * NetworkProcess/soup/WebKitDirectoryInputStream.cpp: Added. 28 (webkitDirectoryInputStreamCreateHeader): 29 (webkitDirectoryInputStreamCreateFooter): 30 (webkitDirectoryInputStreamCreateRow): 31 (webkitDirectoryInputStreamReadNextFile): 32 (webkitDirectoryInputStreamRead): 33 (webkitDirectoryInputStreamClose): 34 (webkit_directory_input_stream_class_init): 35 (webkitDirectoryInputStreamNew): 36 * NetworkProcess/soup/WebKitDirectoryInputStream.h: Added. 37 * PlatformGTK.cmake: 38 * PlatformWPE.cmake: 39 * SourcesGTK.txt: 40 * SourcesWPE.txt: 41 1 42 2021-01-25 Alexey Shvayka <shvaikalesh@gmail.com> 2 43 -
trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp
r267621 r271879 35 35 #include "NetworkSessionSoup.h" 36 36 #include "WebErrors.h" 37 #include "WebKitDirectoryInputStream.h" 37 38 #include <WebCore/AuthenticationChallenge.h> 38 39 #include <WebCore/HTTPParsers.h> … … 108 109 { 109 110 m_currentRequest = WTFMove(request); 111 if (m_currentRequest.url().isLocalFile()) { 112 m_file = adoptGRef(g_file_new_for_path(m_currentRequest.url().fileSystemPath().utf8().data())); 113 return; 114 } 110 115 111 116 GUniquePtr<SoupURI> soupURI = m_currentRequest.createSoupURI(); … … 122 127 123 128 m_currentRequest.updateSoupRequest(soupRequest.get()); 124 125 if (!m_currentRequest.url().protocolIsInHTTPFamily()) {126 m_soupRequest = WTFMove(soupRequest);127 return;128 }129 129 130 130 // HTTP request. … … 204 204 m_pendingResult = nullptr; 205 205 m_soupRequest = nullptr; 206 m_file = nullptr; 206 207 m_inputStream = nullptr; 207 208 m_multipartInputStream = nullptr; … … 241 242 } 242 243 244 if (m_file && !m_cancellable) { 245 m_cancellable = adoptGRef(g_cancellable_new()); 246 g_file_query_info_async(m_file.get(), G_FILE_ATTRIBUTE_STANDARD_TYPE "," G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "," G_FILE_ATTRIBUTE_STANDARD_SIZE, 247 G_FILE_QUERY_INFO_NONE, RunLoopSourcePriority::AsyncIONetwork, m_cancellable.get(), reinterpret_cast<GAsyncReadyCallback>(fileQueryInfoCallback), protectedThis.leakRef()); 248 return; 249 } 250 243 251 if (m_pendingResult) { 244 252 GRefPtr<GAsyncResult> pendingResult = WTFMove(m_pendingResult); … … 249 257 else if (m_soupRequest) 250 258 sendRequestCallback(m_soupRequest.get(), pendingResult.get(), protectedThis.leakRef()); 251 else 259 else if (m_file) { 260 if (m_response.expectedContentLength() == -1) 261 enumerateFileChildrenCallback(m_file.get(), pendingResult.get(), protectedThis.leakRef()); 262 else 263 readFileCallback(m_file.get(), pendingResult.get(), protectedThis.leakRef()); 264 } else 252 265 ASSERT_NOT_REACHED(); 253 266 } … … 340 353 void NetworkDataTaskSoup::didSendRequest(GRefPtr<GInputStream>&& inputStream) 341 354 { 342 if (m_soupMessage) { 343 if (m_shouldContentSniff == ContentSniffingPolicy::SniffContent && m_soupMessage->status_code != SOUP_STATUS_NOT_MODIFIED) 344 m_response.setSniffedContentType(soup_request_get_content_type(m_soupRequest.get())); 345 m_response.updateFromSoupMessage(m_soupMessage.get()); 346 if (m_response.mimeType().isEmpty() && m_soupMessage->status_code != SOUP_STATUS_NOT_MODIFIED) 347 m_response.setMimeType(MIMETypeRegistry::mimeTypeForPath(m_response.url().path().toString())); 348 349 if (shouldStartHTTPRedirection()) { 350 m_inputStream = WTFMove(inputStream); 351 skipInputStreamForRedirection(); 352 return; 353 } 354 355 if (m_response.isMultipart()) 356 m_multipartInputStream = adoptGRef(soup_multipart_input_stream_new(m_soupMessage.get(), inputStream.get())); 357 else 358 m_inputStream = WTFMove(inputStream); 359 360 m_networkLoadMetrics.responseStart = MonotonicTime::now() - m_startTime; 361 } else { 362 m_response.setURL(m_firstRequest.url()); 363 const gchar* contentType = soup_request_get_content_type(m_soupRequest.get()); 364 m_response.setMimeType(extractMIMETypeFromMediaType(contentType)); 365 m_response.setTextEncodingName(extractCharsetFromMediaType(contentType)); 366 m_response.setExpectedContentLength(soup_request_get_content_length(m_soupRequest.get())); 367 if (m_response.mimeType().isEmpty()) 368 m_response.setMimeType(MIMETypeRegistry::mimeTypeForPath(m_response.url().path().toString())); 369 355 if (m_shouldContentSniff == ContentSniffingPolicy::SniffContent && m_soupMessage->status_code != SOUP_STATUS_NOT_MODIFIED) 356 m_response.setSniffedContentType(soup_request_get_content_type(m_soupRequest.get())); 357 m_response.updateFromSoupMessage(m_soupMessage.get()); 358 if (m_response.mimeType().isEmpty() && m_soupMessage->status_code != SOUP_STATUS_NOT_MODIFIED) 359 m_response.setMimeType(MIMETypeRegistry::mimeTypeForPath(m_response.url().path().toString())); 360 361 if (shouldStartHTTPRedirection()) { 370 362 m_inputStream = WTFMove(inputStream); 371 } 372 363 skipInputStreamForRedirection(); 364 return; 365 } 366 367 if (m_response.isMultipart()) 368 m_multipartInputStream = adoptGRef(soup_multipart_input_stream_new(m_soupMessage.get(), inputStream.get())); 369 else 370 m_inputStream = WTFMove(inputStream); 371 372 m_networkLoadMetrics.responseStart = MonotonicTime::now() - m_startTime; 373 373 dispatchDidReceiveResponse(); 374 374 } … … 758 758 GUniqueOutPtr<GError> error; 759 759 gssize bytesRead = g_input_stream_read_finish(inputStream, result, &error.outPtr()); 760 if (error) 761 task->didFail(ResourceError::genericGError(error.get(), task->m_soupRequest.get())); 762 else if (bytesRead > 0) 760 if (error) { 761 if (task->m_soupRequest) 762 task->didFail(ResourceError::genericGError(error.get(), task->m_soupRequest.get())); 763 else if (task->m_file) 764 task->didFail(ResourceError(g_quark_to_string(error->domain), error->code, task->m_firstRequest.url(), String::fromUTF8(error->message))); 765 else 766 RELEASE_ASSERT_NOT_REACHED(); 767 } else if (bytesRead > 0) 763 768 task->didRead(bytesRead); 764 769 else … … 1172 1177 } 1173 1178 1179 void NetworkDataTaskSoup::fileQueryInfoCallback(GFile* file, GAsyncResult* result, NetworkDataTaskSoup* task) 1180 { 1181 RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task); 1182 ASSERT(file == task->m_file.get()); 1183 1184 if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client) { 1185 task->clearRequest(); 1186 return; 1187 } 1188 1189 // Ignore the error here, it will be handled by g_file_read_async below. 1190 if (GRefPtr<GFileInfo> info = adoptGRef(g_file_query_info_finish(file, result, nullptr))) { 1191 task->didGetFileInfo(info.get()); 1192 1193 if (g_file_info_get_file_type(info.get()) == G_FILE_TYPE_DIRECTORY) { 1194 g_file_enumerate_children_async(file, "*", G_FILE_QUERY_INFO_NONE, RunLoopSourcePriority::AsyncIONetwork, task->m_cancellable.get(), 1195 reinterpret_cast<GAsyncReadyCallback>(enumerateFileChildrenCallback), protectedThis.leakRef()); 1196 return; 1197 } 1198 } 1199 1200 g_file_read_async(file, RunLoopSourcePriority::AsyncIONetwork, task->m_cancellable.get(), reinterpret_cast<GAsyncReadyCallback>(readFileCallback), protectedThis.leakRef()); 1201 } 1202 1203 void NetworkDataTaskSoup::didGetFileInfo(GFileInfo* info) 1204 { 1205 m_response.setURL(m_firstRequest.url()); 1206 if (g_file_info_get_file_type(info) == G_FILE_TYPE_DIRECTORY) { 1207 m_response.setMimeType("text/html"); 1208 m_response.setExpectedContentLength(-1); 1209 } else { 1210 const gchar* contentType = g_file_info_get_content_type(info); 1211 m_response.setMimeType(extractMIMETypeFromMediaType(contentType)); 1212 m_response.setTextEncodingName(extractCharsetFromMediaType(contentType)); 1213 if (m_response.mimeType().isEmpty()) 1214 m_response.setMimeType(MIMETypeRegistry::mimeTypeForPath(m_response.url().path().toString())); 1215 m_response.setExpectedContentLength(g_file_info_get_size(info)); 1216 } 1217 } 1218 1219 void NetworkDataTaskSoup::readFileCallback(GFile* file, GAsyncResult* result, NetworkDataTaskSoup* task) 1220 { 1221 RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task); 1222 ASSERT(file == task->m_file.get()); 1223 1224 if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client) { 1225 task->clearRequest(); 1226 return; 1227 } 1228 1229 if (task->state() == State::Suspended) { 1230 ASSERT(!task->m_pendingResult); 1231 task->m_pendingResult = result; 1232 return; 1233 } 1234 1235 GUniqueOutPtr<GError> error; 1236 GRefPtr<GInputStream> inputStream = adoptGRef(G_INPUT_STREAM(g_file_read_finish(file, result, &error.outPtr()))); 1237 if (error) 1238 task->didFail(ResourceError(g_quark_to_string(error->domain), error->code, task->m_firstRequest.url(), String::fromUTF8(error->message))); 1239 else 1240 task->didReadFile(WTFMove(inputStream)); 1241 } 1242 1243 void NetworkDataTaskSoup::enumerateFileChildrenCallback(GFile* file, GAsyncResult* result, NetworkDataTaskSoup* task) 1244 { 1245 RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task); 1246 ASSERT(file == task->m_file.get()); 1247 1248 if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client) { 1249 task->clearRequest(); 1250 return; 1251 } 1252 1253 if (task->state() == State::Suspended) { 1254 ASSERT(!task->m_pendingResult); 1255 task->m_pendingResult = result; 1256 return; 1257 } 1258 1259 GUniqueOutPtr<GError> error; 1260 GRefPtr<GFileEnumerator> enumerator = adoptGRef(g_file_enumerate_children_finish(file, result, &error.outPtr())); 1261 if (error) 1262 task->didFail(ResourceError(g_quark_to_string(error->domain), error->code, task->m_firstRequest.url(), String::fromUTF8(error->message))); 1263 else 1264 task->didReadFile(webkitDirectoryInputStreamNew(WTFMove(enumerator), task->m_firstRequest.url().string().utf8())); 1265 } 1266 1267 void NetworkDataTaskSoup::didReadFile(GRefPtr<GInputStream>&& inputStream) 1268 { 1269 m_inputStream = WTFMove(inputStream); 1270 dispatchDidReceiveResponse(); 1271 } 1272 1174 1273 } // namespace WebKit 1175 1274 -
trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.h
r263444 r271879 127 127 void didRestart(); 128 128 129 static void fileQueryInfoCallback(GFile*, GAsyncResult*, NetworkDataTaskSoup*); 130 void didGetFileInfo(GFileInfo*); 131 static void readFileCallback(GFile*, GAsyncResult*, NetworkDataTaskSoup*); 132 static void enumerateFileChildrenCallback(GFile*, GAsyncResult*, NetworkDataTaskSoup*); 133 void didReadFile(GRefPtr<GInputStream>&&); 134 129 135 WebCore::FrameIdentifier m_frameID; 130 136 WebCore::PageIdentifier m_pageID; … … 133 139 GRefPtr<SoupRequest> m_soupRequest; 134 140 GRefPtr<SoupMessage> m_soupMessage; 141 GRefPtr<GFile> m_file; 135 142 GRefPtr<GInputStream> m_inputStream; 136 143 GRefPtr<SoupMultipartInputStream> m_multipartInputStream; -
trunk/Source/WebKit/PlatformGTK.cmake
r271608 r271879 51 51 list(APPEND WebKit_DERIVED_SOURCES 52 52 ${DERIVED_SOURCES_WEBKIT2GTK_DIR}/InspectorGResourceBundle.c 53 ${DERIVED_SOURCES_WEBKIT2GTK_DIR}/WebKitDirectoryInputStreamData.cpp 53 54 ${DERIVED_SOURCES_WEBKIT2GTK_DIR}/WebKitResourcesGResourceBundle.c 54 55 … … 64 65 ) 65 66 endif () 67 68 set(WebKit_DirectoryInputStream_DATA 69 ${WEBKIT_DIR}/NetworkProcess/soup/Resources/directory.css 70 ${WEBKIT_DIR}/NetworkProcess/soup/Resources/directory.js 71 ) 72 73 add_custom_command( 74 OUTPUT ${DERIVED_SOURCES_WEBKIT2GTK_DIR}/WebKitDirectoryInputStreamData.cpp ${DERIVED_SOURCES_WEBKIT2GTK_DIR}/WebKitDirectoryInputStreamData.h 75 MAIN_DEPENDENCY ${WEBCORE_DIR}/css/make-css-file-arrays.pl 76 DEPENDS ${WebKit_DirectoryInputStream_DATA} 77 COMMAND ${PERL_EXECUTABLE} ${WEBCORE_DIR}/css/make-css-file-arrays.pl --defines "${FEATURE_DEFINES_WITH_SPACE_SEPARATOR}" --preprocessor "${CODE_GENERATOR_PREPROCESSOR}" ${DERIVED_SOURCES_WEBKIT2GTK_DIR}/WebKitDirectoryInputStreamData.h ${DERIVED_SOURCES_WEBKIT2GTK_DIR}/WebKitDirectoryInputStreamData.cpp ${WebKit_DirectoryInputStream_DATA} 78 VERBATIM 79 ) 66 80 67 81 if (USE_GTK4) -
trunk/Source/WebKit/PlatformWPE.cmake
r271396 r271879 83 83 list(APPEND WebKit_DERIVED_SOURCES 84 84 ${WebKit_DERIVED_SOURCES_DIR}/WebKitResourcesGResourceBundle.c 85 ${WebKit_DERIVED_SOURCES_DIR}/WebKitDirectoryInputStreamData.cpp 85 86 86 87 ${DERIVED_SOURCES_WPE_API_DIR}/WebKitEnumTypes.cpp 87 88 ${DERIVED_SOURCES_WPE_API_DIR}/WebKitWebProcessEnumTypes.cpp 89 ) 90 91 set(WebKit_DirectoryInputStream_DATA 92 ${WEBKIT_DIR}/NetworkProcess/soup/Resources/directory.css 93 ${WEBKIT_DIR}/NetworkProcess/soup/Resources/directory.js 94 ) 95 96 add_custom_command( 97 OUTPUT ${WebKit_DERIVED_SOURCES_DIR}/WebKitDirectoryInputStreamData.cpp ${WebKit_DERIVED_SOURCES_DIR}/WebKitDirectoryInputStreamData.h 98 MAIN_DEPENDENCY ${WEBCORE_DIR}/css/make-css-file-arrays.pl 99 DEPENDS ${WebKit_DirectoryInputStream_DATA} 100 COMMAND ${PERL_EXECUTABLE} ${WEBCORE_DIR}/css/make-css-file-arrays.pl --defines "${FEATURE_DEFINES_WITH_SPACE_SEPARATOR}" --preprocessor "${CODE_GENERATOR_PREPROCESSOR}" ${WebKit_DERIVED_SOURCES_DIR}/WebKitDirectoryInputStreamData.h ${WebKit_DERIVED_SOURCES_DIR}/WebKitDirectoryInputStreamData.cpp ${WebKit_DirectoryInputStream_DATA} 101 VERBATIM 88 102 ) 89 103 -
trunk/Source/WebKit/SourcesGTK.txt
r268458 r271879 44 44 NetworkProcess/soup/NetworkSessionSoup.cpp 45 45 NetworkProcess/soup/RemoteNetworkingContextSoup.cpp 46 NetworkProcess/soup/WebKitDirectoryInputStream.cpp 46 47 NetworkProcess/soup/WebSocketTaskSoup.cpp 47 48 -
trunk/Source/WebKit/SourcesWPE.txt
r268458 r271879 44 44 NetworkProcess/soup/NetworkSessionSoup.cpp 45 45 NetworkProcess/soup/RemoteNetworkingContextSoup.cpp 46 NetworkProcess/soup/WebKitDirectoryInputStream.cpp 46 47 NetworkProcess/soup/WebSocketTaskSoup.cpp 47 48 -
trunk/Tools/ChangeLog
r271878 r271879 1 2021-01-26 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [SOUP] Stop using SoupRequest API to load files in preparation for libsoup3 4 https://bugs.webkit.org/show_bug.cgi?id=220509 5 6 Reviewed by Adrian Perez de Castro. 7 8 Add WebKitDirectoryInputStream.cpp as exception for style checker. 9 10 * Scripts/webkitpy/style/checker.py: 11 1 12 2021-01-25 Ryosuke Niwa <rniwa@webkit.org> 2 13 -
trunk/Tools/Scripts/webkitpy/style/checker.py
r271517 r271879 234 234 os.path.join('Source', 'WebCore', 'platform', 'mediastream', 'gstreamer', 'GStreamerMediaStreamSource.cpp'), 235 235 os.path.join('Source', 'WebCore', 'platform', 'network', 'soup', 'ProxyResolverSoup.cpp'), 236 os.path.join('Source', 'WebCore', 'platform', 'network', 'soup', 'ProxyResolverSoup.h')], 236 os.path.join('Source', 'WebCore', 'platform', 'network', 'soup', 'ProxyResolverSoup.h'), 237 os.path.join('Source', 'WebKit', 'NetworkProcess', 'soup', 'WebKitDirectoryInputStream.h')], 237 238 ["-readability/naming", 238 239 "-readability/enum_casing"]),
Note:
See TracChangeset
for help on using the changeset viewer.