Changeset 250597 in webkit


Ignore:
Timestamp:
Oct 2, 2019 1:00:33 AM (5 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK][WPE] Stop using legacy custom protocol implementation
https://bugs.webkit.org/show_bug.cgi?id=202407

Reviewed by Žan Doberšek.

.:

Make LEGACY_CUSTOM_PROTOCOL_MANAGER disabled by default.

  • Source/cmake/OptionsFTW.cmake:
  • Source/cmake/OptionsPlayStation.cmake:
  • Source/cmake/OptionsWin.cmake:
  • Source/cmake/WebKitFeatures.cmake:

Source/WebCore:

Remove the code to setup custom protocols in soup session.

  • platform/network/soup/SoupNetworkSession.cpp:

(WebCore::SoupNetworkSession::SoupNetworkSession):

  • platform/network/soup/SoupNetworkSession.h:

Source/WebKit:

Use the new approach, which is simpler and doesn't require to go to the network process to load custom
protocols.

  • NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp: Removed.
  • NetworkProcess/NetworkProcess.cpp:

(WebKit::m_messagePortChannelRegistry):

  • NetworkProcess/soup/WebKitSoupRequestInputStream.cpp: Removed.
  • NetworkProcess/soup/WebKitSoupRequestInputStream.h: Removed.
  • PlatformGTK.cmake:
  • PlatformWPE.cmake:
  • SourcesGTK.txt:
  • SourcesWPE.txt:
  • UIProcess/API/glib/WebKitCustomProtocolManagerClient.cpp: Removed.
  • UIProcess/API/glib/WebKitCustomProtocolManagerClient.h: Removed.
  • UIProcess/API/glib/WebKitURISchemeRequest.cpp:

(webkitURISchemeRequestCreate):
(webkit_uri_scheme_request_get_scheme):
(webkit_uri_scheme_request_get_uri):
(webkit_uri_scheme_request_get_path):
(webkit_uri_scheme_request_get_web_view):
(webkitURISchemeRequestReadCallback):
(webkit_uri_scheme_request_finish_error):

  • UIProcess/API/glib/WebKitURISchemeRequestPrivate.h:
  • UIProcess/API/glib/WebKitWebContext.cpp:

(webkitWebContextConstructed):
(webkitWebContextDispose):
(webkit_web_context_register_uri_scheme):
(webkitWebContextCreatePageForWebView):

  • UIProcess/API/glib/WebKitWebContextPrivate.h:
  • UIProcess/WebURLSchemeTask.h:

(WebKit::WebURLSchemeTask::request const):

  • UIProcess/soup/WebProcessPoolSoup.cpp:

Tools:

Remove the tests to check failure after committed, because it's not possible to test it with current code.

  • TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:

(testWebContextURIScheme):

