Title: [111684] trunk/Source/WebKit2
Revision
111684
Author
[email protected]
Date
2012-03-22 06:51:44 -0700 (Thu, 22 Mar 2012)

Log Message

[Qt][WK2] Add QML API for handling database quotas https://bugs.webkit.org/show_bug.cgi?id=81827

Reviewed by Simon Hausmann.

Patch by Pierre Rossi and Alexander Færøy.

This patch adds a QML API for handling database quotas.

* UIProcess/API/qt/qquickwebview.cpp:
(QQuickWebViewPrivate::exceededDatabaseQuota):
(QQuickWebViewExperimental::databaseQuotaDialog):
(QQuickWebViewExperimental::setDatabaseQuotaDialog):
* UIProcess/API/qt/qquickwebview_p.h:
* UIProcess/API/qt/qquickwebview_p_p.h:
(QQuickWebViewPrivate):
* UIProcess/qt/QtDialogRunner.cpp:
(DatabaseQuotaDialogContextObject):
(DatabaseQuotaDialogContextObject::DatabaseQuotaDialogContextObject):
(DatabaseQuotaDialogContextObject::databaseName):
(DatabaseQuotaDialogContextObject::displayName):
(DatabaseQuotaDialogContextObject::currentQuota):
(DatabaseQuotaDialogContextObject::currentOriginUsage):
(DatabaseQuotaDialogContextObject::currentDatabaseUsage):
(DatabaseQuotaDialogContextObject::expectedUsage):
(DatabaseQuotaDialogContextObject::accept):
(DatabaseQuotaDialogContextObject::reject):
(QtDialogRunner::initForDatabaseQuotaDialog):
* UIProcess/qt/QtDialogRunner.h:
(QtDialogRunner):
(QtDialogRunner::databaseQuota):
(QtDialogRunner::onDatabaseQuotaAccepted):
* UIProcess/qt/QtWebPageUIClient.cpp:
(QtWebPageUIClient::QtWebPageUIClient):
(QtWebPageUIClient::exceededDatabaseQuota):
* UIProcess/qt/QtWebPageUIClient.h:
* UIProcess/qt/WebContextQt.cpp:
(WebKit::WebContext::platformDefaultDatabaseDirectory):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (111683 => 111684)


--- trunk/Source/WebKit2/ChangeLog	2012-03-22 13:40:06 UTC (rev 111683)
+++ trunk/Source/WebKit2/ChangeLog	2012-03-22 13:51:44 UTC (rev 111684)
@@ -1,3 +1,44 @@
+2012-03-21  Alexander Færøy  <[email protected]>
+
+        [Qt][WK2] Add QML API for handling database quotas
+        https://bugs.webkit.org/show_bug.cgi?id=81827
+
+        Reviewed by Simon Hausmann.
+
+        Patch by Pierre Rossi and Alexander Færøy.
+
+        This patch adds a QML API for handling database quotas.
+
+        * UIProcess/API/qt/qquickwebview.cpp:
+        (QQuickWebViewPrivate::exceededDatabaseQuota):
+        (QQuickWebViewExperimental::databaseQuotaDialog):
+        (QQuickWebViewExperimental::setDatabaseQuotaDialog):
+        * UIProcess/API/qt/qquickwebview_p.h:
+        * UIProcess/API/qt/qquickwebview_p_p.h:
+        (QQuickWebViewPrivate):
+        * UIProcess/qt/QtDialogRunner.cpp:
+        (DatabaseQuotaDialogContextObject):
+        (DatabaseQuotaDialogContextObject::DatabaseQuotaDialogContextObject):
+        (DatabaseQuotaDialogContextObject::databaseName):
+        (DatabaseQuotaDialogContextObject::displayName):
+        (DatabaseQuotaDialogContextObject::currentQuota):
+        (DatabaseQuotaDialogContextObject::currentOriginUsage):
+        (DatabaseQuotaDialogContextObject::currentDatabaseUsage):
+        (DatabaseQuotaDialogContextObject::expectedUsage):
+        (DatabaseQuotaDialogContextObject::accept):
+        (DatabaseQuotaDialogContextObject::reject):
+        (QtDialogRunner::initForDatabaseQuotaDialog):
+        * UIProcess/qt/QtDialogRunner.h:
+        (QtDialogRunner):
+        (QtDialogRunner::databaseQuota):
+        (QtDialogRunner::onDatabaseQuotaAccepted):
+        * UIProcess/qt/QtWebPageUIClient.cpp:
+        (QtWebPageUIClient::QtWebPageUIClient):
+        (QtWebPageUIClient::exceededDatabaseQuota):
+        * UIProcess/qt/QtWebPageUIClient.h:
+        * UIProcess/qt/WebContextQt.cpp:
+        (WebKit::WebContext::platformDefaultDatabaseDirectory):
+
 2012-03-21  Tim Horton  <[email protected]>
 
         Make use of CG rounded-rect primitives

Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp (111683 => 111684)


