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;