diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/WebKit/qt/Api/qwebobjectplugin.cpp --- /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 +#include +#include + +#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(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(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 <param> elements contained in the HTML object tag. +*/ + +