=== modified file 'CMakeLists.txt'
--- CMakeLists.txt	2014-07-17 08:40:07 +0000
+++ CMakeLists.txt	2014-09-22 17:35:56 +0000
@@ -31,7 +31,7 @@
 )
 
 set(UDM_VERSION_MAJOR 0)
-set(UDM_VERSION_MINOR 7)
+set(UDM_VERSION_MINOR 9)
 set(UDM_VERSION_PATCH 0)
 
 find_package(Gtest REQUIRED)

=== modified file 'debian/changelog'
--- debian/changelog	2014-09-16 02:33:46 +0000
+++ debian/changelog	2014-09-22 17:35:56 +0000
@@ -1,3 +1,10 @@
+ubuntu-download-manager (0.9) UNRELEASED; urgency=medium
+
+  * Add new properties that can be used to filter the downloads shown in the
+    indicator. This changes the ABI.
+
+ -- Manuel de la Pena <manuel.delapena@canonical.com>  Thu, 04 Sep 2014 13:36:59 +0200
+
 ubuntu-download-manager (0.8+14.10.20140916-0ubuntu1) 14.09; urgency=low
 
   [ Sergio Schvezov ]

=== modified file 'debian/libudm-common0.symbols'
--- debian/libudm-common0.symbols	2014-07-14 15:14:37 +0000
+++ debian/libudm-common0.symbols	2014-09-22 17:35:56 +0000
@@ -74,6 +74,18 @@
  (c++)"Ubuntu::Transfers::System::Logger::~Logger()@Base" 0.4+14.10.20140618
  (c++)"Ubuntu::Transfers::System::Logger::~Logger()@Base" 0.4+14.10.20140618
  (c++)"Ubuntu::Transfers::System::Logger::~Logger()@Base" 0.4+14.10.20140618
+ (c++)"Ubuntu::Transfers::Metadata::setClickPackage(QString const&)@Base" 0replaceme
+ (c++)"Ubuntu::Transfers::Metadata::CLICK_PACKAGE_KEY@Base" 0replaceme
+ (c++)"Ubuntu::Transfers::Metadata::setShowInIndicator(bool)@Base" 0replaceme
+ (c++)"Ubuntu::Transfers::Metadata::SHOW_IN_INDICATOR_KEY@Base" 0replaceme
+ (c++)"Ubuntu::Transfers::Metadata::setTitle(QString const&)@Base" 0replaceme
+ (c++)"Ubuntu::Transfers::Metadata::TITLE_KEY@Base" 0replaceme
+ (c++)"Ubuntu::Transfers::Metadata::clickPackage() const@Base" 0replaceme
+ (c++)"Ubuntu::Transfers::Metadata::hasClickPackage() const@Base" 0replaceme
+ (c++)"Ubuntu::Transfers::Metadata::showInIndicator() const@Base" 0replaceme
+ (c++)"Ubuntu::Transfers::Metadata::hasShowInIndicator() const@Base" 0replaceme
+ (c++)"Ubuntu::Transfers::Metadata::title() const@Base" 0replaceme
+ (c++)"Ubuntu::Transfers::Metadata::hasTitle() const@Base" 0replaceme
  (c++)"Ubuntu::Transfers::Metadata::setCommand(QString const&)@Base" 0.4+14.10.20140618
  (c++)"Ubuntu::Transfers::Metadata::COMMAND_KEY@Base" 0.4+14.10.20140618
  (c++)"Ubuntu::Transfers::Metadata::setLocalPath(QString const&)@Base" 0.4+14.10.20140618

=== modified file 'docs/dbus/com.canonical.applications.download.xml'
--- docs/dbus/com.canonical.applications.download.xml	2014-06-18 11:10:18 +0000
+++ docs/dbus/com.canonical.applications.download.xml	2014-09-22 17:35:56 +0000
@@ -14,6 +14,10 @@
         <arg name="data" type="a{sv}" direction="out" />
     </method>
 
+    <method name="throttle">
+        <arg name="speed" type="t" direction="out"/>
+    </method>
+
     <method name="setThrottle">
         <arg name="speed" type="t" direction="in"/>
     </method>
