--- /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 <param> elements contained in the HTML object tag.
+*/
+
+