From 6a6fd71af52bcbffc4fccf58e1f35b7612d16a2a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=BCri=20Valdmann?= <juri.valdmann@qt.io>
Date: Mon, 15 Jan 2018 17:30:50 +0100
Subject: [PATCH] QuotaPermissionController: Use implementation subclass

Try to separate quota-unrelated bookkeeping from quota-specific glue code.

Task-number: QTBUG-62783
Change-Id: I0c7c3fd554a4b3a195a99ff4034f158f2547eecb
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
---
 src/core/core_chromium.pri                    |  4 +-
 src/core/quota_permission_context_qt.cpp      |  7 +--
 src/core/quota_permission_controller.h        | 39 ++++++++----
 ...p => quota_permission_controller_impl.cpp} | 61 +++++--------------
 ...p.h => quota_permission_controller_impl.h} | 26 ++++----
 5 files changed, 61 insertions(+), 76 deletions(-)
 rename src/core/{quota_permission_controller.cpp => quota_permission_controller_impl.cpp} (57%)
 rename src/core/{quota_permission_controller_p.h => quota_permission_controller_impl.h} (78%)

diff --git a/src/core/core_chromium.pri b/src/core/core_chromium.pri
index 08552800d..c81b661a6 100644
--- a/src/core/core_chromium.pri
+++ b/src/core/core_chromium.pri
@@ -78,7 +78,7 @@ SOURCES = \
         proxy_config_service_qt.cpp \
         qrc_protocol_handler_qt.cpp \
         quota_permission_context_qt.cpp \
-        quota_permission_controller.cpp \
+        quota_permission_controller_impl.cpp \
         render_view_context_menu_qt.cpp \
         render_view_observer_host_qt.cpp \
         render_widget_host_view_qt.cpp \
@@ -161,7 +161,7 @@ HEADERS = \
         qrc_protocol_handler_qt.h \
         quota_permission_context_qt.h \
         quota_permission_controller.h \
-        quota_permission_controller_p.h \
+        quota_permission_controller_impl.h \
         render_view_context_menu_qt.h \
         render_view_observer_host_qt.h \
         render_widget_host_view_qt.h \
diff --git a/src/core/quota_permission_context_qt.cpp b/src/core/quota_permission_context_qt.cpp
index 10249bbf0..bb59512c0 100644
--- a/src/core/quota_permission_context_qt.cpp
+++ b/src/core/quota_permission_context_qt.cpp
@@ -42,8 +42,7 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
-#include "quota_permission_controller.h"
-#include "quota_permission_controller_p.h"
+#include "quota_permission_controller_impl.h"
 #include "web_contents_delegate_qt.h"
 #include "web_contents_view_qt.h"
 