Location:
trunk
Files:
5 deleted
22 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r250596 r250597  
     12019-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][WPE] Stop using legacy custom protocol implementation
     4        https://bugs.webkit.org/show_bug.cgi?id=202407
     5
     6        Reviewed by Žan Doberšek.
     7
     8        Make LEGACY_CUSTOM_PROTOCOL_MANAGER disabled by default.
     9
     10        * Source/cmake/OptionsFTW.cmake:
     11        * Source/cmake/OptionsPlayStation.cmake:
     12        * Source/cmake/OptionsWin.cmake:
     13        * Source/cmake/WebKitFeatures.cmake:
     14
    1152019-10-02  Zan Dobersek  <zdobersek@igalia.com>
    216
  • trunk/Source/WebCore/ChangeLog

    r250596 r250597  
     12019-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][WPE] Stop using legacy custom protocol implementation
     4        https://bugs.webkit.org/show_bug.cgi?id=202407
     5
     6        Reviewed by Žan Doberšek.
     7
     8        Remove the code to setup custom protocols in soup session.
     9
     10        * platform/network/soup/SoupNetworkSession.cpp:
     11        (WebCore::SoupNetworkSession::SoupNetworkSession):
     12        * platform/network/soup/SoupNetworkSession.h:
     13
    1142019-10-02  Zan Dobersek  <zdobersek@igalia.com>
    215
  • trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp

    r249197 r250597  
    4646
    4747static bool gIgnoreTLSErrors;
    48 static GType gCustomProtocolRequestType;
    4948
    5049static CString& initialAcceptLanguages()
     
    134133#endif
    135134        nullptr);
    136 
    137     setupCustomProtocols();
    138135
    139136    if (!initialAcceptLanguages().isNull())
     
    338335}
    339336
    340 void SoupNetworkSession::setCustomProtocolRequestType(GType requestType)
    341 {
    342     ASSERT(g_type_is_a(requestType, SOUP_TYPE_REQUEST));
    343     gCustomProtocolRequestType = requestType;
    344 }
    345 
    346 void SoupNetworkSession::setupCustomProtocols()
    347 {
    348     if (!g_type_is_a(gCustomProtocolRequestType, SOUP_TYPE_REQUEST))
    349         return;
    350 
    351     auto* requestClass = static_cast<SoupRequestClass*>(g_type_class_peek(gCustomProtocolRequestType));
    352     if (!requestClass || !requestClass->schemes)
    353         return;
    354 
    355     soup_session_add_feature_by_type(m_soupSession.get(), gCustomProtocolRequestType);
    356 }
    357 
    358337void SoupNetworkSession::setShouldIgnoreTLSErrors(bool ignoreTLSErrors)
    359338{
  • trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.h

    r249192 r250597  
    7373    static void allowSpecificHTTPSCertificateForHost(const CertificateInfo&, const String& host);
    7474
    75     static void setCustomProtocolRequestType(GType);
    76     void setupCustomProtocols();
    77 
    7875    void getHostNamesWithHSTSCache(HashSet<String>&);
    7976    void deleteHSTSCacheForHostNames(const Vector<String>&);
  • trunk/Source/WebKit/ChangeLog

    r250596 r250597  
     12019-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][WPE] Stop using legacy custom protocol implementation
     4        https://bugs.webkit.org/show_bug.cgi?id=202407
     5
     6        Reviewed by Žan Doberšek.
     7
     8        Use the new approach, which is simpler and doesn't require to go to the network process to load custom
     9        protocols.
     10
     11        * NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp: Removed.
     12        * NetworkProcess/NetworkProcess.cpp:
     13        (WebKit::m_messagePortChannelRegistry):
     14        * NetworkProcess/soup/WebKitSoupRequestInputStream.cpp: Removed.
     15        * NetworkProcess/soup/WebKitSoupRequestInputStream.h: Removed.
     16        * PlatformGTK.cmake:
     17        * PlatformWPE.cmake:
     18        * SourcesGTK.txt:
     19        * SourcesWPE.txt:
     20        * UIProcess/API/glib/WebKitCustomProtocolManagerClient.cpp: Removed.
     21        * UIProcess/API/glib/WebKitCustomProtocolManagerClient.h: Removed.
     22        * UIProcess/API/glib/WebKitURISchemeRequest.cpp:
     23        (webkitURISchemeRequestCreate):
     24        (webkit_uri_scheme_request_get_scheme):
     25        (webkit_uri_scheme_request_get_uri):
     26        (webkit_uri_scheme_request_get_path):
     27        (webkit_uri_scheme_request_get_web_view):
     28        (webkitURISchemeRequestReadCallback):
     29        (webkit_uri_scheme_request_finish_error):
     30        * UIProcess/API/glib/WebKitURISchemeRequestPrivate.h:
     31        * UIProcess/API/glib/WebKitWebContext.cpp:
     32        (webkitWebContextConstructed):
     33        (webkitWebContextDispose):
     34        (webkit_web_context_register_uri_scheme):
     35        (webkitWebContextCreatePageForWebView):
     36        * UIProcess/API/glib/WebKitWebContextPrivate.h:
     37        * UIProcess/WebURLSchemeTask.h:
     38        (WebKit::WebURLSchemeTask::request const):
     39        * UIProcess/soup/WebProcessPoolSoup.cpp:
     40
    1412019-10-02  Zan Dobersek  <zdobersek@igalia.com>
    242
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp

    r250589 r250597  
    162162    addSupplement<LegacyCustomProtocolManager>();
    163163#endif
    164 #if PLATFORM(COCOA) || USE(SOUP)
     164#if PLATFORM(COCOA)
    165165    LegacyCustomProtocolManager::networkProcessCreated(*this);
    166166#endif
  • trunk/Source/WebKit/PlatformGTK.cmake

    r246925 r250597  
    3434
    3535list(APPEND WebKit_MESSAGES_IN_FILES
    36     NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.messages.in
    37 
    3836    UIProcess/ViewGestureController.messages.in
    39 
    40     UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.messages.in
    4137
    4238    WebProcess/WebPage/ViewGestureGeometryCollector.messages.in
     
    374370    "${FORWARDING_HEADERS_DIR}/JavaScriptCore/glib"
    375371    "${WEBKIT_DIR}/PluginProcess/unix"
    376     "${WEBKIT_DIR}/NetworkProcess/CustomProtocols/soup"
    377372    "${WEBKIT_DIR}/NetworkProcess/glib"
    378373    "${WEBKIT_DIR}/NetworkProcess/gtk"
     
    397392    "${WEBKIT_DIR}/UIProcess/API/gtk"
    398393    "${WEBKIT_DIR}/UIProcess/CoordinatedGraphics"
    399     "${WEBKIT_DIR}/UIProcess/Network/CustomProtocols/soup"
    400394    "${WEBKIT_DIR}/UIProcess/Plugins/gtk"
    401395    "${WEBKIT_DIR}/UIProcess/geoclue"
  • trunk/Source/WebKit/PlatformWPE.cmake

    r246873 r250597  
    7474list(APPEND WebKit_UNIFIED_SOURCE_LIST_FILES
    7575    "SourcesWPE.txt"
    76 )
    77 
    78 list(APPEND WebKit_MESSAGES_IN_FILES
    79     NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.messages.in
    80 
    81     UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.messages.in
    8276)
    8377
     
    233227    "${DERIVED_SOURCES_DIR}"
    234228    "${DERIVED_SOURCES_WPE_API_DIR}"
    235     "${WEBKIT_DIR}/NetworkProcess/CustomProtocols/soup"
    236229    "${WEBKIT_DIR}/NetworkProcess/glib"
    237230    "${WEBKIT_DIR}/NetworkProcess/soup"
     
    253246    "${WEBKIT_DIR}/UIProcess/API/wpe"
    254247    "${WEBKIT_DIR}/UIProcess/CoordinatedGraphics"
    255     "${WEBKIT_DIR}/UIProcess/Network/CustomProtocols/soup"
    256248    "${WEBKIT_DIR}/UIProcess/geoclue"
    257249    "${WEBKIT_DIR}/UIProcess/gstreamer"
  • trunk/Source/WebKit/SourcesGTK.txt

    r250517 r250597  
    2727NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp
    2828
    29 NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.cpp
    30 
    31 NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp
    32 
    3329NetworkProcess/cache/NetworkCacheDataSoup.cpp
    3430NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp
     
    4238NetworkProcess/soup/NetworkSessionSoup.cpp
    4339NetworkProcess/soup/RemoteNetworkingContextSoup.cpp
    44 NetworkProcess/soup/WebKitSoupRequestInputStream.cpp
    4540NetworkProcess/soup/WebSocketTaskSoup.cpp
    4641
     
    135130UIProcess/API/glib/WebKitCookieManager.cpp @no-unify
    136131UIProcess/API/glib/WebKitCredential.cpp @no-unify
    137 UIProcess/API/glib/WebKitCustomProtocolManagerClient.cpp @no-unify
    138132UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp @no-unify
    139133UIProcess/API/glib/WebKitDownload.cpp @no-unify
     
    215209UIProcess/Launcher/glib/ProcessLauncherGLib.cpp @no-unify
    216210UIProcess/Launcher/glib/BubblewrapLauncher.cpp @no-unify
    217 
    218 UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.cpp
    219211
    220212UIProcess/linux/MemoryPressureMonitor.cpp
  • trunk/Source/WebKit/SourcesWPE.txt

    r250517 r250597  
    2727NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp
    2828
    29 NetworkProcess/CustomProtocols/LegacyCustomProtocolManager.cpp
    30 
    31 NetworkProcess/CustomProtocols/soup/LegacyCustomProtocolManagerSoup.cpp
    32 
    3329NetworkProcess/cache/NetworkCacheDataSoup.cpp
    3430NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp
     
    4238NetworkProcess/soup/NetworkSessionSoup.cpp
    4339NetworkProcess/soup/RemoteNetworkingContextSoup.cpp
    44 NetworkProcess/soup/WebKitSoupRequestInputStream.cpp
    4540NetworkProcess/soup/WebSocketTaskSoup.cpp
    4641
     
    124119UIProcess/API/glib/WebKitCookieManager.cpp @no-unify
    125120UIProcess/API/glib/WebKitCredential.cpp @no-unify
    126 UIProcess/API/glib/WebKitCustomProtocolManagerClient.cpp @no-unify
    127121UIProcess/API/glib/WebKitDeviceInfoPermissionRequest.cpp @no-unify
    128122UIProcess/API/glib/WebKitDownload.cpp @no-unify
     
    198192UIProcess/Launcher/glib/BubblewrapLauncher.cpp
    199193
    200 UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.cpp
    201 
    202194UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp
    203195UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeRequest.cpp

    r249501 r250597  
    5959struct _WebKitURISchemeRequestPrivate {
    6060    WebKitWebContext* webContext;
    61     LegacyCustomProtocolManagerProxy* manager;
     61    RefPtr<WebURLSchemeTask> task;
     62
    6263    RefPtr<WebPageProxy> initiatingPage;
    63     uint64_t requestID;
    6464    CString uri;
    6565    GUniquePtr<SoupURI> soupURI;
     
    7979}
    8080
    81 WebKitURISchemeRequest* webkitURISchemeRequestCreate(uint64_t requestID, WebKitWebContext* webContext, const ResourceRequest& resourceRequest, LegacyCustomProtocolManagerProxy& manager)
     81WebKitURISchemeRequest* webkitURISchemeRequestCreate(WebKitWebContext* webContext, WebPageProxy& page, WebURLSchemeTask& task)
    8282{
    8383    WebKitURISchemeRequest* request = WEBKIT_URI_SCHEME_REQUEST(g_object_new(WEBKIT_TYPE_URI_SCHEME_REQUEST, nullptr));
    8484    request->priv->webContext = webContext;
    85     request->priv->manager = &manager;
    86     request->priv->uri = resourceRequest.url().string().utf8();
    87     request->priv->requestID = requestID;
    88 
    89     ASSERT(resourceRequest.initiatingPageID());
    90     request->priv->initiatingPage = WebProcessProxy::webPage(makeObjectIdentifier<WebPageProxyIdentifierType>(*resourceRequest.initiatingPageID()));
    91     ASSERT(request->priv->initiatingPage);
    92 
     85    request->priv->task = &task;
     86    request->priv->initiatingPage = &page;
    9387    return request;
    9488}
     
    9993}
    10094
    101 LegacyCustomProtocolManagerProxy* webkitURISchemeRequestGetManager(WebKitURISchemeRequest* request)
    102 {
    103     return request->priv->manager;
    104 }
    105 
    106 void webkitURISchemeRequestInvalidate(WebKitURISchemeRequest* request)
    107 {
    108     request->priv->manager = nullptr;
    109     webkitURISchemeRequestCancel(request);
    110 }
    111 
    11295/**
    11396 * webkit_uri_scheme_request_get_scheme:
     
    120103const char* webkit_uri_scheme_request_get_scheme(WebKitURISchemeRequest* request)
    121104{
    122     g_return_val_if_fail(WEBKIT_IS_URI_SCHEME_REQUEST(request), 0);
     105    g_return_val_if_fail(WEBKIT_IS_URI_SCHEME_REQUEST(request), nullptr);
    123106
    124107    if (!request->priv->soupURI)
    125         request->priv->soupURI.reset(soup_uri_new(request->priv->uri.data()));
     108        request->priv->soupURI = urlToSoupURI(request->priv->task->request().url());
     109
    126110    return request->priv->soupURI->scheme;
    127111}
     
    137121const char* webkit_uri_scheme_request_get_uri(WebKitURISchemeRequest* request)
    138122{
    139     g_return_val_if_fail(WEBKIT_IS_URI_SCHEME_REQUEST(request), 0);
     123    g_return_val_if_fail(WEBKIT_IS_URI_SCHEME_REQUEST(request), nullptr);
     124
     125    if (request->priv->uri.isNull())
     126        request->priv->uri = request->priv->task->request().url().string().utf8();
    140127
    141128    return request->priv->uri.data();
     
    152139const char* webkit_uri_scheme_request_get_path(WebKitURISchemeRequest* request)
    153140{
    154     g_return_val_if_fail(WEBKIT_IS_URI_SCHEME_REQUEST(request), 0);
     141    g_return_val_if_fail(WEBKIT_IS_URI_SCHEME_REQUEST(request), nullptr);
    155142
    156143    if (!request->priv->soupURI)
    157         request->priv->soupURI.reset(soup_uri_new(request->priv->uri.data()));
     144        request->priv->soupURI = urlToSoupURI(request->priv->task->request().url());
     145
    158146    return request->priv->soupURI->path;
    159147}
     
    169157WebKitWebView* webkit_uri_scheme_request_get_web_view(WebKitURISchemeRequest* request)
    170158{
    171     g_return_val_if_fail(WEBKIT_IS_URI_SCHEME_REQUEST(request), 0);
     159    g_return_val_if_fail(WEBKIT_IS_URI_SCHEME_REQUEST(request), nullptr);
    172160
    173161    return webkitWebContextGetWebViewForPage(request->priv->webContext, request->priv->initiatingPage.get());
     
    177165{
    178166    GRefPtr<WebKitURISchemeRequest> request = adoptGRef(schemeRequest);
    179     WebKitURISchemeRequestPrivate* priv = request->priv;
    180167    GUniqueOutPtr<GError> error;
    181168    gssize bytesRead = g_input_stream_read_finish(inputStream, result, &error.outPtr());
    182     if (!priv->manager) {
    183         webkitWebContextDidFinishLoadingCustomProtocol(priv->webContext, priv->requestID);
    184         return;
    185     }
    186 
    187169    if (bytesRead == -1) {
    188170        webkit_uri_scheme_request_finish_error(request.get(), error.get());
     
    190172    }
    191173
     174    WebKitURISchemeRequestPrivate* priv = request->priv;
    192175    // Need to check the stream before proceeding as it can be cancelled if finish_error
    193176    // was previously call, which won't be detected by g_input_stream_read_finish().
    194     if (!request->priv->stream)
     177    if (!priv->stream)
    195178        return;
    196179
    197     auto webData = IPC::DataReference(reinterpret_cast<const uint8_t*>(priv->readBuffer), bytesRead);
    198180    if (!priv->bytesRead) {
    199         // First chunk read. In case of empty reply an empty API::Data is sent to the networking process.
    200         ResourceResponse response(URL(URL(), String::fromUTF8(priv->uri)), String::fromUTF8(priv->mimeType.data()),
    201             priv->streamLength, emptyString());
    202         priv->manager->didReceiveResponse(priv->requestID, response, 0);
    203         priv->manager->didLoadData(priv->requestID, webData);
    204     } else if (bytesRead || (!bytesRead && !priv->streamLength)) {
    205         // Subsequent chunk read. We only send an empty API::Data to the networking process when stream length is unknown.
    206         priv->manager->didLoadData(priv->requestID, webData);
     181        ResourceResponse response(priv->task->request().url(), String::fromUTF8(priv->mimeType.data()), priv->streamLength, emptyString());
     182        priv->task->didReceiveResponse(response);
    207183    }
    208184
    209185    if (!bytesRead) {
    210         priv->manager->didFinishLoading(priv->requestID);
    211         webkitWebContextDidFinishLoadingCustomProtocol(priv->webContext, priv->requestID);
     186        priv->task->didComplete({ });
    212187        return;
    213188    }
    214189
     190    priv->task->didReceiveData(SharedBuffer::create(priv->readBuffer, bytesRead));
    215191    priv->bytesRead += bytesRead;
    216192    g_input_stream_read_async(inputStream, priv->readBuffer, gReadBufferSize, RunLoopSourcePriority::AsyncIONetwork, priv->cancellable.get(),
     
    258234
    259235    WebKitURISchemeRequestPrivate* priv = request->priv;
    260     if (!webkitWebContextIsLoadingCustomProtocol(priv->webContext, priv->requestID))
    261         return;
    262 
    263236    priv->stream = nullptr;
    264     ResourceError resourceError(g_quark_to_string(error->domain), toWebCoreError(error->code), soupURIToURL(priv->soupURI.get()), String::fromUTF8(error->message));
    265     priv->manager->didFailWithError(priv->requestID, resourceError);
    266     webkitWebContextDidFinishLoadingCustomProtocol(priv->webContext, priv->requestID);
    267 }
     237    ResourceError resourceError(g_quark_to_string(error->domain), toWebCoreError(error->code), priv->task->request().url(), String::fromUTF8(error->message));
     238    priv->task->didComplete(resourceError);
     239}
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeRequestPrivate.h

    r218487 r250597  
    2020#pragma once
    2121
    22 #include "LegacyCustomProtocolManagerProxy.h"
    2322#include "WebKitURISchemeRequest.h"
    2423#include "WebKitWebContext.h"
     24#include "WebPageProxy.h"
     25#include "WebURLSchemeTask.h"
    2526#include <WebCore/ResourceRequest.h>
    2627
    27 WebKitURISchemeRequest* webkitURISchemeRequestCreate(uint64_t requestID, WebKitWebContext*, const WebCore::ResourceRequest&, WebKit::LegacyCustomProtocolManagerProxy&);
     28WebKitURISchemeRequest* webkitURISchemeRequestCreate(WebKitWebContext*, WebKit::WebPageProxy&, WebKit::WebURLSchemeTask&);
    2829void webkitURISchemeRequestCancel(WebKitURISchemeRequest*);
    29 WebKit::LegacyCustomProtocolManagerProxy* webkitURISchemeRequestGetManager(WebKitURISchemeRequest*);
    30 void webkitURISchemeRequestInvalidate(WebKitURISchemeRequest*);
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp

    r250518 r250597  
    2222
    2323#include "APIAutomationClient.h"
    24 #include "APICustomProtocolManagerClient.h"
    2524#include "APIDownloadClient.h"
    2625#include "APIInjectedBundleClient.h"
     
    3433#include "WebCertificateInfo.h"
    3534#include "WebKitAutomationSessionPrivate.h"
    36 #include "WebKitCustomProtocolManagerClient.h"
    3735#include "WebKitDownloadClient.h"
    3836#include "WebKitDownloadPrivate.h"
     
    5452#include "WebKitWebsiteDataManagerPrivate.h"
    5553#include "WebNotificationManagerProxy.h"
     54#include "WebURLSchemeHandler.h"
    5655#include "WebsiteDataType.h"
    5756#include <JavaScriptCore/RemoteInspector.h>
     
    126125};
    127126
    128 class WebKitURISchemeHandler: public RefCounted<WebKitURISchemeHandler> {
     127class WebKitURISchemeHandler final : public WebURLSchemeHandler {
    129128public:
    130     WebKitURISchemeHandler(WebKitURISchemeRequestCallback callback, void* userData, GDestroyNotify destroyNotify)
    131         : m_callback(callback)
    132         , m_userData(userData)
    133         , m_destroyNotify(destroyNotify)
     129    static Ref<WebKitURISchemeHandler> create(WebKitWebContext* context, WebKitURISchemeRequestCallback callback, void* userData, GDestroyNotify destroyNotify)
    134130    {
     131        return adoptRef(*new WebKitURISchemeHandler(context, callback, userData, destroyNotify));
    135132    }
    136133
     
    141138    }
    142139
    143     bool hasCallback()
     140private:
     141    WebKitURISchemeHandler(WebKitWebContext* context, WebKitURISchemeRequestCallback callback, void* userData, GDestroyNotify destroyNotify)
     142        : m_context(context)
     143        , m_callback(callback)
     144        , m_userData(userData)
     145        , m_destroyNotify(destroyNotify)
    144146    {
    145         return m_callback;
    146     }
    147 
    148     void performCallback(WebKitURISchemeRequest* request)
     147    }
     148
     149    void platformStartTask(WebPageProxy& page, WebURLSchemeTask& task) final
    149150    {
    150         ASSERT(m_callback);
    151 
    152         m_callback(request, m_userData);
    153     }
    154 
    155 private:
     151        if (!m_callback)
     152            return;
     153
     154        GRefPtr<WebKitURISchemeRequest> request = adoptGRef(webkitURISchemeRequestCreate(m_context, page, task));
     155        auto addResult = m_requests.add(task.identifier(), WTFMove(request));
     156        ASSERT(addResult.isNewEntry);
     157        m_callback(addResult.iterator->value.get(), m_userData);
     158    }
     159
     160    void platformStopTask(WebPageProxy&, WebURLSchemeTask& task) final
     161    {
     162        auto it = m_requests.find(task.identifier());
     163        if (it == m_requests.end())
     164            return;
     165
     166        webkitURISchemeRequestCancel(it->value.get());
     167        m_requests.remove(it);
     168    }
     169
     170    void platformTaskCompleted(WebURLSchemeTask& task) final
     171    {
     172        m_requests.remove(task.identifier());
     173    }
     174
     175    WebKitWebContext* m_context { nullptr };
    156176    WebKitURISchemeRequestCallback m_callback { nullptr };
    157177    void* m_userData { nullptr };
    158178    GDestroyNotify m_destroyNotify { nullptr };
     179    HashMap<uint64_t, GRefPtr<WebKitURISchemeRequest>> m_requests;
    159180};
    160181
     
    171192    GRefPtr<WebKitSecurityManager> securityManager;
    172193    URISchemeHandlerMap uriSchemeHandlers;
    173     URISchemeRequestMap uriSchemeRequests;
    174194    GRefPtr<WebKitGeolocationManager> geolocationManager;
    175195    std::unique_ptr<WebKitNotificationProvider> notificationProvider;
     
    348368    attachInjectedBundleClientToContext(webContext);
    349369    attachDownloadClientToContext(webContext);
    350     attachCustomProtocolManagerClientToContext(webContext);
    351370
    352371    priv->geolocationManager = adoptGRef(webkitGeolocationManagerCreate(priv->processPool->supplement<WebGeolocationManagerProxy>()));
     
    365384        priv->processPool->setInjectedBundleClient(nullptr);
    366385        priv->processPool->setDownloadClient(makeUniqueRef<API::DownloadClient>());
    367         priv->processPool->setLegacyCustomProtocolManagerClient(nullptr);
    368386    }
    369387
     
    11151133    g_return_if_fail(callback);
    11161134
    1117     RefPtr<WebKitURISchemeHandler> handler = adoptRef(new WebKitURISchemeHandler(callback, userData, destroyNotify));
    1118     auto addResult = context->priv->uriSchemeHandlers.set(String::fromUTF8(scheme), handler.get());
    1119     if (addResult.isNewEntry)
    1120         WebKit::WebProcessPool::registerGlobalURLSchemeAsHavingCustomProtocolHandlers(String::fromUTF8(scheme));
     1135    auto handler = WebKitURISchemeHandler::create(context, callback, userData, destroyNotify);
     1136    auto addResult = context->priv->uriSchemeHandlers.set(String::fromUTF8(scheme), WTFMove(handler));
     1137    for (auto* webView : context->priv->webViews.values())
     1138        webkitWebViewGetPage(webView).setURLSchemeHandlerForScheme(*addResult.iterator->value, String::fromUTF8(scheme));
    11211139}
    11221140
     
    16651683}
    16661684
    1667 void webkitWebContextStartLoadingCustomProtocol(WebKitWebContext* context, uint64_t customProtocolID, const WebCore::ResourceRequest& resourceRequest, LegacyCustomProtocolManagerProxy& manager)
    1668 {
    1669     GRefPtr<WebKitURISchemeRequest> request = adoptGRef(webkitURISchemeRequestCreate(customProtocolID, context, resourceRequest, manager));
    1670     String scheme(String::fromUTF8(webkit_uri_scheme_request_get_scheme(request.get())));
    1671     RefPtr<WebKitURISchemeHandler> handler = context->priv->uriSchemeHandlers.get(scheme);
    1672     ASSERT(handler.get());
    1673     if (!handler->hasCallback())
    1674         return;
    1675 
    1676     context->priv->uriSchemeRequests.set(customProtocolID, request.get());
    1677     handler->performCallback(request.get());
    1678 }
    1679 
    1680 void webkitWebContextStopLoadingCustomProtocol(WebKitWebContext* context, uint64_t customProtocolID)
    1681 {
    1682     GRefPtr<WebKitURISchemeRequest> request = context->priv->uriSchemeRequests.get(customProtocolID);
    1683     if (!request.get())
    1684         return;
    1685     webkitURISchemeRequestCancel(request.get());
    1686 }
    1687 
    1688 void webkitWebContextInvalidateCustomProtocolRequests(WebKitWebContext* context, LegacyCustomProtocolManagerProxy& manager)
    1689 {
    1690     for (auto& request : copyToVector(context->priv->uriSchemeRequests.values())) {
    1691         if (webkitURISchemeRequestGetManager(request.get()) == &manager)
    1692             webkitURISchemeRequestInvalidate(request.get());
    1693     }
    1694 }
    1695 
    1696 void webkitWebContextDidFinishLoadingCustomProtocol(WebKitWebContext* context, uint64_t customProtocolID)
    1697 {
    1698     context->priv->uriSchemeRequests.remove(customProtocolID);
    1699 }
    1700 
    1701 bool webkitWebContextIsLoadingCustomProtocol(WebKitWebContext* context, uint64_t customProtocolID)
    1702 {
    1703     return context->priv->uriSchemeRequests.get(customProtocolID);
    1704 }
    1705 
    17061685void webkitWebContextCreatePageForWebView(WebKitWebContext* context, WebKitWebView* webView, WebKitUserContentManager* userContentManager, WebKitWebView* relatedView)
    17071686{
     
    17191698    webkitWebViewCreatePage(webView, WTFMove(pageConfiguration));
    17201699
     1700    auto& page = webkitWebViewGetPage(webView);
     1701    for (auto& it : context->priv->uriSchemeHandlers) {
     1702        Ref<WebURLSchemeHandler> handler(*it.value);
     1703        page.setURLSchemeHandlerForScheme(WTFMove(handler), it.key);
     1704    }
     1705
    17211706    context->priv->webViews.set(webkit_web_view_get_page_id(webView), webView);
    17221707}
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContextPrivate.h

    r232111 r250597  
    2727
    2828#include "DownloadProxy.h"
    29 #include "LegacyCustomProtocolManagerProxy.h"
    3029#include "WebKitUserContentManager.h"
    3130#include "WebKitWebContext.h"
     
    3837void webkitWebContextRemoveDownload(WebKit::DownloadProxy*);
    3938void webkitWebContextDownloadStarted(WebKitWebContext*, WebKitDownload*);
    40 void webkitWebContextStartLoadingCustomProtocol(WebKitWebContext*, uint64_t customProtocolID, const WebCore::ResourceRequest&, WebKit::LegacyCustomProtocolManagerProxy&);
    41 void webkitWebContextStopLoadingCustomProtocol(WebKitWebContext*, uint64_t customProtocolID);
    42 void webkitWebContextInvalidateCustomProtocolRequests(WebKitWebContext*, WebKit::LegacyCustomProtocolManagerProxy&);
    43 void webkitWebContextDidFinishLoadingCustomProtocol(WebKitWebContext*, uint64_t customProtocolID);
    44 bool webkitWebContextIsLoadingCustomProtocol(WebKitWebContext*, uint64_t customProtocolID);
    4539void webkitWebContextCreatePageForWebView(WebKitWebContext*, WebKitWebView*, WebKitUserContentManager*, WebKitWebView*);
    4640void webkitWebContextWebViewDestroyed(WebKitWebContext*, WebKitWebView*);
  • trunk/Source/WebKit/UIProcess/WebURLSchemeTask.h

    r249329 r250597  
    6363    WebCore::PageIdentifier webPageID() const { ASSERT(RunLoop::isMain()); return m_webPageID; }
    6464    WebProcessProxy* process() { ASSERT(RunLoop::isMain()); return m_process.get(); }
     65    const WebCore::ResourceRequest& request() const { ASSERT(RunLoop::isMain()); return m_request; }
    6566
    6667#if PLATFORM(COCOA)
    6768    NSURLRequest *nsRequest() const;
    68 #endif
    69 #if PLATFORM(WIN)
    70     const WebCore::ResourceRequest& request() const { ASSERT(RunLoop::isMain()); return m_request; }
    7169#endif
    7270
  • trunk/Source/WebKit/UIProcess/soup/WebProcessPoolSoup.cpp

    r243143 r250597  
    2727#include "WebProcessPool.h"
    2828
    29 #include "APICustomProtocolManagerClient.h"
    3029#include "NetworkProcessCreationParameters.h"
    3130#include "NetworkProcessMessages.h"
  • trunk/Source/cmake/OptionsFTW.cmake

    r248755 r250597  
    9191WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_KEYBOARD_KEY_ATTRIBUTE PRIVATE ON)
    9292WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LEGACY_CSS_VENDOR_PREFIXES PRIVATE ON)
    93 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER PRIVATE OFF)
    9493WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MAC_GESTURE_EVENTS PRIVATE OFF)
    9594WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MATHML PRIVATE ON)
  • trunk/Source/cmake/OptionsPlayStation.cmake

    r250596 r250597  
    3939WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTPDIR PRIVATE OFF)
    4040WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GEOLOCATION PRIVATE OFF)
    41 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER PRIVATE OFF)
    4241WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MATHML PRIVATE OFF)
    4342WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_METER_ELEMENT PRIVATE OFF)
  • trunk/Source/cmake/OptionsWin.cmake

    r248788 r250597  
    7676if (${WTF_PLATFORM_WIN_CAIRO})
    7777    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INTL PUBLIC ON)
    78     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER PUBLIC OFF)
    7978    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LEGACY_ENCRYPTED_MEDIA PUBLIC OFF)
    8079    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_PUBLIC_SUFFIX_LIST PRIVATE ON)
  • trunk/Source/cmake/WebKitFeatures.cmake

    r247367 r250597  
    157157    WEBKIT_OPTION_DEFINE(ENABLE_LAYOUT_FORMATTING_CONTEXT "Toggle Layout Formatting Context support" PRIVATE OFF)
    158158    WEBKIT_OPTION_DEFINE(ENABLE_LEGACY_CSS_VENDOR_PREFIXES "Toggle legacy css vendor prefix support" PRIVATE OFF)
    159     WEBKIT_OPTION_DEFINE(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER "Toggle legacy protocol manager support" PRIVATE ON)
     159    WEBKIT_OPTION_DEFINE(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER "Toggle legacy protocol manager support" PRIVATE OFF)
    160160    WEBKIT_OPTION_DEFINE(ENABLE_LEGACY_ENCRYPTED_MEDIA "Toggle Legacy EME V2 support" PRIVATE OFF)
    161161    WEBKIT_OPTION_DEFINE(ENABLE_LETTERPRESS "Toggle letterpress support" PRIVATE OFF)
  • trunk/Tools/ChangeLog

    r250593 r250597  
     12019-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][WPE] Stop using legacy custom protocol implementation
     4        https://bugs.webkit.org/show_bug.cgi?id=202407
     5
     6        Reviewed by Žan Doberšek.
     7
     8        Remove the tests to check failure after committed, because it's not possible to test it with current code.
     9
     10        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
     11        (testWebContextURIScheme):
     12
    1132019-10-01  Alexey Shvayka  <shvaikalesh@gmail.com>
    214
  • trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp

    r248552 r250597  
    162162static const char* genericErrorMessage = "Error message.";
    163163static const char* beforeReceiveResponseErrorMessage = "Error before didReceiveResponse.";
    164 static const char* afterInitialChunkErrorMessage = "Error after reading the initial chunk.";
    165164
    166165class URISchemeTest: public LoadTrackingTest {
     
    241240    }
    242241
    243     void loadCommitted() override
    244     {
    245         if (m_finishOnCommitted) {
    246             GUniquePtr<GError> error(g_error_new_literal(g_quark_from_string(errorDomain), errorCode, afterInitialChunkErrorMessage));
    247             webkit_uri_scheme_request_finish_error(m_uriSchemeRequest.get(), error.get());
    248         }
    249 
    250         LoadTrackingTest::loadCommitted();
    251     }
    252 
    253     void finishOnCommittedAndWaitUntilLoadFinished()
    254     {
    255         m_finishOnCommitted = true;
    256         waitUntilLoadFinished();
    257         m_finishOnCommitted = false;
    258     }
    259 
    260242    GRefPtr<WebKitURISchemeRequest> m_uriSchemeRequest;
    261243    HashMap<String, URISchemeHandler> m_handlersMap;
    262     bool m_finishOnCommitted { false };
    263244};
    264245
     
    319300    g_assert_cmpint(strncmp(mainResourceData, echoHTML.get(), mainResourceDataSize), ==, 0);
    320301
    321     test->registerURISchemeHandler("nomime", kBarHTML, -1, 0);
     302    test->registerURISchemeHandler("nomime", kBarHTML, -1, nullptr);
    322303    test->m_loadEvents.clear();
    323304    test->loadURI("nomime:foo-bar");
     
    325306    g_assert_true(test->m_loadEvents.contains(LoadTrackingTest::ProvisionalLoadFailed));
    326307
    327     test->registerURISchemeHandler("empty", 0, 0, "text/html");
     308    test->registerURISchemeHandler("empty", nullptr, 0, "text/html");
    328309    test->m_loadEvents.clear();
    329310    test->loadURI("empty:nothing");
     
    353334    g_assert_cmpstr(test->m_error->message, ==, beforeReceiveResponseErrorMessage);
    354335
    355     test->m_loadEvents.clear();
    356     test->loadURI("error:after-first-chunk");
    357     test->finishOnCommittedAndWaitUntilLoadFinished();
    358     g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::ProvisionalLoadFailed));
    359     g_assert_true(test->m_loadEvents.contains(LoadTrackingTest::LoadFailed));
    360     g_assert_true(test->m_loadFailed);
    361     g_assert_error(test->m_error.get(), g_quark_from_string(errorDomain), errorCode);
    362     g_assert_cmpstr(test->m_error->message, ==, afterInitialChunkErrorMessage);
    363 
    364     test->registerURISchemeHandler("closed", 0, 0, 0);
     336    test->registerURISchemeHandler("closed", nullptr, 0, nullptr);
    365337    test->m_loadEvents.clear();
    366338    test->loadURI("closed:input-stream");
Note: See TracChangeset for help on using the changeset viewer.