summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Koenig <tobias.koenig@kdab.com>2016-08-06 20:38:59 +0200
committerTobias Koenig <tobias.koenig@kdab.com>2016-08-08 08:11:55 +0000
commit5650ef40b3628956550d16f83e63cd9ce882b032 (patch)
tree4f574fe7d722043aeea262bc311cfa9daf7a455d
parent322ab60499477ce0860f3a9b697e9b696da9570e (diff)
Add passwordChanged() signal to QPdfDocument
The passwordChanged() signal is emitted whenever the password on the document is changed. Change-Id: I8c35274dba7160b81555eac5bbda37d47cb8c9b7 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--src/pdf/qpdfdocument.cpp13
-rw-r--r--src/pdf/qpdfdocument.h5
-rw-r--r--tests/auto/qpdfdocument/tst_qpdfdocument.cpp27
3 files changed, 43 insertions, 2 deletions
diff --git a/src/pdf/qpdfdocument.cpp b/src/pdf/qpdfdocument.cpp
index 6802089..119b74b 100644
--- a/src/pdf/qpdfdocument.cpp
+++ b/src/pdf/qpdfdocument.cpp
@@ -283,9 +283,15 @@ void QPdfDocument::load(QIODevice *device)
void QPdfDocument::setPassword(const QString &password)
{
+ const QByteArray newPassword = password.toUtf8();
+
+ if (d->password == newPassword)
+ return;
+
const QMutexLocker lock(pdfMutex());
- d->password = password.toUtf8();
+ d->password = newPassword;
+ emit passwordChanged();
if (!d->doc && d->avail)
d->tryLoadDocument();
@@ -322,6 +328,11 @@ void QPdfDocument::close()
const QMutexLocker lock(pdfMutex());
d->clear();
+
+ if (!d->password.isEmpty()) {
+ d->password.clear();
+ emit passwordChanged();
+ }
}
int QPdfDocument::pageCount() const
diff --git a/src/pdf/qpdfdocument.h b/src/pdf/qpdfdocument.h
index bb3602d..1f024b3 100644
--- a/src/pdf/qpdfdocument.h
+++ b/src/pdf/qpdfdocument.h
@@ -34,9 +34,11 @@ class QNetworkReply;
class Q_PDF_EXPORT QPdfDocument : public QObject
{
Q_OBJECT
+
Q_PROPERTY(int pageCount READ pageCount NOTIFY pageCountChanged FINAL)
- Q_PROPERTY(QString password READ password WRITE setPassword FINAL)
+ Q_PROPERTY(QString password READ password WRITE setPassword NOTIFY passwordChanged FINAL)
Q_PROPERTY(bool loading READ isLoading FINAL)
+
public:
enum Error {
@@ -70,6 +72,7 @@ public:
QImage render(int page, const QSizeF &pageSize);
Q_SIGNALS:
+ void passwordChanged();
void passwordRequired();
void documentLoadStarted();
void documentLoadFinished();
diff --git a/tests/auto/qpdfdocument/tst_qpdfdocument.cpp b/tests/auto/qpdfdocument/tst_qpdfdocument.cpp
index ef00bdb..41b34ff 100644
--- a/tests/auto/qpdfdocument/tst_qpdfdocument.cpp
+++ b/tests/auto/qpdfdocument/tst_qpdfdocument.cpp
@@ -22,6 +22,7 @@ private slots:
void close();
void loadAfterClose();
void closeOnDestroy();
+ void passwordClearedOnClose();
};
struct TemporaryPdf: public QTemporaryFile
@@ -101,11 +102,16 @@ void tst_QPdfDocument::loadAsync()
void tst_QPdfDocument::password()
{
QPdfDocument doc;
+ QSignalSpy passwordChangedSpy(&doc, SIGNAL(passwordChanged()));
+
QCOMPARE(doc.pageCount(), 0);
QCOMPARE(doc.load(QFINDTESTDATA("pdf-sample.protected.pdf")), QPdfDocument::IncorrectPasswordError);
+ QCOMPARE(passwordChangedSpy.count(), 0);
doc.setPassword(QStringLiteral("WrongPassword"));
+ QCOMPARE(passwordChangedSpy.count(), 1);
QCOMPARE(doc.load(QFINDTESTDATA("pdf-sample.protected.pdf")), QPdfDocument::IncorrectPasswordError);
doc.setPassword(QStringLiteral("Qt"));
+ QCOMPARE(passwordChangedSpy.count(), 2);
QCOMPARE(doc.load(QFINDTESTDATA("pdf-sample.protected.pdf")), QPdfDocument::NoError);
QCOMPARE(doc.pageCount(), 1);
}
@@ -175,6 +181,27 @@ void tst_QPdfDocument::closeOnDestroy()
}
}
+void tst_QPdfDocument::passwordClearedOnClose()
+{
+ TemporaryPdf tempPdf;
+ QPdfDocument doc;
+
+ QSignalSpy passwordChangedSpy(&doc, SIGNAL(passwordChanged()));
+
+ doc.setPassword(QStringLiteral("Qt"));
+ QCOMPARE(passwordChangedSpy.count(), 1);
+ QCOMPARE(doc.load(QFINDTESTDATA("pdf-sample.protected.pdf")), QPdfDocument::NoError);
+ passwordChangedSpy.clear();
+
+ doc.close(); // password is cleared on close
+ QCOMPARE(passwordChangedSpy.count(), 1);
+ passwordChangedSpy.clear();
+
+ doc.load(&tempPdf);
+ doc.close(); // signal is not emitted if password didn't change
+ QCOMPARE(passwordChangedSpy.count(), 0);
+}
+
QTEST_MAIN(tst_QPdfDocument)
#include "tst_qpdfdocument.moc"