--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp	2012-03-22 13:40:06 UTC (rev 111683)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp	2012-03-22 13:51:44 UTC (rev 111684)
@@ -399,6 +399,21 @@
 
 }
 
+quint64 QQuickWebViewPrivate::exceededDatabaseQuota(const QString& databaseName, const QString& displayName, quint64 currentQuota, quint64 currentOriginUsage, quint64 currentDatabaseUsage, quint64 expectedUsage)
+{
+    if (!databaseQuotaDialog)
+        return 0;
+
+    Q_Q(QQuickWebView);
+    QtDialogRunner dialogRunner;
+    if (!dialogRunner.initForDatabaseQuotaDialog(databaseQuotaDialog, q, databaseName, displayName, currentQuota, currentOriginUsage, currentDatabaseUsage, expectedUsage))
+        return 0;
+
+    execDialogRunner(dialogRunner);
+
+    return dialogRunner.wasAccepted() ? dialogRunner.databaseQuota() : 0;
+}
+
 void QQuickWebViewPrivate::setViewInAttachedProperties(QObject* object)
 {
     Q_Q(QQuickWebView);
@@ -906,6 +921,21 @@
     emit filePickerChanged();
 }
 
+QDeclarativeComponent* QQuickWebViewExperimental::databaseQuotaDialog() const
+{
+    Q_D(const QQuickWebView);
+    return d->databaseQuotaDialog;
+}
+
+void QQuickWebViewExperimental::setDatabaseQuotaDialog(QDeclarativeComponent* databaseQuotaDialog)
+{
+    Q_D(QQuickWebView);
+    if (d->databaseQuotaDialog == databaseQuotaDialog)
+        return;
+    d->databaseQuotaDialog = databaseQuotaDialog;
+    emit databaseQuotaDialogChanged();
+}
+
 QString QQuickWebViewExperimental::userAgent() const
 {
     Q_D(const QQuickWebView);

Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h (111683 => 111684)


--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h	2012-03-22 13:40:06 UTC (rev 111683)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h	2012-03-22 13:51:44 UTC (rev 111684)
@@ -248,6 +248,7 @@
     Q_PROPERTY(QDeclarativeComponent* certificateVerificationDialog READ certificateVerificationDialog WRITE setCertificateVerificationDialog NOTIFY certificateVerificationDialogChanged)
     Q_PROPERTY(QDeclarativeComponent* itemSelector READ itemSelector WRITE setItemSelector NOTIFY itemSelectorChanged)
     Q_PROPERTY(QDeclarativeComponent* filePicker READ filePicker WRITE setFilePicker NOTIFY filePickerChanged)
+    Q_PROPERTY(QDeclarativeComponent* databaseQuotaDialog READ databaseQuotaDialog WRITE setDatabaseQuotaDialog NOTIFY databaseQuotaDialogChanged)
     Q_PROPERTY(QWebPreferences* preferences READ preferences CONSTANT FINAL)
     Q_PROPERTY(QWebViewportInfo* viewportInfo READ viewportInfo CONSTANT FINAL)
     Q_PROPERTY(QDeclarativeListProperty<QQuickUrlSchemeDelegate> urlSchemeDelegates READ schemeDelegates)
@@ -278,6 +279,8 @@
     void setProxyAuthenticationDialog(QDeclarativeComponent*);
     QDeclarativeComponent* filePicker() const;
     void setFilePicker(QDeclarativeComponent*);
+    QDeclarativeComponent* databaseQuotaDialog() const;
+    void setDatabaseQuotaDialog(QDeclarativeComponent*);
     QString userAgent() const;
     void setUserAgent(const QString& userAgent);
 
@@ -333,6 +336,7 @@
     void certificateVerificationDialogChanged();
     void itemSelectorChanged();
     void filePickerChanged();
+    void databaseQuotaDialogChanged();
     void downloadRequested(QWebDownloadItem* downloadItem);
     void permissionRequested(QWebPermissionRequest* permission);
     void messageReceived(const QVariantMap& message);

Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h (111683 => 111684)


--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h	2012-03-22 13:40:06 UTC (rev 111683)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h	2012-03-22 13:51:44 UTC (rev 111684)
@@ -96,6 +96,7 @@
     void _q_onIconChangedForPageURL(const QUrl& pageURL, const QUrl& iconURLString);
 
     void chooseFiles(WKOpenPanelResultListenerRef, const QStringList& selectedFileNames, QtWebPageUIClient::FileChooserType);
+    quint64 exceededDatabaseQuota(const QString& databaseName, const QString& displayName, quint64 currentQuota, quint64 currentOriginUsage, quint64 currentDatabaseUsage, quint64 expectedUsage);
     void runJavaScriptAlert(const QString&);
     bool runJavaScriptConfirm(const QString&);
     QString runJavaScriptPrompt(const QString&, const QString& defaultValue, bool& ok);
@@ -156,6 +157,7 @@
     QDeclarativeComponent* itemSelector;
     QDeclarativeComponent* proxyAuthenticationDialog;
     QDeclarativeComponent* filePicker;
+    QDeclarativeComponent* databaseQuotaDialog;
 
     WebCore::ViewportArguments viewportArguments;
 

Modified: trunk/Source/WebKit2/UIProcess/qt/QtDialogRunner.cpp (111683 => 111684)


--- trunk/Source/WebKit2/UIProcess/qt/QtDialogRunner.cpp	2012-03-22 13:40:06 UTC (rev 111683)
+++ trunk/Source/WebKit2/UIProcess/qt/QtDialogRunner.cpp	2012-03-22 13:51:44 UTC (rev 111684)
@@ -182,6 +182,51 @@
     QStringList m_fileList;
 };
 
