Merge lp:~osomon/webbrowser-app/use-grabToImage into lp:webbrowser-app
- use-grabToImage
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Olivier Tilloy |
Approved revision: | 913 |
Merged at revision: | 916 |
Proposed branch: | lp:~osomon/webbrowser-app/use-grabToImage |
Merge into: | lp:webbrowser-app |
Diff against target: |
705 lines (+71/-388) 13 files modified
debian/control (+3/-5) src/Ubuntu/Web/plugin.cpp (+15/-1) src/app/webbrowser/BrowserTab.qml (+22/-37) src/app/webbrowser/CMakeLists.txt (+1/-4) src/app/webbrowser/file-operations.cpp (+14/-1) src/app/webbrowser/file-operations.h (+3/-1) src/app/webbrowser/item-capture.cpp (+0/-123) src/app/webbrowser/item-capture.h (+0/-62) src/app/webbrowser/webbrowser-app.cpp (+0/-2) tests/unittests/qml/CMakeLists.txt (+2/-3) tests/unittests/qml/tst_BrowserTab.qml (+1/-21) tests/unittests/qml/tst_ItemCapture.qml (+0/-125) tests/unittests/qml/tst_QmlTests.cpp (+10/-3) |
To merge this branch: | bzr merge lp:~osomon/webbrowser-app/use-grabToImage |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ken VanDine | Approve | ||
PS Jenkins bot | continuous-integration | Needs Fixing | |
Loïc Molinari | Pending | ||
Florian Boucault | Pending | ||
Review via email: mp+250223@code.launchpad.net |
Commit message
Use the new Item::grabToImage() API (new in Qt 5.4) to replace the custom ItemCapture element.
Description of the change
PS Jenkins bot (ps-jenkins) wrote : | # |
- 911. By Olivier Tilloy
-
Merge the latest changes from trunk.
- 912. By Olivier Tilloy
-
Remove the need for dependencies on private headers.
- 913. By Olivier Tilloy
-
Explicitly bump the build dependency on Qt to 5.4.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:912
http://
Executed test runs:
None: http://
None: http://
None: http://
SUCCESS: http://
None: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:913
http://
Executed test runs:
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:913
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Ken VanDine (ken-vandine) wrote : | # |
Packaging is fine.
Preview Diff
1 | === modified file 'debian/control' |
2 | --- debian/control 2015-02-17 20:54:04 +0000 |
3 | +++ debian/control 2015-02-26 17:54:55 +0000 |
4 | @@ -10,16 +10,14 @@ |
5 | libqt5sql5-sqlite, |
6 | python-flake8, |
7 | python3-all, |
8 | - qml-module-qtquick2 | qtdeclarative5-qtquick2-plugin, |
9 | + qml-module-qtquick2 (>= 5.4) | qtdeclarative5-qtquick2-plugin (>= 5.4), |
10 | qml-module-qttest | qtdeclarative5-test-plugin, |
11 | qml-module-qtwebkit, |
12 | qt5-default, |
13 | qt5-qmake, |
14 | - qtbase5-dev, |
15 | + qtbase5-dev (>= 5.4), |
16 | qtbase5-dev-tools, |
17 | - qtbase5-private-dev, |
18 | qtdeclarative5-dev, |
19 | - qtdeclarative5-private-dev, |
20 | qtdeclarative5-ubuntu-ui-toolkit-plugin, |
21 | xvfb, |
22 | Standards-Version: 3.9.5 |
23 | @@ -36,7 +34,7 @@ |
24 | fonts-liberation, |
25 | liboxideqt-qmlplugin (>= 1.4), |
26 | libqt5sql5-sqlite, |
27 | - qml-module-qtquick2 | qtdeclarative5-qtquick2-plugin, |
28 | + qml-module-qtquick2 (>= 5.4) | qtdeclarative5-qtquick2-plugin (>= 5.4), |
29 | qml-module-qtquick-dialogs | qtdeclarative5-dialogs-plugin, |
30 | qml-module-qtquick-window2 | qtdeclarative5-window-plugin, |
31 | qtdeclarative5-ubuntu-ui-toolkit-plugin, |
32 | |
33 | === modified file 'src/Ubuntu/Web/plugin.cpp' |
34 | --- src/Ubuntu/Web/plugin.cpp 2014-11-26 10:38:23 +0000 |
35 | +++ src/Ubuntu/Web/plugin.cpp 2015-02-26 17:54:55 +0000 |
36 | @@ -1,5 +1,5 @@ |
37 | /* |
38 | - * Copyright 2013-2014 Canonical Ltd. |
39 | + * Copyright 2013-2015 Canonical Ltd. |
40 | * |
41 | * This file is part of webbrowser-app. |
42 | * |
43 | @@ -34,6 +34,7 @@ |
44 | { |
45 | Q_OBJECT |
46 | |
47 | + Q_PROPERTY(QString cacheLocation READ cacheLocation NOTIFY cacheLocationChanged) |
48 | Q_PROPERTY(QString dataLocation READ dataLocation NOTIFY dataLocationChanged) |
49 | Q_PROPERTY(QString formFactor READ formFactor CONSTANT) |
50 | Q_PROPERTY(QString webviewDevtoolsDebugHost READ devtoolsHost CONSTANT) |
51 | @@ -43,6 +44,7 @@ |
52 | public: |
53 | UbuntuWebPluginContext(QObject* parent = 0); |
54 | |
55 | + QString cacheLocation() const; |
56 | QString dataLocation() const; |
57 | QString formFactor(); |
58 | QString devtoolsHost(); |
59 | @@ -50,6 +52,7 @@ |
60 | QStringList hostMappingRules(); |
61 | |
62 | Q_SIGNALS: |
63 | + void cacheLocationChanged() const; |
64 | void dataLocationChanged() const; |
65 | |
66 | private: |
67 | @@ -66,9 +69,20 @@ |
68 | , m_hostMappingRulesQueried(false) |
69 | { |
70 | connect(QCoreApplication::instance(), SIGNAL(applicationNameChanged()), |
71 | + this, SIGNAL(cacheLocationChanged())); |
72 | + connect(QCoreApplication::instance(), SIGNAL(applicationNameChanged()), |
73 | this, SIGNAL(dataLocationChanged())); |
74 | } |
75 | |
76 | +QString UbuntuWebPluginContext::cacheLocation() const |
77 | +{ |
78 | + QDir location(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)); |
79 | + if (!location.exists()) { |
80 | + QDir::root().mkpath(location.absolutePath()); |
81 | + } |
82 | + return location.absolutePath(); |
83 | +} |
84 | + |
85 | QString UbuntuWebPluginContext::dataLocation() const |
86 | { |
87 | QDir location(QStandardPaths::writableLocation(QStandardPaths::DataLocation)); |
88 | |
89 | === modified file 'src/app/webbrowser/BrowserTab.qml' |
90 | --- src/app/webbrowser/BrowserTab.qml 2014-12-17 14:48:20 +0000 |
91 | +++ src/app/webbrowser/BrowserTab.qml 2015-02-26 17:54:55 +0000 |
92 | @@ -1,5 +1,5 @@ |
93 | /* |
94 | - * Copyright 2014 Canonical Ltd. |
95 | + * Copyright 2014-2015 Canonical Ltd. |
96 | * |
97 | * This file is part of webbrowser-app. |
98 | * |
99 | @@ -16,7 +16,8 @@ |
100 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
101 | */ |
102 | |
103 | -import QtQuick 2.0 |
104 | +import QtQuick 2.4 |
105 | +import Ubuntu.Web 0.2 |
106 | import com.canonical.Oxide 1.4 as Oxide |
107 | import webbrowserapp.private 0.1 |
108 | |
109 | @@ -65,44 +66,28 @@ |
110 | destroy() |
111 | } |
112 | |
113 | - property var captureTaker |
114 | - Component { |
115 | - id: captureComponent |
116 | - ItemCapture { |
117 | - quality: 50 |
118 | - onCaptureFinished: { |
119 | - if ((request == uniqueId) && capture.toString()) { |
120 | - if (preview == capture) { |
121 | - // Ensure that the preview URL actually changes, |
122 | - // for the image to be reloaded |
123 | - preview = "" |
124 | - } |
125 | - preview = capture |
126 | - } |
127 | - if (!webview.visible) { |
128 | - captureTaker.destroy() |
129 | - } |
130 | - } |
131 | - } |
132 | - } |
133 | - function createCaptureTakerIfNeeded() { |
134 | - if (!captureTaker) { |
135 | - captureTaker = captureComponent.createObject(webview) |
136 | - } |
137 | - } |
138 | - onWebviewChanged: { |
139 | - if (webview) { |
140 | - createCaptureTakerIfNeeded() |
141 | - } |
142 | - } |
143 | - |
144 | Connections { |
145 | target: webview |
146 | onVisibleChanged: { |
147 | - if (webview.visible) { |
148 | - createCaptureTakerIfNeeded() |
149 | - } else { |
150 | - captureTaker.requestCapture(uniqueId) |
151 | + if (!webview.visible) { |
152 | + webview.grabToImage(function(result) { |
153 | + var capturesDir = cacheLocation + "/captures" |
154 | + if (!FileOperations.exists(Qt.resolvedUrl(capturesDir))) { |
155 | + FileOperations.mkpath(Qt.resolvedUrl(capturesDir)) |
156 | + } |
157 | + var filepath = capturesDir + "/" + uniqueId + ".jpg" |
158 | + if (result.saveToFile(filepath)) { |
159 | + var previewUrl = Qt.resolvedUrl(filepath) |
160 | + if (preview == previewUrl) { |
161 | + // Ensure that the preview URL actually changes, |
162 | + // for the image to be reloaded |
163 | + preview = "" |
164 | + } |
165 | + preview = previewUrl |
166 | + } else { |
167 | + preview = "" |
168 | + } |
169 | + }) |
170 | } |
171 | } |
172 | } |
173 | |
174 | === modified file 'src/app/webbrowser/CMakeLists.txt' |
175 | --- src/app/webbrowser/CMakeLists.txt 2014-12-11 17:53:28 +0000 |
176 | +++ src/app/webbrowser/CMakeLists.txt 2015-02-26 17:54:55 +0000 |
177 | @@ -25,11 +25,8 @@ |
178 | |
179 | qt5_use_modules(${WEBBROWSER_APP_MODELS} Core Sql) |
180 | |
181 | -include_directories(${Qt5Quick_PRIVATE_INCLUDE_DIRS}) |
182 | - |
183 | set(WEBBROWSER_APP_SRC |
184 | file-operations.cpp |
185 | - item-capture.cpp |
186 | searchengine.cpp |
187 | settings.cpp |
188 | webbrowser-app.cpp |
189 | @@ -41,7 +38,7 @@ |
190 | |
191 | target_link_libraries(${WEBBROWSER_APP} ${COMMONLIB} ${WEBBROWSER_APP_MODELS}) |
192 | |
193 | -qt5_use_modules(${WEBBROWSER_APP} Concurrent Core Gui Qml Quick) |
194 | +qt5_use_modules(${WEBBROWSER_APP} Core Qml Quick) |
195 | |
196 | install(TARGETS ${WEBBROWSER_APP} |
197 | RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) |
198 | |
199 | === modified file 'src/app/webbrowser/file-operations.cpp' |
200 | --- src/app/webbrowser/file-operations.cpp 2014-12-11 17:04:20 +0000 |
201 | +++ src/app/webbrowser/file-operations.cpp 2015-02-26 17:54:55 +0000 |
202 | @@ -1,5 +1,5 @@ |
203 | /* |
204 | - * Copyright 2014 Canonical Ltd. |
205 | + * Copyright 2014-2015 Canonical Ltd. |
206 | * |
207 | * This file is part of webbrowser-app. |
208 | * |
209 | @@ -18,7 +18,9 @@ |
210 | |
211 | #include "file-operations.h" |
212 | |
213 | +#include <QtCore/QDir> |
214 | #include <QtCore/QFile> |
215 | +#include <QtCore/QFileInfo> |
216 | #include <QtCore/QUrl> |
217 | |
218 | FileOperations::FileOperations(QObject* parent) |
219 | @@ -26,7 +28,18 @@ |
220 | { |
221 | } |
222 | |
223 | +bool FileOperations::exists(const QUrl& path) const |
224 | +{ |
225 | + // works for both files and directories |
226 | + return QFileInfo::exists(path.toLocalFile()); |
227 | +} |
228 | + |
229 | bool FileOperations::remove(const QUrl& file) const |
230 | { |
231 | return QFile::remove(file.toLocalFile()); |
232 | } |
233 | + |
234 | +bool FileOperations::mkpath(const QUrl& path) const |
235 | +{ |
236 | + return QDir::root().mkpath(path.toLocalFile()); |
237 | +} |
238 | |
239 | === modified file 'src/app/webbrowser/file-operations.h' |
240 | --- src/app/webbrowser/file-operations.h 2014-12-11 17:04:20 +0000 |
241 | +++ src/app/webbrowser/file-operations.h 2015-02-26 17:54:55 +0000 |
242 | @@ -1,5 +1,5 @@ |
243 | /* |
244 | - * Copyright 2014 Canonical Ltd. |
245 | + * Copyright 2014-2015 Canonical Ltd. |
246 | * |
247 | * This file is part of webbrowser-app. |
248 | * |
249 | @@ -30,7 +30,9 @@ |
250 | public: |
251 | explicit FileOperations(QObject* parent=0); |
252 | |
253 | + Q_INVOKABLE bool exists(const QUrl& path) const; |
254 | Q_INVOKABLE bool remove(const QUrl& file) const; |
255 | + Q_INVOKABLE bool mkpath(const QUrl& path) const; |
256 | }; |
257 | |
258 | #endif // __FILE_OPERATIONS_H__ |
259 | |
260 | === removed file 'src/app/webbrowser/item-capture.cpp' |
261 | --- src/app/webbrowser/item-capture.cpp 2014-12-17 07:45:32 +0000 |
262 | +++ src/app/webbrowser/item-capture.cpp 1970-01-01 00:00:00 +0000 |
263 | @@ -1,123 +0,0 @@ |
264 | -/* |
265 | - * Copyright 2014 Canonical Ltd. |
266 | - * |
267 | - * This file is part of webbrowser-app. |
268 | - * |
269 | - * webbrowser-app is free software; you can redistribute it and/or modify |
270 | - * it under the terms of the GNU General Public License as published by |
271 | - * the Free Software Foundation; version 3. |
272 | - * |
273 | - * webbrowser-app is distributed in the hope that it will be useful, |
274 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
275 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
276 | - * GNU General Public License for more details. |
277 | - * |
278 | - * You should have received a copy of the GNU General Public License |
279 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
280 | - */ |
281 | - |
282 | -// local |
283 | -#include "item-capture.h" |
284 | - |
285 | -// Qt |
286 | -#include <QtConcurrent/QtConcurrent> |
287 | -#include <QtCore/QDebug> |
288 | -#include <QtCore/QDir> |
289 | -#include <QtCore/QMetaObject> |
290 | -#include <QtCore/QStandardPaths> |
291 | -#include <QtGui/QImage> |
292 | -#include <QtQuick/private/qquickitem_p.h> |
293 | - |
294 | -ItemCapture::ItemCapture(QQuickItem* parent) |
295 | - : QQuickShaderEffectSource(parent) |
296 | - , m_quality(-1) |
297 | -{ |
298 | - connect(this, SIGNAL(parentChanged(QQuickItem*)), SLOT(onParentChanged(QQuickItem*))); |
299 | - |
300 | - setScale(0); |
301 | - |
302 | - QDir cacheLocation(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/captures"); |
303 | - m_cacheLocation = cacheLocation.absolutePath(); |
304 | - if (!cacheLocation.exists()) { |
305 | - QDir::root().mkpath(m_cacheLocation); |
306 | - } |
307 | -} |
308 | - |
309 | -const int ItemCapture::quality() const |
310 | -{ |
311 | - return m_quality; |
312 | -} |
313 | - |
314 | -void ItemCapture::setQuality(const int quality) |
315 | -{ |
316 | - if (quality != m_quality) { |
317 | - if ((quality >= -1) && (quality <= 100)) { |
318 | - m_quality = quality; |
319 | - Q_EMIT qualityChanged(); |
320 | - } else { |
321 | - qWarning() << "Invalid value for quality, must be between 0 and 100 (or -1 for default)"; |
322 | - } |
323 | - } |
324 | -} |
325 | - |
326 | -void ItemCapture::onParentChanged(QQuickItem* parent) |
327 | -{ |
328 | - if (sourceItem()) { |
329 | - sourceItem()->disconnect(this); |
330 | - } |
331 | - QQuickItemPrivate::get(this)->anchors()->setFill(parent); |
332 | - setSourceItem(parent); |
333 | - if (parent) { |
334 | - connect(parent, SIGNAL(visibleChanged()), SLOT(onParentVisibleChanged())); |
335 | - } |
336 | -} |
337 | - |
338 | -void ItemCapture::onParentVisibleChanged() |
339 | -{ |
340 | - setLive(parentItem()->isVisible()); |
341 | -} |
342 | - |
343 | -QSGNode* ItemCapture::updatePaintNode(QSGNode* oldNode, UpdatePaintNodeData* updatePaintNodeData) |
344 | -{ |
345 | - QSGNode* newNode = QQuickShaderEffectSource::updatePaintNode(oldNode, updatePaintNodeData); |
346 | - if (!m_request.isEmpty()) { |
347 | - QString request = m_request; |
348 | - m_request.clear(); |
349 | -#if QT_VERSION < QT_VERSION_CHECK(5, 4, 0) |
350 | - QQuickShaderEffectTexture* texture = |
351 | - qobject_cast<QQuickShaderEffectTexture*>(textureProvider()->texture()); |
352 | -#else |
353 | - QSGLayer* texture = |
354 | - qobject_cast<QSGLayer*>(textureProvider()->texture()); |
355 | -#endif |
356 | - QImage image = texture->toImage().mirrored(); |
357 | - if (!image.isNull()) { |
358 | - QString filePath = m_cacheLocation + "/" + request + ".jpg"; |
359 | - QtConcurrent::run(this, &ItemCapture::saveImage, image, filePath, request); |
360 | - return newNode; |
361 | - } |
362 | - QMetaObject::invokeMethod(this, "captureFinished", Qt::QueuedConnection, |
363 | - Q_ARG(QString, request), Q_ARG(QUrl, QUrl())); |
364 | - } |
365 | - return newNode; |
366 | -} |
367 | - |
368 | -void ItemCapture::requestCapture(const QString& id) |
369 | -{ |
370 | - if (id.contains("/")) { |
371 | - qWarning() << "Invalid ID (contains slashes)"; |
372 | - Q_EMIT captureFinished(id, QUrl()); |
373 | - } |
374 | - m_request = id; |
375 | - scheduleUpdate(); |
376 | -} |
377 | - |
378 | -void ItemCapture::saveImage(const QImage& image, const QString& filePath, const QString& request) |
379 | -{ |
380 | - QUrl capture; |
381 | - if (image.save(filePath, 0, m_quality)) { |
382 | - capture = QUrl::fromLocalFile(filePath); |
383 | - } |
384 | - QMetaObject::invokeMethod(this, "captureFinished", Qt::QueuedConnection, |
385 | - Q_ARG(QString, request), Q_ARG(QUrl, capture)); |
386 | -} |
387 | |
388 | === removed file 'src/app/webbrowser/item-capture.h' |
389 | --- src/app/webbrowser/item-capture.h 2014-12-12 09:21:14 +0000 |
390 | +++ src/app/webbrowser/item-capture.h 1970-01-01 00:00:00 +0000 |
391 | @@ -1,62 +0,0 @@ |
392 | -/* |
393 | - * Copyright 2014 Canonical Ltd. |
394 | - * |
395 | - * This file is part of webbrowser-app. |
396 | - * |
397 | - * webbrowser-app is free software; you can redistribute it and/or modify |
398 | - * it under the terms of the GNU General Public License as published by |
399 | - * the Free Software Foundation; version 3. |
400 | - * |
401 | - * webbrowser-app is distributed in the hope that it will be useful, |
402 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
403 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
404 | - * GNU General Public License for more details. |
405 | - * |
406 | - * You should have received a copy of the GNU General Public License |
407 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
408 | - */ |
409 | - |
410 | -#ifndef __ITEM_CAPTURE_H__ |
411 | -#define __ITEM_CAPTURE_H__ |
412 | - |
413 | -// Qt |
414 | -#include <QtCore/QString> |
415 | -#include <QtCore/QUrl> |
416 | -#include <QtQuick/private/qquickshadereffectsource_p.h> |
417 | - |
418 | -class QImage; |
419 | - |
420 | -class ItemCapture : public QQuickShaderEffectSource |
421 | -{ |
422 | - Q_OBJECT |
423 | - |
424 | - Q_PROPERTY(int quality READ quality WRITE setQuality NOTIFY qualityChanged) |
425 | - |
426 | -public: |
427 | - ItemCapture(QQuickItem* parent=0); |
428 | - |
429 | - const int quality() const; |
430 | - void setQuality(const int quality); |
431 | - |
432 | -public Q_SLOTS: |
433 | - void requestCapture(const QString& id); |
434 | - |
435 | -Q_SIGNALS: |
436 | - void qualityChanged() const; |
437 | - void captureFinished(QString request, QUrl capture) const; |
438 | - |
439 | -protected: |
440 | - QSGNode* updatePaintNode(QSGNode* oldNode, UpdatePaintNodeData* updatePaintNodeData); |
441 | - |
442 | -private Q_SLOTS: |
443 | - void onParentChanged(QQuickItem* parent); |
444 | - void onParentVisibleChanged(); |
445 | - void saveImage(const QImage& image, const QString& filePath, const QString& request); |
446 | - |
447 | -private: |
448 | - QString m_cacheLocation; |
449 | - QString m_request; |
450 | - int m_quality; |
451 | -}; |
452 | - |
453 | -#endif // __ITEM_CAPTURE_H__ |
454 | |
455 | === modified file 'src/app/webbrowser/webbrowser-app.cpp' |
456 | --- src/app/webbrowser/webbrowser-app.cpp 2015-02-18 15:44:25 +0000 |
457 | +++ src/app/webbrowser/webbrowser-app.cpp 2015-02-26 17:54:55 +0000 |
458 | @@ -25,7 +25,6 @@ |
459 | #include "history-byvisits-model.h" |
460 | #include "history-domainlist-model.h" |
461 | #include "history-domainlist-chronological-model.h" |
462 | -#include "item-capture.h" |
463 | #include "limit-proxy-model.h" |
464 | #include "searchengine.h" |
465 | #include "settings.h" |
466 | @@ -92,7 +91,6 @@ |
467 | qmlRegisterType<LimitProxyModel>(uri, 0 , 1, "LimitProxyModel"); |
468 | qmlRegisterType<TabsModel>(uri, 0, 1, "TabsModel"); |
469 | qmlRegisterType<BookmarksModel>(uri, 0, 1, "BookmarksModel"); |
470 | - qmlRegisterType<ItemCapture>(uri, 0, 1, "ItemCapture"); |
471 | qmlRegisterSingletonType<FileOperations>(uri, 0, 1, "FileOperations", FileOperations_singleton_factory); |
472 | |
473 | if (BrowserApplication::initialize("webbrowser/webbrowser-app.qml")) { |
474 | |
475 | === modified file 'tests/unittests/qml/CMakeLists.txt' |
476 | --- tests/unittests/qml/CMakeLists.txt 2014-12-03 14:35:29 +0000 |
477 | +++ tests/unittests/qml/CMakeLists.txt 2015-02-26 17:54:55 +0000 |
478 | @@ -9,15 +9,14 @@ |
479 | set(TEST tst_QmlTests) |
480 | set(SOURCES |
481 | ${webbrowser-common_SOURCE_DIR}/favicon-fetcher.cpp |
482 | - ${webbrowser-app_SOURCE_DIR}/item-capture.cpp |
483 | + ${webbrowser-app_SOURCE_DIR}/file-operations.cpp |
484 | tst_QmlTests.cpp |
485 | ) |
486 | add_executable(${TEST} ${SOURCES}) |
487 | -qt5_use_modules(${TEST} Qml Quick QuickTest) |
488 | +qt5_use_modules(${TEST} Core Gui Network Qml Quick QuickTest) |
489 | include_directories( |
490 | ${webbrowser-common_SOURCE_DIR} |
491 | ${webbrowser-app_SOURCE_DIR} |
492 | - ${Qt5Quick_PRIVATE_INCLUDE_DIRS} |
493 | ) |
494 | add_test(${TEST} ${XVFB_COMMAND} ${CMAKE_CURRENT_BINARY_DIR}/${TEST} |
495 | -input ${CMAKE_CURRENT_SOURCE_DIR} |
496 | |
497 | === modified file 'tests/unittests/qml/tst_BrowserTab.qml' |
498 | --- tests/unittests/qml/tst_BrowserTab.qml 2014-12-17 14:56:36 +0000 |
499 | +++ tests/unittests/qml/tst_BrowserTab.qml 2015-02-26 17:54:55 +0000 |
500 | @@ -1,5 +1,5 @@ |
501 | /* |
502 | - * Copyright 2014 Canonical Ltd. |
503 | + * Copyright 2014-2015 Canonical Ltd. |
504 | * |
505 | * This file is part of webbrowser-app. |
506 | * |
507 | @@ -38,7 +38,6 @@ |
508 | property string currentState |
509 | } |
510 | readonly property bool webviewPresent: webview |
511 | - readonly property bool captureTakerPresent: captureTaker != undefined |
512 | } |
513 | } |
514 | |
515 | @@ -84,24 +83,5 @@ |
516 | compare(tab.webview.request, "foobar") |
517 | tab.destroy() |
518 | } |
519 | - |
520 | - function test_capture_taker() { |
521 | - var tab = tabComponent.createObject(root) |
522 | - verify(!tab.captureTakerPresent) |
523 | - |
524 | - tab.load() |
525 | - tryCompare(tab, 'captureTakerPresent', true) |
526 | - |
527 | - tab.visible = false |
528 | - tryCompare(tab, 'captureTakerPresent', false) |
529 | - |
530 | - tab.visible = true |
531 | - tryCompare(tab, 'captureTakerPresent', true) |
532 | - |
533 | - tab.unload() |
534 | - tryCompare(tab, 'captureTakerPresent', false) |
535 | - |
536 | - tab.destroy() |
537 | - } |
538 | } |
539 | } |
540 | |
541 | === removed file 'tests/unittests/qml/tst_ItemCapture.qml' |
542 | --- tests/unittests/qml/tst_ItemCapture.qml 2014-12-16 22:28:02 +0000 |
543 | +++ tests/unittests/qml/tst_ItemCapture.qml 1970-01-01 00:00:00 +0000 |
544 | @@ -1,125 +0,0 @@ |
545 | -/* |
546 | - * Copyright 2014 Canonical Ltd. |
547 | - * |
548 | - * This file is part of webbrowser-app. |
549 | - * |
550 | - * webbrowser-app is free software; you can redistribute it and/or modify |
551 | - * it under the terms of the GNU General Public License as published by |
552 | - * the Free Software Foundation; version 3. |
553 | - * |
554 | - * webbrowser-app is distributed in the hope that it will be useful, |
555 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
556 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
557 | - * GNU General Public License for more details. |
558 | - * |
559 | - * You should have received a copy of the GNU General Public License |
560 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
561 | - */ |
562 | - |
563 | -import QtQuick 2.0 |
564 | -import QtTest 1.0 |
565 | -import webbrowserapp.private 0.1 |
566 | - |
567 | -Item { |
568 | - width: 200 |
569 | - height: 200 |
570 | - |
571 | - Rectangle { |
572 | - id: rect |
573 | - |
574 | - width: 123 |
575 | - height: 157 |
576 | - anchors.centerIn: parent |
577 | - |
578 | - gradient: Gradient { |
579 | - GradientStop { |
580 | - position: 0.0 |
581 | - color: "#123456" |
582 | - } |
583 | - GradientStop { |
584 | - position: 1.0 |
585 | - color: "#ABCDEF" |
586 | - } |
587 | - } |
588 | - |
589 | - ItemCapture { |
590 | - id: capture |
591 | - onCaptureFinished: image.source = capture |
592 | - } |
593 | - |
594 | - SignalSpy { |
595 | - id: spyReady |
596 | - target: capture |
597 | - signalName: "scheduledUpdateCompleted" |
598 | - } |
599 | - |
600 | - SignalSpy { |
601 | - id: spyCaptured |
602 | - target: capture |
603 | - signalName: "captureFinished" |
604 | - } |
605 | - } |
606 | - |
607 | - Image { |
608 | - id: image |
609 | - } |
610 | - |
611 | - TestCase { |
612 | - name: "ItemCapture" |
613 | - when: windowShown |
614 | - |
615 | - function test_quality_data() { |
616 | - return [ |
617 | - {get: -1}, |
618 | - {set: 58, get: 58}, |
619 | - {set: 122}, |
620 | - {set: -39}, |
621 | - {set: -1, get: -1}, |
622 | - {set: 0, get: 0}, |
623 | - {set: 100, get: 100} |
624 | - ] |
625 | - } |
626 | - |
627 | - function test_quality(data) { |
628 | - var quality = capture.quality |
629 | - if ('set' in data) { |
630 | - capture.quality = data.set |
631 | - } |
632 | - if ('get' in data) { |
633 | - compare(capture.quality, data.get) |
634 | - } else { |
635 | - compare(capture.quality, quality) |
636 | - } |
637 | - } |
638 | - |
639 | - function test_capture() { |
640 | - spyReady.wait() |
641 | - spyCaptured.clear() |
642 | - var id = "test" |
643 | - capture.requestCapture(id) |
644 | - spyCaptured.wait() |
645 | - compare(spyCaptured.signalArguments[0][0], id) |
646 | - verify(image.source.toString()) |
647 | - compare(image.status, Image.Ready) |
648 | - compare(image.sourceSize.width, rect.width) |
649 | - compare(image.sourceSize.height, rect.height) |
650 | - var reference = grabImage(rect) |
651 | - var grabbed = grabImage(image) |
652 | - for (var i = 0; i < rect.width; ++i) { |
653 | - for (var j = 0; j < rect.height; ++j) { |
654 | - compare(grabbed.pixel(i, j), reference.pixel(i, j)) |
655 | - } |
656 | - } |
657 | - } |
658 | - |
659 | - function test_capture_invalid_id() { |
660 | - spyReady.wait() |
661 | - spyCaptured.clear() |
662 | - var invalid = "foo/bar" |
663 | - capture.requestCapture(invalid) |
664 | - spyCaptured.wait() |
665 | - compare(spyCaptured.signalArguments[0][0], invalid) |
666 | - verify(!spyCaptured.signalArguments[0][1].toString()) |
667 | - } |
668 | - } |
669 | -} |
670 | |
671 | === modified file 'tests/unittests/qml/tst_QmlTests.cpp' |
672 | --- tests/unittests/qml/tst_QmlTests.cpp 2014-12-03 14:35:29 +0000 |
673 | +++ tests/unittests/qml/tst_QmlTests.cpp 2015-02-26 17:54:55 +0000 |
674 | @@ -1,5 +1,5 @@ |
675 | /* |
676 | - * Copyright 2013-2014 Canonical Ltd. |
677 | + * Copyright 2013-2015 Canonical Ltd. |
678 | * |
679 | * This file is part of webbrowser-app. |
680 | * |
681 | @@ -22,7 +22,14 @@ |
682 | |
683 | // local |
684 | #include "favicon-fetcher.h" |
685 | -#include "item-capture.h" |
686 | +#include "file-operations.h" |
687 | + |
688 | +static QObject* FileOperations_singleton_factory(QQmlEngine* engine, QJSEngine* scriptEngine) |
689 | +{ |
690 | + Q_UNUSED(engine); |
691 | + Q_UNUSED(scriptEngine); |
692 | + return new FileOperations(); |
693 | +} |
694 | |
695 | int main(int argc, char** argv) |
696 | { |
697 | @@ -30,7 +37,7 @@ |
698 | qmlRegisterType<FaviconFetcher>(commonUri, 0, 1, "FaviconFetcher"); |
699 | |
700 | const char* browserUri = "webbrowserapp.private"; |
701 | - qmlRegisterType<ItemCapture>(browserUri, 0, 1, "ItemCapture"); |
702 | + qmlRegisterSingletonType<FileOperations>(browserUri, 0, 1, "FileOperations", FileOperations_singleton_factory); |
703 | |
704 | return quick_test_main(argc, argv, "QmlTests", 0); |
705 | } |
FAILED: Continuous integration, rev:910 jenkins. qa.ubuntu. com/job/ webbrowser- app-ci/ 1478/ jenkins. qa.ubuntu. com/job/ generic- deb-autopilot- vivid-touch/ 1427 jenkins. qa.ubuntu. com/job/ webbrowser- app-vivid- amd64-ci/ 236 jenkins. qa.ubuntu. com/job/ webbrowser- app-vivid- armhf-ci/ 236 jenkins. qa.ubuntu. com/job/ webbrowser- app-vivid- armhf-ci/ 236/artifact/ work/output/ *zip*/output. zip jenkins. qa.ubuntu. com/job/ webbrowser- app-vivid- i386-ci/ 236 jenkins. qa.ubuntu. com/job/ generic- deb-autopilot- runner- vivid-mako/ 1262 jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- vivid-armhf/ 1425 jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- vivid-armhf/ 1425/artifact/ work/output/ *zip*/output. zip s-jenkins. ubuntu- ci:8080/ job/touch- flash-device/ 18178
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/webbrowser- app-ci/ 1478/rebuild
http://