diff --git a/src/core/quota_permission_context_qt.cpp b/src/core/quota_permission_context_qt.cpp
index 4e929344707e897c471baadc670d8a53905258a2..f00b2008a0a30e56c6bfe4767207a7f29ce9e66b 100644
--- a/src/core/quota_permission_context_qt.cpp
+++ b/src/core/quota_permission_context_qt.cpp
@@ -43,6 +43,7 @@
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
 #include "quota_request_controller_impl.h"
+#include "qwebenginequotarequest.h"
 #include "web_contents_delegate_qt.h"
 #include "web_contents_view_qt.h"
 
@@ -82,8 +83,9 @@ void QuotaPermissionContextQt::RequestQuotaPermission(const StorageQuotaParams &
     if (!client)
         return;
 
-    QSharedPointer<QuotaRequestController> request(new QuotaRequestControllerImpl(this, params, callback));
-    client->runQuotaRequest(request);
+    QWebEngineQuotaRequest request(
+        QSharedPointer<QuotaRequestControllerImpl>::create(this, params, callback));
+    client->runQuotaRequest(std::move(request));
 }
 
 void QuotaPermissionContextQt::dispatchCallbackOnIOThread(const PermissionCallback &callback,
diff --git a/src/core/quota_request_controller.h b/src/core/quota_request_controller.h
index f5c7a3f0425c8fafc25a6652ec2117512d8d6dd1..0bb0cbff34c986d1d2a720bc1ae9d8ab896fdc0c 100644
--- a/src/core/quota_request_controller.h
+++ b/src/core/quota_request_controller.h
@@ -44,7 +44,7 @@
 
 namespace QtWebEngineCore {
 
-class QWEBENGINE_EXPORT QuotaRequestController : public RequestController {
+class QuotaRequestController : public RequestController {
 public:
     QuotaRequestController(QUrl origin, qint64 requestedSize)
         : RequestController(std::move(origin))
diff --git a/src/core/register_protocol_handler_request_controller.h b/src/core/register_protocol_handler_request_controller.h
index be60619f50120008928812d021c033036d2a1b22..2f9c9fc4975e5711ca474aead8bacf93d4d5f6d7 100644
--- a/src/core/register_protocol_handler_request_controller.h
+++ b/src/core/register_protocol_handler_request_controller.h
@@ -44,7 +44,7 @@
 
 namespace QtWebEngineCore {
 
-class QWEBENGINE_EXPORT RegisterProtocolHandlerRequestController : public RequestController {
+class RegisterProtocolHandlerRequestController : public RequestController {
 public:
     RegisterProtocolHandlerRequestController(QUrl origin, QString scheme)
         : RequestController(std::move(origin))
diff --git a/src/core/request_controller.h b/src/core/request_controller.h
index 83827a8886138466883f4c8480eb4bc3033865ec..5bd621282b82f533b168e3f8cd6b3d1e2f82a8e0 100644
--- a/src/core/request_controller.h
+++ b/src/core/request_controller.h
@@ -45,7 +45,7 @@
 
 namespace QtWebEngineCore {
 
-class QWEBENGINE_EXPORT RequestController {
+class RequestController {
 public:
     RequestController(QUrl origin)
         : m_answered(false)
diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h
index ad9c240e201afb179539290dd22b01adbfd5f5b9..4c5133772d2de4da692447223b6366c915760e51 100644
--- a/src/core/web_contents_adapter_client.h
+++ b/src/core/web_contents_adapter_client.h
@@ -49,9 +49,11 @@
 #include <QStringList>
 #include <QUrl>
 
+QT_FORWARD_DECLARE_CLASS(CertificateErrorController)
 QT_FORWARD_DECLARE_CLASS(QKeyEvent)
 QT_FORWARD_DECLARE_CLASS(QVariant)
-QT_FORWARD_DECLARE_CLASS(CertificateErrorController)
+QT_FORWARD_DECLARE_CLASS(QWebEngineQuotaRequest)
+QT_FORWARD_DECLARE_CLASS(QWebEngineRegisterProtocolHandlerRequest)
 
 namespace content {
 struct DropData;
@@ -64,8 +66,6 @@ class BrowserContextAdapter;
 class ColorChooserController;
 class FilePickerController;
 class JavaScriptDialogController;
-class QuotaRequestController;
-class RegisterProtocolHandlerRequestController;
 class RenderWidgetHostViewQt;
 class RenderWidgetHostViewQtDelegate;
 class RenderWidgetHostViewQtDelegateClient;
@@ -438,8 +438,8 @@ public:
     virtual void runGeolocationPermissionRequest(const QUrl &securityOrigin) = 0;
     virtual void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) = 0;
     virtual void runMouseLockPermissionRequest(const QUrl &securityOrigin) = 0;
-    virtual void runQuotaRequest(QSharedPointer<QuotaRequestController>) = 0;
-    virtual void runRegisterProtocolHandlerRequest(QSharedPointer<RegisterProtocolHandlerRequestController>) = 0;
+    virtual void runQuotaRequest(QWebEngineQuotaRequest) = 0;
+    virtual void runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest) = 0;
     virtual WebEngineSettings *webEngineSettings() const = 0;
     RenderProcessTerminationStatus renderProcessExitStatus(int);
     virtual void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, int exitCode) = 0;
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index ab398ec440275d42da59f834a87431a6f30b5d4e..40fc0934de9420dac0af936f5cda1a80fbe8ff80 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -51,6 +51,8 @@
 #include "file_picker_controller.h"
 #include "media_capture_devices_dispatcher.h"
 #include "net/network_delegate_qt.h"
+#include "qwebengineregisterprotocolhandlerrequest.h"
+#include "register_protocol_handler_request_controller_impl.h"
 #include "render_widget_host_view_qt.h"
 #include "type_conversion.h"
 #include "visited_links_manager_qt.h"
@@ -58,7 +60,6 @@
 #include "web_contents_adapter_p.h"
 #include "web_engine_context.h"
 #include "web_engine_settings.h"
-#include "register_protocol_handler_request_controller_impl.h"
 
 #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h"
 #include "components/web_cache/browser/web_cache_manager.h"
@@ -638,9 +639,9 @@ void WebContentsDelegateQt::RegisterProtocolHandler(content::WebContents *webCon
     if (registry->SilentlyHandleRegisterHandlerRequest(handler))
         return;
 
-    QSharedPointer<RegisterProtocolHandlerRequestController> controller(
-        new RegisterProtocolHandlerRequestControllerImpl(webContents, handler));
-    m_viewClient->runRegisterProtocolHandlerRequest(std::move(controller));
+    QWebEngineRegisterProtocolHandlerRequest request(
+        QSharedPointer<RegisterProtocolHandlerRequestControllerImpl>::create(webContents, handler));
+    m_viewClient->runRegisterProtocolHandlerRequest(std::move(request));
 }
 
 void WebContentsDelegateQt::UnregisterProtocolHandler(content::WebContents *webContents, const std::string &protocol, const GURL &url, bool)
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index eeb3157a2de87b4359e9b544c7145abf6cb6d5fb..8d5a30016d672edc2b4b3eb8edfe215a70394230 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -590,17 +590,15 @@ void QQuickWebEngineViewPrivate::runMouseLockPermissionRequest(const QUrl &secur
     adapter->grantMouseLockPermission(false);
 }
 
-void QQuickWebEngineViewPrivate::runQuotaRequest(QSharedPointer<QtWebEngineCore::QuotaRequestController> controller)
+void QQuickWebEngineViewPrivate::runQuotaRequest(QWebEngineQuotaRequest request)
 {
     Q_Q(QQuickWebEngineView);
-    QWebEngineQuotaRequest request(std::move(controller));
     Q_EMIT q->quotaRequested(request);
 }
 
-void QQuickWebEngineViewPrivate::runRegisterProtocolHandlerRequest(QSharedPointer<RegisterProtocolHandlerRequestController> controller)
+void QQuickWebEngineViewPrivate::runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest request)
 {
     Q_Q(QQuickWebEngineView);
-    QWebEngineRegisterProtocolHandlerRequest request(std::move(controller));
     Q_EMIT q->registerProtocolHandlerRequested(request);
 }
 
diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h
index 1af46f917bf64b6bfb44b7c06fc541c847993b20..73607aa597a9cae474dc3fa49cc7d7068f491419 100644
--- a/src/webengine/api/qquickwebengineview_p_p.h
+++ b/src/webengine/api/qquickwebengineview_p_p.h
@@ -132,8 +132,8 @@ public:
     void authenticationRequired(QSharedPointer<QtWebEngineCore::AuthenticationDialogController>) override;
     void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) override;
     void runMouseLockPermissionRequest(const QUrl &securityOrigin) override;
-    void runQuotaRequest(QSharedPointer<QtWebEngineCore::QuotaRequestController>) override;
-    void runRegisterProtocolHandlerRequest(QSharedPointer<QtWebEngineCore::RegisterProtocolHandlerRequestController>) override;
+    void runQuotaRequest(QWebEngineQuotaRequest) override;
+    void runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest) override;
     QObject *accessibilityParentObject() override;
     QtWebEngineCore::WebEngineSettings *webEngineSettings() const override;
     void allowCertificateError(const QSharedPointer<CertificateErrorController> &errorController) override;
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 5f0238dc09e528f52a62437b109001dacbaba8ca..a8a860f166a497e234e0ac976fe96f611e639efc 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -588,17 +588,15 @@ void QWebEnginePagePrivate::runMouseLockPermissionRequest(const QUrl &securityOr
     Q_EMIT q->featurePermissionRequested(securityOrigin, QWebEnginePage::MouseLock);
 }
 
-void QWebEnginePagePrivate::runQuotaRequest(QSharedPointer<QtWebEngineCore::QuotaRequestController> controller)
+void QWebEnginePagePrivate::runQuotaRequest(QWebEngineQuotaRequest request)
 {
     Q_Q(QWebEnginePage);
-    QWebEngineQuotaRequest request(controller);
     Q_EMIT q->quotaRequested(request);
 }
 
-void QWebEnginePagePrivate::runRegisterProtocolHandlerRequest(QSharedPointer<RegisterProtocolHandlerRequestController> controller)
+void QWebEnginePagePrivate::runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest request)
 {
     Q_Q(QWebEnginePage);
-    QWebEngineRegisterProtocolHandlerRequest request(std::move(controller));
     Q_EMIT q->registerProtocolHandlerRequested(request);
 }
 
diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h
index fcd7a20392c757318ae782ca58f11a3c2d35962c..dc7d02b73007673939d07ddac6e19e4c930b3895 100644
--- a/src/webenginewidgets/api/qwebenginepage_p.h
+++ b/src/webenginewidgets/api/qwebenginepage_p.h
@@ -131,8 +131,8 @@ public:
     void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) override;
     void runGeolocationPermissionRequest(const QUrl &securityOrigin) override;
     void runMouseLockPermissionRequest(const QUrl &securityOrigin) override;
-    void runQuotaRequest(QSharedPointer<QtWebEngineCore::QuotaRequestController>) override;
-    void runRegisterProtocolHandlerRequest(QSharedPointer<QtWebEngineCore::RegisterProtocolHandlerRequestController>) override;
+    void runQuotaRequest(QWebEngineQuotaRequest) override;
+    void runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest) override;
     QObject *accessibilityParentObject() override;
     QtWebEngineCore::WebEngineSettings *webEngineSettings() const override;
     void allowCertificateError(const QSharedPointer<CertificateErrorController> &controller) override;