@@ -28,10 +32,6 @@
         <arg name="headers" type="a{ss}" direction="in"/>
     </method>
 
-    <method name="throttle">
-        <arg name="speed" type="t" direction="out"/>
-    </method>
-
     <method name="setDestinationDir">
         <arg name="path" type="s" direction="in"/>
     </method>
@@ -102,5 +102,11 @@
         <arg name="path" type="s" direction="out"/>
     </signal>
 
+    <property access="read" type="b" name="ShowInIndicator" />
+
+    <property access="read" type="s" name="Title" />
+
+    <property access="read" type="s" name="ClickPackage" />
+
  </interface>
 </node>

=== modified file 'src/common/public/ubuntu/transfers/metadata.cpp'
--- src/common/public/ubuntu/transfers/metadata.cpp	2014-03-26 10:00:28 +0000
+++ src/common/public/ubuntu/transfers/metadata.cpp	2014-09-22 17:35:56 +0000
@@ -26,11 +26,14 @@
 const QString Metadata::COMMAND_FILE_KEY = "$file";
 const QString Metadata::LOCAL_PATH_KEY = "local-path";
 const QString Metadata::OBJECT_PATH_KEY = "objectpath";
+const QString Metadata::TITLE_KEY = "title";
+const QString Metadata::SHOW_IN_INDICATOR_KEY = "indicator-shown";
+const QString Metadata::CLICK_PACKAGE_KEY = "click-package";
 
 QString
 Metadata::command() const {
     return (contains(Metadata::COMMAND_KEY))?
-        value(COMMAND_KEY).toString():"";
+        value(Metadata::COMMAND_KEY).toString():"";
 }
 
 void
@@ -46,7 +49,7 @@
 QString
 Metadata::localPath() const {
     return (contains(Metadata::LOCAL_PATH_KEY))?
-        value(LOCAL_PATH_KEY).toString():"";
+        value(Metadata::LOCAL_PATH_KEY).toString():"";
 }
 
 void
@@ -62,7 +65,7 @@
 QString
 Metadata::objectPath() const {
     return (contains(Metadata::OBJECT_PATH_KEY))?
-        value(OBJECT_PATH_KEY).toString():"";
+        value(Metadata::OBJECT_PATH_KEY).toString():"";
 }
 
 void
@@ -75,6 +78,54 @@
     return contains(Metadata::OBJECT_PATH_KEY);
 }
 
+QString
+Metadata::title() const {
+    return (contains(Metadata::TITLE_KEY))?
+        value(Metadata::TITLE_KEY).toString():"";
+}
+
+void
+Metadata::setTitle(const QString& title) {
+    insert(Metadata::TITLE_KEY, title);
+}
+
+bool
+Metadata::hasTitle() const {
+    return contains(Metadata::TITLE_KEY);
+}
+
+bool
+Metadata::showInIndicator() const {
+    return (contains(Metadata::SHOW_IN_INDICATOR_KEY))?
+        value(Metadata::SHOW_IN_INDICATOR_KEY).toBool():true;
+}
+
+void
+Metadata::setShowInIndicator(bool shown) {
+    insert(Metadata::SHOW_IN_INDICATOR_KEY, shown);
+}
+
+bool
+Metadata::hasShowInIndicator() const {
+    return contains(Metadata::SHOW_IN_INDICATOR_KEY);
+}
+
+QString
+Metadata::clickPackage() const {
+    return (contains(Metadata::CLICK_PACKAGE_KEY))?
+        value(Metadata::CLICK_PACKAGE_KEY).toString():"";
+}
+
+void
+Metadata::setClickPackage(const QString& click) {
+    insert(Metadata::CLICK_PACKAGE_KEY, click);
+}
+
+bool
+Metadata::hasClickPackage() const {
+    return contains(Metadata::CLICK_PACKAGE_KEY);
+}
+
 }  // DownloadManager
 
 }  // Ubuntu

=== modified file 'src/common/public/ubuntu/transfers/metadata.h'
--- src/common/public/ubuntu/transfers/metadata.h	2014-03-26 10:00:28 +0000
+++ src/common/public/ubuntu/transfers/metadata.h	2014-09-22 17:35:56 +0000
@@ -34,6 +34,9 @@
     static const QString COMMAND_FILE_KEY;
     static const QString LOCAL_PATH_KEY;
     static const QString OBJECT_PATH_KEY;