+class DatabaseQuotaDialogContextObject : public QObject {
+    Q_OBJECT
+    Q_PROPERTY(QString databaseName READ databaseName CONSTANT)
+    Q_PROPERTY(QString displayName READ displayName CONSTANT)
+    Q_PROPERTY(quint64 currentQuota READ currentQuota CONSTANT)
+    Q_PROPERTY(quint64 currentOriginUsage READ currentOriginUsage CONSTANT)
+    Q_PROPERTY(quint64 currentDatabaseUsage READ currentDatabaseUsage CONSTANT)
+    Q_PROPERTY(quint64 expectedUsage READ expectedUsage CONSTANT)
+
+public:
+    DatabaseQuotaDialogContextObject(const QString& databaseName, const QString& displayName, quint64 currentQuota, quint64 currentOriginUsage, quint64 currentDatabaseUsage, quint64 expectedUsage)
+        : QObject()
+        , m_databaseName(databaseName)
+        , m_displayName(displayName)
+        , m_currentQuota(currentQuota)
+        , m_currentOriginUsage(currentOriginUsage)
+        , m_currentDatabaseUsage(currentDatabaseUsage)
+        , m_expectedUsage(expectedUsage)
+    {
+    }
+
+    QString databaseName() const { return m_databaseName; }
+    QString displayName() const { return m_displayName; }
+    quint64 currentQuota() const { return m_currentQuota; }
+    quint64 currentOriginUsage() const { return m_currentOriginUsage; }
+    quint64 currentDatabaseUsage() const { return m_currentDatabaseUsage; }
+    quint64 expectedUsage() const { return m_expectedUsage; }
+
+public slots:
+    void accept(quint64 size) { emit accepted(size); }
+    void reject() { emit rejected(); }
+
+signals:
+    void accepted(quint64 size);
+    void rejected();
+
+private:
+    QString m_databaseName;
+    QString m_displayName;
+    quint64 m_currentQuota;
+    quint64 m_currentOriginUsage;
+    quint64 m_currentDatabaseUsage;
+    quint64 m_expectedUsage;
+};
+
 bool QtDialogRunner::initForAlert(QDeclarativeComponent* component, QQuickItem* dialogParent, const QString& message)
 {
     DialogContextObject* contextObject = new DialogContextObject(message);
@@ -268,6 +313,19 @@
     return true;
 }
 