@@ -83,8 +82,8 @@ void QuotaPermissionContextQt::RequestQuotaPermission(const StorageQuotaParams &
     if (!client)
         return;
 
-    QSharedPointer<QuotaPermissionController> controller(new QuotaPermissionController(new QuotaPermissionControllerPrivate(this, params, callback)));
-    client->runQuotaPermissionRequest(controller);
+    QSharedPointer<QuotaPermissionController> request(new QuotaPermissionControllerImpl(this, params, callback));
+    client->runQuotaPermissionRequest(request);
 }
 
 void QuotaPermissionContextQt::dispatchCallbackOnIOThread(const PermissionCallback &callback,
diff --git a/src/core/quota_permission_controller.h b/src/core/quota_permission_controller.h
index e584d7b52..cdd5e226a 100644
--- a/src/core/quota_permission_controller.h
+++ b/src/core/quota_permission_controller.h
@@ -41,28 +41,45 @@
 #define QUOTA_PERMISSION_CONTROLLER_H
 
 #include "qtwebenginecoreglobal.h"
-#include <QtCore/qscopedpointer.h>
 #include <QtCore/qurl.h>
 
 namespace QtWebEngineCore {
 
-class QuotaPermissionContextQt;
-class QuotaPermissionControllerPrivate;
-
 class QWEBENGINE_EXPORT QuotaPermissionController {
 public:
-    QuotaPermissionController(QuotaPermissionControllerPrivate *controllerPrivate);
-    ~QuotaPermissionController();
+    QuotaPermissionController(QUrl origin, qint64 requestedSize)
+        : m_answered(false)
+        , m_origin(std::move(origin))
+        , m_requestedSize(requestedSize)
+    {}
+
+    QUrl origin() const { return m_origin; }
+    qint64 requestedSize() const { return m_requestedSize; }
+
+    void accept() {
+        if (!m_answered) {
+            m_answered = true;
+            accepted();
+        }
+    }
+
+    void reject() {
+        if (!m_answered) {
+            m_answered = true;
+            rejected();
+        }
+    }
 
-    void accept();
-    void reject();
+    virtual ~QuotaPermissionController() {}
 
-    QUrl origin();
-    qint64 requestedSize();
+protected:
+    virtual void accepted() = 0;
+    virtual void rejected() = 0;
 
 private:
-    QScopedPointer<QuotaPermissionControllerPrivate> d;
     bool m_answered;
+    QUrl m_origin;
+    qint64 m_requestedSize;
 };
 
 } // namespace QtWebEngineCore
diff --git a/src/core/quota_permission_controller.cpp b/src/core/quota_permission_controller_impl.cpp
similarity index 57%
rename from src/core/quota_permission_controller.cpp
rename to src/core/quota_permission_controller_impl.cpp
index b874c0449..ebad4b2fb 100644
--- a/src/core/quota_permission_controller.cpp
+++ b/src/core/quota_permission_controller_impl.cpp
@@ -37,62 +37,31 @@
 **
 ****************************************************************************/
 
-#include "quota_permission_controller.h"
-#include "quota_permission_controller_p.h"
+#include "quota_permission_controller_impl.h"
 
-#include "quota_permission_context_qt.h"
 #include "type_conversion.h"
 
 namespace QtWebEngineCore {
 
-QuotaPermissionControllerPrivate::QuotaPermissionControllerPrivate(QuotaPermissionContextQt *context,
-                                                                   const content::StorageQuotaParams &params,
-                                                                   const content::QuotaPermissionContext::PermissionCallback &callback)
-    : m_context(context),
-      m_originUrl(toQt(params.origin_url)),
-      m_requestedSize(params.requested_size),
-      m_callback(callback)
-{
-}
-
-QuotaPermissionControllerPrivate::~QuotaPermissionControllerPrivate()
-{
-}
-
-QuotaPermissionController::QuotaPermissionController(QuotaPermissionControllerPrivate *controllerPrivate)
-    : d(controllerPrivate)
-    , m_answered(false)
-{
-}
-
-QuotaPermissionController::~QuotaPermissionController()
-{
-}
-
-void QuotaPermissionController::accept()
-{
-    if (!m_answered) {
-        d->m_context->dispatchCallbackOnIOThread(d->m_callback, QuotaPermissionContextQt::QUOTA_PERMISSION_RESPONSE_ALLOW);
-        m_answered = true;
-    }
-}
-
-void QuotaPermissionController::reject()
-{
-    if (!m_answered) {
-        d->m_context->dispatchCallbackOnIOThread(d->m_callback, QuotaPermissionContextQt::QUOTA_PERMISSION_RESPONSE_DISALLOW);
-        m_answered = true;
-    }
-}
+QuotaPermissionControllerImpl::QuotaPermissionControllerImpl(
+    QuotaPermissionContextQt *context,
+    const content::StorageQuotaParams &params,
+    const content::QuotaPermissionContext::PermissionCallback &callback)
+    : QuotaPermissionController(
+        toQt(params.origin_url),
+        params.requested_size)
+    , m_context(context)
+    , m_callback(callback)
+{}
 
-QUrl QuotaPermissionController::origin()
+void QuotaPermissionControllerImpl::accepted()
 {
-    return d->m_originUrl;
+    m_context->dispatchCallbackOnIOThread(m_callback, QuotaPermissionContextQt::QUOTA_PERMISSION_RESPONSE_ALLOW);
 }
 
-qint64 QuotaPermissionController::requestedSize()
+void QuotaPermissionControllerImpl::rejected()
 {
-    return d->m_requestedSize;
+    m_context->dispatchCallbackOnIOThread(m_callback, QuotaPermissionContextQt::QUOTA_PERMISSION_RESPONSE_DISALLOW);
 }
 
 } // namespace QtWebEngineCore
diff --git a/src/core/quota_permission_controller_p.h b/src/core/quota_permission_controller_impl.h
similarity index 78%
rename from src/core/quota_permission_controller_p.h
rename to src/core/quota_permission_controller_impl.h
index c00ae42c9..297c6711b 100644
--- a/src/core/quota_permission_controller_p.h
+++ b/src/core/quota_permission_controller_impl.h
@@ -37,30 +37,30 @@
 **
 ****************************************************************************/
 
-#ifndef QUOTA_PERMISSION_CONTROLLER_P_H
-#define QUOTA_PERMISSION_CONTROLLER_P_H
+#ifndef QUOTA_PERMISSION_CONTROLLER_IMPL_H
+#define QUOTA_PERMISSION_CONTROLLER_IMPL_H
 
+#include "quota_permission_controller.h"
 #include "quota_permission_context_qt.h"
-#include <QtCore/qurl.h>
 
 namespace QtWebEngineCore {
 
-class QuotaPermissionControllerPrivate {
+class QuotaPermissionControllerImpl final : public QuotaPermissionController {
 public:
-    QuotaPermissionControllerPrivate(QuotaPermissionContextQt *context,
-                                     const content::StorageQuotaParams &params,
-                                     const content::QuotaPermissionContext::PermissionCallback &callback);
-    ~QuotaPermissionControllerPrivate();
+    QuotaPermissionControllerImpl(
+        QuotaPermissionContextQt *context,
+        const content::StorageQuotaParams &params,
+        const content::QuotaPermissionContext::PermissionCallback &callback);
+
+protected:
+    void accepted() override;
+    void rejected() override;
 
 private:
     scoped_refptr<QuotaPermissionContextQt> m_context;
-    QUrl m_originUrl;
-    qint64 m_requestedSize;
     content::QuotaPermissionContext::PermissionCallback m_callback;
-
-    friend class QuotaPermissionController;
 };
 
 } // namespace QtWebEngineCore
 
-#endif // QUOTA_PERMISSION_CONTROLLER_P_H
+#endif // QUOTA_PERMISSION_CONTROLLER_IMPL_H
-- 
GitLab