+    static const QString TITLE_KEY;
+    static const QString SHOW_IN_INDICATOR_KEY;
+    static const QString CLICK_PACKAGE_KEY;
 
     // accessors to simplify the use of the metadata
     QString command() const;
@@ -47,6 +50,18 @@
     QString objectPath() const;
     void setObjectPath(const QString& path);
     bool hasObjectPath() const;
+
+    QString title() const;
+    void setTitle(const QString& title);
+    bool hasTitle() const;
+
+    bool showInIndicator() const;
+    void setShowInIndicator(bool shown);
+    bool hasShowInIndicator() const;
+
+    QString clickPackage() const;
+    void setClickPackage(const QString& click);
+    bool hasClickPackage() const;
 };
 
 }  // DownloadManager

=== modified file 'src/downloads/priv/ubuntu/downloads/download.cpp'
--- src/downloads/priv/ubuntu/downloads/download.cpp	2014-07-16 08:41:38 +0000
+++ src/downloads/priv/ubuntu/downloads/download.cpp	2014-09-22 17:35:56 +0000
@@ -17,6 +17,7 @@
  */
 
 #include <QStringList>
+#include "ubuntu/transfers/metadata.h"
 #include "ubuntu/transfers/system/logger.h"
 #include "download.h"
 
@@ -57,6 +58,24 @@
     emit error(errorStr);
 }
 
+QString
+Download::clickPackage() const {
+    return (_metadata.contains(Metadata::CLICK_PACKAGE_KEY))?
+        _metadata.value(Metadata::CLICK_PACKAGE_KEY).toString():"";
+}
+
+bool
+Download::showInIndicator() const {
+    return (_metadata.contains(Metadata::SHOW_IN_INDICATOR_KEY))?
+        _metadata.value(Metadata::SHOW_IN_INDICATOR_KEY).toBool():true;
+}
+
+QString
+Download::title() const {
+    return (_metadata.contains(Metadata::TITLE_KEY))?
+        _metadata.value(Metadata::TITLE_KEY).toString():"";
+}
+
 }  // Daemon
 
 }  // DownloadManager

=== modified file 'src/downloads/priv/ubuntu/downloads/download.h'
--- src/downloads/priv/ubuntu/downloads/download.h	2014-07-16 08:41:38 +0000
+++ src/downloads/priv/ubuntu/downloads/download.h	2014-09-22 17:35:56 +0000
@@ -41,6 +41,9 @@
 
 class Download : public Transfer {
     Q_OBJECT
+    Q_PROPERTY(QString ClickPackage READ clickPackage)
+    Q_PROPERTY(bool ShowInIndicator READ showInIndicator)
+    Q_PROPERTY(QString Title READ title)
 
  public:
     Download(const QString& id,
@@ -95,9 +98,14 @@
 
  protected:
     virtual void emitError(const QString& error);
+    virtual QString clickPackage() const;
+    virtual bool showInIndicator() const;
+    virtual QString title() const;
+
+ protected:
+    QVariantMap _metadata;
 
  private:
-    QVariantMap _metadata;
     QMap<QString, QString> _headers;
     QObject* _adaptor = nullptr;
 };

=== modified file 'src/downloads/priv/ubuntu/downloads/download_adaptor.cpp'
--- src/downloads/priv/ubuntu/downloads/download_adaptor.cpp	2014-06-18 11:10:18 +0000
+++ src/downloads/priv/ubuntu/downloads/download_adaptor.cpp	2014-09-22 17:35:56 +0000
@@ -2,7 +2,7 @@
  * This file was generated by qdbusxml2cpp version 0.8
  * Command line was: qdbusxml2cpp -c DownloadAdaptor -a download_adaptor.h:download_adaptor.cpp com.canonical.applications.download.xml
  *
- * qdbusxml2cpp is Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
  *
  * This is an auto-generated file.
  * Do not edit! All changes made to it will be lost.
@@ -33,6 +33,24 @@
     // destructor
 }
 