+bool QtDialogRunner::initForDatabaseQuotaDialog(QDeclarativeComponent* component, QQuickItem* dialogParent, const QString& databaseName, const QString& displayName, quint64 currentQuota, quint64 currentOriginUsage, quint64 currentDatabaseUsage, quint64 expectedUsage)
+{
+    DatabaseQuotaDialogContextObject* contextObject = new DatabaseQuotaDialogContextObject(databaseName, displayName, currentQuota, currentOriginUsage, currentDatabaseUsage, expectedUsage);
+    if (!createDialog(component, dialogParent, contextObject))
+        return false;
+
+    connect(contextObject, SIGNAL(accepted(quint64)), SLOT(onDatabaseQuotaAccepted(quint64)));
+    connect(contextObject, SIGNAL(accepted(quint64)), SLOT(quit()));
+    connect(contextObject, SIGNAL(rejected()), SLOT(quit()));
+
+    return true;
+}
+
 bool QtDialogRunner::createDialog(QDeclarativeComponent* component, QQuickItem* dialogParent, QObject* contextObject)
 {
     QDeclarativeContext* baseContext = component->creationContext();

Modified: trunk/Source/WebKit2/UIProcess/qt/QtDialogRunner.h (111683 => 111684)


--- trunk/Source/WebKit2/UIProcess/qt/QtDialogRunner.h	2012-03-22 13:40:06 UTC (rev 111683)
+++ trunk/Source/WebKit2/UIProcess/qt/QtDialogRunner.h	2012-03-22 13:51:44 UTC (rev 111684)
@@ -43,6 +43,7 @@
     bool initForCertificateVerification(QDeclarativeComponent*, QQuickItem*, const QString& hostname);
     bool initForProxyAuthentication(QDeclarativeComponent*, QQuickItem*, const QString& hostname, uint16_t port, const QString& prefilledUsername);
     bool initForFilePicker(QDeclarativeComponent*, QQuickItem*, const QStringList& selectedFiles);
+    bool initForDatabaseQuotaDialog(QDeclarativeComponent*, QQuickItem*, const QString& databaseName, const QString& displayName, quint64 currentQuota, quint64 currentOriginUsage, quint64 currentDatabaseUsage, quint64 expectedUsage);
 
     QQuickItem* dialog() const { return m_dialog.get(); }
 
@@ -52,6 +53,8 @@
     QString username() const { return m_username; }
     QString password() const { return m_password; }
 
+    quint64 databaseQuota() const { return m_databaseQuota; }
+
     QStringList filePaths() const { return m_filepaths; }
 
 public slots:
@@ -73,6 +76,12 @@
         m_filepaths = filePaths;
     }
 
+    void onDatabaseQuotaAccepted(quint64 quota)
+    {
+        m_wasAccepted = true;
+        m_databaseQuota = quota;
+    }
+
 private:
     bool createDialog(QDeclarativeComponent*, QQuickItem* dialogParent, QObject* contextObject);
 
@@ -84,6 +93,7 @@
     QString m_username;
     QString m_password;
     QStringList m_filepaths;
+    quint64 m_databaseQuota;
 };
 
 #endif // QtDialogRunner_h

Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebPageUIClient.cpp (111683 => 111684)


