Skip to content

Commit

Permalink
[GTK][WPE] Move WebPageProxy creation from WebKitWebContext to WebKit…
Browse files Browse the repository at this point in the history
…WebView

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

Reviewed by Michael Catanzaro.

It really belongs to WebKitWebView, we can create the page configuration
there and then just notify the web context, the same way we notify when
the web view is destroyed.

* Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp:
* Source/WebKit/UIProcess/API/glib/WebKitWebContextPrivate.h:
* Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:
(webkitWebViewCreatePageConfiguration):
(webkitWebViewCreatePage):
(webkitWebViewConstructed):
* Source/WebKit/UIProcess/API/glib/WebKitWebViewPrivate.h:

Canonical link: https://commits.webkit.org/278610@main
  • Loading branch information
carlosgcampos authored and mcatanzaro committed May 10, 2024
1 parent 5aa644c commit 6e05058
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 47 deletions.
31 changes: 1 addition & 30 deletions Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp
Expand Up @@ -22,7 +22,6 @@

#include "APIAutomationClient.h"
#include "APIInjectedBundleClient.h"
#include "APIPageConfiguration.h"
#include "APIProcessPoolConfiguration.h"
#include "APIString.h"
#include "LegacyGlobalSettings.h"
Expand All @@ -44,7 +43,6 @@
#include "WebKitSecurityOriginPrivate.h"
#include "WebKitSettingsPrivate.h"
#include "WebKitURISchemeRequestPrivate.h"
#include "WebKitUserContentManagerPrivate.h"
#include "WebKitUserMessagePrivate.h"
#include "WebKitWebContextPrivate.h"
#include "WebKitWebViewPrivate.h"
Expand Down Expand Up @@ -2021,35 +2019,8 @@ WebProcessPool& webkitWebContextGetProcessPool(WebKitWebContext* context)
return *context->priv->processPool;
}

