10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Copyright (C) 2009 Jakub Wieczorek <faw217@gmail.com>
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    This library is free software; you can redistribute it and/or
50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    modify it under the terms of the GNU Library General Public
60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    License as published by the Free Software Foundation; either
70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    version 2 of the License, or (at your option) any later version.
80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    This library is distributed in the hope that it will be useful,
100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    but WITHOUT ANY WARRANTY; without even the implied warranty of
110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Library General Public License for more details.
130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    You should have received a copy of the GNU Library General Public License
150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    along with this library; see the file COPYING.LIB.  If not, write to
160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Boston, MA 02110-1301, USA.
180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <QtTest/QtTest>
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qdir.h>
230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebframe.h>
240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebpage.h>
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebplugindatabase.h>
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebsettings.h>
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qvariant.h>
280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass tst_QWebPluginDatabase : public QObject
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Q_OBJECT
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate slots:
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void installedPlugins();
350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void searchPaths();
360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void null_data();
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void null();
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void pluginForMimeType();
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void enabled();
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void operatorequal_data();
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void operatorequal();
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void preferredPlugin();
43231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    void operatorassign_data();
44231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    void operatorassign();
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtypedef QWebPluginInfo::MimeType MimeType;
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebPluginDatabase::installedPlugins()
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebPage page;
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    page.settings()->setAttribute(QWebSettings::PluginsEnabled, true);
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebFrame* frame = page.mainFrame();
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVariantMap jsPluginsMap = frame->evaluateJavaScript("window.navigator.plugins").toMap();
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QList<QWebPluginInfo> plugins = QWebSettings::pluginDatabase()->plugins();
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(plugins, QWebSettings::pluginDatabase()->plugins());
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    int length = jsPluginsMap["length"].toInt();
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(length, plugins.count());
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    for (int i = 0; i < length; ++i) {
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QWebPluginInfo plugin = plugins.at(i);
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVariantMap jsPlugin = frame->evaluateJavaScript(QString("window.navigator.plugins[%1]").arg(i)).toMap();
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QString name = jsPlugin["name"].toString();
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QString description = jsPlugin["description"].toString();
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QString fileName = jsPlugin["filename"].toString();
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QCOMPARE(plugin.name(), name);
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QCOMPARE(plugin.description(), description);
720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QCOMPARE(QFileInfo(plugin.path()).fileName(), fileName);
730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QList<MimeType> mimeTypes;
750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        int mimeTypesCount = jsPlugin["length"].toInt();
760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        for (int j = 0; j < mimeTypesCount; ++j) {
780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVariantMap jsMimeType = frame->evaluateJavaScript(QString("window.navigator.plugins[%1][%2]").arg(i).arg(j)).toMap();
790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            MimeType mimeType;
810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            mimeType.name = jsMimeType["type"].toString();
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            mimeType.description = jsMimeType["description"].toString();
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            mimeType.fileExtensions = jsMimeType["suffixes"].toString().split(',', QString::SkipEmptyParts);
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            mimeTypes.append(mimeType);
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(plugin.supportsMimeType(mimeType.name));
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        }
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QCOMPARE(plugin.mimeTypes(), mimeTypes);
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVERIFY(!plugin.isNull());
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVERIFY(plugin.isEnabled());
930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebPluginDatabase::searchPaths()
970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebPluginDatabase* database = QWebSettings::pluginDatabase();
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QList<QWebPluginInfo> plugins = database->plugins();
1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QStringList directories = database->searchPaths();
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(QWebPluginDatabase::defaultSearchPaths(), directories);
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    database->setSearchPaths(directories);
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(QWebPluginDatabase::defaultSearchPaths(), directories);
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->searchPaths(), directories);
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->plugins(), plugins);
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    database->refresh();
1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->plugins(), plugins);
1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    database->setSearchPaths(QStringList());
1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(QWebPluginDatabase::defaultSearchPaths(), directories);
1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->searchPaths(), QStringList());
1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->plugins().count(), 0);
1140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    database->setSearchPaths(directories);
1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->searchPaths(), directories);
1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    database->addSearchPath(QDir::tempPath());
1180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->searchPaths().count(), directories.count() + 1);
1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(database->searchPaths().contains(QDir::tempPath()));
1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    directories.append(QDir::tempPath());
1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->searchPaths(), directories);
1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // As an empty set of search paths has been set, the database has been rebuilt
1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // from scratch after bringing the old path set back.
1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Because the QWebPlugins no longer point to the same PluginPackages,
1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // the list is also no longer equal to the older one, even though it contains
1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // the same information.
1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->plugins().count(), plugins.count());
1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    plugins = database->plugins();
1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->plugins(), plugins);
1310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    for (int i = (directories.count() - 1); i >= 0; --i) {
1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QDir directory(directories.at(i));
1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if (!directory.exists() || !directory.count())
1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            directories.removeAt(i);
1360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    database->setSearchPaths(directories);
1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->plugins(), plugins);
1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    database->refresh();
1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->plugins(), plugins);
1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    database->setSearchPaths(QWebPluginDatabase::defaultSearchPaths());
1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    directories = QWebPluginDatabase::defaultSearchPaths();
1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(QWebPluginDatabase::defaultSearchPaths(), directories);
1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->searchPaths(), directories);
1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(database->plugins(), plugins);
1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQ_DECLARE_METATYPE(QWebPluginInfo)
1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebPluginDatabase::null_data()
1520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::addColumn<QWebPluginInfo>("plugin");
1540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::addColumn<bool>("null");
1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::newRow("null") << QWebPluginInfo() << true;
1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::newRow("foo") << QWebSettings::pluginDatabase()->pluginForMimeType("foobarbaz") << true;
1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QList<QWebPluginInfo> plugins = QWebSettings::pluginDatabase()->plugins();
1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    for (int i = 0; i < plugins.count(); ++i)
1610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QTest::newRow(QString::number(i).toUtf8().constData()) << plugins.at(i) << false;
1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebPluginDatabase::null()
1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QFETCH(QWebPluginInfo, plugin);
1670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QFETCH(bool, null);
1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(plugin.isNull(), null);
1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebPluginDatabase::pluginForMimeType()
1730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QMultiMap<QString, QWebPluginInfo> pluginsMap;
1750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebPluginDatabase* database = QWebSettings::pluginDatabase();
1760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QList<QWebPluginInfo> plugins = database->plugins();
1770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    for (int i = 0; i < plugins.count(); ++i) {
1790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QWebPluginInfo plugin = plugins.at(i);
1800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QList<MimeType> mimeTypes = plugin.mimeTypes();
1820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        for (int j = 0; j < mimeTypes.count(); ++j) {
1830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QString mimeType = mimeTypes.at(j).name;
1840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            pluginsMap.insert(mimeType, plugin);
1850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(plugin.supportsMimeType(mimeType));
1860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        }
1870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
1880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    for (int i = 0; i < plugins.count(); ++i) {
1900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QWebPluginInfo plugin = plugins.at(i);
1910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QList<MimeType> mimeTypes = plugin.mimeTypes();
1930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        for (int j = 0; j < mimeTypes.count(); ++j) {
1940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QString mimeType = mimeTypes.at(j).name;
1950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(pluginsMap.count(mimeType) > 0);
1970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            if (pluginsMap.count(mimeType) > 1)
1980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                continue;
1990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QWebPluginInfo pluginForMimeType = database->pluginForMimeType(mimeType);
2010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QCOMPARE(pluginForMimeType, plugin);
2020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            database->setSearchPaths(database->searchPaths());
2030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QCOMPARE(pluginForMimeType, plugin);
2040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QCOMPARE(pluginForMimeType, database->pluginForMimeType(mimeType.toUpper()));
2050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QCOMPARE(pluginForMimeType, database->pluginForMimeType(mimeType.toLower()));
2060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(plugin.supportsMimeType(mimeType));
2070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(!pluginForMimeType.isNull());
2080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(!plugin.isNull());
2090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        }
2100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
2110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebPluginDatabase::enabled()
2140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QMultiMap<QString, QWebPluginInfo> pluginsMap;
2160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebPluginDatabase* database = QWebSettings::pluginDatabase();
2170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QList<QWebPluginInfo> plugins = database->plugins();
2180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    for (int i = 0; i < plugins.count(); ++i) {
2200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QWebPluginInfo plugin = plugins.at(i);
2210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QList<MimeType> mimeTypes = plugin.mimeTypes();
2230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        for (int j = 0; j < mimeTypes.count(); ++j) {
2240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QString mimeType = mimeTypes.at(j).name;
2250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            pluginsMap.insert(mimeType, plugin);
2260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(plugin.supportsMimeType(mimeType));
2270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        }
2280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
2290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QMultiMap<QString, QWebPluginInfo>::iterator it = pluginsMap.begin();
2310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    while (it != pluginsMap.end()) {
2320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QString mimeType = it.key();
2330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QWebPluginInfo plugin = it.value();
2340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QWebPluginInfo pluginForMimeType = database->pluginForMimeType(mimeType);
2350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVERIFY(pluginsMap.count(mimeType) > 0);
2370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if (pluginsMap.count(mimeType) == 1) {
2390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QCOMPARE(plugin, pluginForMimeType);
2400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(plugin.isEnabled());
2420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(pluginForMimeType.isEnabled());
2430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            plugin.setEnabled(false);
2440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(!plugin.isEnabled());
2450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(!pluginForMimeType.isEnabled());
2460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        } else {
2470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(plugin.isEnabled());
2480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(pluginForMimeType.isEnabled());
2490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            plugin.setEnabled(false);
2500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(!plugin.isEnabled());
2510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        }
2520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVERIFY(!plugin.isNull());
2540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVERIFY(!pluginForMimeType.isNull());
2550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QWebPluginInfo pluginForMimeType2 = database->pluginForMimeType(mimeType);
2570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if (pluginsMap.count(mimeType) == 1) {
2580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(pluginForMimeType2 != plugin);
2590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(pluginForMimeType2.isNull());
2600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        } else {
2610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(pluginForMimeType2 != plugin);
2620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(!pluginForMimeType2.isNull());
2630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        }
2640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        plugin.setEnabled(true);
2660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        ++it;
2680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
2690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebPluginDatabase::operatorequal_data()
2720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::addColumn<QWebPluginInfo>("first");
2740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::addColumn<QWebPluginInfo>("second");
2750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::addColumn<bool>("equal");
2760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebPluginDatabase* database = QWebSettings::pluginDatabase();
2780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::newRow("null") << QWebPluginInfo() << QWebPluginInfo() << true;
2790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::newRow("application/x-shockwave-flash") << database->pluginForMimeType("application/x-shockwave-flash")
2800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                                   << database->pluginForMimeType("application/x-shockwave-flash") << true;
2810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::newRow("foo/bar-baz") << database->pluginForMimeType("foo/bar-baz")
2820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                 << database->pluginForMimeType("foo/bar-baz") << true;
2830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QList<QWebPluginInfo> plugins = database->plugins();
2850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    for (int i = 0; i < (plugins.count() - 1); ++i) {
2860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QWebPluginInfo first = plugins.at(i);
2870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QWebPluginInfo second = plugins.at(i + 1);
2880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QTest::newRow(QString("%1==%2").arg(first.name(), second.name()).toUtf8().constData())
2900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                    << first << second << false;
2910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
2920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebPluginDatabase::operatorequal()
2950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QFETCH(QWebPluginInfo, first);
2970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QFETCH(QWebPluginInfo, second);
2980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QFETCH(bool, equal);
2990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(first == second, equal);
3010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebPluginDatabase::preferredPlugin()
3040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QMultiMap<QString, QWebPluginInfo> pluginsMap;
3060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebPluginDatabase* database = QWebSettings::pluginDatabase();
3070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QList<QWebPluginInfo> plugins = database->plugins();
3080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    for (int i = 0; i < plugins.count(); ++i) {
3100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QWebPluginInfo plugin = plugins.at(i);
3110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QList<MimeType> mimeTypes = plugin.mimeTypes();
3130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        for (int j = 0; j < mimeTypes.count(); ++j) {
3140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QString mimeType = mimeTypes.at(j).name;
3150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            pluginsMap.insert(mimeType, plugin);
3160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        }
3170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
3180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QMultiMap<QString, QWebPluginInfo>::iterator it = pluginsMap.begin();
3200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    while (it != pluginsMap.end()) {
3210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QString mimeType = it.key();
3220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if (pluginsMap.count(mimeType) > 1) {
3240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QList<QWebPluginInfo> pluginsForMimeType = pluginsMap.values(mimeType);
3250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QWebPluginInfo plugin = database->pluginForMimeType(mimeType);
3260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QVERIFY(plugin.supportsMimeType(mimeType));
3270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            pluginsForMimeType.removeAll(plugin);
3290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            for (int i = 0; i < pluginsForMimeType.count(); ++i) {
3300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                QWebPluginInfo anotherPlugin = pluginsForMimeType.at(i);
3310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                QVERIFY(plugin.supportsMimeType(mimeType));
3320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                QVERIFY(plugin != anotherPlugin);
3330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                QCOMPARE(database->pluginForMimeType(mimeType), plugin);
3350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                database->setPreferredPluginForMimeType(mimeType, anotherPlugin);
3360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                QCOMPARE(database->pluginForMimeType(mimeType), anotherPlugin);
3370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                anotherPlugin.setEnabled(false);
3390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                QCOMPARE(database->pluginForMimeType(mimeType), plugin);
3400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                anotherPlugin.setEnabled(true);
3420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                QCOMPARE(database->pluginForMimeType(mimeType), anotherPlugin);
3430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                database->setSearchPaths(database->searchPaths());
3440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                QCOMPARE(database->pluginForMimeType(mimeType), anotherPlugin);
3450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                database->setPreferredPluginForMimeType(mimeType, QWebPluginInfo());
3470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                QCOMPARE(database->pluginForMimeType(mimeType), plugin);
3480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            }
3490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        } else {
3500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QWebPluginInfo plugin = database->pluginForMimeType(mimeType);
3510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QCOMPARE(pluginsMap.value(mimeType), plugin);
3520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            database->setPreferredPluginForMimeType(mimeType, plugin);
3540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QCOMPARE(database->pluginForMimeType(mimeType), plugin);
3550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            plugin.setEnabled(false);
3570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QCOMPARE(database->pluginForMimeType(mimeType), QWebPluginInfo());
3580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            plugin.setEnabled(true);
3590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            database->setPreferredPluginForMimeType(mimeType, QWebPluginInfo());
3610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            QCOMPARE(database->pluginForMimeType(mimeType), plugin);
3620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        }
3630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        ++it;
3650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
3660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (pluginsMap.keys().count() >= 2) {
3680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QStringList mimeTypes = pluginsMap.uniqueKeys();
3690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QString mimeType1 = mimeTypes.at(0);
3710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QString mimeType2 = mimeTypes.at(1);
3720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QWebPluginInfo plugin1 = database->pluginForMimeType(mimeType1);
3730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QWebPluginInfo plugin2 = database->pluginForMimeType(mimeType2);
3740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        int i = 2;
3760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        while (plugin2.supportsMimeType(mimeType1)
3770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch               && !mimeType2.isEmpty()
3780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch               && i < mimeTypes.count()) {
3790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            mimeType2 = mimeTypes.at(i);
3800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            plugin2 = database->pluginForMimeType(mimeType2);
3810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            ++i;
3820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        }
3830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        plugin1 = database->pluginForMimeType(mimeType1);
3850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVERIFY(plugin1.supportsMimeType(mimeType1));
3860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVERIFY(!plugin1.isNull());
3870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        plugin2 = database->pluginForMimeType(mimeType2);
3880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVERIFY(plugin2.supportsMimeType(mimeType2));
3890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVERIFY(!plugin2.isNull());
3900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        database->setPreferredPluginForMimeType(mimeType2, plugin1);
3920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVERIFY(!plugin1.supportsMimeType(mimeType2));
3930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QCOMPARE(database->pluginForMimeType(mimeType2), plugin2);
3940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        database->setPreferredPluginForMimeType(mimeType1, plugin1);
3960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QVERIFY(!plugin2.supportsMimeType(mimeType1));
3970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QCOMPARE(database->pluginForMimeType(mimeType2), plugin2);
3980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
3990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
401231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid tst_QWebPluginDatabase::operatorassign_data()
402231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
403231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QTest::addColumn<QWebPluginInfo>("first");
404231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QTest::addColumn<QWebPluginInfo>("second");
405231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
406231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QWebPluginDatabase* database = QWebSettings::pluginDatabase();
407231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QTest::newRow("null") << QWebPluginInfo() << QWebPluginInfo();
408231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
409231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QList<QWebPluginInfo> plugins = database->plugins();
410231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    for (int i = 0; i < (plugins.count() - 1); ++i) {
411231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        QWebPluginInfo first = plugins.at(i);
412231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        QWebPluginInfo second = plugins.at(i + 1);
413231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
414231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        QTest::newRow(QString("%1=%2").arg(first.name(), second.name()).toUtf8().constData()) << first << second;
415231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
416231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
417231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
418231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid tst_QWebPluginDatabase::operatorassign()
419231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
420231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QFETCH(QWebPluginInfo, first);
421231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QFETCH(QWebPluginInfo, second);
422231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
423231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QWebPluginInfo info;
424231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(info.mimeTypes(), QList<MimeType>());
425231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(info = first, first);
426231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(info, first);
427231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(info.mimeTypes(), first.mimeTypes());
428231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(info = second, second);
429231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(info, second);
430231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(info.mimeTypes(), second.mimeTypes());
431231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(info = QWebPluginInfo(), QWebPluginInfo());
432231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(info.mimeTypes(), QList<MimeType>());
433231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
434231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
4350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQTEST_MAIN(tst_QWebPluginDatabase)
4360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "tst_qwebplugindatabase.moc"
438