+QString DownloadAdaptor::clickPackage() const
+{
+    // get the value of property ClickPackage
+    return qvariant_cast< QString >(parent()->property("ClickPackage"));
+}
+
+bool DownloadAdaptor::showInIndicator() const
+{
+    // get the value of property ShowInIndicator
+    return qvariant_cast< bool >(parent()->property("ShowInIndicator"));
+}
+
+QString DownloadAdaptor::title() const
+{
+    // get the value of property Title
+    return qvariant_cast< QString >(parent()->property("Title"));
+}
+
 void DownloadAdaptor::allowGSMDownload(bool allowed)
 {
     // handle method call com.canonical.applications.Download.allowGSMDownload

=== modified file 'src/downloads/priv/ubuntu/downloads/download_adaptor.h'
--- src/downloads/priv/ubuntu/downloads/download_adaptor.h	2014-06-18 11:10:18 +0000
+++ src/downloads/priv/ubuntu/downloads/download_adaptor.h	2014-09-22 17:35:56 +0000
@@ -2,7 +2,7 @@
  * This file was generated by qdbusxml2cpp version 0.8
  * Command line was: qdbusxml2cpp -c DownloadAdaptor -a download_adaptor.h:download_adaptor.cpp com.canonical.applications.download.xml
  *
- * qdbusxml2cpp is Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
  *
  * This is an auto-generated file.
  * This file may have been hand-edited. Look for HAND-EDIT comments
@@ -44,6 +44,9 @@
 "      <annotation value=\"QVariantMap\" name=\"org.qtproject.QtDBus.QtTypeName.Out0\"/>\n"
 "      <arg direction=\"out\" type=\"a{sv}\" name=\"data\"/>\n"
 "    </method>\n"
+"    <method name=\"throttle\">\n"
+"      <arg direction=\"out\" type=\"t\" name=\"speed\"/>\n"
+"    </method>\n"
 "    <method name=\"setThrottle\">\n"
 "      <arg direction=\"in\" type=\"t\" name=\"speed\"/>\n"
 "    </method>\n"
@@ -55,9 +58,6 @@
 "      <annotation value=\"StringMap\" name=\"org.qtproject.QtDBus.QtTypeName.In0\"/>\n"
 "      <arg direction=\"in\" type=\"a{ss}\" name=\"headers\"/>\n"
 "    </method>\n"
-"    <method name=\"throttle\">\n"
-"      <arg direction=\"out\" type=\"t\" name=\"speed\"/>\n"
-"    </method>\n"
 "    <method name=\"setDestinationDir\">\n"
 "      <arg direction=\"in\" type=\"s\" name=\"path\"/>\n"
 "    </method>\n"
@@ -112,6 +112,9 @@
 "    <signal name=\"processing\">\n"
 "      <arg direction=\"out\" type=\"s\" name=\"path\"/>\n"
 "    </signal>\n"
+"    <property access=\"read\" type=\"b\" name=\"ShowInIndicator\"/>\n"
+"    <property access=\"read\" type=\"s\" name=\"Title\"/>\n"
+"    <property access=\"read\" type=\"s\" name=\"ClickPackage\"/>\n"
 "  </interface>\n"
         "")
 public:
@@ -119,6 +122,15 @@
     virtual ~DownloadAdaptor();
 
 public: // PROPERTIES
+    Q_PROPERTY(QString ClickPackage READ clickPackage)
+    QString clickPackage() const;
+
+    Q_PROPERTY(bool ShowInIndicator READ showInIndicator)
+    bool showInIndicator() const;
+
+    Q_PROPERTY(QString Title READ title)
+    QString title() const;
+
 public Q_SLOTS: // METHODS
     void allowGSMDownload(bool allowed);
     void cancel();

