Changeset 234954 in webkit


Ignore:
Timestamp:
Aug 16, 2018 1:52:30 PM (6 years ago)
Author:
achristensen@apple.com
Message:

Consolidate data/string API loading paths
https://bugs.webkit.org/show_bug.cgi?id=188417

Reviewed by Michael Catanzaro.

loadHTMLString and loadData are basically duplicate code.
loadPlainTextString was also basically the same except it didn't set up a navigation, which
was almost certainly a bug, but nobody uses it in all of Apple and Debian. We should probably deprecate
and remove it, but for now I make it use the same data loading path.

  • UIProcess/API/C/WKPage.cpp:

(WKPageLoadData):
(WKPageLoadDataWithUserData):
(loadString):
(WKPageLoadHTMLString):
(WKPageLoadHTMLStringWithUserData):
(WKPageLoadPlainTextString):
(WKPageLoadPlainTextStringWithUserData):

  • UIProcess/API/Cocoa/WKBrowsingContextController.mm:

(-[WKBrowsingContextController loadHTMLString:baseURL:userData:]):
(-[WKBrowsingContextController loadData:MIMEType:textEncodingName:baseURL:userData:]):

  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView loadData:MIMEType:characterEncodingName:baseURL:]):
(-[WKWebView _loadData:MIMEType:characterEncodingName:baseURL:userData:]):

  • UIProcess/API/glib/WebKitWebView.cpp:

(webkit_web_view_load_html):
(webkit_web_view_load_plain_text):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::loadData):
(WebKit::WebPageProxy::loadHTMLString): Deleted.
(WebKit::WebPageProxy::loadPlainTextString): Deleted.

  • UIProcess/WebPageProxy.h:
  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::loadData):
(WebKit::WebPage::loadString): Deleted.

  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/WebPage.messages.in:
Location:
trunk/Source/WebKit
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r234946 r234954  
     12018-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
    1412018-08-16  Alex Christensen  <achristensen@webkit.org>
    242
  • trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp

    r234941 r234954  
    192192void WKPageLoadData(WKPageRef pageRef, WKDataRef dataRef, WKStringRef MIMETypeRef, WKStringRef encodingRef, WKURLRef baseURLRef)
    193193{
    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));
    195195}
    196196
    197197void WKPageLoadDataWithUserData(WKPageRef pageRef, WKDataRef dataRef, WKStringRef MIMETypeRef, WKStringRef encodingRef, WKURLRef baseURLRef, WKTypeRef userDataRef)
    198198{
    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
     202static 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));
    200215}
    201216
    202217void WKPageLoadHTMLString(WKPageRef pageRef, WKStringRef htmlStringRef, WKURLRef baseURLRef)
    203218{
    204     toImpl(pageRef)->loadHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef));
     219    WKPageLoadHTMLStringWithUserData(pageRef, htmlStringRef, baseURLRef, nullptr);
    205220}
    206221
    207222void WKPageLoadHTMLStringWithUserData(WKPageRef pageRef, WKStringRef htmlStringRef, WKURLRef baseURLRef, WKTypeRef userDataRef)
    208223{
    209     toImpl(pageRef)->loadHTMLString(toWTFString(htmlStringRef), toWTFString(baseURLRef), toImpl(userDataRef));
     224    loadString(pageRef, htmlStringRef, "text/html"_s, toWTFString(baseURLRef), userDataRef);
    210225}
    211226
     
    222237void WKPageLoadPlainTextString(WKPageRef pageRef, WKStringRef plainTextStringRef)
    223238{
    224     toImpl(pageRef)->loadPlainTextString(toWTFString(plainTextStringRef));   
     239    WKPageLoadPlainTextStringWithUserData(pageRef, plainTextStringRef, nullptr);
    225240}
    226241
    227242void WKPageLoadPlainTextStringWithUserData(WKPageRef pageRef, WKStringRef plainTextStringRef, WKTypeRef userDataRef)
    228243{
    229     toImpl(pageRef)->loadPlainTextString(toWTFString(plainTextStringRef), toImpl(userDataRef));   
     244    loadString(pageRef, plainTextStringRef, "text/plain"_s, blankURL().string(), userDataRef);
    230245}
    231246
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKBrowsingContextController.mm

    r234009 r234954  
    154154        wkUserData = ObjCObjectGraph::create(userData);
    155155
    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());
    157158}
    158159
     
    169170- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL userData:(id)userData
    170171{
    171     RefPtr<API::Data> apiData;
    172     if (data) {
    173         // FIXME: This should copy the data.
    174         apiData = API::Data::createWithoutCopying(data);
    175     }
    176 
    177172    RefPtr<ObjCObjectGraph> wkUserData;
    178173    if (userData)
    179174        wkUserData = ObjCObjectGraph::create(userData);
    180175
    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());
    182177}
    183178
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm

    r234946 r234954  
    889889- (WKNavigation *)loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL
    890890{
    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);
    892892    if (!navigation)
    893893        return nil;
     
    42234223- (WKNavigation *)_loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL userData:(id)userData
    42244224{
    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());
    42264226    if (!navigation)
    42274227        return nil;
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp

    r234009 r234954  
    2727#include "APINavigation.h"
    2828#include "APISerializedScriptValue.h"
     29#include "DataReference.h"
    2930#include "ImageOptions.h"
    3031#include "WebCertificateInfo.h"
     
    25842585    g_return_if_fail(content);
    25852586
    2586     getPage(webView).loadHTMLString(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));
    25872588}
    25882589
     
    26232624    g_return_if_fail(plainText);
    26242625
    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());
    26322627}
    26332628
     
    26572652    g_return_if_fail(bytesDataSize);
    26582653
    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"),
    26642655        encoding ? String::fromUTF8(encoding) : String::fromUTF8("UTF-8"), String::fromUTF8(baseURI));
    26652656}
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r234941 r234954  
    10501050}
    10511051
    1052 RefPtr<API::Navigation> WebPageProxy::loadData(API::Data* data, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData)
     1052RefPtr<API::Navigation> WebPageProxy::loadData(const IPC::DataReference& data, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData)
    10531053{
    10541054    if (m_isClosed)
     
    10661066    LoadParameters loadParameters;
    10671067    loadParameters.navigationID = navigation->navigationID();
    1068     loadParameters.data = data->dataReference();
     1068    loadParameters.data = data;
    10691069    loadParameters.MIMEType = MIMEType;
    10701070    loadParameters.encodingName = encoding;
     
    10751075    m_process->assumeReadAccessToBaseURL(baseURL);
    10761076    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);
    11071077    m_process->responsivenessTimer().start();
    11081078
     
    11441114    m_process->assumeReadAccessToBaseURL(unreachableURL);
    11451115    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);
    11681116    m_process->responsivenessTimer().start();
    11691117}
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r234941 r234954  
    457457    RefPtr<API::Navigation> loadRequest(WebCore::ResourceRequest&&, WebCore::ShouldOpenExternalURLsPolicy = WebCore::ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes, API::Object* userData = nullptr);
    458458    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);
    461460    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);
    463461    void loadWebArchiveData(API::Data*, API::Object* userData = nullptr);
    464462    void navigateToPDFLinkWithSimulatedClick(const String& url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint);
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r234920 r234954  
    13041304}
    13051305
    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)
     1306void WebPage::loadData(LoadParameters&& loadParameters)
    13181307{
    13191308    platformDidReceiveLoadParameters(loadParameters);
     
    13221311    URL baseURL = loadParameters.baseURLString.isEmpty() ? blankURL() : URL(URL(), loadParameters.baseURLString);
    13231312    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);
    13321313}
    13331314
     
    13401321    URL provisionalLoadErrorURL = loadParameters.provisionalLoadErrorURLString.isEmpty() ? URL() : URL(URL(), loadParameters.provisionalLoadErrorURLString);
    13411322    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    }
    13431332    m_mainFrame->coreFrame()->loader().setProvisionalLoadErrorBeingHandledURL({ });
    13441333}
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r234920 r234954  
    11561156
    11571157    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&);
    11591158
    11601159    // Actions
     
    11621161    void platformDidReceiveLoadParameters(const LoadParameters&);
    11631162    void loadRequest(LoadParameters&&);
    1164     void loadData(const LoadParameters&);
    1165     void loadString(const LoadParameters&);
     1163    void loadData(LoadParameters&&);
    11661164    void loadAlternateHTMLString(const LoadParameters&);
    11671165    void navigateToPDFLinkWithSimulatedClick(const String& url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint);
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in

    r234920 r234954  
    147147    LoadRequest(struct WebKit::LoadParameters loadParameters)
    148148    LoadData(struct WebKit::LoadParameters loadParameters)
    149     LoadString(struct WebKit::LoadParameters loadParameters)
    150149    LoadAlternateHTMLString(struct WebKit::LoadParameters loadParameters)
    151150
Note: See TracChangeset for help on using the changeset viewer.