Skip to content

Commit

Permalink
REGRESSION(256488@main): Gibberish text visible in blank placeholder …
Browse files Browse the repository at this point in the history
…tabs before first "real" page load

https://bugs.webkit.org/show_bug.cgi?id=248232

Reviewed by Michael Catanzaro.

* Source/WebKit/UIProcess/API/C/WKPage.cpp:
(dataReferenceFrom):
(WKPageLoadAlternateHTMLStringWithUserData):
* Source/WebKit/UIProcess/API/Cocoa/WKBrowsingContextController.mm:
(-[WKBrowsingContextController loadAlternateHTMLString:baseURL:forUnreachableURL:]):
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _loadAlternateHTMLString:baseURL:forUnreachableURL:]):
* Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:
(webkit_web_view_load_alternate_html):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::loadAlternateHTML):
* Source/WebKit/UIProcess/WebPageProxy.h:

Canonical link: https://commits.webkit.org/257084@main
  • Loading branch information
Alex Christensen authored and achristensen07 committed Nov 28, 2022
1 parent fe7a1d0 commit baf4b59
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 8 deletions.
9 changes: 8 additions & 1 deletion Source/WebKit/UIProcess/API/C/WKPage.cpp
Expand Up @@ -254,6 +254,13 @@ static IPC::DataReference dataFrom(const String& string)
return { string.characters8(), string.length() * sizeof(LChar) };
}

static Ref<WebCore::DataSegment> dataReferenceFrom(const String& string)
{
if (string.isNull() || !string.is8Bit())
return WebCore::DataSegment::create(Vector<uint8_t>(reinterpret_cast<const uint8_t*>(string.characters16()), string.length() * sizeof(UChar)));
return WebCore::DataSegment::create(Vector<uint8_t>(string.characters8(), string.length() * sizeof(LChar)));
}