=== modified file 'src/downloads/priv/ubuntu/downloads/file_download.cpp'
--- src/downloads/priv/ubuntu/downloads/file_download.cpp	2014-08-05 14:38:52 +0000
+++ src/downloads/priv/ubuntu/downloads/file_download.cpp	2014-09-22 17:35:56 +0000
@@ -532,7 +532,7 @@
     // file path that will be used by the download, do not do it if the app is
     // unconfined
     if ((_reply->hasRawHeader(CONTENT_DISPOSITION) && (
-            isConfined() || !metadata().contains(Metadata::LOCAL_PATH_KEY)))) {
+            isConfined() || !_metadata.contains(Metadata::LOCAL_PATH_KEY)))) {
         QString contentDisposition = _reply->rawHeader(CONTENT_DISPOSITION);
         DOWN_LOG(INFO) << "Content-Disposition header" << contentDisposition;
 
@@ -579,7 +579,7 @@
     // means we are done here else we execute the command AND raise the
     // finish signals once the command was done (or an error occurred in
     // the command execution.
-    if (metadata().contains(Metadata::COMMAND_KEY)) {
+    if (_metadata.contains(Metadata::COMMAND_KEY)) {
         // just emit processing if we DO NOT have a hash because else we
         // already emitted it.
         if (_hash.isEmpty()) {
@@ -587,7 +587,7 @@
         }
         // toStringList will return an empty list if it cannot be converted
         QStringList commandData =
-            metadata()[Metadata::COMMAND_KEY].toStringList();
+            _metadata[Metadata::COMMAND_KEY].toStringList();
         if (commandData.count() == 0) {
             DOWN_LOG(ERROR) << "COMMAND DATA MISSING";
             emitError(COMMAND_ERROR);
@@ -746,6 +746,11 @@
     _connected = networkInfo->isOnline();
     _downloading = false;
 
+    // applications that are confined are not allowed to set the click metadata.
+    if (isConfined() && _metadata.contains(Metadata::CLICK_PACKAGE_KEY)) {
+        _metadata.remove(Metadata::CLICK_PACKAGE_KEY);
+    }
+
     // connect to the network changed signals
     CHECK(connect(networkInfo, &SystemNetworkInfo::onlineStateChanged,
         this, &FileDownload::onOnlineStateChanged))
@@ -815,10 +820,8 @@
         _basename = UuidUtils::getDBusString(uuidFactory->createUuid());
     }
 
-    auto metadataMap = metadata();
-
-    if (!isConfined() && metadataMap.contains(Metadata::LOCAL_PATH_KEY)) {
-        _filePath = metadataMap[Metadata::LOCAL_PATH_KEY].toString();
+    if (!isConfined() && _metadata.contains(Metadata::LOCAL_PATH_KEY)) {
+        _filePath = _metadata[Metadata::LOCAL_PATH_KEY].toString();
         _tempFilePath = _fileNameMutex->lockFileName(
             _filePath + TEMP_EXTENSION);
 
@@ -862,7 +865,7 @@
 
 void
 FileDownload::unlockFilePath() {
-    if (!isConfined() && metadata().contains(Metadata::LOCAL_PATH_KEY)) {
+    if (!isConfined() && _metadata.contains(Metadata::LOCAL_PATH_KEY)) {
         _fileNameMutex->unlockFileName(_tempFilePath);
     } else {
         _fileNameMutex->unlockFileName(_filePath);

=== modified file 'src/downloads/priv/ubuntu/downloads/mms_file_download.cpp'
--- src/downloads/priv/ubuntu/downloads/mms_file_download.cpp	2014-04-15 12:37:16 +0000
+++ src/downloads/priv/ubuntu/downloads/mms_file_download.cpp	2014-09-22 17:35:56 +0000
@@ -39,6 +39,8 @@
                    metadata, headers, parent){
     _requestFactory = new ApnRequestFactory(proxy);
     setAddToQueue(false);
+    // mms downloads should by default not be shown in the indicator.
+    _metadata[Ubuntu::Transfers::Metadata::SHOW_IN_INDICATOR_KEY] = false;
 }
 
 MmsFileDownload::~MmsFileDownload() {

=== modified file 'tests/downloads/client/test_client_manager.cpp'
--- tests/downloads/client/test_client_manager.cpp	2014-07-03 09:01:01 +0000
+++ tests/downloads/client/test_client_manager.cpp	2014-09-22 17:35:56 +0000
@@ -318,7 +318,7 @@
     }
     // ensure that all of the are created
     QVERIFY(managerSpy.ensureSignalEmitted());
-    QTRY_COMPARE(count + metadataCount, managerSpy.count());
+    QTRY_COMPARE_WITH_TIMEOUT(count + metadataCount, managerSpy.count(), 10000);
     _man->getAllDownloadsWithMetadata(key, value, cb, cb);
 
     QVERIFY(listSpy.ensureSignalEmitted());

=== modified file 'tests/downloads/daemon/test_download.cpp'
--- tests/downloads/daemon/test_download.cpp	2014-07-30 09:19:10 +0000
+++ tests/downloads/daemon/test_download.cpp	2014-09-22 17:35:56 +0000
@@ -20,6 +20,7 @@
 #include <QNetworkRequest>
 #include <QSslError>
 #include <ubuntu/download_manager/metatypes.h>
+#include <ubuntu/transfers/metadata.h>
 #include <ubuntu/transfers/system/hash_algorithm.h>
 #include <ubuntu/transfers/system/uuid_utils.h>
 #include <network_reply.h>
@@ -176,6 +177,34 @@
 }
 
 void
+TestDownload::testConfinedNoClickMetadata() {
+    QVariantMap metadata;
+    metadata[Ubuntu::Transfers::Metadata::CLICK_PACKAGE_KEY] = "click";
+
+    EXPECT_CALL(*_networkInfo, isOnline())
+        .WillRepeatedly(Return(true));
+
+    QScopedPointer<FileDownload> download(new FileDownload(_id, _appId, _path,
+        true, _rootPath, _url, metadata, _headers));
+    auto downMetadata = download->metadata();
+    QVERIFY(!downMetadata.contains(Ubuntu::Transfers::Metadata::CLICK_PACKAGE_KEY));
+}
+
+void
+TestDownload::testUnconfinedWithClickMetadata() {
+    QVariantMap metadata;
+    metadata[Ubuntu::Transfers::Metadata::CLICK_PACKAGE_KEY] = "click";
+
+    EXPECT_CALL(*_networkInfo, isOnline())
+        .WillRepeatedly(Return(true));
+
+    QScopedPointer<FileDownload> download(new FileDownload(_id, _appId, _path,
+        false, _rootPath, _url, metadata, _headers));
+    auto downMetadata = download->metadata();
+    QVERIFY(downMetadata.contains(Ubuntu::Transfers::Metadata::CLICK_PACKAGE_KEY));
+}
+
+void
 TestDownload::testPath_data() {
     // create a number of rows with a diff path to ensure that
     // the accessor does return the correct one

=== modified file 'tests/downloads/daemon/test_download.h'
--- tests/downloads/daemon/test_download.h	2014-07-16 11:46:55 +0000
+++ tests/downloads/daemon/test_download.h	2014-09-22 17:35:56 +0000
@@ -54,6 +54,8 @@
     // constructors tests
     void testNoHashConstructor();
     void testHashConstructor();
+    void testConfinedNoClickMetadata();
+    void testUnconfinedWithClickMetadata();
 
     // data function to be used for the accessor tests
     void testNoHashConstructor_data();

=== modified file 'tests/downloads/daemon/test_metadata.cpp'
--- tests/downloads/daemon/test_metadata.cpp	2014-07-03 09:01:01 +0000
+++ tests/downloads/daemon/test_metadata.cpp	2014-09-22 17:35:56 +0000
@@ -120,7 +120,8 @@
     QVERIFY(!metadata.hasLocalPath());
 }
 
-void TestMetadata::testObjectPath_data() {
+void
+TestMetadata::testObjectPath_data() {
     QTest::addColumn<QString>("objectPath");
 
     QTest::newRow("/com/canonica/si") << "/com/canonical/si";
@@ -128,7 +129,8 @@
     QTest::newRow("/com/data/download") << "/com/data/download";
 }
 
-void TestMetadata::testObjectPath() {
+void
+TestMetadata::testObjectPath() {
     QFETCH(QString, objectPath);
 
     Metadata metadata;
@@ -136,7 +138,8 @@
     QCOMPARE(objectPath, metadata.objectPath());
 }
 
-void TestMetadata::testSetObjectPath_data() {
+void
+TestMetadata::testSetObjectPath_data() {
     QTest::addColumn<QString>("objectPath");
 
     QTest::newRow("/com/canonica/si") << "/com/canonical/si";
@@ -144,7 +147,8 @@
     QTest::newRow("/com/data/download") << "/com/data/download";
 }
 
-void TestMetadata::testSetObjectPath() {
+void
+TestMetadata::testSetObjectPath() {
     QFETCH(QString, objectPath);
 
     Metadata metadata;
@@ -152,17 +156,166 @@
     QCOMPARE(metadata[Metadata::OBJECT_PATH_KEY].toString(), objectPath);
 }
 
-void TestMetadata::testHasObjectPathTrue() {
+void
+TestMetadata::testHasObjectPathTrue() {
     Metadata metadata;
     metadata.setObjectPath("command");
 
     QVERIFY(metadata.hasObjectPath());
 }
 
-void TestMetadata::testHasObjectPathFalse() {
+void
+TestMetadata::testHasObjectPathFalse() {
     Metadata metadata;
     QVERIFY(!metadata.hasObjectPath());
 }
 
+void
+TestMetadata::testTitle_data() {
+    QTest::addColumn<QString>("title");
+
+    QTest::newRow("Profile image") << "Profile image";
+    QTest::newRow("Americana.mp3") << "Americana.mp3";
+    QTest::newRow("Test title") << "Test title";
+}
+
+void
+TestMetadata::testTitle() {
+    QFETCH(QString, title);
+
+    Metadata metadata;
+    metadata[Metadata::TITLE_KEY] = title;
+    QCOMPARE(title, metadata.title());
+}
+
+void
+TestMetadata::testSetTitle_data() {
+    QTest::addColumn<QString>("title");
+
+    QTest::newRow("Profile image") << "Profile image";
+    QTest::newRow("Americana.mp3") << "Americana.mp3";
+    QTest::newRow("Test title") << "Test title";
+}
+
+void
+TestMetadata::testSetTitle() {
+    QFETCH(QString, title);
+
+    Metadata metadata;
+    metadata.setTitle(title);
+    QCOMPARE(metadata[Metadata::TITLE_KEY].toString(), title);
+}
+
+void
+TestMetadata::testHasTitleTrue() {
+    Metadata metadata;
+    metadata.setTitle("tlte");
+
+    QVERIFY(metadata.hasTitle());
+}
+
+void
+TestMetadata::testHasTitleFalse() {
+    Metadata metadata;
+    QVERIFY(!metadata.hasTitle());
+}
+
+void
+TestMetadata::testIndicator_data() {
+    QTest::addColumn<bool>("show");
+
+    QTest::newRow("True") << true;
+    QTest::newRow("False") << false;
+}
+
+void
+TestMetadata::testIndicator() {
+    QFETCH(bool, show);
+
+    Metadata metadata;
+    metadata[Metadata::SHOW_IN_INDICATOR_KEY] = show;
+    QCOMPARE(show, metadata.showInIndicator());
+}
+
+void
+TestMetadata::testSetIndicator_data() {
+    QTest::addColumn<bool>("show");
+
+    QTest::newRow("True") << true;
+    QTest::newRow("False") << false;
+}
+
+void
+TestMetadata::testSetIndicator() {
+    QFETCH(bool, show);
+
+    Metadata metadata;
+    metadata.setShowInIndicator(show);
+    QCOMPARE(metadata[Metadata::SHOW_IN_INDICATOR_KEY].toBool(), show);
+}
+
+void
+TestMetadata::testHasIndicatorTrue() {
+    Metadata metadata;
+    metadata.setShowInIndicator(true);
+
+    QVERIFY(metadata.hasShowInIndicator());
+}
+
+void
+TestMetadata::testHasIndicatorFasle() {
+    Metadata metadata;
+    QVERIFY(!metadata.hasShowInIndicator());
+}
+
+void
+TestMetadata::testClick_data() {
+    QTest::addColumn<QString>("click");
+
+    QTest::newRow("My click") << "My click";
+    QTest::newRow("Maps") << "Maps";
+    QTest::newRow("Test") << "Test";
+}
+
+void
+TestMetadata::testClick() {
+    QFETCH(QString, click);
+
+    Metadata metadata;
+    metadata[Metadata::CLICK_PACKAGE_KEY] = click;
+    QCOMPARE(click, metadata.clickPackage());
+}
+
+void
+TestMetadata::testSetClick_data() {
+    QTest::addColumn<QString>("click");
+
+    QTest::newRow("My click") << "My click";
+    QTest::newRow("Maps") << "Maps";
+    QTest::newRow("Test") << "Test";
+}
+
+void
+TestMetadata::testSetClick() {
+    QFETCH(QString, click);
+
+    Metadata metadata;
+    metadata.setClickPackage(click);
+    QCOMPARE(metadata[Metadata::CLICK_PACKAGE_KEY].toString(), click);
+}
+
+void
+TestMetadata::testHasClickTrue() {
+    Metadata metadata;
+    metadata.setClickPackage("test");
+    QVERIFY(metadata.hasClickPackage());
+}
+
+void
+TestMetadata::testHasClickFalse() {
+    Metadata metadata;
+    QVERIFY(!metadata.hasClickPackage());
+}
+
 QTEST_MAIN(TestMetadata)
 #include "moc_test_metadata.cpp"

=== modified file 'tests/downloads/daemon/test_metadata.h'
--- tests/downloads/daemon/test_metadata.h	2014-07-03 09:01:01 +0000
+++ tests/downloads/daemon/test_metadata.h	2014-09-22 17:35:56 +0000
@@ -49,6 +49,24 @@
     void testSetObjectPath();
     void testHasObjectPathTrue();
     void testHasObjectPathFalse();
+    void testTitle_data();
+    void testTitle();
+    void testSetTitle_data();
+    void testSetTitle();
+    void testHasTitleTrue();
+    void testHasTitleFalse();
+    void testIndicator_data();
+    void testIndicator();
+    void testSetIndicator_data();
+    void testSetIndicator();
+    void testHasIndicatorTrue();
+    void testHasIndicatorFasle();
+    void testClick_data();
+    void testClick();
+    void testSetClick_data();
+    void testSetClick();
+    void testHasClickTrue();
+    void testHasClickFalse();
 };
 
 #endif // TEST_METADATA_H

=== modified file 'tests/downloads/daemon/test_mms_download.cpp'
--- tests/downloads/daemon/test_mms_download.cpp	2014-07-03 09:01:01 +0000
+++ tests/downloads/daemon/test_mms_download.cpp	2014-09-22 17:35:56 +0000
@@ -69,4 +69,29 @@
     QVERIFY(!down->addToQueue());
 }
 
+void
+TestMmsDownload::testShowInIndicator() {
+    QString id = "id of the download";
+    QString appId = "MY APP";
+    QString path = "my-file";
+    bool isConfined = false;
+    QString rootPath = "/root/path/to/use";
+    QUrl url("http://example.com");
+    QVariantMap metadata;
+    metadata[Ubuntu::Transfers::Metadata::SHOW_IN_INDICATOR_KEY] = true;
+    QMap<QString, QString> headers;
+    QString hostname = "http://example.com";
+    int port = 80;
+    QString username = "username";
+    QString password = "password";
+    QNetworkProxy proxy(QNetworkProxy::HttpProxy, hostname,
+        port, username, password);
+
+    QScopedPointer<PublicMmsFileDownload> down(
+        new PublicMmsFileDownload(id, appId, path, isConfined, rootPath,
+            url, metadata, headers, proxy));
+    auto downMetadata = down->metadata();
+    QVERIFY(!downMetadata[Ubuntu::Transfers::Metadata::SHOW_IN_INDICATOR_KEY].toBool());
+}
+
 QTEST_MAIN(TestMmsDownload)

=== modified file 'tests/downloads/daemon/test_mms_download.h'
--- tests/downloads/daemon/test_mms_download.h	2014-07-03 09:01:01 +0000
+++ tests/downloads/daemon/test_mms_download.h	2014-09-22 17:35:56 +0000
@@ -61,6 +61,7 @@
 
     void testNetworkAccessManager();
     void testAddToQueue();
+    void testShowInIndicator();
 
 };
 

