webengine/osswebengine/WebKit/qt/Api/qwebobjectplugin.cpp
changeset 0 dd21522fd290
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKit/qt/Api/qwebobjectplugin.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,192 @@
+/*
+  Copyright (C) 2007 Trolltech ASA
+
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Library General Public
+  License as published by the Free Software Foundation; either
+  version 2 of the License, or (at your option) any later version.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Library General Public License for more details.
+
+  You should have received a copy of the GNU Library General Public License
+  along with this library; see the file COPYING.LIB.  If not, write to
+  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  Boston, MA 02110-1301, USA.
+
+  This class provides all functionality needed for loading images, style sheets and html
+  pages from the web. It has a memory cache for these objects.
+*/
+#include "qwebobjectplugin_p.h"
+#include <qwebobjectpluginconnector.h>
+#include <qcoreapplication.h>
+#include <qfileinfo.h>
+
+#ifndef QT_NO_LIBRARY
+Q_GLOBAL_STATIC_WITH_ARGS(QWebFactoryLoader, loader,
+                          (QWebObjectPluginFactoryInterface_iid, QCoreApplication::libraryPaths(), QLatin1String("/webplugins")))
+#endif
+
+
+QWebFactoryLoader::QWebFactoryLoader(const char *iid, const QStringList &paths, const QString &suffix, Qt::CaseSensitivity)
+    : QFactoryLoader(iid, paths, suffix)
+{
+    QStringList plugins = keys();
+    foreach(QString k, plugins) {
+        QWebObjectPlugin *plugin = qobject_cast<QWebObjectPlugin *>(instance(k));
+        if (!plugin)
+            continue;
+        Info info;
+        info.name = k;
+        info.description = plugin->descriptionForKey(k);
+        QStringList mimetypes = plugin->mimetypesForKey(k);
+        foreach(QString m, mimetypes) {
+            MimeInfo mime;
+            mime.type = m;
+            mime.extensions = plugin->extensionsForMimetype(m);
+            info.mimes << mime;
+        }
+        m_pluginInfo.append(info);
+    }
+}
+
+QWebFactoryLoader *QWebFactoryLoader::self()
+{
+    return loader();
+}
+
+
+QString QWebFactoryLoader::descriptionForName(const QString &key) const
+{
+    foreach(const Info &info, m_pluginInfo) {
+        if (info.name == key)
+            return info.description;
+    }
+    return QString();
+}
+
+QStringList QWebFactoryLoader::mimetypesForName(const QString &key) const
+{
+    foreach(const Info &info, m_pluginInfo) {
+        if (info.name == key) {
+            QStringList mimetypes;
+            foreach (const MimeInfo &m, info.mimes)
+                mimetypes.append(m.type);
+            return mimetypes;
+        }
+    }
+    return QStringList();
+}
+
+QString QWebFactoryLoader::mimeTypeForExtension(const QString &extension)
+{
+    foreach(const Info &info, m_pluginInfo) {
+        foreach (const MimeInfo &m, info.mimes) {
+            if (m.extensions.contains(extension))
+                return m.type;
+        }
+    }
+    return QString();
+}
+
+
+QStringList QWebFactoryLoader::extensions() const
+{
+    QStringList extensions;
+    foreach(const Info &info, m_pluginInfo) {
+        foreach (const MimeInfo &m, info.mimes)
+            extensions << m.extensions;
+    }
+    return QStringList();
+
+}
+
+QString QWebFactoryLoader::nameForMimetype(const QString &mimeType) const
+{
+    foreach(const Info &info, m_pluginInfo) {
+        foreach (const MimeInfo &m, info.mimes)
+            if (m.type == mimeType)
+                return info.name;
+    }
+    return QString();
+}
+
+QObject *QWebFactoryLoader::create(QWebFrame *frame,
+                                   const QUrl &url,
+                                   const QString &_mimeType,
+                                   const QStringList &argumentNames,
+                                   const QStringList &argumentValues)
+{
+    QString mimeType = _mimeType;
+    if (mimeType.isEmpty()) {
+        QFileInfo fi(url.path());
+        mimeType = mimeTypeForExtension(fi.suffix());
+    }
+    QString name = nameForMimetype(mimeType);
+    QWebObjectPlugin *plugin = qobject_cast<QWebObjectPlugin *>(instance(name));
+    if (!plugin)
+        return 0;
+    QWebObjectPluginConnector *connector = new QWebObjectPluginConnector(frame);
+    return plugin->create(connector, url, mimeType, argumentNames, argumentValues);
+}
+
+
+
+/*! \class QWebObjectPlugin
+
+  This class is a plugin for the HTML object tag. It can be used to embed arbitrary content in a web page.
+*/
+
+
+QWebObjectPlugin::QWebObjectPlugin(QObject *parent)
+    : QObject(parent)
+{
+}
+
+QWebObjectPlugin::~QWebObjectPlugin()
+{
+}
+
+/*!
+  \fn QStringList QWebObjectPlugin::keys() const
+
+  The keys should be unique names.
+*/
+
+/*!
+  A description for \a key.
+*/
+QString QWebObjectPlugin::descriptionForKey(const QString &key) const
+{
+    return QString();
+}
+
+/*!
+  returns the mimetypes that can be handled by \a key.
+*/
+QStringList QWebObjectPlugin::mimetypesForKey(const QString &key) const
+{
+    return QStringList();
+}
+
+
+/*!
+  \fn QStringList QWebObjectPlugin::extensionsForMimetype() const
+
+  Should return a list of extensions that are recognised to match the \a mimeType.
+*/
+QStringList QWebObjectPlugin::extensionsForMimetype(const QString &mimeType) const
+{
+    return QStringList();
+}
+
+/*!
+  \fn QObject *QWebObjectPlugin::create(QWebObjectPluginConnector *connector, const QUrl &url, const QString &mimeType, const QStringList &argumentNames, const QStringList &argumentValues) const
+
+  Creates a QObject with \a connector to handle \a mimeType. \a argumentNames and \a argumentValues are a set of key-value pairs passed directly
+  from the &lt;param&gt; elements contained in the HTML object tag.
+*/
+
+