Changeset 234954 in webkit
- Timestamp:
- Aug 16, 2018, 1:52:30 PM (7 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/Source/WebKit/ChangeLog ¶
r234946 r234954 1 2018-08-16 Alex Christensen <achristensen@webkit.org> 2 3 Consolidate data/string API loading paths 4 https://bugs.webkit.org/show_bug.cgi?id=188417 5 6 Reviewed by Michael Catanzaro. 7 8 loadHTMLString and loadData are basically duplicate code. 9 loadPlainTextString was also basically the same except it didn't set up a navigation, which 10 was almost certainly a bug, but nobody uses it in all of Apple and Debian. We should probably deprecate 11 and remove it, but for now I make it use the same data loading path. 12 13 * UIProcess/API/C/WKPage.cpp: 14 (WKPageLoadData): 15 (WKPageLoadDataWithUserData): 16 (loadString): 17 (WKPageLoadHTMLString): 18 (WKPageLoadHTMLStringWithUserData): 19 (WKPageLoadPlainTextString): 20 (WKPageLoadPlainTextStringWithUserData): 21 * UIProcess/API/Cocoa/WKBrowsingContextController.mm: 22 (-[WKBrowsingContextController loadHTMLString:baseURL:userData:]): 23 (-[WKBrowsingContextController loadData:MIMEType:textEncodingName:baseURL:userData:]): 24 * UIProcess/API/Cocoa/WKWebView.mm: 25 (-[WKWebView loadData:MIMEType:characterEncodingName:baseURL:]): 26 (-[WKWebView _loadData:MIMEType:characterEncodingName:baseURL:userData:]): 27 * UIProcess/API/glib/WebKitWebView.cpp: 28 (webkit_web_view_load_html): 29 (webkit_web_view_load_plain_text): 30 * UIProcess/WebPageProxy.cpp: 31 (WebKit::WebPageProxy::loadData): 32 (WebKit::WebPageProxy::loadHTMLString): Deleted. 33 (WebKit::WebPageProxy::loadPlainTextString): Deleted. 34 * UIProcess/WebPageProxy.h: 35 * WebProcess/WebPage/WebPage.cpp: 36 (WebKit::WebPage::loadData): 37 (WebKit::WebPage::loadString): Deleted. 38 * WebProcess/WebPage/WebPage.h: 39 * WebProcess/WebPage/WebPage.messages.in: 40 1 41 2018-08-16 Alex Christensen <achristensen@webkit.org> 2 42 -
TabularUnified trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp ¶
r234941 r234954 192 192 void WKPageLoadData(WKPageRef pageRef, WKDataRef dataRef, WKStringRef MIMETypeRef, WKStringRef encodingRef, WKURLRef baseURLRef) 193 193 { 194 toImpl(pageRef)->loadData(toImpl(dataRef) , toWTFString(MIMETypeRef), toWTFString(encodingRef), toWTFString(baseURLRef));194 toImpl(pageRef)->loadData(toImpl(dataRef)->dataReference(), toWTFString(MIMETypeRef), toWTFString(encodingRef), toWTFString(baseURLRef)); 195 195 } 196 196 197 197 void WKPageLoadDataWithUserData(WKPageRef pageRef, WKDataRef dataRef, WKStringRef MIMETypeRef, WKStringRef encodingRef, WKURLRef baseURLRef, WKTypeRef userDataRef) 198 198 { 199 toImpl(pageRef)->loadData(toImpl(dataRef), toWTFString(MIMETypeRef), toWTFString(encodingRef), toWTFString(baseURLRef), toImpl(userDataRef)); 199 toImpl(pageRef)->loadData(toImpl(dataRef)->dataReference(), toWTFString(MIMETypeRef), toWTFString(encodingRef), toWTFString(baseURLRef), toImpl(userDataRef)); 200 } 201 202 static void loadString(WKPageRef pageRef, WKStringRef stringRef, const String& mimeType, const String& baseURL, WKTypeRef userDataRef) 203 { 204 String string = toWTFString(stringRef); 205 String encoding; 206 IPC::DataReference data; 207 if (string.isNull() || string.is8Bit()) { 208 encoding = "latin1"_s; 209 data = { reinterpret_cast<const uint8_t*>(string.characters8()), string.length() * sizeof(LChar) }; 210 } else { 211 encoding = "utf-16"_s; 212 data = { reinterpret_cast<const uint8_t*>(string.characters16()), string.length() * sizeof(UChar) }; 213 } 214 toImpl(pageRef)->loadData(data, mimeType, encoding, baseURL, toImpl(userDataRef)); 200 215 } 201 216 202 217 void WKPageLoadHTMLString(WKPageRef pageRef, WKStringRef htmlStringRef, WKURLRef baseURLRef) 203 218 { 204 toImpl(pageRef)->loadHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef));219 WKPageLoadHTMLStringWithUserData(pageRef, htmlStringRef, baseURLRef, nullptr); 205 220 } 206 221 207 222 void WKPageLoadHTMLStringWithUserData(WKPageRef pageRef, WKStringRef htmlStringRef, WKURLRef baseURLRef, WKTypeRef userDataRef) 208 223 { 209 toImpl(pageRef)->loadHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef), toImpl(userDataRef));224 loadString(pageRef, htmlStringRef, "text/html"_s, toWTFString(baseURLRef), userDataRef); 210 225 } 211 226 … … 222 237 void WKPageLoadPlainTextString(WKPageRef pageRef, WKStringRef plainTextStringRef) 223 238 { 224 toImpl(pageRef)->loadPlainTextString(toWTFString(plainTextStringRef));239 WKPageLoadPlainTextStringWithUserData(pageRef, plainTextStringRef, nullptr); 225 240 } 226 241 227 242 void WKPageLoadPlainTextStringWithUserData(WKPageRef pageRef, WKStringRef plainTextStringRef, WKTypeRef userDataRef) 228 243 { 229 toImpl(pageRef)->loadPlainTextString(toWTFString(plainTextStringRef), toImpl(userDataRef));244 loadString(pageRef, plainTextStringRef, "text/plain"_s, blankURL().string(), userDataRef); 230 245 } 231 246 -
TabularUnified trunk/Source/WebKit/UIProcess/API/Cocoa/WKBrowsingContextController.mm ¶
r234009 r234954 154 154 wkUserData = ObjCObjectGraph::create(userData); 155 155 156 _page->loadHTMLString(HTMLString, [baseURL _web_originalDataAsWTFString], wkUserData.get()); 156 NSData *data = [HTMLString dataUsingEncoding:NSUTF8StringEncoding]; 157 _page->loadData({ static_cast<const uint8_t*>(data.bytes), data.length }, "text/html"_s, "UTF-8"_s, [baseURL _web_originalDataAsWTFString], wkUserData.get()); 157 158 } 158 159 … … 169 170 - (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL userData:(id)userData 170 171 { 171 RefPtr<API::Data> apiData;172 if (data) {173 // FIXME: This should copy the data.174 apiData = API::Data::createWithoutCopying(data);175 }176 177 172 RefPtr<ObjCObjectGraph> wkUserData; 178 173 if (userData) 179 174 wkUserData = ObjCObjectGraph::create(userData); 180 175 181 _page->loadData( apiData.get(), MIMEType, encodingName, [baseURL _web_originalDataAsWTFString], wkUserData.get());176 _page->loadData({ static_cast<const uint8_t*>(data.bytes), data.length }, MIMEType, encodingName, [baseURL _web_originalDataAsWTFString], wkUserData.get()); 182 177 } 183 178 -
TabularUnified trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm ¶
r234946 r234954 889 889 - (WKNavigation *)loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL 890 890 { 891 auto navigation = _page->loadData( API::Data::createWithoutCopying(data).ptr(), MIMEType, characterEncodingName, baseURL.absoluteString);891 auto navigation = _page->loadData({ static_cast<const uint8_t*>(data.bytes), data.length }, MIMEType, characterEncodingName, baseURL.absoluteString); 892 892 if (!navigation) 893 893 return nil; … … 4223 4223 - (WKNavigation *)_loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL userData:(id)userData 4224 4224 { 4225 auto navigation = _page->loadData( API::Data::createWithoutCopying(data).ptr(), MIMEType, characterEncodingName, baseURL.absoluteString, WebKit::ObjCObjectGraph::create(userData).ptr());4225 auto navigation = _page->loadData({ static_cast<const uint8_t*>(data.bytes), data.length }, MIMEType, characterEncodingName, baseURL.absoluteString, WebKit::ObjCObjectGraph::create(userData).ptr()); 4226 4226 if (!navigation) 4227 4227 return nil; -
TabularUnified trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp ¶
r234009 r234954 27 27 #include "APINavigation.h" 28 28 #include "APISerializedScriptValue.h" 29 #include "DataReference.h" 29 30 #include "ImageOptions.h" 30 31 #include "WebCertificateInfo.h" … … 2584 2585 g_return_if_fail(content); 2585 2586 2586 getPage(webView).load HTMLString(String::fromUTF8(content), String::fromUTF8(baseURI));2587 getPage(webView).loadData({ reinterpret_cast<const uint8_t*>(content), content ? strlen(content) : 0 }, "text/html"_s, "UTF-8"_s, String::fromUTF8(baseURI)); 2587 2588 } 2588 2589 … … 2623 2624 g_return_if_fail(plainText); 2624 2625 2625 getPage(webView).loadPlainTextString(String::fromUTF8(plainText)); 2626 } 2627 2628 static void releaseGBytes(unsigned char*, const void* bytes) 2629 { 2630 // Balanced by g_bytes_ref in webkit_web_view_load_bytes(). 2631 g_bytes_unref(static_cast<GBytes*>(const_cast<void*>(bytes))); 2626 getPage(webView).loadData({ reinterpret_cast<const uint8_t*>(plainText), plainText ? strlen(plainText) : 0 }, "text/plain"_s, "UTF-8"_s, blankURL().string()); 2632 2627 } 2633 2628 … … 2657 2652 g_return_if_fail(bytesDataSize); 2658 2653 2659 // Balanced by g_bytes_unref in releaseGBytes. 2660 g_bytes_ref(bytes); 2661 2662 Ref<API::Data> data = API::Data::createWithoutCopying(static_cast<const unsigned char*>(bytesData), bytesDataSize, releaseGBytes, bytes); 2663 getPage(webView).loadData(data.ptr(), mimeType ? String::fromUTF8(mimeType) : String::fromUTF8("text/html"), 2654 getPage(webView).loadData({ reinterpret_cast<const uint8_t*>(bytesData), bytesDataSize }, mimeType ? String::fromUTF8(mimeType) : String::fromUTF8("text/html"), 2664 2655 encoding ? String::fromUTF8(encoding) : String::fromUTF8("UTF-8"), String::fromUTF8(baseURI)); 2665 2656 } -
TabularUnified trunk/Source/WebKit/UIProcess/WebPageProxy.cpp ¶
r234941 r234954 1050 1050 } 1051 1051 1052 RefPtr<API::Navigation> WebPageProxy::loadData( API::Data*data, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData)1052 RefPtr<API::Navigation> WebPageProxy::loadData(const IPC::DataReference& data, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData) 1053 1053 { 1054 1054 if (m_isClosed) … … 1066 1066 LoadParameters loadParameters; 1067 1067 loadParameters.navigationID = navigation->navigationID(); 1068 loadParameters.data = data ->dataReference();1068 loadParameters.data = data; 1069 1069 loadParameters.MIMEType = MIMEType; 1070 1070 loadParameters.encodingName = encoding; … … 1075 1075 m_process->assumeReadAccessToBaseURL(baseURL); 1076 1076 m_process->send(Messages::WebPage::LoadData(loadParameters), m_pageID); 1077 m_process->responsivenessTimer().start();1078 1079 return WTFMove(navigation);1080 }1081 1082 // FIXME: Get rid of loadHTMLString and just use loadData instead.1083 RefPtr<API::Navigation> WebPageProxy::loadHTMLString(const String& htmlString, const String& baseURL, API::Object* userData)1084 {1085 if (m_isClosed)1086 return nullptr;1087 1088 auto navigation = m_navigationState->createLoadDataNavigation();1089 1090 auto transaction = m_pageLoadState.transaction();1091 1092 m_pageLoadState.setPendingAPIRequestURL(transaction, !baseURL.isEmpty() ? baseURL : blankURL().string());1093 1094 if (!isValid())1095 reattachToWebProcess();1096 1097 LoadParameters loadParameters;1098 loadParameters.navigationID = navigation->navigationID();1099 loadParameters.string = htmlString;1100 loadParameters.MIMEType = "text/html"_s;1101 loadParameters.baseURLString = baseURL;1102 loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());1103 addPlatformLoadParameters(loadParameters);1104 1105 m_process->assumeReadAccessToBaseURL(baseURL);1106 m_process->send(Messages::WebPage::LoadString(loadParameters), m_pageID);1107 1077 m_process->responsivenessTimer().start(); 1108 1078 … … 1144 1114 m_process->assumeReadAccessToBaseURL(unreachableURL); 1145 1115 m_process->send(Messages::WebPage::LoadAlternateHTMLString(loadParameters), m_pageID); 1146 m_process->responsivenessTimer().start();1147 }1148 1149 void WebPageProxy::loadPlainTextString(const String& string, API::Object* userData)1150 {1151 if (m_isClosed)1152 return;1153 1154 if (!isValid())1155 reattachToWebProcess();1156 1157 auto transaction = m_pageLoadState.transaction();1158 m_pageLoadState.setPendingAPIRequestURL(transaction, blankURL().string());1159 1160 LoadParameters loadParameters;1161 loadParameters.navigationID = 0;1162 loadParameters.string = string;1163 loadParameters.MIMEType = "text/plain"_s;1164 loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());1165 addPlatformLoadParameters(loadParameters);1166 1167 m_process->send(Messages::WebPage::LoadString(loadParameters), m_pageID);1168 1116 m_process->responsivenessTimer().start(); 1169 1117 } -
TabularUnified trunk/Source/WebKit/UIProcess/WebPageProxy.h ¶
r234941 r234954 457 457 RefPtr<API::Navigation> loadRequest(WebCore::ResourceRequest&&, WebCore::ShouldOpenExternalURLsPolicy = WebCore::ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes, API::Object* userData = nullptr); 458 458 RefPtr<API::Navigation> loadFile(const String& fileURL, const String& resourceDirectoryURL, API::Object* userData = nullptr); 459 RefPtr<API::Navigation> loadData(API::Data*, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData = nullptr); 460 RefPtr<API::Navigation> loadHTMLString(const String& htmlString, const String& baseURL, API::Object* userData = nullptr); 459 RefPtr<API::Navigation> loadData(const IPC::DataReference&, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData = nullptr); 461 460 void loadAlternateHTMLString(const String& htmlString, const WebCore::URL& baseURL, const WebCore::URL& unreachableURL, API::Object* userData = nullptr); 462 void loadPlainTextString(const String&, API::Object* userData = nullptr);463 461 void loadWebArchiveData(API::Data*, API::Object* userData = nullptr); 464 462 void navigateToPDFLinkWithSimulatedClick(const String& url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint); -
TabularUnified trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp ¶
r234920 r234954 1304 1304 } 1305 1305 1306 void WebPage::loadStringImpl(uint64_t navigationID, const String& htmlString, const String& MIMEType, const URL& baseURL, const URL& unreachableURL, const UserData& userData) 1307 { 1308 if (!htmlString.isNull() && htmlString.is8Bit()) { 1309 auto sharedBuffer = SharedBuffer::create(reinterpret_cast<const char*>(htmlString.characters8()), htmlString.length() * sizeof(LChar)); 1310 loadDataImpl(navigationID, WTFMove(sharedBuffer), MIMEType, "latin1"_s, baseURL, unreachableURL, userData); 1311 } else { 1312 auto sharedBuffer = SharedBuffer::create(reinterpret_cast<const char*>(htmlString.characters16()), htmlString.length() * sizeof(UChar)); 1313 loadDataImpl(navigationID, WTFMove(sharedBuffer), MIMEType, "utf-16"_s, baseURL, unreachableURL, userData); 1314 } 1315 } 1316 1317 void WebPage::loadData(const LoadParameters& loadParameters) 1306 void WebPage::loadData(LoadParameters&& loadParameters) 1318 1307 { 1319 1308 platformDidReceiveLoadParameters(loadParameters); … … 1322 1311 URL baseURL = loadParameters.baseURLString.isEmpty() ? blankURL() : URL(URL(), loadParameters.baseURLString); 1323 1312 loadDataImpl(loadParameters.navigationID, WTFMove(sharedBuffer), loadParameters.MIMEType, loadParameters.encodingName, baseURL, URL(), loadParameters.userData); 1324 }1325 1326 void WebPage::loadString(const LoadParameters& loadParameters)1327 {1328 platformDidReceiveLoadParameters(loadParameters);1329 1330 URL baseURL = loadParameters.baseURLString.isEmpty() ? blankURL() : URL(URL(), loadParameters.baseURLString);1331 loadStringImpl(loadParameters.navigationID, loadParameters.string, loadParameters.MIMEType, baseURL, URL(), loadParameters.userData);1332 1313 } 1333 1314 … … 1340 1321 URL provisionalLoadErrorURL = loadParameters.provisionalLoadErrorURLString.isEmpty() ? URL() : URL(URL(), loadParameters.provisionalLoadErrorURLString); 1341 1322 m_mainFrame->coreFrame()->loader().setProvisionalLoadErrorBeingHandledURL(provisionalLoadErrorURL); 1342 loadStringImpl(0, loadParameters.string, "text/html"_s, baseURL, unreachableURL, loadParameters.userData); 1323 1324 const String& htmlString = loadParameters.string; 1325 if (!htmlString.isNull() && htmlString.is8Bit()) { 1326 auto sharedBuffer = SharedBuffer::create(reinterpret_cast<const char*>(htmlString.characters8()), htmlString.length() * sizeof(LChar)); 1327 loadDataImpl(0, WTFMove(sharedBuffer), "text/html"_s, "latin1"_s, baseURL, unreachableURL, loadParameters.userData); 1328 } else { 1329 auto sharedBuffer = SharedBuffer::create(reinterpret_cast<const char*>(htmlString.characters16()), htmlString.length() * sizeof(UChar)); 1330 loadDataImpl(0, WTFMove(sharedBuffer), "text/html"_s, "utf-16"_s, baseURL, unreachableURL, loadParameters.userData); 1331 } 1343 1332 m_mainFrame->coreFrame()->loader().setProvisionalLoadErrorBeingHandledURL({ }); 1344 1333 } -
TabularUnified trunk/Source/WebKit/WebProcess/WebPage/WebPage.h ¶
r234920 r234954 1156 1156 1157 1157 void loadDataImpl(uint64_t navigationID, Ref<WebCore::SharedBuffer>&&, const String& MIMEType, const String& encodingName, const WebCore::URL& baseURL, const WebCore::URL& failingURL, const UserData&); 1158 void loadStringImpl(uint64_t navigationID, const String&, const String& MIMEType, const WebCore::URL& baseURL, const WebCore::URL& failingURL, const UserData&);1159 1158 1160 1159 // Actions … … 1162 1161 void platformDidReceiveLoadParameters(const LoadParameters&); 1163 1162 void loadRequest(LoadParameters&&); 1164 void loadData(const LoadParameters&); 1165 void loadString(const LoadParameters&); 1163 void loadData(LoadParameters&&); 1166 1164 void loadAlternateHTMLString(const LoadParameters&); 1167 1165 void navigateToPDFLinkWithSimulatedClick(const String& url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint); -
TabularUnified trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in ¶
r234920 r234954 147 147 LoadRequest(struct WebKit::LoadParameters loadParameters) 148 148 LoadData(struct WebKit::LoadParameters loadParameters) 149 LoadString(struct WebKit::LoadParameters loadParameters)150 149 LoadAlternateHTMLString(struct WebKit::LoadParameters loadParameters) 151 150
Note:
See TracChangeset
for help on using the changeset viewer.