void webkitWebContextCreatePageForWebView(WebKitWebContext* context, WebKitWebView* webView, WebKitUserContentManager* userContentManager, WebKitWebView* relatedView, WebKitWebsitePolicies* defaultWebsitePolicies)
void webkitWebContextWebViewCreated(WebKitWebContext* context, WebKitWebView* webView)
{
auto pageConfiguration = API::PageConfiguration::create();
pageConfiguration->setProcessPool(context->priv->processPool.get());
pageConfiguration->setPreferences(webkitSettingsGetPreferences(webkit_web_view_get_settings(webView)));
pageConfiguration->setRelatedPage(relatedView ? &webkitWebViewGetPage(relatedView) : nullptr);
pageConfiguration->setUserContentController(userContentManager ? webkitUserContentManagerGetUserContentControllerProxy(userContentManager) : nullptr);
pageConfiguration->setControlledByAutomation(webkit_web_view_is_controlled_by_automation(webView));

WebKitWebExtensionMode webExtensionMode = webkit_web_view_get_web_extension_mode(webView);
const char* defaultContentSecurityPolicy = webkit_web_view_get_default_content_security_policy(webView);

if (webExtensionMode == WEBKIT_WEB_EXTENSION_MODE_MANIFESTV3)
pageConfiguration->setContentSecurityPolicyModeForExtension(WebCore::ContentSecurityPolicyModeForExtension::ManifestV3);
else if (webExtensionMode == WEBKIT_WEB_EXTENSION_MODE_MANIFESTV2)
pageConfiguration->setContentSecurityPolicyModeForExtension(WebCore::ContentSecurityPolicyModeForExtension::ManifestV2);

if (defaultContentSecurityPolicy)
pageConfiguration->setOverrideContentSecurityPolicy(String::fromUTF8(defaultContentSecurityPolicy));

WebKitWebsiteDataManager* manager = webkitWebViewGetWebsiteDataManager(webView);
#if !ENABLE(2022_GLIB_API)
if (!manager)
manager = context->priv->websiteDataManager.get();
#endif
pageConfiguration->setWebsiteDataStore(&webkitWebsiteDataManagerGetDataStore(manager));
pageConfiguration->setDefaultWebsitePolicies(webkitWebsitePoliciesGetWebsitePolicies(defaultWebsitePolicies));
webkitWebViewCreatePage(webView, WTFMove(pageConfiguration));

auto& page = webkitWebViewGetPage(webView);
for (auto& it : context->priv->uriSchemeHandlers) {
Ref<WebURLSchemeHandler> handler(*it.value);
Expand Down
2 changes: 1 addition & 1 deletion Source/WebKit/UIProcess/API/glib/WebKitWebContextPrivate.h
Expand Up @@ -35,7 +35,7 @@ WebKit::WebProcessPool& webkitWebContextGetProcessPool(WebKitWebContext*);
#if !ENABLE(2022_GLIB_API)
void webkitWebContextDownloadStarted(WebKitWebContext*, WebKitDownload*);
#endif
void webkitWebContextCreatePageForWebView(WebKitWebContext*, WebKitWebView*, WebKitUserContentManager*, WebKitWebView*, WebKitWebsitePolicies*);
void webkitWebContextWebViewCreated(WebKitWebContext*, WebKitWebView*);
void webkitWebContextWebViewDestroyed(WebKitWebContext*, WebKitWebView*);
WebKitWebView* webkitWebContextGetWebViewForPage(WebKitWebContext*, WebKit::WebPageProxy*);
GVariant* webkitWebContextInitializeWebProcessExtensions(WebKitWebContext*);
Expand Down
67 changes: 53 additions & 14 deletions Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp
Expand Up @@ -25,6 +25,7 @@
#include "APIContentWorld.h"
#include "APIData.h"
#include "APINavigation.h"
#include "APIPageConfiguration.h"
#include "APISerializedScriptValue.h"
#include "ImageOptions.h"
#include "NotificationService.h"
Expand Down Expand Up @@ -57,6 +58,7 @@
#include "WebKitUIClient.h"
#include "WebKitURIRequestPrivate.h"
#include "WebKitURIResponsePrivate.h"
#include "WebKitUserContentManagerPrivate.h"
#include "WebKitUserMessagePrivate.h"
#include "WebKitWebContextPrivate.h"
#include "WebKitWebResourceLoadManager.h"
Expand Down Expand Up @@ -780,6 +782,55 @@ static void webkitWebViewWatchForChangesInFavicon(WebKitWebView* webView)
}
#endif

static Ref<API::PageConfiguration> webkitWebViewCreatePageConfiguration(WebKitWebView* webView)
{
auto* priv = webView->priv;
auto pageConfiguration = API::PageConfiguration::create();
pageConfiguration->setProcessPool(&webkitWebContextGetProcessPool(priv->context.get()));
pageConfiguration->setPreferences(webkitSettingsGetPreferences(priv->settings.get()));
pageConfiguration->setRelatedPage(priv->relatedView ? &webkitWebViewGetPage(priv->relatedView) : nullptr);
pageConfiguration->setUserContentController(priv->userContentManager ? webkitUserContentManagerGetUserContentControllerProxy(priv->userContentManager.get()) : nullptr);
pageConfiguration->setControlledByAutomation(priv->isControlledByAutomation);

switch (priv->webExtensionMode) {
case WEBKIT_WEB_EXTENSION_MODE_MANIFESTV3:
pageConfiguration->setContentSecurityPolicyModeForExtension(WebCore::ContentSecurityPolicyModeForExtension::ManifestV3);
break;
case WEBKIT_WEB_EXTENSION_MODE_MANIFESTV2:
pageConfiguration->setContentSecurityPolicyModeForExtension(WebCore::ContentSecurityPolicyModeForExtension::ManifestV2);
break;
case WEBKIT_WEB_EXTENSION_MODE_NONE:
break;
}

if (!priv->defaultContentSecurityPolicy.isNull())
pageConfiguration->setOverrideContentSecurityPolicy(String::fromUTF8(priv->defaultContentSecurityPolicy.data()));

#if ENABLE(2022_GLIB_API)
auto* manager = webkit_network_session_get_website_data_manager(priv->networkSession.get());
#else
auto* manager = priv->websiteDataManager ? priv->websiteDataManager.get() : webkit_web_context_get_website_data_manager(priv->context.get());
#endif
pageConfiguration->setWebsiteDataStore(&webkitWebsiteDataManagerGetDataStore(manager));

pageConfiguration->setDefaultWebsitePolicies(webkitWebsitePoliciesGetWebsitePolicies(priv->websitePolicies.get()));

return pageConfiguration;
}

static void webkitWebViewCreatePage(WebKitWebView* webView, Ref<API::PageConfiguration>&& configuration)
{
#if PLATFORM(GTK)
webkitWebViewBaseCreateWebPage(WEBKIT_WEB_VIEW_BASE(webView), WTFMove(configuration));
#elif PLATFORM(WPE)
#if ENABLE(WPE_PLATFORM)
webView->priv->view.reset(WKWPE::View::create(webView->priv->backend ? webkit_web_view_backend_get_wpe_backend(webView->priv->backend.get()) : nullptr, webkit_web_view_get_display(webView), configuration.get()));
#else
webView->priv->view.reset(WKWPE::View::create(webkit_web_view_backend_get_wpe_backend(webView->priv->backend.get()), configuration.get()));
#endif
#endif
}

static void webkitWebViewConstructed(GObject* object)
{
G_OBJECT_CLASS(webkit_web_view_parent_class)->constructed(object);
Expand Down Expand Up @@ -855,7 +906,8 @@ static void webkitWebViewConstructed(GObject* object)
if (!priv->websitePolicies)
priv->websitePolicies = adoptGRef(webkit_website_policies_new());

webkitWebContextCreatePageForWebView(priv->context.get(), webView, priv->userContentManager.get(), priv->relatedView, priv->websitePolicies.get());
webkitWebViewCreatePage(webView, webkitWebViewCreatePageConfiguration(webView));
webkitWebContextWebViewCreated(priv->context.get(), webView);

priv->loadObserver = makeUnique<PageLoadStateObserver>(webView);
getPage(webView).pageLoadState().addObserver(*priv->loadObserver);
Expand Down Expand Up @@ -2444,19 +2496,6 @@ static void webkitWebViewCompleteAuthenticationRequest(WebKitWebView* webView)
priv->authenticationRequest = nullptr;
}

void webkitWebViewCreatePage(WebKitWebView* webView, Ref<API::PageConfiguration>&& configuration)
{
#if PLATFORM(GTK)
webkitWebViewBaseCreateWebPage(WEBKIT_WEB_VIEW_BASE(webView), WTFMove(configuration));
#elif PLATFORM(WPE)
#if ENABLE(WPE_PLATFORM)
webView->priv->view.reset(WKWPE::View::create(webView->priv->backend ? webkit_web_view_backend_get_wpe_backend(webView->priv->backend.get()) : nullptr, webkit_web_view_get_display(webView), configuration.get()));
#else
webView->priv->view.reset(WKWPE::View::create(webkit_web_view_backend_get_wpe_backend(webView->priv->backend.get()), configuration.get()));
#endif
#endif
}

WebPageProxy& webkitWebViewGetPage(WebKitWebView* webView)
{
return getPage(webView);
Expand Down
2 changes: 0 additions & 2 deletions Source/WebKit/UIProcess/API/glib/WebKitWebViewPrivate.h
Expand Up @@ -26,7 +26,6 @@

#pragma once

#include "APIPageConfiguration.h"
#include "EditingRange.h"
#include "RendererBufferFormat.h"
#include "UserMessage.h"
Expand All @@ -48,7 +47,6 @@ namespace WebKit {
class WebKitWebResourceLoadManager;
}

void webkitWebViewCreatePage(WebKitWebView*, Ref<API::PageConfiguration>&&);
WebKit::WebPageProxy& webkitWebViewGetPage(WebKitWebView*);
void webkitWebViewWillStartLoad(WebKitWebView*);
void webkitWebViewLoadChanged(WebKitWebView*, WebKitLoadEvent);
Expand Down

0 comments on commit 6e05058

Please sign in to comment.