static void loadString(WKPageRef pageRef, WKStringRef stringRef, const String& mimeType, const String& baseURL, WKTypeRef userDataRef)
{
String string = toWTFString(stringRef);
Expand Down Expand Up @@ -282,7 +289,7 @@ void WKPageLoadAlternateHTMLStringWithUserData(WKPageRef pageRef, WKStringRef ht
{
CRASH_IF_SUSPENDED;
String string = toWTFString(htmlStringRef);
toImpl(pageRef)->loadAlternateHTML(dataFrom(string), encodingOf(string), URL { toWTFString(baseURLRef) }, URL { toWTFString(unreachableURLRef) }, toImpl(userDataRef));
toImpl(pageRef)->loadAlternateHTML(dataReferenceFrom(string), encodingOf(string), URL { toWTFString(baseURLRef) }, URL { toWTFString(unreachableURLRef) }, toImpl(userDataRef));
}

void WKPageLoadPlainTextString(WKPageRef pageRef, WKStringRef plainTextStringRef)
Expand Down
Expand Up @@ -178,7 +178,7 @@ - (void)loadHTMLString:(NSString *)HTMLString baseURL:(NSURL *)baseURL userData:
- (void)loadAlternateHTMLString:(NSString *)string baseURL:(NSURL *)baseURL forUnreachableURL:(NSURL *)unreachableURL
{
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
_page->loadAlternateHTML({ static_cast<const uint8_t*>(data.bytes), data.length }, "UTF-8"_s, baseURL, unreachableURL);
_page->loadAlternateHTML(WebCore::DataSegment::create((__bridge CFDataRef)data), "UTF-8"_s, baseURL, unreachableURL);
}

- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL
Expand Down
2 changes: 1 addition & 1 deletion Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
Expand Up @@ -2567,7 +2567,7 @@ - (void)_loadAlternateHTMLString:(NSString *)string baseURL:(NSURL *)baseURL for
{
THROW_IF_SUSPENDED;
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
_page->loadAlternateHTML({ static_cast<const uint8_t*>(data.bytes), data.length }, "UTF-8"_s, baseURL, unreachableURL);
_page->loadAlternateHTML(WebCore::DataSegment::create((__bridge CFDataRef)data), "UTF-8"_s, baseURL, unreachableURL);
}

- (WKNavigation *)_loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL userData:(id)userData
Expand Down
3 changes: 2 additions & 1 deletion Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp
Expand Up @@ -74,6 +74,7 @@
#include <jsc/JSCContextPrivate.h>
#include <WebCore/CertificateInfo.h>
#include <WebCore/JSDOMExceptionHandling.h>
#include <WebCore/SharedBuffer.h>
#include <WebCore/URLSoup.h>
#include <glib/gi18n-lib.h>
#include <libsoup/soup.h>
Expand Down Expand Up @@ -3063,7 +3064,7 @@ void webkit_web_view_load_alternate_html(WebKitWebView* webView, const gchar* co
g_return_if_fail(content);
g_return_if_fail(contentURI);

getPage(webView).loadAlternateHTML({ reinterpret_cast<const uint8_t*>(content), content ? strlen(content) : 0 }, "UTF-8"_s, URL { String::fromUTF8(baseURI) }, URL { String::fromUTF8(contentURI) });
getPage(webView).loadAlternateHTML(WebCore::DataSegment::create(Vector<uint8_t>(reinterpret_cast<const uint8_t*>(content), content ? strlen(content) : 0)), "UTF-8"_s, URL { String::fromUTF8(baseURI) }, URL { String::fromUTF8(contentURI) });
}

/**
Expand Down
6 changes: 3 additions & 3 deletions Source/WebKit/UIProcess/WebPageProxy.cpp
Expand Up @@ -1691,7 +1691,7 @@ RefPtr<API::Navigation> WebPageProxy::loadSimulatedRequest(WebCore::ResourceRequ
return navigation;
}

void WebPageProxy::loadAlternateHTML(const IPC::DataReference& htmlData, const String& encoding, const URL& baseURL, const URL& unreachableURL, API::Object* userData)
void WebPageProxy::loadAlternateHTML(Ref<WebCore::DataSegment>&& htmlData, const String& encoding, const URL& baseURL, const URL& unreachableURL, API::Object* userData)
{
WEBPAGEPROXY_RELEASE_LOG(Loading, "loadAlternateHTML");

Expand Down Expand Up @@ -1719,7 +1719,6 @@ void WebPageProxy::loadAlternateHTML(const IPC::DataReference& htmlData, const S

LoadParameters loadParameters;
loadParameters.navigationID = 0;
loadParameters.data = htmlData;
loadParameters.MIMEType = "text/html"_s;
loadParameters.encodingName = encoding;
loadParameters.baseURLString = baseURL.string();
Expand All @@ -1728,7 +1727,8 @@ void WebPageProxy::loadAlternateHTML(const IPC::DataReference& htmlData, const S
loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());
addPlatformLoadParameters(process(), loadParameters);

websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::AddAllowedFirstPartyForCookies(m_process->coreProcessIdentifier(), RegistrableDomain(baseURL)), [this, protectedThis = Ref { *this }, process = m_process, loadParameters = WTFMove(loadParameters), baseURL, unreachableURL] {
websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::AddAllowedFirstPartyForCookies(m_process->coreProcessIdentifier(), RegistrableDomain(baseURL)), [this, protectedThis = Ref { *this }, process = m_process, loadParameters = WTFMove(loadParameters), baseURL, unreachableURL, htmlData = WTFMove(htmlData)] () mutable {
loadParameters.data = { htmlData->data(), htmlData->size() };
process->markProcessAsRecentlyUsed();
process->assumeReadAccessToBaseURL(*this, baseURL.string());
process->assumeReadAccessToBaseURL(*this, unreachableURL.string());
Expand Down
3 changes: 2 additions & 1 deletion Source/WebKit/UIProcess/WebPageProxy.h
Expand Up @@ -252,6 +252,7 @@ namespace WebCore {
class AuthenticationChallenge;
class CertificateInfo;
class Cursor;
class DataSegment;
class DragData;
class FloatRect;
class FontAttributeChanges;
Expand Down Expand Up @@ -687,7 +688,7 @@ class WebPageProxy final : public API::ObjectImpl<API::Object::Type::Page>
RefPtr<API::Navigation> loadFile(const String& fileURL, const String& resourceDirectoryURL, bool isAppInitiated = true, API::Object* userData = nullptr);
RefPtr<API::Navigation> loadData(const IPC::DataReference&, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData = nullptr, WebCore::ShouldOpenExternalURLsPolicy = WebCore::ShouldOpenExternalURLsPolicy::ShouldNotAllow);
RefPtr<API::Navigation> loadSimulatedRequest(WebCore::ResourceRequest&&, WebCore::ResourceResponse&&, const IPC::DataReference&);
void loadAlternateHTML(const IPC::DataReference&, const String& encoding, const URL& baseURL, const URL& unreachableURL, API::Object* userData = nullptr);
void loadAlternateHTML(Ref<WebCore::DataSegment>&&, const String& encoding, const URL& baseURL, const URL& unreachableURL, API::Object* userData = nullptr);
void loadWebArchiveData(API::Data*, API::Object* userData = nullptr);
void navigateToPDFLinkWithSimulatedClick(const String& url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint);

Expand Down

0 comments on commit baf4b59

Please sign in to comment.