--- trunk/Source/WebKit2/UIProcess/qt/QtWebPageUIClient.cpp	2012-03-22 13:40:06 UTC (rev 111683)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebPageUIClient.cpp	2012-03-22 13:51:44 UTC (rev 111684)
@@ -43,10 +43,16 @@
     uiClient.runJavaScriptPrompt = runJavaScriptPrompt;
     uiClient.runOpenPanel = runOpenPanel;
     uiClient.mouseDidMoveOverElement = mouseDidMoveOverElement;
+    uiClient.exceededDatabaseQuota = exceededDatabaseQuota;
     uiClient.decidePolicyForGeolocationPermissionRequest = policyForGeolocationPermissionRequest;
     WKPageSetPageUIClient(pageRef, &uiClient);
 }
 
+quint64 QtWebPageUIClient::exceededDatabaseQuota(const QString& databaseName, const QString& displayName, quint64 currentQuota, quint64 currentOriginUsage, quint64 currentDatabaseUsage, quint64 expectedUsage)
+{
+    return m_webView->d_func()->exceededDatabaseQuota(databaseName, displayName, currentQuota, currentOriginUsage, currentDatabaseUsage, expectedUsage);
+}
+
 void QtWebPageUIClient::runJavaScriptAlert(const QString& message)
 {
     m_webView->d_func()->runJavaScriptAlert(message);
@@ -88,6 +94,13 @@
     return reinterpret_cast<QtWebPageUIClient*>(const_cast<void*>(clientInfo));
 }
 
+unsigned long long QtWebPageUIClient::exceededDatabaseQuota(WKPageRef page, WKFrameRef frame, WKSecurityOriginRef, WKStringRef databaseName, WKStringRef displayName, unsigned long long currentQuota, unsigned long long currentOriginUsage, unsigned long long currentDatabaseUsage, unsigned long long expectedUsage, const void *clientInfo)
+{
+    QString qDisplayName = WKStringCopyQString(displayName);
+    QString qDatabaseName = WKStringCopyQString(databaseName);
+    return toQtWebPageUIClient(clientInfo)->exceededDatabaseQuota(qDatabaseName, qDisplayName, currentQuota, currentOriginUsage, currentDatabaseUsage, expectedUsage);
+}
+
 void QtWebPageUIClient::runJavaScriptAlert(WKPageRef, WKStringRef alertText, WKFrameRef, const void* clientInfo)
 {
     QString qAlertText = WKStringCopyQString(alertText);

Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebPageUIClient.h (111683 => 111684)


--- trunk/Source/WebKit2/UIProcess/qt/QtWebPageUIClient.h	2012-03-22 13:40:06 UTC (rev 111683)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebPageUIClient.h	2012-03-22 13:51:44 UTC (rev 111684)
@@ -41,6 +41,7 @@
     QtWebPageUIClient(WKPageRef, QQuickWebView*);
 
 private:
+    quint64 exceededDatabaseQuota(const QString& databaseName, const QString& displayName, quint64 currentQuota, quint64 currentOriginUsage, quint64 currentDatabaseUsage, quint64 expectedUsage);
     void runJavaScriptAlert(const QString& message);
     bool runJavaScriptConfirm(const QString& message);
     QString runJavaScriptPrompt(const QString& message, const QString& defaultValue, bool& ok);
@@ -54,6 +55,7 @@
     static WKStringRef runJavaScriptPrompt(WKPageRef, WKStringRef message, WKStringRef defaultValue, WKFrameRef, const void* clientInfo);
     static void runOpenPanel(WKPageRef, WKFrameRef, WKOpenPanelParametersRef, WKOpenPanelResultListenerRef, const void* clientInfo);
     static void mouseDidMoveOverElement(WKPageRef, WKHitTestResultRef, WKEventModifiers, WKTypeRef userData, const void* clientInfo);
+    static unsigned long long exceededDatabaseQuota(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKStringRef databaseName, WKStringRef displayName, unsigned long long currentQuota, unsigned long long currentOriginUsage, unsigned long long currentDatabaseUsage, unsigned long long expectedUsage, const void *clientInfo);
     static void policyForGeolocationPermissionRequest(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKGeolocationPermissionRequestRef, const void*);
 
     QQuickWebView* m_webView;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to