⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 267534 in webkit


Ignore:
Timestamp:
Sep 24, 2020, 9:14:55 AM (6 years ago)
Author:
commit-queue@webkit.org
Message:

[GTK][WPE] Move proxy settings from WebKitContext to WebKitWebsiteDataManager
https://bugs.webkit.org/show_bug.cgi?id=216927

Patch by Carlos Garcia Campos <cgarcia@igalia.com> on 2020-09-24
Reviewed by Alex Christensen.

Source/WebCore:

Make proxySettings a member of SoupNetworkSession, instead of being global.

  • platform/network/soup/SoupNetworkSession.cpp:

(WebCore::SoupNetworkSession::SoupNetworkSession):
(WebCore::SoupNetworkSession::setProxySettings):
(WebCore::proxySettings): Deleted.
(WebCore::SoupNetworkSession::setupProxy): Deleted.

  • platform/network/soup/SoupNetworkSession.h:

Source/WebKit:

Make proxy settings per session instead of global to the network process. The web context API now simply
forwards the request to the website data manager.

  • NetworkProcess/NetworkProcess.h:
  • NetworkProcess/NetworkProcess.messages.in:
  • NetworkProcess/NetworkProcessCreationParameters.cpp:

(WebKit::NetworkProcessCreationParameters::encode const):
(WebKit::NetworkProcessCreationParameters::decode):

  • NetworkProcess/NetworkProcessCreationParameters.h:
  • NetworkProcess/NetworkSessionCreationParameters.cpp:

(WebKit::NetworkSessionCreationParameters::encode const):
(WebKit::NetworkSessionCreationParameters::decode):

  • NetworkProcess/NetworkSessionCreationParameters.h:
  • NetworkProcess/soup/NetworkProcessSoup.cpp:

(WebKit::NetworkProcess::platformInitializeNetworkProcess):
(WebKit::NetworkProcess::setNetworkProxySettings):

  • NetworkProcess/soup/NetworkSessionSoup.cpp:

(WebKit::NetworkSessionSoup::NetworkSessionSoup):
(WebKit::NetworkSessionSoup::setProxySettings):

  • NetworkProcess/soup/NetworkSessionSoup.h:
  • Shared/WebProcessCreationParameters.cpp:

(WebKit::WebProcessCreationParameters::encode const):
(WebKit::WebProcessCreationParameters::decode):

  • Shared/WebProcessCreationParameters.h:
  • UIProcess/API/glib/WebKitAutomationSession.cpp:

(webkitAutomationSessionCreate):

  • UIProcess/API/glib/WebKitWebContext.cpp:

(webkit_web_context_set_network_proxy_settings):

  • UIProcess/API/glib/WebKitWebView.cpp:

(webkitWebViewConstructed):

  • UIProcess/API/glib/WebKitWebsiteDataManager.cpp:

(webkit_website_data_manager_set_network_proxy_settings):

  • UIProcess/API/gtk/WebKitNetworkProxySettings.h:
  • UIProcess/API/gtk/WebKitWebContext.h:
  • UIProcess/API/gtk/WebKitWebsiteDataManager.h:
  • UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
  • UIProcess/API/wpe/WebKitNetworkProxySettings.h:
  • UIProcess/API/wpe/WebKitWebContext.h:
  • UIProcess/API/wpe/WebKitWebsiteDataManager.h:
  • UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
  • UIProcess/WebProcessPool.h:
  • UIProcess/WebsiteData/WebsiteDataStore.h:

(WebKit::WebsiteDataStore::networkProxySettings const):

  • UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp:

(WebKit::WebsiteDataStore::platformSetNetworkParameters):
(WebKit::WebsiteDataStore::setNetworkProxySettings):

  • UIProcess/glib/WebProcessPoolGLib.cpp:

(WebKit::WebProcessPool::platformInitializeWebProcess):

  • UIProcess/soup/WebProcessPoolSoup.cpp:

(WebKit::WebProcessPool::platformInitializeNetworkProcess):
(WebKit::WebProcessPool::setNetworkProxySettings): Deleted.

Tools:

Use the new API in tests.

  • TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:

(testWebContextProxySettings):

