Source/WebKit/ChangeLog

 12019-06-20 Brady Eidson <beidson@apple.com>
 2
 3 WebURLSchemeHandlerProxy::loadSynchronously crash with sync request.
 4 <rdar://problem/51862206> and https://bugs.webkit.org/show_bug.cgi?id=199063
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Don't use a DataReference for the sync reply type.
 9
 10 * UIProcess/WebPageProxy.messages.in:
 11 * UIProcess/WebURLSchemeHandler.h:
 12
 13 * UIProcess/WebURLSchemeTask.cpp:
 14 (WebKit::WebURLSchemeTask::didComplete):
 15 * UIProcess/WebURLSchemeTask.h:
 16
 17 * WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp:
 18 (WebKit::WebURLSchemeHandlerProxy::loadSynchronously):
 19
1202019-06-20 Alexander Mikhaylenko <exalm7659@gmail.com>
221
322 [GTK] Enable navigation swipe layout tests

Source/WebKit/UIProcess/WebPageProxy.messages.in

@@messages -> WebPageProxy {
536536
537537 StartURLSchemeTask(struct WebKit::URLSchemeTaskParameters parameters)
538538 StopURLSchemeTask(uint64_t handlerIdentifier, uint64_t taskIdentifier)
539  LoadSynchronousURLSchemeTask(struct WebKit::URLSchemeTaskParameters parameters) -> (WebCore::ResourceResponse response, WebCore::ResourceError error, IPC::DataReference data) Synchronous
 539 LoadSynchronousURLSchemeTask(struct WebKit::URLSchemeTaskParameters parameters) -> (WebCore::ResourceResponse response, WebCore::ResourceError error, Vector<char> data) Synchronous
540540
541541#if ENABLE(DEVICE_ORIENTATION)
542542 ShouldAllowDeviceOrientationAndMotionAccess(uint64_t frameID, struct WebCore::SecurityOriginData origin, bool mayPrompt) -> (enum:uint8_t WebCore::DeviceOrientationOrMotionPermissionState permissionState) Async

Source/WebKit/UIProcess/WebURLSchemeHandler.h

@@namespace WebKit {
4444class WebPageProxy;
4545class WebProcessProxy;
4646
47 using SyncLoadCompletionHandler = CompletionHandler<void(const WebCore::ResourceResponse&, const WebCore::ResourceError&, const IPC::DataReference&)>;
 47using SyncLoadCompletionHandler = CompletionHandler<void(const WebCore::ResourceResponse&, const WebCore::ResourceError&, const Vector<char>&)>;
4848
4949class WebURLSchemeHandler : public RefCounted<WebURLSchemeHandler> {
5050 WTF_MAKE_NONCOPYABLE(WebURLSchemeHandler);

Source/WebKit/UIProcess/WebURLSchemeTask.cpp

@@auto WebURLSchemeTask::didComplete(const ResourceError& error) -> ExceptionType
136136 m_completed = true;
137137
138138 if (isSync()) {
139  IPC::DataReference data;
140  if (m_syncData)
141  data = { reinterpret_cast<const uint8_t*>(m_syncData->data()), m_syncData->size() };
142  m_syncCompletionHandler(m_syncResponse, error, data);
 139 Vector<char> data;
 140 if (m_syncData) {
 141 data.resize(m_syncData->size());
 142 memcpy(data.data(), reinterpret_cast<const char*>(m_syncData->data()), m_syncData->size());
 143 }
 144
 145 m_syncCompletionHandler(m_syncResponse, error, WTFMove(data));
143146 m_syncData = nullptr;
144147 }
145148

Source/WebKit/UIProcess/WebURLSchemeTask.h

@@namespace WebKit {
4949class WebURLSchemeHandler;
5050class WebPageProxy;
5151
52 using SyncLoadCompletionHandler = CompletionHandler<void(const WebCore::ResourceResponse&, const WebCore::ResourceError&, const IPC::DataReference&)>;
 52using SyncLoadCompletionHandler = CompletionHandler<void(const WebCore::ResourceResponse&, const WebCore::ResourceError&, const Vector<char>&)>;
5353
5454class WebURLSchemeTask : public RefCounted<WebURLSchemeTask>, public InstanceCounted<WebURLSchemeTask> {
5555 WTF_MAKE_NONCOPYABLE(WebURLSchemeTask);

Source/WebKit/WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp

@@void WebURLSchemeHandlerProxy::startNewTask(ResourceLoader& loader)
6464
6565void WebURLSchemeHandlerProxy::loadSynchronously(ResourceLoadIdentifier loadIdentifier, const ResourceRequest& request, ResourceResponse& response, ResourceError& error, Vector<char>& data)
6666{
67  IPC::DataReference dataReference;
68  if (!m_webPage.sendSync(Messages::WebPageProxy::LoadSynchronousURLSchemeTask(URLSchemeTaskParameters { m_identifier, loadIdentifier, request }), Messages::WebPageProxy::LoadSynchronousURLSchemeTask::Reply(response, error, dataReference))) {
 67 data.shrink(0);
 68 if (!m_webPage.sendSync(Messages::WebPageProxy::LoadSynchronousURLSchemeTask(URLSchemeTaskParameters { m_identifier, loadIdentifier, request }), Messages::WebPageProxy::LoadSynchronousURLSchemeTask::Reply(response, error, data))) {
6969 error = failedCustomProtocolSyncLoad(request);
7070 return;
7171 }
72 
73  data.resize(dataReference.size());
74  memcpy(data.data(), dataReference.data(), dataReference.size());
7572}
7673
7774void WebURLSchemeHandlerProxy::stopAllTasks()