18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This library is free software; you can redistribute it and/or
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    modify it under the terms of the GNU Library General Public
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    License as published by the Free Software Foundation; either
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    version 2 of the License, or (at your option) any later version.
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This library is distributed in the hope that it will be useful,
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    but WITHOUT ANY WARRANTY; without even the implied warranty of
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Library General Public License for more details.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    You should have received a copy of the GNU Library General Public License
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    along with this library; see the file COPYING.LIB.  If not, write to
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Boston, MA 02110-1301, USA.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef QWEBPLUGINFACTORY_H
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define QWEBPLUGINFACTORY_H
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "qwebkitglobal.h"
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QtCore/qobject.h>
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QtCore/qstringlist.h>
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQT_BEGIN_NAMESPACE
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QUrl;
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QString;
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQT_END_NAMESPACE
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QWebPluginFactoryPrivate;
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass QWEBKIT_EXPORT QWebPluginFactory : public QObject {
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Q_OBJECT
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    struct QWEBKIT_EXPORT MimeType {
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QString name;
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QString description;
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QStringList fileExtensions;
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        bool operator==(const MimeType& other) const;
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        inline bool operator!=(const MimeType& other) const { return !operator==(other); }
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    struct Plugin {
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QString name;
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QString description;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QList<MimeType> mimeTypes;
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    explicit QWebPluginFactory(QObject* parent = 0);
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual ~QWebPluginFactory();
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual QList<Plugin> plugins() const = 0;
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void refreshPlugins();
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual QObject *create(const QString& mimeType,
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                            const QUrl&,
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                            const QStringList& argumentNames,
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                            const QStringList& argumentValues) const = 0;
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    enum Extension {
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class ExtensionOption
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {};
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class ExtensionReturn
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {};
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual bool extension(Extension extension, const ExtensionOption* option = 0, ExtensionReturn* output = 0);
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool supportsExtension(Extension extension) const;
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebPluginFactoryPrivate* d;
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
76