Location:
trunk
Files:
34 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r267532 r267534  
     12020-09-24  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][WPE] Move proxy settings from WebKitContext to WebKitWebsiteDataManager
     4        https://bugs.webkit.org/show_bug.cgi?id=216927
     5
     6        Reviewed by Alex Christensen.
     7
     8        Make proxySettings a member of SoupNetworkSession, instead of being global.
     9
     10        * platform/network/soup/SoupNetworkSession.cpp:
     11        (WebCore::SoupNetworkSession::SoupNetworkSession):
     12        (WebCore::SoupNetworkSession::setProxySettings):
     13        (WebCore::proxySettings): Deleted.
     14        (WebCore::SoupNetworkSession::setupProxy): Deleted.
     15        * platform/network/soup/SoupNetworkSession.h:
     16
    1172020-09-24  Chris Dumez  <cdumez@apple.com>
    218
  • trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp

    r267502 r267534  
    3333#include "GUniquePtrSoup.h"
    3434#include "Logging.h"
    35 #include "SoupNetworkProxySettings.h"
    3635#include <glib/gstdio.h>
    3736#include <libsoup/soup.h>
     
    4948    static NeverDestroyed<CString> storage;
    5049    return storage.get();
    51 }
    52 
    53 static SoupNetworkProxySettings& proxySettings()
    54 {
    55     static NeverDestroyed<SoupNetworkProxySettings> settings;
    56     return settings.get();
    5750}
    5851
     
    143136    }
    144137
    145     if (proxySettings().mode != SoupNetworkProxySettings::Mode::Default)
    146         setupProxy();
    147138    setupLogger();
    148139}
     
    278269}
    279270
    280 void SoupNetworkSession::setupProxy()
    281 {
     271void SoupNetworkSession::setProxySettings(SoupNetworkProxySettings&& settings)
     272{
     273    m_proxySettings = WTFMove(settings);
     274
    282275    GRefPtr<GProxyResolver> resolver;
    283     switch (proxySettings().mode) {
     276    switch (m_proxySettings.mode) {
    284277    case SoupNetworkProxySettings::Mode::Default: {
    285278        GRefPtr<GProxyResolver> currentResolver;
     
    296289    case SoupNetworkProxySettings::Mode::Custom:
    297290        resolver = adoptGRef(g_simple_proxy_resolver_new(nullptr, nullptr));
    298         if (!proxySettings().defaultProxyURL.isNull())
    299             g_simple_proxy_resolver_set_default_proxy(G_SIMPLE_PROXY_RESOLVER(resolver.get()), proxySettings().defaultProxyURL.data());
    300         if (proxySettings().ignoreHosts)
    301             g_simple_proxy_resolver_set_ignore_hosts(G_SIMPLE_PROXY_RESOLVER(resolver.get()), proxySettings().ignoreHosts.get());
    302         for (const auto& iter : proxySettings().proxyMap)
     291        if (!m_proxySettings.defaultProxyURL.isNull())
     292            g_simple_proxy_resolver_set_default_proxy(G_SIMPLE_PROXY_RESOLVER(resolver.get()), m_proxySettings.defaultProxyURL.data());
     293        if (m_proxySettings.ignoreHosts)
     294            g_simple_proxy_resolver_set_ignore_hosts(G_SIMPLE_PROXY_RESOLVER(resolver.get()), m_proxySettings.ignoreHosts.get());
     295        for (const auto& iter : m_proxySettings.proxyMap)
    303296            g_simple_proxy_resolver_set_uri_proxy(G_SIMPLE_PROXY_RESOLVER(resolver.get()), iter.key.data(), iter.value.data());
    304297        break;
     
    307300    g_object_set(m_soupSession.get(), SOUP_SESSION_PROXY_RESOLVER, resolver.get(), nullptr);
    308301    soup_session_abort(m_soupSession.get());
    309 }
    310 
    311 void SoupNetworkSession::setProxySettings(const SoupNetworkProxySettings& settings)
    312 {
    313     proxySettings() = settings;
    314302}
    315303
  • trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.h

    r267502 r267534  
    2626#pragma once
    2727
     28#include "SoupNetworkProxySettings.h"
    2829#include <gio/gio.h>
    2930#include <glib-object.h>
     
    4445class CertificateInfo;
    4546class ResourceError;
    46 struct SoupNetworkProxySettings;
    4747
    4848class SoupNetworkSession {
     
    6161    static void clearOldSoupCache(const String& cacheDirectory);
    6262
    63     static void setProxySettings(const SoupNetworkProxySettings&);
    64     void setupProxy();
     63    void setProxySettings(SoupNetworkProxySettings&&);
    6564
    6665    static void setInitialAcceptLanguages(const CString&);
     
    8180    PAL::SessionID m_sessionID;
    8281    bool m_ignoreTLSErrors { false };
     82    SoupNetworkProxySettings m_proxySettings;
    8383};
    8484
  • trunk/Source/WebKit/ChangeLog

    r267524 r267534  
     12020-09-24  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][WPE] Move proxy settings from WebKitContext to WebKitWebsiteDataManager
     4        https://bugs.webkit.org/show_bug.cgi?id=216927
     5
     6        Reviewed by Alex Christensen.
     7
     8        Make proxy settings per session instead of global to the network process. The web context API now simply
     9        forwards the request to the website data manager.
     10
     11        * NetworkProcess/NetworkProcess.h:
     12        * NetworkProcess/NetworkProcess.messages.in:
     13        * NetworkProcess/NetworkProcessCreationParameters.cpp:
     14        (WebKit::NetworkProcessCreationParameters::encode const):
     15        (WebKit::NetworkProcessCreationParameters::decode):
     16        * NetworkProcess/NetworkProcessCreationParameters.h:
     17        * NetworkProcess/NetworkSessionCreationParameters.cpp:
     18        (WebKit::NetworkSessionCreationParameters::encode const):
     19        (WebKit::NetworkSessionCreationParameters::decode):
     20        * NetworkProcess/NetworkSessionCreationParameters.h:
     21        * NetworkProcess/soup/NetworkProcessSoup.cpp:
     22        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
     23        (WebKit::NetworkProcess::setNetworkProxySettings):
     24        * NetworkProcess/soup/NetworkSessionSoup.cpp:
     25        (WebKit::NetworkSessionSoup::NetworkSessionSoup):
     26        (WebKit::NetworkSessionSoup::setProxySettings):
     27        * NetworkProcess/soup/NetworkSessionSoup.h:
     28        * Shared/WebProcessCreationParameters.cpp:
     29        (WebKit::WebProcessCreationParameters::encode const):
     30        (WebKit::WebProcessCreationParameters::decode):
     31        * Shared/WebProcessCreationParameters.h:
     32        * UIProcess/API/glib/WebKitAutomationSession.cpp:
     33        (webkitAutomationSessionCreate):
     34        * UIProcess/API/glib/WebKitWebContext.cpp:
     35        (webkit_web_context_set_network_proxy_settings):
     36        * UIProcess/API/glib/WebKitWebView.cpp:
     37        (webkitWebViewConstructed):
     38        * UIProcess/API/glib/WebKitWebsiteDataManager.cpp:
     39        (webkit_website_data_manager_set_network_proxy_settings):
     40        * UIProcess/API/gtk/WebKitNetworkProxySettings.h:
     41        * UIProcess/API/gtk/WebKitWebContext.h:
     42        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
     43        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
     44        * UIProcess/API/wpe/WebKitNetworkProxySettings.h:
     45        * UIProcess/API/wpe/WebKitWebContext.h:
     46        * UIProcess/API/wpe/WebKitWebsiteDataManager.h:
     47        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
     48        * UIProcess/WebProcessPool.h:
     49        * UIProcess/WebsiteData/WebsiteDataStore.h:
     50        (WebKit::WebsiteDataStore::networkProxySettings const):
     51        * UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp:
     52        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
     53        (WebKit::WebsiteDataStore::setNetworkProxySettings):
     54        * UIProcess/glib/WebProcessPoolGLib.cpp:
     55        (WebKit::WebProcessPool::platformInitializeWebProcess):
     56        * UIProcess/soup/WebProcessPoolSoup.cpp:
     57        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
     58        (WebKit::WebProcessPool::setNetworkProxySettings): Deleted.
     59
    1602020-09-24  Carlos Garcia Campos  <cgarcia@igalia.com>
    261
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.h

    r267502 r267534  
    448448    void setIgnoreTLSErrors(PAL::SessionID, bool);
    449449    void userPreferredLanguagesChanged(const Vector<String>&);
    450     void setNetworkProxySettings(const WebCore::SoupNetworkProxySettings&);
     450    void setNetworkProxySettings(PAL::SessionID, WebCore::SoupNetworkProxySettings&&);
    451451    void setPersistentCredentialStorageEnabled(PAL::SessionID, bool);
    452452#endif
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in

    r267502 r267534  
    3131    SetIgnoreTLSErrors(PAL::SessionID sessionID, bool ignoreTLSErrors)
    3232    UserPreferredLanguagesChanged(Vector<String> languages)
    33     SetNetworkProxySettings(struct WebCore::SoupNetworkProxySettings settings)
     33    SetNetworkProxySettings(PAL::SessionID sessionID, struct WebCore::SoupNetworkProxySettings settings)
    3434    PrefetchDNS(String hostname)
    3535    SetPersistentCredentialStorageEnabled(PAL::SessionID sessionID, bool enabled)
  • trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp

    r267502 r267534  
    6060    encoder << cookieAcceptPolicy;
    6161    encoder << languages;
    62     encoder << proxySettings;
    6362#endif
    6463
     
    127126    if (!decoder.decode(result.languages))
    128127        return false;
    129     if (!decoder.decode(result.proxySettings))
    130         return false;
    131128#endif
    132129
  • trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h

    r267502 r267534  
    3636#if USE(SOUP)
    3737#include <WebCore/HTTPCookieAcceptPolicy.h>
    38 #include <WebCore/SoupNetworkProxySettings.h>
    3938#endif
    4039
     
    7776    WebCore::HTTPCookieAcceptPolicy cookieAcceptPolicy { WebCore::HTTPCookieAcceptPolicy::AlwaysAccept };
    7877    Vector<String> languages;
    79     WebCore::SoupNetworkProxySettings proxySettings;
    8078#endif
    8179
  • trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp

    r267502 r267534  
    6565    encoder << persistentCredentialStorageEnabled;
    6666    encoder << ignoreTLSErrors;
     67    encoder << proxySettings;
    6768#endif
    6869#if USE(CURL)
     
    188189    if (!ignoreTLSErrors)
    189190        return WTF::nullopt;
     191
     192    Optional<WebCore::SoupNetworkProxySettings> proxySettings;
     193    decoder >> proxySettings;
     194    if (!proxySettings)
     195        return WTF::nullopt;
    190196#endif
    191197
     
    307313        , WTFMove(*persistentCredentialStorageEnabled)
    308314        , WTFMove(*ignoreTLSErrors)
     315        , WTFMove(*proxySettings)
    309316#endif
    310317#if USE(CURL)
  • trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h

    r267502 r267534  
    3434#if USE(SOUP)
    3535#include "SoupCookiePersistentStorageType.h"
     36#include <WebCore/SoupNetworkProxySettings.h>
    3637#endif
    3738
     
    7778    bool persistentCredentialStorageEnabled { true };
    7879    bool ignoreTLSErrors { false };
     80    WebCore::SoupNetworkProxySettings proxySettings;
    7981#endif
    8082#if USE(CURL)
  • trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp

    r267502 r267534  
    126126void NetworkProcess::platformInitializeNetworkProcess(const NetworkProcessCreationParameters& parameters)
    127127{
    128     if (parameters.proxySettings.mode != SoupNetworkProxySettings::Mode::Default)
    129         setNetworkProxySettings(parameters.proxySettings);
    130 
    131128    GRefPtr<GResolver> cachedResolver = adoptGRef(webkitCachedResolverNew(adoptGRef(g_resolver_get_default())));
    132129    g_resolver_set_default(cachedResolver.get());
     
    169166}
    170167
    171 void NetworkProcess::setNetworkProxySettings(const SoupNetworkProxySettings& settings)
     168void NetworkProcess::setNetworkProxySettings(PAL::SessionID sessionID, SoupNetworkProxySettings&& settings)
    172169{
    173     SoupNetworkSession::setProxySettings(settings);
    174     forEachNetworkSession([](const auto& session) {
    175         static_cast<const NetworkSessionSoup&>(session).soupNetworkSession().setupProxy();
    176     });
     170    if (auto* session = networkSession(sessionID))
     171        static_cast<NetworkSessionSoup&>(*session).setProxySettings(WTFMove(settings));
    177172}
    178173
  • trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp

    r267502 r267534  
    4949
    5050    setIgnoreTLSErrors(parameters.ignoreTLSErrors);
     51
     52    if (parameters.proxySettings.mode != SoupNetworkProxySettings::Mode::Default)
     53        setProxySettings(WTFMove(parameters.proxySettings));
    5154
    5255    if (!parameters.cookiePersistentStoragePath.isEmpty())
     
    137140}
    138141
     142void NetworkSessionSoup::setProxySettings(SoupNetworkProxySettings&& settings)
     143{
     144    m_networkSession->setProxySettings(WTFMove(settings));
     145}
     146
    139147} // namespace WebKit
  • trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.h

    r267502 r267534  
    3333namespace WebCore {
    3434class SoupNetworkSession;
     35struct SoupNetworkProxySettings;
    3536}
    3637
     
    5960
    6061    void setIgnoreTLSErrors(bool);
     62    void setProxySettings(WebCore::SoupNetworkProxySettings&&);
    6163
    6264private:
  • trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp

    r267498 r267534  
    131131#endif
    132132
    133 #if USE(SOUP)
    134     encoder << proxySettings;
    135 #endif
    136 
    137133#if ENABLE(RESOURCE_LOAD_STATISTICS) && !RELEASE_LOG_DISABLED
    138134    encoder << shouldLogUserInteraction;
     
    378374#endif
    379375
    380 #if USE(SOUP)
    381     if (!decoder.decode(parameters.proxySettings))
    382         return false;
    383 #endif
    384 
    385376#if ENABLE(RESOURCE_LOAD_STATISTICS) && !RELEASE_LOG_DISABLED
    386377    if (!decoder.decode(parameters.shouldLogUserInteraction))
  • trunk/Source/WebKit/Shared/WebProcessCreationParameters.h

    r267516 r267534  
    4444#endif
    4545
    46 #if USE(SOUP)
    47 #include <WebCore/HTTPCookieAcceptPolicy.h>
    48 #include <WebCore/SoupNetworkProxySettings.h>
    49 #endif
    50 
    5146#if PLATFORM(IOS_FAMILY)
    5247#include <WebCore/RenderThemeIOS.h>
     
    175170#endif
    176171
    177 #if USE(SOUP)
    178     WebCore::SoupNetworkProxySettings proxySettings;
    179 #endif
    180 
    181172#if PLATFORM(COCOA)
    182173    Vector<String> mediaMIMETypes;
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp

    r267502 r267534  
    361361        WebKitNetworkProxySettings* proxySettings = nullptr;
    362362        auto proxyMode = parseProxyCapabilities(*capabilities.proxy, &proxySettings);
    363         webkit_web_context_set_network_proxy_settings(webContext, proxyMode, proxySettings);
     363        webkit_website_data_manager_set_network_proxy_settings(webkit_web_context_get_website_data_manager(webContext), proxyMode, proxySettings);
    364364        if (proxySettings)
    365365            webkit_network_proxy_settings_free(proxySettings);
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp

    r267502 r267534  
    4040#include "WebKitInitialize.h"
    4141#include "WebKitInjectedBundleClient.h"
    42 #include "WebKitNetworkProxySettingsPrivate.h"
    4342#include "WebKitNotificationProvider.h"
    4443#include "WebKitPrivate.h"
     
    936935 *
    937936 * Since: 2.16
     937 *
     938 * Deprecated: 2.32. Use webkit_website_data_manager_set_network_proxy_settings() instead.
    938939 */
    939940void webkit_web_context_set_network_proxy_settings(WebKitWebContext* context, WebKitNetworkProxyMode proxyMode, WebKitNetworkProxySettings* proxySettings)
    940941{
    941942    g_return_if_fail(WEBKIT_IS_WEB_CONTEXT(context));
    942     g_return_if_fail((proxyMode != WEBKIT_NETWORK_PROXY_MODE_CUSTOM && !proxySettings) || (proxyMode == WEBKIT_NETWORK_PROXY_MODE_CUSTOM && proxySettings));
    943 
    944     WebKitWebContextPrivate* priv = context->priv;
    945     switch (proxyMode) {
    946     case WEBKIT_NETWORK_PROXY_MODE_DEFAULT:
    947         priv->processPool->setNetworkProxySettings({ });
    948         break;
    949     case WEBKIT_NETWORK_PROXY_MODE_NO_PROXY:
    950         priv->processPool->setNetworkProxySettings(WebCore::SoupNetworkProxySettings(WebCore::SoupNetworkProxySettings::Mode::NoProxy));
    951         break;
    952     case WEBKIT_NETWORK_PROXY_MODE_CUSTOM:
    953         const auto& settings = webkitNetworkProxySettingsGetNetworkProxySettings(proxySettings);
    954         if (settings.isEmpty()) {
    955             g_warning("Invalid attempt to set custom network proxy settings with an empty WebKitNetworkProxySettings. Use "
    956                 "WEBKIT_NETWORK_PROXY_MODE_NO_PROXY to not use any proxy or WEBKIT_NETWORK_PROXY_MODE_DEFAULT to use the default system settings");
    957         } else
    958             priv->processPool->setNetworkProxySettings(settings);
    959         break;
    960     }
     943
     944    webkit_website_data_manager_set_network_proxy_settings(context->priv->websiteDataManager.get(), proxyMode, proxySettings);
    961945}
    962946
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp

    r267502 r267534  
    758758        auto* contextDataManager = webkit_web_context_get_website_data_manager(priv->context.get());
    759759        webkit_website_data_manager_set_tls_errors_policy(priv->websiteDataManager.get(), webkit_website_data_manager_get_tls_errors_policy(contextDataManager));
     760        auto proxySettings = webkitWebsiteDataManagerGetDataStore(contextDataManager).networkProxySettings();
     761        webkitWebsiteDataManagerGetDataStore(priv->websiteDataManager.get()).setNetworkProxySettings(WTFMove(proxySettings));
    760762        webkitWebsiteDataManagerAddProcessPool(priv->websiteDataManager.get(), webkitWebContextGetProcessPool(priv->context.get()));
    761763    }
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.cpp

    r267524 r267534  
    2323#include "WebKitCookieManagerPrivate.h"
    2424#include "WebKitInitialize.h"
     25#include "WebKitNetworkProxySettingsPrivate.h"
    2526#include "WebKitPrivate.h"
    2627#include "WebKitWebsiteDataManagerPrivate.h"
     
    951952
    952953    return manager->priv->tlsErrorsPolicy;
     954}
     955
     956/**
     957 * webkit_website_data_manager_set_network_proxy_settings:
     958 * @manager: a #WebKitWebsiteDataManager
     959 * @proxy_mode: a #WebKitNetworkProxyMode
     960 * @proxy_settings: (allow-none): a #WebKitNetworkProxySettings, or %NULL
     961 *
     962 * Set the network proxy settings to be used by connections started in @manager session.
     963 * By default %WEBKIT_NETWORK_PROXY_MODE_DEFAULT is used, which means that the
     964 * system settings will be used (g_proxy_resolver_get_default()).
     965 * If you want to override the system default settings, you can either use
     966 * %WEBKIT_NETWORK_PROXY_MODE_NO_PROXY to make sure no proxies are used at all,
     967 * or %WEBKIT_NETWORK_PROXY_MODE_CUSTOM to provide your own proxy settings.
     968 * When @proxy_mode is %WEBKIT_NETWORK_PROXY_MODE_CUSTOM @proxy_settings must be
     969 * a valid #WebKitNetworkProxySettings; otherwise, @proxy_settings must be %NULL.
     970 *
     971 * Since: 2.32
     972 */
     973void webkit_website_data_manager_set_network_proxy_settings(WebKitWebsiteDataManager* manager, WebKitNetworkProxyMode proxyMode, WebKitNetworkProxySettings* proxySettings)
     974{
     975    g_return_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager));
     976    g_return_if_fail((proxyMode != WEBKIT_NETWORK_PROXY_MODE_CUSTOM && !proxySettings) || (proxyMode == WEBKIT_NETWORK_PROXY_MODE_CUSTOM && proxySettings));
     977
     978    auto& dataStore = webkitWebsiteDataManagerGetDataStore(manager);
     979    switch (proxyMode) {
     980    case WEBKIT_NETWORK_PROXY_MODE_DEFAULT:
     981        dataStore.setNetworkProxySettings({ });
     982        break;
     983    case WEBKIT_NETWORK_PROXY_MODE_NO_PROXY:
     984        dataStore.setNetworkProxySettings(WebCore::SoupNetworkProxySettings(WebCore::SoupNetworkProxySettings::Mode::NoProxy));
     985        break;
     986    case WEBKIT_NETWORK_PROXY_MODE_CUSTOM:
     987        auto settings = webkitNetworkProxySettingsGetNetworkProxySettings(proxySettings);
     988        if (settings.isEmpty()) {
     989            g_warning("Invalid attempt to set custom network proxy settings with an empty WebKitNetworkProxySettings. Use "
     990                "WEBKIT_NETWORK_PROXY_MODE_NO_PROXY to not use any proxy or WEBKIT_NETWORK_PROXY_MODE_DEFAULT to use the default system settings");
     991        } else
     992            dataStore.setNetworkProxySettings(WTFMove(settings));
     993        break;
     994    }
    953995}
    954996
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitNetworkProxySettings.h

    r210921 r267534  
    3232#define WEBKIT_TYPE_NETWORK_NETWORK_PROXY_SETTINGS (webkit_network_proxy_settings_get_type())
    3333
     34/**
     35 * WebKitNetworkProxyMode:
     36 * @WEBKIT_NETWORK_PROXY_MODE_DEFAULT: Use the default proxy of the system.
     37 * @WEBKIT_NETWORK_PROXY_MODE_NO_PROXY: Do not use any proxy.
     38 * @WEBKIT_NETWORK_PROXY_MODE_CUSTOM: Use custom proxy settings.
     39 *
     40 * Enum values used to set the network proxy mode.
     41 *
     42 * Since: 2.16
     43 */
     44typedef enum {
     45    WEBKIT_NETWORK_PROXY_MODE_DEFAULT,
     46    WEBKIT_NETWORK_PROXY_MODE_NO_PROXY,
     47    WEBKIT_NETWORK_PROXY_MODE_CUSTOM
     48} WebKitNetworkProxyMode;
     49
    3450typedef struct _WebKitNetworkProxySettings WebKitNetworkProxySettings;
    3551
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebContext.h

    r267502 r267534  
    9090
    9191/**
    92  * WebKitNetworkProxyMode:
    93  * @WEBKIT_NETWORK_PROXY_MODE_DEFAULT: Use the default proxy of the system.
    94  * @WEBKIT_NETWORK_PROXY_MODE_NO_PROXY: Do not use any proxy.
    95  * @WEBKIT_NETWORK_PROXY_MODE_CUSTOM: Use custom proxy settings.
    96  *
    97  * Enum values used to set the network proxy mode.
    98  *
    99  * Since: 2.16
    100  */
    101 typedef enum {
    102     WEBKIT_NETWORK_PROXY_MODE_DEFAULT,
    103     WEBKIT_NETWORK_PROXY_MODE_NO_PROXY,
    104     WEBKIT_NETWORK_PROXY_MODE_CUSTOM
    105 } WebKitNetworkProxyMode;
    106 
    107 /**
    10892 * WebKitURISchemeRequestCallback:
    10993 * @request: the #WebKitURISchemeRequest
     
    187171webkit_web_context_clear_cache                      (WebKitWebContext              *context);
    188172
    189 WEBKIT_API void
     173WEBKIT_DEPRECATED_FOR(webkit_website_data_manager_set_network_proxy_settings) void
    190174webkit_web_context_set_network_proxy_settings       (WebKitWebContext              *context,
    191175                                                     WebKitNetworkProxyMode         proxy_mode,
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebsiteDataManager.h

    r267502 r267534  
    2828#include <webkit2/WebKitCookieManager.h>
    2929#include <webkit2/WebKitDefines.h>
     30#include <webkit2/WebKitNetworkProxySettings.h>
    3031#include <webkit2/WebKitWebsiteData.h>
    3132
     
    141142WEBKIT_API WebKitTLSErrorsPolicy
    142143webkit_website_data_manager_get_tls_errors_policy                     (WebKitWebsiteDataManager *manager);
     144
     145WEBKIT_API void
     146webkit_website_data_manager_set_network_proxy_settings                (WebKitWebsiteDataManager *manager,
     147                                                                       WebKitNetworkProxyMode    proxy_mode,
     148                                                                       WebKitNetworkProxySettings *proxy_settings);
    143149
    144150WEBKIT_API void
  • trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt

    r267502 r267534  
    2727WebKitCacheModel
    2828WebKitProcessModel
    29 WebKitNetworkProxyMode
    3029webkit_web_context_get_default
    3130webkit_web_context_new
     
    14751474webkit_website_data_manager_set_tls_errors_policy
    14761475webkit_website_data_manager_get_tls_errors_policy
     1476webkit_website_data_manager_set_network_proxy_settings
    14771477webkit_website_data_manager_fetch
    14781478webkit_website_data_manager_fetch_finish
     
    15371537<FILE>WebKitNetworkProxySettings</FILE>
    15381538WebKitNetworkProxySettings
     1539WebKitNetworkProxyMode
    15391540webkit_network_proxy_settings_new
    15401541webkit_network_proxy_settings_copy
  • trunk/Source/WebKit/UIProcess/API/wpe/WebKitNetworkProxySettings.h

    r218553 r267534  
    3232#define WEBKIT_TYPE_NETWORK_NETWORK_PROXY_SETTINGS (webkit_network_proxy_settings_get_type())
    3333
     34/**
     35 * WebKitNetworkProxyMode:
     36 * @WEBKIT_NETWORK_PROXY_MODE_DEFAULT: Use the default proxy of the system.
     37 * @WEBKIT_NETWORK_PROXY_MODE_NO_PROXY: Do not use any proxy.
     38 * @WEBKIT_NETWORK_PROXY_MODE_CUSTOM: Use custom proxy settings.
     39 *
     40 * Enum values used to set the network proxy mode.
     41 *
     42 * Since: 2.16
     43 */
     44typedef enum {
     45    WEBKIT_NETWORK_PROXY_MODE_DEFAULT,
     46    WEBKIT_NETWORK_PROXY_MODE_NO_PROXY,
     47    WEBKIT_NETWORK_PROXY_MODE_CUSTOM
     48} WebKitNetworkProxyMode;
     49
    3450typedef struct _WebKitNetworkProxySettings WebKitNetworkProxySettings;
    3551
  • trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebContext.h

    r267502 r267534  
    9090
    9191/**
    92  * WebKitNetworkProxyMode:
    93  * @WEBKIT_NETWORK_PROXY_MODE_DEFAULT: Use the default proxy of the system.
    94  * @WEBKIT_NETWORK_PROXY_MODE_NO_PROXY: Do not use any proxy.
    95  * @WEBKIT_NETWORK_PROXY_MODE_CUSTOM: Use custom proxy settings.
    96  *
    97  * Enum values used to set the network proxy mode.
    98  *
    99  * Since: 2.16
    100  */
    101 typedef enum {
    102     WEBKIT_NETWORK_PROXY_MODE_DEFAULT,
    103     WEBKIT_NETWORK_PROXY_MODE_NO_PROXY,
    104     WEBKIT_NETWORK_PROXY_MODE_CUSTOM
    105 } WebKitNetworkProxyMode;
    106 
    107 /**
    10892 * WebKitURISchemeRequestCallback:
    10993 * @request: the #WebKitURISchemeRequest
     
    187171webkit_web_context_clear_cache                      (WebKitWebContext              *context);
    188172
    189 WEBKIT_API void
     173WEBKIT_DEPRECATED_FOR(webkit_website_data_manager_set_network_proxy_settings) void
    190174webkit_web_context_set_network_proxy_settings       (WebKitWebContext              *context,
    191175                                                     WebKitNetworkProxyMode         proxy_mode,
  • trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebsiteDataManager.h

    r267502 r267534  
    2828#include <wpe/WebKitCookieManager.h>
    2929#include <wpe/WebKitDefines.h>
     30#include <wpe/WebKitNetworkProxySettings.h>
    3031#include <wpe/WebKitWebsiteData.h>
    3132
     
    141142WEBKIT_API WebKitTLSErrorsPolicy
    142143webkit_website_data_manager_get_tls_errors_policy                     (WebKitWebsiteDataManager *manager);
     144
     145WEBKIT_API void
     146webkit_website_data_manager_set_network_proxy_settings                (WebKitWebsiteDataManager *manager,
     147                                                                       WebKitNetworkProxyMode    proxy_mode,
     148                                                                       WebKitNetworkProxySettings *proxy_settings);
    143149
    144150WEBKIT_API void
  • trunk/Source/WebKit/UIProcess/API/wpe/docs/wpe-1.0-sections.txt

    r267502 r267534  
    55WebKitCacheModel
    66WebKitProcessModel
    7 WebKitNetworkProxyMode
    87webkit_web_context_get_default
    98webkit_web_context_new
     
    14091408webkit_website_data_manager_set_tls_errors_policy
    14101409webkit_website_data_manager_get_tls_errors_policy
     1410webkit_website_data_manager_set_network_proxy_settings
    14111411webkit_website_data_manager_fetch
    14121412webkit_website_data_manager_fetch_finish
     
    14711471<FILE>WebKitNetworkProxySettings</FILE>
    14721472WebKitNetworkProxySettings
     1473WebKitNetworkProxyMode
    14731474webkit_network_proxy_settings_new
    14741475webkit_network_proxy_settings_copy
  • trunk/Source/WebKit/UIProcess/WebProcessPool.h

    r267502 r267534  
    6464#endif
    6565
    66 #if USE(SOUP)
    67 #include <WebCore/SoupNetworkProxySettings.h>
    68 #endif
    69 
    7066#if PLATFORM(COCOA)
    7167OBJC_CLASS NSMutableDictionary;
     
    297293#if USE(SOUP)
    298294    void setInitialHTTPCookieAcceptPolicy(WebCore::HTTPCookieAcceptPolicy policy) { m_initialHTTPCookieAcceptPolicy = policy; }
    299     void setNetworkProxySettings(const WebCore::SoupNetworkProxySettings&);
    300295#endif
    301296    void setEnhancedAccessibility(bool);
     
    683678#if USE(SOUP)
    684679    WebCore::HTTPCookieAcceptPolicy m_initialHTTPCookieAcceptPolicy { WebCore::HTTPCookieAcceptPolicy::ExclusivelyFromMainDocumentDomain };
    685     WebCore::SoupNetworkProxySettings m_networkProxySettings;
    686680#endif
    687681
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h

    r267502 r267534  
    5858#if USE(CURL)
    5959#include <WebCore/CurlProxySettings.h>
     60#endif
     61
     62#if USE(SOUP)
     63#include <WebCore/SoupNetworkProxySettings.h>
    6064#endif
    6165
     
    262266    void setIgnoreTLSErrors(bool);
    263267    bool ignoreTLSErrors() const { return m_ignoreTLSErrors; }
     268    void setNetworkProxySettings(WebCore::SoupNetworkProxySettings&&);
     269    const WebCore::SoupNetworkProxySettings& networkProxySettings() const { return m_networkProxySettings; }
    264270#endif
    265271
     
    399405    bool m_persistentCredentialStorageEnabled { true };
    400406    bool m_ignoreTLSErrors { true };
     407    WebCore::SoupNetworkProxySettings m_networkProxySettings;
    401408#endif
    402409
  • trunk/Source/WebKit/UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp

    r267523 r267534  
    4040    networkSessionParameters.persistentCredentialStorageEnabled = m_persistentCredentialStorageEnabled;
    4141    networkSessionParameters.ignoreTLSErrors = m_ignoreTLSErrors;
     42    networkSessionParameters.proxySettings = m_networkProxySettings;
    4243
    4344    if (auto* processPool = processPoolForCookieStorageOperations())
     
    6869}
    6970
     71void WebsiteDataStore::setNetworkProxySettings(WebCore::SoupNetworkProxySettings&& settings)
     72{
     73    m_networkProxySettings = WTFMove(settings);
     74    for (auto& processPool : processPools())
     75        processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetNetworkProxySettings(m_sessionID, m_networkProxySettings));
     76}
     77
    7078} // namespace WebKit
  • trunk/Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp

    r266718 r267534  
    9797
    9898    parameters.memoryCacheDisabled = m_memoryCacheDisabled || LegacyGlobalSettings::singleton().cacheModel() == CacheModel::DocumentViewer;
    99     parameters.proxySettings = m_networkProxySettings;
    10099
    101100    if (memoryPressureMonitorDisabled())
  • trunk/Source/WebKit/UIProcess/soup/WebProcessPoolSoup.cpp

    r267502 r267534  
    4343        defaultSessionParameters.persistentCredentialStorageEnabled = m_websiteDataStore->persistentCredentialStorageEnabled();
    4444        defaultSessionParameters.ignoreTLSErrors = m_websiteDataStore->ignoreTLSErrors();
     45        defaultSessionParameters.proxySettings = m_websiteDataStore->networkProxySettings();
    4546    }
    4647
    4748    parameters.cookieAcceptPolicy = m_initialHTTPCookieAcceptPolicy;
    4849    parameters.languages = userPreferredLanguages();
    49     parameters.proxySettings = m_networkProxySettings;
    5050    parameters.shouldEnableITPDatabase = true;
    5151}
    5252
    53 void WebProcessPool::setNetworkProxySettings(const WebCore::SoupNetworkProxySettings& settings)
    54 {
    55     m_networkProxySettings = settings;
    56     if (m_networkProcess)
    57         m_networkProcess->send(Messages::NetworkProcess::SetNetworkProxySettings(m_networkProxySettings), 0);
    58 }
    59 
    60 }
     53} // namespace WebKit
  • trunk/Tools/ChangeLog

    r267529 r267534  
     12020-09-24  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][WPE] Move proxy settings from WebKitContext to WebKitWebsiteDataManager
     4        https://bugs.webkit.org/show_bug.cgi?id=216927
     5
     6        Reviewed by Alex Christensen.
     7
     8        Use the new API in tests.
     9
     10        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
     11        (testWebContextProxySettings):
     12
    1132020-09-24  Sergio Villar Senin  <svillar@igalia.com>
    214
  • trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp

    r265753 r267534  
    672672    GUniquePtr<char> proxyURI(soup_uri_to_string(test->m_proxyServer.baseURI(), FALSE));
    673673    WebKitNetworkProxySettings* settings = webkit_network_proxy_settings_new(proxyURI.get(), nullptr);
    674     webkit_web_context_set_network_proxy_settings(test->m_webContext.get(), WEBKIT_NETWORK_PROXY_MODE_CUSTOM, settings);
     674    auto* dataManager = webkit_web_context_get_website_data_manager(test->m_webContext.get());
     675    webkit_website_data_manager_set_network_proxy_settings(dataManager, WEBKIT_NETWORK_PROXY_MODE_CUSTOM, settings);
    675676    GUniquePtr<char> proxyServerPortAsString = test->proxyServerPortAsString();
    676677    mainResourceData = test->loadURIAndGetMainResourceData(kServer->getURIForPath("/echoPort").data());
     
    712713
    713714    // Remove the proxy. Requests to kServer should be received by kServer again.
    714     webkit_web_context_set_network_proxy_settings(test->m_webContext.get(), WEBKIT_NETWORK_PROXY_MODE_NO_PROXY, nullptr);
     715    webkit_website_data_manager_set_network_proxy_settings(dataManager, WEBKIT_NETWORK_PROXY_MODE_NO_PROXY, nullptr);
    715716    mainResourceData = test->loadURIAndGetMainResourceData(kServer->getURIForPath("/echoPort").data());
    716717    ASSERT_CMP_CSTRING(mainResourceData, ==, serverPortAsString.get());
     
    719720    static const char* ignoreHosts[] = { "localhost", nullptr };
    720721    settings = webkit_network_proxy_settings_new(proxyURI.get(), ignoreHosts);
    721     webkit_web_context_set_network_proxy_settings(test->m_webContext.get(), WEBKIT_NETWORK_PROXY_MODE_CUSTOM, settings);
     722    webkit_website_data_manager_set_network_proxy_settings(dataManager, WEBKIT_NETWORK_PROXY_MODE_CUSTOM, settings);
    722723    mainResourceData = test->loadURIAndGetMainResourceData(kServer->getURIForPath("/echoPort").data());
    723724    ASSERT_CMP_CSTRING(mainResourceData, ==, proxyServerPortAsString.get());
     
    728729
    729730    // Remove the proxy again to ensure next test is not using any previous values.
    730     webkit_web_context_set_network_proxy_settings(test->m_webContext.get(), WEBKIT_NETWORK_PROXY_MODE_NO_PROXY, nullptr);
     731    webkit_website_data_manager_set_network_proxy_settings(dataManager, WEBKIT_NETWORK_PROXY_MODE_NO_PROXY, nullptr);
    731732    mainResourceData = test->loadURIAndGetMainResourceData(kServer->getURIForPath("/echoPort").data());
    732733    ASSERT_CMP_CSTRING(mainResourceData, ==, serverPortAsString.get());
     
    735736    settings = webkit_network_proxy_settings_new(nullptr, nullptr);
    736737    webkit_network_proxy_settings_add_proxy_for_scheme(settings, "http", proxyURI.get());
    737     webkit_web_context_set_network_proxy_settings(test->m_webContext.get(), WEBKIT_NETWORK_PROXY_MODE_CUSTOM, settings);
     738    webkit_website_data_manager_set_network_proxy_settings(dataManager, WEBKIT_NETWORK_PROXY_MODE_CUSTOM, settings);
    738739    mainResourceData = test->loadURIAndGetMainResourceData(kServer->getURIForPath("/echoPort").data());
    739740    ASSERT_CMP_CSTRING(mainResourceData, ==, proxyServerPortAsString.get());
     
    741742
    742743    // Reset to use the default resolver.
    743     webkit_web_context_set_network_proxy_settings(test->m_webContext.get(), WEBKIT_NETWORK_PROXY_MODE_DEFAULT, nullptr);
     744    webkit_website_data_manager_set_network_proxy_settings(dataManager, WEBKIT_NETWORK_PROXY_MODE_DEFAULT, nullptr);
    744745    mainResourceData = test->loadURIAndGetMainResourceData(kServer->getURIForPath("/echoPort").data());
    745746    ASSERT_CMP_CSTRING(mainResourceData, ==, serverPortAsString.get());
Note: See TracChangeset for help on using the changeset viewer.