diff options
author | Michal Klocek <michal.klocek@qt.io> | 2020-08-18 13:17:16 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2020-09-11 15:58:06 +0200 |
commit | d3882688a8fd70ccd4c42afd2485c3b5d3810547 (patch) | |
tree | c335a2b526d3c379176e651c0fa279fe4c980917 /src/core | |
parent | 45793228dc9cad1769b63e32a2d227f8ed0e604c (diff) |
Reuse qwebenginesettings from core in qml
Drop duplicated enums. Use qwebenginesettings as private
for qquickwebenginesettings. This can most likely
be more optimized when profile is moved to core.
Change-Id: I04bdc6c5a35556bf6d38a273cefeeee9d2a0a310
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/api/qwebenginesettings.cpp | 166 | ||||
-rw-r--r-- | src/core/api/qwebenginesettings.h | 16 | ||||
-rw-r--r-- | src/core/content_browser_client_qt.cpp | 2 | ||||
-rw-r--r-- | src/core/favicon_manager.cpp | 10 | ||||
-rw-r--r-- | src/core/media_capture_devices_dispatcher.cpp | 4 | ||||
-rw-r--r-- | src/core/net/plugin_response_interceptor_url_loader_throttle.cpp | 4 | ||||
-rw-r--r-- | src/core/permission_manager_qt.cpp | 16 | ||||
-rw-r--r-- | src/core/web_contents_adapter.cpp | 19 | ||||
-rw-r--r-- | src/core/web_contents_adapter_client.h | 3 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.cpp | 16 | ||||
-rw-r--r-- | src/core/web_engine_settings.cpp | 231 | ||||
-rw-r--r-- | src/core/web_engine_settings.h | 111 |
12 files changed, 229 insertions, 369 deletions
diff --git a/src/core/api/qwebenginesettings.cpp b/src/core/api/qwebenginesettings.cpp index f405921a6..c7c0a47b2 100644 --- a/src/core/api/qwebenginesettings.cpp +++ b/src/core/api/qwebenginesettings.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtWebEngine module of the Qt Toolkit. @@ -44,86 +44,13 @@ QT_BEGIN_NAMESPACE using QtWebEngineCore::WebEngineSettings; -static WebEngineSettings::Attribute toWebEngineAttribute(QWebEngineSettings::WebAttribute attribute) -{ - switch (attribute) { - case QWebEngineSettings::AutoLoadImages: - return WebEngineSettings::AutoLoadImages; - case QWebEngineSettings::JavascriptEnabled: - return WebEngineSettings::JavascriptEnabled; - case QWebEngineSettings::JavascriptCanOpenWindows: - return WebEngineSettings::JavascriptCanOpenWindows; - case QWebEngineSettings::JavascriptCanAccessClipboard: - return WebEngineSettings::JavascriptCanAccessClipboard; - case QWebEngineSettings::LinksIncludedInFocusChain: - return WebEngineSettings::LinksIncludedInFocusChain; - case QWebEngineSettings::LocalStorageEnabled: - return WebEngineSettings::LocalStorageEnabled; - case QWebEngineSettings::LocalContentCanAccessRemoteUrls: - return WebEngineSettings::LocalContentCanAccessRemoteUrls; - case QWebEngineSettings::XSSAuditingEnabled: - return WebEngineSettings::XSSAuditingEnabled; - case QWebEngineSettings::SpatialNavigationEnabled: - return WebEngineSettings::SpatialNavigationEnabled; - case QWebEngineSettings::LocalContentCanAccessFileUrls: - return WebEngineSettings::LocalContentCanAccessFileUrls; - case QWebEngineSettings::HyperlinkAuditingEnabled: - return WebEngineSettings::HyperlinkAuditingEnabled; - case QWebEngineSettings::ScrollAnimatorEnabled: - return WebEngineSettings::ScrollAnimatorEnabled; - case QWebEngineSettings::ErrorPageEnabled: - return WebEngineSettings::ErrorPageEnabled; - case QWebEngineSettings::PluginsEnabled: - return WebEngineSettings::PluginsEnabled; - case QWebEngineSettings::FullScreenSupportEnabled: - return WebEngineSettings::FullScreenSupportEnabled; - case QWebEngineSettings::ScreenCaptureEnabled: - return WebEngineSettings::ScreenCaptureEnabled; - case QWebEngineSettings::WebGLEnabled: - return WebEngineSettings::WebGLEnabled; - case QWebEngineSettings::Accelerated2dCanvasEnabled: - return WebEngineSettings::Accelerated2dCanvasEnabled; - case QWebEngineSettings::AutoLoadIconsForPage: - return WebEngineSettings::AutoLoadIconsForPage; - case QWebEngineSettings::TouchIconsEnabled: - return WebEngineSettings::TouchIconsEnabled; - case QWebEngineSettings::FocusOnNavigationEnabled: - return WebEngineSettings::FocusOnNavigationEnabled; - case QWebEngineSettings::PrintElementBackgrounds: - return WebEngineSettings::PrintElementBackgrounds; - case QWebEngineSettings::AllowRunningInsecureContent: - return WebEngineSettings::AllowRunningInsecureContent; - case QWebEngineSettings::AllowGeolocationOnInsecureOrigins: - return WebEngineSettings::AllowGeolocationOnInsecureOrigins; - case QWebEngineSettings::AllowWindowActivationFromJavaScript: - return WebEngineSettings::AllowWindowActivationFromJavaScript; - case QWebEngineSettings::ShowScrollBars: - return WebEngineSettings::ShowScrollBars; - case QWebEngineSettings::PlaybackRequiresUserGesture: - return WebEngineSettings::PlaybackRequiresUserGesture; - case QWebEngineSettings::WebRTCPublicInterfacesOnly: - return WebEngineSettings::WebRTCPublicInterfacesOnly; - case QWebEngineSettings::JavascriptCanPaste: - return WebEngineSettings::JavascriptCanPaste; - case QWebEngineSettings::DnsPrefetchEnabled: - return WebEngineSettings::DnsPrefetchEnabled; - case QWebEngineSettings::PdfViewerEnabled: - return WebEngineSettings::PdfViewerEnabled; - default: - return WebEngineSettings::UnsupportedInCoreSettings; - } -} - QWebEngineSettings::QWebEngineSettings(QWebEngineSettings *parentSettings) - : d_ptr(new WebEngineSettings(parentSettings ? parentSettings->d_func() : 0)) + : d_ptr(new WebEngineSettings(parentSettings ? parentSettings->d_ptr.data() : nullptr)) { - Q_D(QWebEngineSettings); - d->scheduleApplyRecursively(); + d_ptr->scheduleApplyRecursively(); } -QWebEngineSettings::~QWebEngineSettings() -{ -} +QWebEngineSettings::~QWebEngineSettings() { } /*! Returns the settings for a web engine page that belongs to the default @@ -136,111 +63,80 @@ QWebEngineSettings *QWebEngineSettings::defaultSettings() } */ -ASSERT_ENUMS_MATCH(WebEngineSettings::StandardFont, QWebEngineSettings::StandardFont) -ASSERT_ENUMS_MATCH(WebEngineSettings::FixedFont, QWebEngineSettings::FixedFont) -ASSERT_ENUMS_MATCH(WebEngineSettings::SerifFont, QWebEngineSettings::SerifFont) -ASSERT_ENUMS_MATCH(WebEngineSettings::SansSerifFont, QWebEngineSettings::SansSerifFont) -ASSERT_ENUMS_MATCH(WebEngineSettings::CursiveFont, QWebEngineSettings::CursiveFont) -ASSERT_ENUMS_MATCH(WebEngineSettings::FantasyFont, QWebEngineSettings::FantasyFont) -ASSERT_ENUMS_MATCH(WebEngineSettings::PictographFont, QWebEngineSettings::PictographFont) - void QWebEngineSettings::setFontFamily(QWebEngineSettings::FontFamily which, const QString &family) { - Q_D(QWebEngineSettings); - d->setFontFamily(static_cast<WebEngineSettings::FontFamily>(which), family); + d_ptr->setFontFamily(which, family); } QString QWebEngineSettings::fontFamily(QWebEngineSettings::FontFamily which) const { - return d_ptr->fontFamily(static_cast<WebEngineSettings::FontFamily>(which)); + return d_ptr->fontFamily(which); } void QWebEngineSettings::resetFontFamily(QWebEngineSettings::FontFamily which) { - d_ptr->resetFontFamily(static_cast<WebEngineSettings::FontFamily>(which)); + d_ptr->resetFontFamily(which); } -ASSERT_ENUMS_MATCH(WebEngineSettings::DefaultFixedFontSize, QWebEngineSettings::DefaultFixedFontSize) -ASSERT_ENUMS_MATCH(WebEngineSettings::DefaultFontSize, QWebEngineSettings::DefaultFontSize) -ASSERT_ENUMS_MATCH(WebEngineSettings::MinimumFontSize, QWebEngineSettings::MinimumFontSize) -ASSERT_ENUMS_MATCH(WebEngineSettings::MinimumLogicalFontSize, QWebEngineSettings::MinimumLogicalFontSize) - void QWebEngineSettings::setFontSize(QWebEngineSettings::FontSize type, int size) { - Q_D(QWebEngineSettings); - d->setFontSize(static_cast<WebEngineSettings::FontSize>(type), size); + d_ptr->setFontSize(type, size); } int QWebEngineSettings::fontSize(QWebEngineSettings::FontSize type) const { - Q_D(const QWebEngineSettings); - return d->fontSize(static_cast<WebEngineSettings::FontSize>(type)); + return d_ptr->fontSize(type); } void QWebEngineSettings::resetFontSize(QWebEngineSettings::FontSize type) { - Q_D(QWebEngineSettings); - d->resetFontSize(static_cast<WebEngineSettings::FontSize>(type)); + d_ptr->resetFontSize(type); } -void QWebEngineSettings::setDefaultTextEncoding(const QString &encoding) +QString QWebEngineSettings::defaultTextEncoding() const { - Q_D(QWebEngineSettings); - d->setDefaultTextEncoding(encoding); + return d_ptr->defaultTextEncoding(); } -QString QWebEngineSettings::defaultTextEncoding() const +QWebEngineSettings::UnknownUrlSchemePolicy QWebEngineSettings::unknownUrlSchemePolicy() const { - Q_D(const QWebEngineSettings); - return d->defaultTextEncoding(); + return d_ptr->unknownUrlSchemePolicy(); } -ASSERT_ENUMS_MATCH(WebEngineSettings::DisallowUnknownUrlSchemes, QWebEngineSettings::DisallowUnknownUrlSchemes) -ASSERT_ENUMS_MATCH(WebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction, QWebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction) -ASSERT_ENUMS_MATCH(WebEngineSettings::AllowAllUnknownUrlSchemes, QWebEngineSettings::AllowAllUnknownUrlSchemes) +void QWebEngineSettings::resetUnknownUrlSchemePolicy() +{ + d_ptr->setUnknownUrlSchemePolicy(QWebEngineSettings::InheritedUnknownUrlSchemePolicy); +} -QWebEngineSettings::UnknownUrlSchemePolicy QWebEngineSettings::unknownUrlSchemePolicy() const +void QWebEngineSettings::setAttribute(QWebEngineSettings::WebAttribute attr, bool on) { - Q_D(const QWebEngineSettings); - WebEngineSettings::UnknownUrlSchemePolicy result = d->unknownUrlSchemePolicy(); - Q_ASSERT(result != WebEngineSettings::InheritedUnknownUrlSchemePolicy); - return static_cast<QWebEngineSettings::UnknownUrlSchemePolicy>(result); + d_ptr->setAttribute(attr, on); } -void QWebEngineSettings::setUnknownUrlSchemePolicy(QWebEngineSettings::UnknownUrlSchemePolicy policy) +bool QWebEngineSettings::testAttribute(QWebEngineSettings::WebAttribute attr) const { - Q_D(QWebEngineSettings); - d->setUnknownUrlSchemePolicy(static_cast<WebEngineSettings::UnknownUrlSchemePolicy>(policy)); + return d_ptr->testAttribute(attr); } -void QWebEngineSettings::resetUnknownUrlSchemePolicy() +void QWebEngineSettings::resetAttribute(QWebEngineSettings::WebAttribute attr) { - Q_D(QWebEngineSettings); - d->setUnknownUrlSchemePolicy(WebEngineSettings::InheritedUnknownUrlSchemePolicy); + d_ptr->resetAttribute(attr); } -void QWebEngineSettings::setAttribute(QWebEngineSettings::WebAttribute attr, bool on) +void QWebEngineSettings::setDefaultTextEncoding(const QString &encoding) { - Q_D(QWebEngineSettings); - WebEngineSettings::Attribute webEngineAttribute = toWebEngineAttribute(attr); - Q_ASSERT(webEngineAttribute != WebEngineSettings::UnsupportedInCoreSettings); - d->setAttribute(webEngineAttribute, on); + d_ptr->setDefaultTextEncoding(encoding); } -bool QWebEngineSettings::testAttribute(QWebEngineSettings::WebAttribute attr) const +void QWebEngineSettings::setUnknownUrlSchemePolicy( + QWebEngineSettings::UnknownUrlSchemePolicy policy) { - Q_D(const QWebEngineSettings); - WebEngineSettings::Attribute webEngineAttribute = toWebEngineAttribute(attr); - Q_ASSERT(webEngineAttribute != WebEngineSettings::UnsupportedInCoreSettings); - return d->testAttribute(webEngineAttribute); + d_ptr->setUnknownUrlSchemePolicy(policy); } -void QWebEngineSettings::resetAttribute(QWebEngineSettings::WebAttribute attr) +void QWebEngineSettings::setParentSettings(QWebEngineSettings *parentSettings) { - Q_D(QWebEngineSettings); - WebEngineSettings::Attribute webEngineAttribute = toWebEngineAttribute(attr); - Q_ASSERT(webEngineAttribute != WebEngineSettings::UnsupportedInCoreSettings); - d->resetAttribute(webEngineAttribute); + d_ptr->setParentSettings(parentSettings->d_ptr.data()); } QT_END_NAMESPACE diff --git a/src/core/api/qwebenginesettings.h b/src/core/api/qwebenginesettings.h index 3b98c0fd7..f565f8ee2 100644 --- a/src/core/api/qwebenginesettings.h +++ b/src/core/api/qwebenginesettings.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtWebEngine module of the Qt Toolkit. @@ -65,6 +65,7 @@ public: FantasyFont, PictographFont }; + enum WebAttribute { AutoLoadImages, JavascriptEnabled, @@ -107,6 +108,7 @@ public: }; enum UnknownUrlSchemePolicy { + InheritedUnknownUrlSchemePolicy = 0, // TODO: hide DisallowUnknownUrlSchemes = 1, AllowUnknownUrlSchemesFromUserInteraction, AllowAllUnknownUrlSchemes @@ -114,7 +116,8 @@ public: //TODO: see if we still need it //static QWebEngineSettings *defaultSettings(); - +public: + ~QWebEngineSettings(); void setFontFamily(FontFamily which, const QString &family); QString fontFamily(FontFamily which) const; void resetFontFamily(FontFamily which); @@ -135,16 +138,15 @@ public: void resetUnknownUrlSchemePolicy(); private: + explicit QWebEngineSettings(QWebEngineSettings *parentSettings = nullptr); + void setParentSettings(QWebEngineSettings *parentSettings); Q_DISABLE_COPY(QWebEngineSettings) typedef ::QtWebEngineCore::WebEngineSettings QWebEngineSettingsPrivate; - QWebEngineSettingsPrivate* d_func() { return d_ptr.data(); } - const QWebEngineSettingsPrivate* d_func() const { return d_ptr.data(); } QScopedPointer<QWebEngineSettingsPrivate> d_ptr; friend class QWebEnginePagePrivate; friend class QWebEngineProfilePrivate; - - ~QWebEngineSettings(); - explicit QWebEngineSettings(QWebEngineSettings *parentSettings = Q_NULLPTR); + friend class QQuickWebEngineSettings; + friend class QtWebEngineCore::WebEngineSettings; }; QT_END_NAMESPACE diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index 1abf2387e..e0ce3558c 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -1011,7 +1011,7 @@ void ContentBrowserClientQt::RegisterNonNetworkSubresourceURLLoaderFactories(int #endif if (!install_file_scheme && web_contents) { const auto *settings = static_cast<WebContentsDelegateQt *>(web_contents->GetDelegate())->webEngineSettings(); - if (settings->testAttribute(WebEngineSettings::LocalContentCanAccessFileUrls)) { + if (settings->testAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls)) { for (const auto &local_scheme : url::GetLocalSchemes()) { if (url.SchemeIs(local_scheme)) { install_file_scheme = true; diff --git a/src/core/favicon_manager.cpp b/src/core/favicon_manager.cpp index 412aab90d..a1e133775 100644 --- a/src/core/favicon_manager.cpp +++ b/src/core/favicon_manager.cpp @@ -187,8 +187,8 @@ void FaviconManager::storeIcon(int id, const QIcon &icon) m_inProgressRequests.remove(id); if (m_inProgressRequests.isEmpty()) { - WebEngineSettings *settings = m_viewClient->webEngineSettings(); - bool touchIconsEnabled = settings->testAttribute(WebEngineSettings::TouchIconsEnabled); + QWebEngineSettings *settings = m_viewClient->webEngineSettings(); + bool touchIconsEnabled = settings->testAttribute(QWebEngineSettings::TouchIconsEnabled); generateCandidateIcon(touchIconsEnabled); const QUrl &iconUrl = candidateIconUrl(touchIconsEnabled); @@ -243,13 +243,13 @@ void FaviconManager::update(const QList<FaviconInfo> &candidates) { updateCandidates(candidates); - WebEngineSettings *settings = m_viewClient->webEngineSettings(); - if (!settings->testAttribute(WebEngineSettings::AutoLoadIconsForPage)) { + QWebEngineSettings *settings = m_viewClient->webEngineSettings(); + if (!settings->testAttribute(QWebEngineSettings::AutoLoadIconsForPage)) { m_viewClient->iconChanged(QUrl()); return; } - bool touchIconsEnabled = settings->testAttribute(WebEngineSettings::TouchIconsEnabled); + bool touchIconsEnabled = settings->testAttribute(QWebEngineSettings::TouchIconsEnabled); const QList<FaviconInfo> &faviconInfoList = getFaviconInfoList(true /* candidates only */); for (auto it = faviconInfoList.cbegin(), end = faviconInfoList.cend(); it != end; ++it) { diff --git a/src/core/media_capture_devices_dispatcher.cpp b/src/core/media_capture_devices_dispatcher.cpp index 693cfa2e3..62d218625 100644 --- a/src/core/media_capture_devices_dispatcher.cpp +++ b/src/core/media_capture_devices_dispatcher.cpp @@ -337,8 +337,8 @@ void MediaCaptureDevicesDispatcher::processMediaAccessRequest(WebContentsAdapter } if (flags.testFlag(WebContentsAdapterClient::MediaDesktopVideoCapture)) { - const bool screenCaptureEnabled = - adapterClient->webEngineSettings()->testAttribute(WebEngineSettings::ScreenCaptureEnabled); + const bool screenCaptureEnabled = adapterClient->webEngineSettings()->testAttribute( + QWebEngineSettings::ScreenCaptureEnabled); const bool originIsSecure = content::IsOriginSecure(request.security_origin); if (!screenCaptureEnabled || !originIsSecure) { std::move(callback).Run(blink::MediaStreamDevices(), MediaStreamRequestResult::INVALID_STATE, std::unique_ptr<content::MediaStreamUI>()); diff --git a/src/core/net/plugin_response_interceptor_url_loader_throttle.cpp b/src/core/net/plugin_response_interceptor_url_loader_throttle.cpp index 4fdb8c3d0..e75900822 100644 --- a/src/core/net/plugin_response_interceptor_url_loader_throttle.cpp +++ b/src/core/net/plugin_response_interceptor_url_loader_throttle.cpp @@ -71,8 +71,8 @@ void onPdfStreamIntercepted(const GURL &original_url, std::string extension_id, return; WebEngineSettings *settings = contentsDelegate->webEngineSettings(); - if (!settings->testAttribute(WebEngineSettings::PdfViewerEnabled) - || !settings->testAttribute(WebEngineSettings::PluginsEnabled)) { + if (!settings->testAttribute(QWebEngineSettings::PdfViewerEnabled) + || !settings->testAttribute(QWebEngineSettings::PluginsEnabled)) { // If the applications has been set up to always download PDF files to open them in an // external viewer, trigger the download. std::unique_ptr<download::DownloadUrlParameters> params( diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp index ece74b123..e232508b4 100644 --- a/src/core/permission_manager_qt.cpp +++ b/src/core/permission_manager_qt.cpp @@ -212,8 +212,8 @@ int PermissionManagerQt::RequestPermission(content::PermissionType permission, ProfileAdapter::PermissionType permissionType = toQt(permission); if (permissionType == ProfileAdapter::ClipboardRead) { WebEngineSettings *settings = contentsDelegate->webEngineSettings(); - if (settings->testAttribute(WebEngineSettings::JavascriptCanAccessClipboard) - && settings->testAttribute(WebEngineSettings::JavascriptCanPaste)) + if (settings->testAttribute(QWebEngineSettings::JavascriptCanAccessClipboard) + && settings->testAttribute(QWebEngineSettings::JavascriptCanPaste)) std::move(callback).Run(blink::mojom::PermissionStatus::GRANTED); else std::move(callback).Run(blink::mojom::PermissionStatus::DENIED); @@ -254,8 +254,8 @@ int PermissionManagerQt::RequestPermissions(const std::vector<content::Permissio result.push_back(blink::mojom::PermissionStatus::DENIED); else if (permissionType == ProfileAdapter::ClipboardRead) { WebEngineSettings *settings = contentsDelegate->webEngineSettings(); - if (settings->testAttribute(WebEngineSettings::JavascriptCanAccessClipboard) - && settings->testAttribute(WebEngineSettings::JavascriptCanPaste)) + if (settings->testAttribute(QWebEngineSettings::JavascriptCanAccessClipboard) + && settings->testAttribute(QWebEngineSettings::JavascriptCanPaste)) result.push_back(blink::mojom::PermissionStatus::GRANTED); else result.push_back(blink::mojom::PermissionStatus::DENIED); @@ -306,10 +306,12 @@ blink::mojom::PermissionStatus PermissionManagerQt::GetPermissionStatusForFrame( permission == content::PermissionType::CLIPBOARD_WRITE) { WebContentsDelegateQt *delegate = static_cast<WebContentsDelegateQt *>( content::WebContents::FromRenderFrameHost(render_frame_host)->GetDelegate()); - if (!delegate->webEngineSettings()->testAttribute(WebEngineSettings::JavascriptCanAccessClipboard)) + if (!delegate->webEngineSettings()->testAttribute( + QWebEngineSettings::JavascriptCanAccessClipboard)) return blink::mojom::PermissionStatus::DENIED; - if (permission == content::PermissionType::CLIPBOARD_READ && - !delegate->webEngineSettings()->testAttribute(WebEngineSettings::JavascriptCanPaste)) + if (permission == content::PermissionType::CLIPBOARD_READ + && !delegate->webEngineSettings()->testAttribute( + QWebEngineSettings::JavascriptCanPaste)) return blink::mojom::PermissionStatus::DENIED; return blink::mojom::PermissionStatus::GRANTED; } diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index 2005cdce9..2c4d9125e 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -487,7 +487,7 @@ void WebContentsAdapter::setClient(WebContentsAdapterClient *adapterClient) Q_ASSERT(m_profileAdapter); // This might replace any adapter that has been initialized with this WebEngineSettings. - adapterClient->webEngineSettings()->setWebContentsAdapter(this); + WebEngineSettings::get(adapterClient->webEngineSettings())->setWebContentsAdapter(this); } bool WebContentsAdapter::isInitialized() const @@ -562,7 +562,8 @@ void WebContentsAdapter::initializeRenderPrefs() commandLine->GetSwitchValueASCII(switches::kForceWebRtcIPHandlingPolicy); else rendererPrefs->webrtc_ip_handling_policy = - m_adapterClient->webEngineSettings()->testAttribute(WebEngineSettings::WebRTCPublicInterfacesOnly) + m_adapterClient->webEngineSettings()->testAttribute( + QWebEngineSettings::WebRTCPublicInterfacesOnly) ? blink::kWebRTCIPHandlingDefaultPublicInterfaceOnly : blink::kWebRTCIPHandlingDefault; #endif @@ -615,7 +616,7 @@ void WebContentsAdapter::reload() bool wasDiscarded = (m_lifecycleState == LifecycleState::Discarded); setLifecycleState(LifecycleState::Active); CHECK_VALID_RENDER_WIDGET_HOST_VIEW(m_webContents->GetRenderViewHost()); - WebEngineSettings *settings = m_adapterClient->webEngineSettings(); + WebEngineSettings *settings = WebEngineSettings::get(m_adapterClient->webEngineSettings()); settings->doApply(); if (!wasDiscarded) // undiscard() already triggers a reload m_webContents->GetController().Reload(content::ReloadType::NORMAL, /*checkRepost = */false); @@ -628,7 +629,7 @@ void WebContentsAdapter::reloadAndBypassCache() bool wasDiscarded = (m_lifecycleState == LifecycleState::Discarded); setLifecycleState(LifecycleState::Active); CHECK_VALID_RENDER_WIDGET_HOST_VIEW(m_webContents->GetRenderViewHost()); - WebEngineSettings *settings = m_adapterClient->webEngineSettings(); + WebEngineSettings *settings = WebEngineSettings::get(m_adapterClient->webEngineSettings()); settings->doApply(); if (!wasDiscarded) // undiscard() already triggers a reload m_webContents->GetController().Reload(content::ReloadType::BYPASSING_CACHE, /*checkRepost = */false); @@ -660,8 +661,7 @@ void WebContentsAdapter::load(const QWebEngineHttpRequest &request) CHECK_VALID_RENDER_WIDGET_HOST_VIEW(m_webContents->GetRenderViewHost()); - WebEngineSettings *settings = m_adapterClient->webEngineSettings(); - settings->doApply(); + WebEngineSettings::get(m_adapterClient->webEngineSettings())->doApply(); // The situation can occur when relying on the editingFinished signal in QML to set the url // of the WebView. @@ -748,8 +748,7 @@ void WebContentsAdapter::setContent(const QByteArray &data, const QString &mimeT CHECK_VALID_RENDER_WIDGET_HOST_VIEW(m_webContents->GetRenderViewHost()); - WebEngineSettings *settings = m_adapterClient->webEngineSettings(); - settings->doApply(); + WebEngineSettings::get(m_adapterClient->webEngineSettings())->doApply(); QByteArray encodedData = data.toPercentEncoding(); std::string urlString; @@ -1718,8 +1717,8 @@ void WebContentsAdapter::replaceMisspelling(const QString &word) void WebContentsAdapter::focusIfNecessary() { CHECK_INITIALIZED(); - const WebEngineSettings *settings = m_adapterClient->webEngineSettings(); - bool focusOnNavigation = settings->testAttribute(WebEngineSettings::FocusOnNavigationEnabled); + const QWebEngineSettings *settings = m_adapterClient->webEngineSettings(); + bool focusOnNavigation = settings->testAttribute(QWebEngineSettings::FocusOnNavigationEnabled); if (focusOnNavigation) m_webContents->Focus(); } diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h index 13f1a4563..ca5ca10de 100644 --- a/src/core/web_contents_adapter_client.h +++ b/src/core/web_contents_adapter_client.h @@ -70,6 +70,7 @@ QT_FORWARD_DECLARE_CLASS(QWebEngineUrlRequestInfo) QT_FORWARD_DECLARE_CLASS(QWebEngineUrlRequestInterceptor) QT_FORWARD_DECLARE_CLASS(QWebEngineContextMenuRequest) QT_FORWARD_DECLARE_CLASS(QWebEngineCertificateError); +QT_FORWARD_DECLARE_CLASS(QWebEngineSettings) namespace content { struct DropData; @@ -227,7 +228,7 @@ public: virtual void runMouseLockPermissionRequest(const QUrl &securityOrigin) = 0; virtual void runQuotaRequest(QWebEngineQuotaRequest) = 0; virtual void runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest) = 0; - virtual WebEngineSettings *webEngineSettings() const = 0; + virtual QWebEngineSettings *webEngineSettings() const = 0; RenderProcessTerminationStatus renderProcessExitStatus(int); virtual void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, int exitCode) = 0; virtual void requestGeometryChange(const QRect &geometry, const QRect &frameGeometry) = 0; diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index 5318cdf1b..e83903524 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -645,8 +645,8 @@ void WebContentsDelegateQt::DidFirstVisuallyNonEmptyPaint() void WebContentsDelegateQt::ActivateContents(content::WebContents* contents) { - WebEngineSettings *settings = m_viewClient->webEngineSettings(); - if (settings->testAttribute(settings->Attribute::AllowWindowActivationFromJavaScript)) + QWebEngineSettings *settings = m_viewClient->webEngineSettings(); + if (settings->testAttribute(QWebEngineSettings::AllowWindowActivationFromJavaScript)) contents->Focus(); } @@ -662,7 +662,7 @@ void WebContentsDelegateQt::RequestToLockMouse(content::WebContents *web_content void WebContentsDelegateQt::overrideWebPreferences(content::WebContents *webContents, content::WebPreferences *webPreferences) { - m_viewClient->webEngineSettings()->overrideWebPreferences(webContents, webPreferences); + WebEngineSettings::get(m_viewClient->webEngineSettings())->overrideWebPreferences(webContents, webPreferences); } QSharedPointer<WebContentsAdapter> @@ -703,17 +703,17 @@ extern WebContentsAdapterClient::NavigationType pageTransitionToNavigationType(u void WebContentsDelegateQt::launchExternalURL(const QUrl &url, ui::PageTransition page_transition, bool is_main_frame, bool has_user_gesture) { - WebEngineSettings *settings = m_viewClient->webEngineSettings(); + QWebEngineSettings *settings = m_viewClient->webEngineSettings(); bool navigationAllowedByPolicy = false; bool navigationRequestAccepted = true; switch (settings->unknownUrlSchemePolicy()) { - case WebEngineSettings::DisallowUnknownUrlSchemes: + case QWebEngineSettings::DisallowUnknownUrlSchemes: break; - case WebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction: + case QWebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction: navigationAllowedByPolicy = has_user_gesture; break; - case WebEngineSettings::AllowAllUnknownUrlSchemes: + case QWebEngineSettings::AllowAllUnknownUrlSchemes: navigationAllowedByPolicy = true; break; default: @@ -837,7 +837,7 @@ FindTextHelper *WebContentsDelegateQt::findTextHelper() } WebEngineSettings *WebContentsDelegateQt::webEngineSettings() const { - return m_viewClient->webEngineSettings(); + return WebEngineSettings::get(m_viewClient->webEngineSettings()); } WebContentsAdapter *WebContentsDelegateQt::webContentsAdapter() const diff --git a/src/core/web_engine_settings.cpp b/src/core/web_engine_settings.cpp index 837f05bf1..93c822f2f 100644 --- a/src/core/web_engine_settings.cpp +++ b/src/core/web_engine_settings.cpp @@ -62,9 +62,9 @@ namespace QtWebEngineCore { -QHash<WebEngineSettings::Attribute, bool> WebEngineSettings::s_defaultAttributes; -QHash<WebEngineSettings::FontFamily, QString> WebEngineSettings::s_defaultFontFamilies; -QHash<WebEngineSettings::FontSize, int> WebEngineSettings::s_defaultFontSizes; +QHash<QWebEngineSettings::WebAttribute, bool> WebEngineSettings::s_defaultAttributes; +QHash<QWebEngineSettings::FontFamily, QString> WebEngineSettings::s_defaultFontFamilies; +QHash<QWebEngineSettings::FontSize, int> WebEngineSettings::s_defaultFontSizes; static const int batchTimerTimeout = 0; @@ -92,13 +92,14 @@ static inline bool isTouchEventsAPIEnabled() { } WebEngineSettings::WebEngineSettings(WebEngineSettings *_parentSettings) - : m_adapter(0) + : m_adapter(nullptr) , parentSettings(_parentSettings) - , m_unknownUrlSchemePolicy(WebEngineSettings::InheritedUnknownUrlSchemePolicy) + , m_unknownUrlSchemePolicy(QWebEngineSettings::InheritedUnknownUrlSchemePolicy) { if (parentSettings) parentSettings->childSettings.insert(this); - + else + initDefaults(); m_batchTimer.setSingleShot(true); m_batchTimer.setInterval(batchTimerTimeout); QObject::connect(&m_batchTimer, &QTimer::timeout, [this]() { @@ -132,13 +133,13 @@ void WebEngineSettings::overrideWebPreferences(content::WebContents *webContents } } -void WebEngineSettings::setAttribute(WebEngineSettings::Attribute attr, bool on) +void WebEngineSettings::setAttribute(QWebEngineSettings::WebAttribute attr, bool on) { m_attributes.insert(attr, on); scheduleApplyRecursively(); } -bool WebEngineSettings::testAttribute(WebEngineSettings::Attribute attr) const +bool WebEngineSettings::testAttribute(QWebEngineSettings::WebAttribute attr) const { if (!parentSettings) { Q_ASSERT(s_defaultAttributes.contains(attr)); @@ -147,7 +148,7 @@ bool WebEngineSettings::testAttribute(WebEngineSettings::Attribute attr) const return m_attributes.value(attr, parentSettings->testAttribute(attr)); } -bool WebEngineSettings::isAttributeExplicitlySet(Attribute attr) const +bool WebEngineSettings::isAttributeExplicitlySet(QWebEngineSettings::WebAttribute attr) const { if (m_attributes.contains(attr)) return true; @@ -158,19 +159,19 @@ bool WebEngineSettings::isAttributeExplicitlySet(Attribute attr) const return false; } -void WebEngineSettings::resetAttribute(WebEngineSettings::Attribute attr) +void WebEngineSettings::resetAttribute(QWebEngineSettings::WebAttribute attr) { m_attributes.remove(attr); scheduleApplyRecursively(); } -void WebEngineSettings::setFontFamily(WebEngineSettings::FontFamily which, const QString &family) +void WebEngineSettings::setFontFamily(QWebEngineSettings::FontFamily which, const QString &family) { m_fontFamilies.insert(which, family); scheduleApplyRecursively(); } -QString WebEngineSettings::fontFamily(WebEngineSettings::FontFamily which) +QString WebEngineSettings::fontFamily(QWebEngineSettings::FontFamily which) { if (!parentSettings) { Q_ASSERT(s_defaultFontFamilies.contains(which)); @@ -179,19 +180,19 @@ QString WebEngineSettings::fontFamily(WebEngineSettings::FontFamily which) return m_fontFamilies.value(which, parentSettings->fontFamily(which)); } -void WebEngineSettings::resetFontFamily(WebEngineSettings::FontFamily which) +void WebEngineSettings::resetFontFamily(QWebEngineSettings::FontFamily which) { m_fontFamilies.remove(which); scheduleApplyRecursively(); } -void WebEngineSettings::setFontSize(WebEngineSettings::FontSize type, int size) +void WebEngineSettings::setFontSize(QWebEngineSettings::FontSize type, int size) { m_fontSizes.insert(type, size); scheduleApplyRecursively(); } -int WebEngineSettings::fontSize(WebEngineSettings::FontSize type) const +int WebEngineSettings::fontSize(QWebEngineSettings::FontSize type) const { if (!parentSettings) { Q_ASSERT(s_defaultFontSizes.contains(type)); @@ -200,7 +201,7 @@ int WebEngineSettings::fontSize(WebEngineSettings::FontSize type) const return m_fontSizes.value(type, parentSettings->fontSize(type)); } -void WebEngineSettings::resetFontSize(WebEngineSettings::FontSize type) +void WebEngineSettings::resetFontSize(QWebEngineSettings::FontSize type) { m_fontSizes.remove(type); scheduleApplyRecursively(); @@ -219,42 +220,42 @@ QString WebEngineSettings::defaultTextEncoding() const return m_defaultEncoding.isEmpty()? parentSettings->defaultTextEncoding() : m_defaultEncoding; } -void WebEngineSettings::setUnknownUrlSchemePolicy(WebEngineSettings::UnknownUrlSchemePolicy policy) +void WebEngineSettings::setUnknownUrlSchemePolicy(QWebEngineSettings::UnknownUrlSchemePolicy policy) { m_unknownUrlSchemePolicy = policy; } -WebEngineSettings::UnknownUrlSchemePolicy WebEngineSettings::unknownUrlSchemePolicy() const +QWebEngineSettings::UnknownUrlSchemePolicy WebEngineSettings::unknownUrlSchemePolicy() const { // value InheritedUnknownUrlSchemePolicy means it is taken from parent, if possible. If there // is no parent, then AllowUnknownUrlSchemesFromUserInteraction (the default behavior) is used. - if (m_unknownUrlSchemePolicy != InheritedUnknownUrlSchemePolicy) + if (m_unknownUrlSchemePolicy != QWebEngineSettings::InheritedUnknownUrlSchemePolicy) return m_unknownUrlSchemePolicy; if (parentSettings) return parentSettings->unknownUrlSchemePolicy(); - return AllowUnknownUrlSchemesFromUserInteraction; + return QWebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction; } void WebEngineSettings::initDefaults() { if (s_defaultAttributes.isEmpty()) { // Initialize the default settings. - s_defaultAttributes.insert(AutoLoadImages, true); - s_defaultAttributes.insert(JavascriptEnabled, true); - s_defaultAttributes.insert(JavascriptCanOpenWindows, true); - s_defaultAttributes.insert(JavascriptCanAccessClipboard, false); - s_defaultAttributes.insert(LinksIncludedInFocusChain, true); - s_defaultAttributes.insert(LocalStorageEnabled, true); - s_defaultAttributes.insert(LocalContentCanAccessRemoteUrls, false); - s_defaultAttributes.insert(XSSAuditingEnabled, false); - s_defaultAttributes.insert(SpatialNavigationEnabled, false); - s_defaultAttributes.insert(LocalContentCanAccessFileUrls, true); - s_defaultAttributes.insert(HyperlinkAuditingEnabled, false); - s_defaultAttributes.insert(ErrorPageEnabled, true); - s_defaultAttributes.insert(PluginsEnabled, false); - s_defaultAttributes.insert(FullScreenSupportEnabled, false); - s_defaultAttributes.insert(ScreenCaptureEnabled, false); - s_defaultAttributes.insert(ShowScrollBars, true); + s_defaultAttributes.insert(QWebEngineSettings::AutoLoadImages, true); + s_defaultAttributes.insert(QWebEngineSettings::JavascriptEnabled, true); + s_defaultAttributes.insert(QWebEngineSettings::JavascriptCanOpenWindows, true); + s_defaultAttributes.insert(QWebEngineSettings::JavascriptCanAccessClipboard, false); + s_defaultAttributes.insert(QWebEngineSettings::LinksIncludedInFocusChain, true); + s_defaultAttributes.insert(QWebEngineSettings::LocalStorageEnabled, true); + s_defaultAttributes.insert(QWebEngineSettings::LocalContentCanAccessRemoteUrls, false); + s_defaultAttributes.insert(QWebEngineSettings::XSSAuditingEnabled, false); + s_defaultAttributes.insert(QWebEngineSettings::SpatialNavigationEnabled, false); + s_defaultAttributes.insert(QWebEngineSettings::LocalContentCanAccessFileUrls, true); + s_defaultAttributes.insert(QWebEngineSettings::HyperlinkAuditingEnabled, false); + s_defaultAttributes.insert(QWebEngineSettings::ErrorPageEnabled, true); + s_defaultAttributes.insert(QWebEngineSettings::PluginsEnabled, false); + s_defaultAttributes.insert(QWebEngineSettings::FullScreenSupportEnabled, false); + s_defaultAttributes.insert(QWebEngineSettings::ScreenCaptureEnabled, false); + s_defaultAttributes.insert(QWebEngineSettings::ShowScrollBars, true); // The following defaults matches logic in render_view_host_impl.cc // But first we must ensure the WebContext has been initialized QtWebEngineCore::WebEngineContext::current(); @@ -266,27 +267,30 @@ void WebEngineSettings::initDefaults() bool accelerated2dCanvas = !commandLine->HasSwitch(switches::kDisableAccelerated2dCanvas); bool allowRunningInsecureContent = commandLine->HasSwitch(switches::kAllowRunningInsecureContent); - s_defaultAttributes.insert(ScrollAnimatorEnabled, smoothScrolling); - s_defaultAttributes.insert(WebGLEnabled, webGL); - s_defaultAttributes.insert(Accelerated2dCanvasEnabled, accelerated2dCanvas); - s_defaultAttributes.insert(AutoLoadIconsForPage, true); - s_defaultAttributes.insert(TouchIconsEnabled, false); - s_defaultAttributes.insert(FocusOnNavigationEnabled, false); - s_defaultAttributes.insert(PrintElementBackgrounds, true); - s_defaultAttributes.insert(AllowRunningInsecureContent, allowRunningInsecureContent); - s_defaultAttributes.insert(AllowGeolocationOnInsecureOrigins, false); - s_defaultAttributes.insert(AllowWindowActivationFromJavaScript, false); + s_defaultAttributes.insert(QWebEngineSettings::ScrollAnimatorEnabled, smoothScrolling); + s_defaultAttributes.insert(QWebEngineSettings::WebGLEnabled, webGL); + s_defaultAttributes.insert(QWebEngineSettings::Accelerated2dCanvasEnabled, + accelerated2dCanvas); + s_defaultAttributes.insert(QWebEngineSettings::AutoLoadIconsForPage, true); + s_defaultAttributes.insert(QWebEngineSettings::TouchIconsEnabled, false); + s_defaultAttributes.insert(QWebEngineSettings::FocusOnNavigationEnabled, false); + s_defaultAttributes.insert(QWebEngineSettings::PrintElementBackgrounds, true); + s_defaultAttributes.insert(QWebEngineSettings::AllowRunningInsecureContent, + allowRunningInsecureContent); + s_defaultAttributes.insert(QWebEngineSettings::AllowGeolocationOnInsecureOrigins, false); + s_defaultAttributes.insert(QWebEngineSettings::AllowWindowActivationFromJavaScript, false); bool playbackRequiresUserGesture = false; if (commandLine->HasSwitch(switches::kAutoplayPolicy)) playbackRequiresUserGesture = (commandLine->GetSwitchValueASCII(switches::kAutoplayPolicy) != switches::autoplay::kNoUserGestureRequiredPolicy); - s_defaultAttributes.insert(PlaybackRequiresUserGesture, playbackRequiresUserGesture); - s_defaultAttributes.insert(WebRTCPublicInterfacesOnly, false); - s_defaultAttributes.insert(JavascriptCanPaste, false); - s_defaultAttributes.insert(DnsPrefetchEnabled, false); + s_defaultAttributes.insert(QWebEngineSettings::PlaybackRequiresUserGesture, + playbackRequiresUserGesture); + s_defaultAttributes.insert(QWebEngineSettings::WebRTCPublicInterfacesOnly, false); + s_defaultAttributes.insert(QWebEngineSettings::JavascriptCanPaste, false); + s_defaultAttributes.insert(QWebEngineSettings::DnsPrefetchEnabled, false); #if QT_CONFIG(webengine_extensions) - s_defaultAttributes.insert(PdfViewerEnabled, true); + s_defaultAttributes.insert(QWebEngineSettings::PdfViewerEnabled, true); #else - s_defaultAttributes.insert(PdfViewerEnabled, false); + s_defaultAttributes.insert(QWebEngineSettings::PdfViewerEnabled, false); #endif } @@ -294,32 +298,34 @@ void WebEngineSettings::initDefaults() // Default fonts QFont defaultFont; defaultFont.setStyleHint(QFont::Serif); - s_defaultFontFamilies.insert(StandardFont, defaultFont.defaultFamily()); - s_defaultFontFamilies.insert(SerifFont, defaultFont.defaultFamily()); - s_defaultFontFamilies.insert(PictographFont, defaultFont.defaultFamily()); + s_defaultFontFamilies.insert(QWebEngineSettings::StandardFont, defaultFont.defaultFamily()); + s_defaultFontFamilies.insert(QWebEngineSettings::SerifFont, defaultFont.defaultFamily()); + s_defaultFontFamilies.insert(QWebEngineSettings::PictographFont, + defaultFont.defaultFamily()); defaultFont.setStyleHint(QFont::Fantasy); - s_defaultFontFamilies.insert(FantasyFont, defaultFont.defaultFamily()); + s_defaultFontFamilies.insert(QWebEngineSettings::FantasyFont, defaultFont.defaultFamily()); defaultFont.setStyleHint(QFont::Cursive); - s_defaultFontFamilies.insert(CursiveFont, defaultFont.defaultFamily()); + s_defaultFontFamilies.insert(QWebEngineSettings::CursiveFont, defaultFont.defaultFamily()); defaultFont.setStyleHint(QFont::SansSerif); - s_defaultFontFamilies.insert(SansSerifFont, defaultFont.defaultFamily()); + s_defaultFontFamilies.insert(QWebEngineSettings::SansSerifFont, + defaultFont.defaultFamily()); defaultFont.setStyleHint(QFont::Monospace); - s_defaultFontFamilies.insert(FixedFont, defaultFont.defaultFamily()); + s_defaultFontFamilies.insert(QWebEngineSettings::FixedFont, defaultFont.defaultFamily()); } if (s_defaultFontSizes.isEmpty()) { - s_defaultFontSizes.insert(MinimumFontSize, 0); - s_defaultFontSizes.insert(MinimumLogicalFontSize, 6); - s_defaultFontSizes.insert(DefaultFixedFontSize, 13); - s_defaultFontSizes.insert(DefaultFontSize, 16); + s_defaultFontSizes.insert(QWebEngineSettings::MinimumFontSize, 0); + s_defaultFontSizes.insert(QWebEngineSettings::MinimumLogicalFontSize, 6); + s_defaultFontSizes.insert(QWebEngineSettings::DefaultFixedFontSize, 13); + s_defaultFontSizes.insert(QWebEngineSettings::DefaultFontSize, 16); } m_defaultEncoding = QStringLiteral("ISO-8859-1"); - m_unknownUrlSchemePolicy = InheritedUnknownUrlSchemePolicy; + m_unknownUrlSchemePolicy = QWebEngineSettings::InheritedUnknownUrlSchemePolicy; } void WebEngineSettings::scheduleApply() @@ -359,46 +365,59 @@ void WebEngineSettings::applySettingsToWebPreferences(content::WebPreferences *p } // Attributes mapping. - prefs->loads_images_automatically = testAttribute(AutoLoadImages); - prefs->javascript_enabled = testAttribute(JavascriptEnabled); - prefs->javascript_can_access_clipboard = testAttribute(JavascriptCanAccessClipboard); - prefs->tabs_to_links = testAttribute(LinksIncludedInFocusChain); - prefs->local_storage_enabled = testAttribute(LocalStorageEnabled); - prefs->databases_enabled = testAttribute(LocalStorageEnabled); - prefs->allow_universal_access_from_file_urls = testAttribute(LocalContentCanAccessRemoteUrls); - prefs->spatial_navigation_enabled = testAttribute(SpatialNavigationEnabled); - prefs->allow_file_access_from_file_urls = testAttribute(LocalContentCanAccessFileUrls); - prefs->hyperlink_auditing_enabled = testAttribute(HyperlinkAuditingEnabled); - prefs->enable_scroll_animator = testAttribute(ScrollAnimatorEnabled); - prefs->enable_error_page = testAttribute(ErrorPageEnabled); - prefs->plugins_enabled = testAttribute(PluginsEnabled); - prefs->fullscreen_supported = testAttribute(FullScreenSupportEnabled); - prefs->accelerated_2d_canvas_enabled = testAttribute(Accelerated2dCanvasEnabled); - prefs->webgl1_enabled = prefs->webgl2_enabled = testAttribute(WebGLEnabled); - prefs->should_print_backgrounds = testAttribute(PrintElementBackgrounds); - prefs->allow_running_insecure_content = testAttribute(AllowRunningInsecureContent); - prefs->allow_geolocation_on_insecure_origins = testAttribute(AllowGeolocationOnInsecureOrigins); - prefs->hide_scrollbars = !testAttribute(ShowScrollBars); - if (isAttributeExplicitlySet(PlaybackRequiresUserGesture)) { - prefs->autoplay_policy = testAttribute(PlaybackRequiresUserGesture) - ? content::AutoplayPolicy::kUserGestureRequired - : content::AutoplayPolicy::kNoUserGestureRequired; + prefs->loads_images_automatically = testAttribute(QWebEngineSettings::AutoLoadImages); + prefs->javascript_enabled = testAttribute(QWebEngineSettings::JavascriptEnabled); + prefs->javascript_can_access_clipboard = + testAttribute(QWebEngineSettings::JavascriptCanAccessClipboard); + prefs->tabs_to_links = testAttribute(QWebEngineSettings::LinksIncludedInFocusChain); + prefs->local_storage_enabled = testAttribute(QWebEngineSettings::LocalStorageEnabled); + prefs->databases_enabled = testAttribute(QWebEngineSettings::LocalStorageEnabled); + prefs->allow_universal_access_from_file_urls = + testAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls); + prefs->spatial_navigation_enabled = testAttribute(QWebEngineSettings::SpatialNavigationEnabled); + prefs->allow_file_access_from_file_urls = + testAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls); + prefs->hyperlink_auditing_enabled = testAttribute(QWebEngineSettings::HyperlinkAuditingEnabled); + prefs->enable_scroll_animator = testAttribute(QWebEngineSettings::ScrollAnimatorEnabled); + prefs->enable_error_page = testAttribute(QWebEngineSettings::ErrorPageEnabled); + prefs->plugins_enabled = testAttribute(QWebEngineSettings::PluginsEnabled); + prefs->fullscreen_supported = testAttribute(QWebEngineSettings::FullScreenSupportEnabled); + prefs->accelerated_2d_canvas_enabled = + testAttribute(QWebEngineSettings::Accelerated2dCanvasEnabled); + prefs->webgl1_enabled = prefs->webgl2_enabled = testAttribute(QWebEngineSettings::WebGLEnabled); + prefs->should_print_backgrounds = testAttribute(QWebEngineSettings::PrintElementBackgrounds); + prefs->allow_running_insecure_content = + testAttribute(QWebEngineSettings::AllowRunningInsecureContent); + prefs->allow_geolocation_on_insecure_origins = + testAttribute(QWebEngineSettings::AllowGeolocationOnInsecureOrigins); + prefs->hide_scrollbars = !testAttribute(QWebEngineSettings::ShowScrollBars); + if (isAttributeExplicitlySet(QWebEngineSettings::PlaybackRequiresUserGesture)) { + prefs->autoplay_policy = testAttribute(QWebEngineSettings::PlaybackRequiresUserGesture) + ? content::AutoplayPolicy::kUserGestureRequired + : content::AutoplayPolicy::kNoUserGestureRequired; } - prefs->dom_paste_enabled = testAttribute(JavascriptCanPaste); - prefs->dns_prefetching_enabled = testAttribute(DnsPrefetchEnabled); + prefs->dom_paste_enabled = testAttribute(QWebEngineSettings::JavascriptCanPaste); + prefs->dns_prefetching_enabled = testAttribute(QWebEngineSettings::DnsPrefetchEnabled); // Fonts settings. - prefs->standard_font_family_map[content::kCommonScript] = toString16(fontFamily(StandardFont)); - prefs->fixed_font_family_map[content::kCommonScript] = toString16(fontFamily(FixedFont)); - prefs->serif_font_family_map[content::kCommonScript] = toString16(fontFamily(SerifFont)); - prefs->sans_serif_font_family_map[content::kCommonScript] = toString16(fontFamily(SansSerifFont)); - prefs->cursive_font_family_map[content::kCommonScript] = toString16(fontFamily(CursiveFont)); - prefs->fantasy_font_family_map[content::kCommonScript] = toString16(fontFamily(FantasyFont)); - prefs->pictograph_font_family_map[content::kCommonScript] = toString16(fontFamily(PictographFont)); - prefs->default_font_size = fontSize(DefaultFontSize); - prefs->default_fixed_font_size = fontSize(DefaultFixedFontSize); - prefs->minimum_font_size = fontSize(MinimumFontSize); - prefs->minimum_logical_font_size = fontSize(MinimumLogicalFontSize); + prefs->standard_font_family_map[content::kCommonScript] = + toString16(fontFamily(QWebEngineSettings::StandardFont)); + prefs->fixed_font_family_map[content::kCommonScript] = + toString16(fontFamily(QWebEngineSettings::FixedFont)); + prefs->serif_font_family_map[content::kCommonScript] = + toString16(fontFamily(QWebEngineSettings::SerifFont)); + prefs->sans_serif_font_family_map[content::kCommonScript] = + toString16(fontFamily(QWebEngineSettings::SansSerifFont)); + prefs->cursive_font_family_map[content::kCommonScript] = + toString16(fontFamily(QWebEngineSettings::CursiveFont)); + prefs->fantasy_font_family_map[content::kCommonScript] = + toString16(fontFamily(QWebEngineSettings::FantasyFont)); + prefs->pictograph_font_family_map[content::kCommonScript] = + toString16(fontFamily(QWebEngineSettings::PictographFont)); + prefs->default_font_size = fontSize(QWebEngineSettings::DefaultFontSize); + prefs->default_fixed_font_size = fontSize(QWebEngineSettings::DefaultFixedFontSize); + prefs->minimum_font_size = fontSize(QWebEngineSettings::MinimumFontSize); + prefs->minimum_logical_font_size = fontSize(QWebEngineSettings::MinimumLogicalFontSize); prefs->default_encoding = defaultTextEncoding().toStdString(); // Set the theme colors. Based on chrome_content_browser_client.cc: @@ -450,9 +469,10 @@ bool WebEngineSettings::applySettingsToRendererPreferences(blink::mojom::Rendere bool changed = false; #if QT_CONFIG(webengine_webrtc) if (!base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kForceWebRtcIPHandlingPolicy)) { - std::string webrtc_ip_handling_policy = testAttribute(WebEngineSettings::WebRTCPublicInterfacesOnly) - ? blink::kWebRTCIPHandlingDefaultPublicInterfaceOnly - : blink::kWebRTCIPHandlingDefault; + std::string webrtc_ip_handling_policy = + testAttribute(QWebEngineSettings::WebRTCPublicInterfacesOnly) + ? blink::kWebRTCIPHandlingDefaultPublicInterfaceOnly + : blink::kWebRTCIPHandlingDefault; if (prefs->webrtc_ip_handling_policy != webrtc_ip_handling_policy) { prefs->webrtc_ip_handling_policy = webrtc_ip_handling_policy; changed = true; @@ -472,7 +492,7 @@ void WebEngineSettings::scheduleApplyRecursively() bool WebEngineSettings::getJavaScriptCanOpenWindowsAutomatically() { - return testAttribute(JavascriptCanOpenWindows); + return testAttribute(QWebEngineSettings::JavascriptCanOpenWindows); } void WebEngineSettings::setParentSettings(WebEngineSettings *_parentSettings) @@ -482,6 +502,7 @@ void WebEngineSettings::setParentSettings(WebEngineSettings *_parentSettings) parentSettings = _parentSettings; if (parentSettings) parentSettings->childSettings.insert(this); + scheduleApplyRecursively(); } } // namespace QtWebEngineCore diff --git a/src/core/web_engine_settings.h b/src/core/web_engine_settings.h index 95eea669f..5be72005a 100644 --- a/src/core/web_engine_settings.h +++ b/src/core/web_engine_settings.h @@ -52,7 +52,7 @@ #define WEB_ENGINE_SETTINGS_H #include "qtwebenginecoreglobal_p.h" - +#include "qwebenginesettings.h" #include <QScopedPointer> #include <QHash> #include <QUrl> @@ -72,98 +72,36 @@ namespace QtWebEngineCore { class WebContentsAdapter; -class Q_WEBENGINECORE_PRIVATE_EXPORT WebEngineSettings { +class WebEngineSettings { public: - // Attributes. Names match the ones from the public widgets API. - enum Attribute { - UnsupportedInCoreSettings = -1, - AutoLoadImages, - JavascriptEnabled, - JavascriptCanOpenWindows, - JavascriptCanAccessClipboard, - LinksIncludedInFocusChain, - LocalStorageEnabled, - LocalContentCanAccessRemoteUrls, - XSSAuditingEnabled, - SpatialNavigationEnabled, - LocalContentCanAccessFileUrls, - HyperlinkAuditingEnabled, - ScrollAnimatorEnabled, - ErrorPageEnabled, - PluginsEnabled, - FullScreenSupportEnabled, - ScreenCaptureEnabled, - WebGLEnabled, - Accelerated2dCanvasEnabled, - AutoLoadIconsForPage, - TouchIconsEnabled, - FocusOnNavigationEnabled, - PrintElementBackgrounds, - AllowRunningInsecureContent, - AllowGeolocationOnInsecureOrigins, - AllowWindowActivationFromJavaScript, - ShowScrollBars, - PlaybackRequiresUserGesture, - WebRTCPublicInterfacesOnly, - JavascriptCanPaste, - DnsPrefetchEnabled, - PdfViewerEnabled, - }; - - // Must match the values from the public API in qwebenginesettings.h. - enum FontFamily { - StandardFont, - FixedFont, - SerifFont, - SansSerifFont, - CursiveFont, - FantasyFont, - PictographFont - }; - - // Must match the values from the public API in qwebenginesettings.h. - enum FontSize { - MinimumFontSize, - MinimumLogicalFontSize, - DefaultFontSize, - DefaultFixedFontSize - }; - - // Must match the values from the public API in qwebenginesettings.h. - enum UnknownUrlSchemePolicy { - InheritedUnknownUrlSchemePolicy = 0, - DisallowUnknownUrlSchemes = 1, - AllowUnknownUrlSchemesFromUserInteraction, - AllowAllUnknownUrlSchemes - }; - - explicit WebEngineSettings(WebEngineSettings *parentSettings = 0); + static WebEngineSettings* get(QWebEngineSettings *settings) { return settings->d_ptr.data(); } + + explicit WebEngineSettings(WebEngineSettings *parentSettings = nullptr); ~WebEngineSettings(); void setParentSettings(WebEngineSettings *parentSettings); void overrideWebPreferences(content::WebContents *webContents, content::WebPreferences *prefs); - void setAttribute(Attribute, bool on); - bool testAttribute(Attribute) const; - void resetAttribute(Attribute); - bool isAttributeExplicitlySet(Attribute) const; + void setAttribute(QWebEngineSettings::WebAttribute, bool on); + bool testAttribute(QWebEngineSettings::WebAttribute) const; + void resetAttribute(QWebEngineSettings::WebAttribute); + bool isAttributeExplicitlySet(QWebEngineSettings::WebAttribute) const; - void setFontFamily(FontFamily, const QString &); - QString fontFamily(FontFamily); - void resetFontFamily(FontFamily); + void setFontFamily(QWebEngineSettings::FontFamily, const QString &); + QString fontFamily(QWebEngineSettings::FontFamily); + void resetFontFamily(QWebEngineSettings::FontFamily); - void setFontSize(FontSize type, int size); - int fontSize(FontSize type) const; - void resetFontSize(FontSize type); + void setFontSize(QWebEngineSettings::FontSize type, int size); + int fontSize(QWebEngineSettings::FontSize type) const; + void resetFontSize(QWebEngineSettings::FontSize type); void setDefaultTextEncoding(const QString &encoding); QString defaultTextEncoding() const; - void setUnknownUrlSchemePolicy(UnknownUrlSchemePolicy policy); - UnknownUrlSchemePolicy unknownUrlSchemePolicy() const; + void setUnknownUrlSchemePolicy(QWebEngineSettings::UnknownUrlSchemePolicy policy); + QWebEngineSettings::UnknownUrlSchemePolicy unknownUrlSchemePolicy() const; - void initDefaults(); void scheduleApply(); void scheduleApplyRecursively(); @@ -171,15 +109,16 @@ public: bool getJavaScriptCanOpenWindowsAutomatically(); private: + void initDefaults(); void doApply(); void applySettingsToWebPreferences(content::WebPreferences *); bool applySettingsToRendererPreferences(blink::mojom::RendererPreferences *); void setWebContentsAdapter(WebContentsAdapter *adapter) { m_adapter = adapter; } WebContentsAdapter* m_adapter; - QHash<Attribute, bool> m_attributes; - QHash<FontFamily, QString> m_fontFamilies; - QHash<FontSize, int> m_fontSizes; + QHash<QWebEngineSettings::WebAttribute, bool> m_attributes; + QHash<QWebEngineSettings::FontFamily, QString> m_fontFamilies; + QHash<QWebEngineSettings::FontSize, int> m_fontSizes; QString m_defaultEncoding; QScopedPointer<content::WebPreferences> webPreferences; QTimer m_batchTimer; @@ -187,10 +126,10 @@ private: WebEngineSettings *parentSettings; QSet<WebEngineSettings *> childSettings; - static QHash<Attribute, bool> s_defaultAttributes; - static QHash<FontFamily, QString> s_defaultFontFamilies; - static QHash<FontSize, int> s_defaultFontSizes; - UnknownUrlSchemePolicy m_unknownUrlSchemePolicy; + static QHash<QWebEngineSettings::WebAttribute, bool> s_defaultAttributes; + static QHash<QWebEngineSettings::FontFamily, QString> s_defaultFontFamilies; + static QHash<QWebEngineSettings::FontSize, int> s_defaultFontSizes; + QWebEngineSettings::UnknownUrlSchemePolicy m_unknownUrlSchemePolicy; friend class WebContentsAdapter; }; |