WebKit/qt/Api/qwebplugindatabase.cpp
changeset 0 4f2f89ce4247
child 2 303757a437d3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebKit/qt/Api/qwebplugindatabase.cpp	Fri Sep 17 09:02:29 2010 +0300
@@ -0,0 +1,389 @@
+/*
+    Copyright (C) 2009 Jakub Wieczorek <faw217@gmail.com>
+
+    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.
+*/
+
+#include "config.h"
+#include "qwebplugindatabase_p.h"
+
+#include "PluginDatabase.h"
+#include "PluginPackage.h"
+
+using namespace WebCore;
+
+/*!
+    \internal
+    \typedef QWebPluginInfo::MimeType
+    \since 4.6
+    \brief Represents a single MIME type supported by a plugin.
+*/
+
+/*!
+    \class QWebPluginInfo
+    \internal
+    \since 4.6
+    \brief The QWebPluginInfo class represents a single Netscape plugin.
+
+    A QWebPluginInfo object represents a Netscape plugin picked up by WebKit
+    and included in the plugin database. This class contains information about
+    the plugin, such as its name(), description(), a list of MIME types that it
+    supports (can be accessed with mimeTypes()) and the path of the plugin
+    file.
+
+    Plugins can be enabled and disabled with setEnabled(). If a plugin is
+    disabled, it will not be used by WebKit to handle supported MIME types. To
+    check if a plugin is enabled or not, use enabled().
+
+    \sa QWebPluginDatabase
+*/
+
+/*!
+    Constructs a null QWebPluginInfo.
+*/
+QWebPluginInfo::QWebPluginInfo()
+    : m_package(0)
+{
+}
+
+QWebPluginInfo::QWebPluginInfo(PluginPackage* package)
+    : m_package(package)
+{
+    if (m_package)
+        m_package->ref();
+}
+
+/*!
+    Contructs a copy of \a other.
+*/
+QWebPluginInfo::QWebPluginInfo(const QWebPluginInfo& other)
+    : m_package(other.m_package)
+{
+    if (m_package)
+        m_package->ref();
+}
+
+/*!
+    Destroys the plugin info.
+*/
+QWebPluginInfo::~QWebPluginInfo()
+{
+    if (m_package)
+        m_package->deref();
+}
+
+/*!
+    Returns the name of the plugin.
+
+    \sa description()
+*/
+QString QWebPluginInfo::name() const
+{
+    if (!m_package)
+        return QString();
+    return m_package->name();
+}
+
+/*!
+    Returns the description of the plugin.
+
+    \sa name()
+*/
+QString QWebPluginInfo::description() const
+{
+    if (!m_package)
+        return QString();
+    return m_package->description();
+}
+
+/*!
+    Returns a list of MIME types supported by the plugin.
+
+    \sa supportsMimeType()
+*/
+QList<QWebPluginInfo::MimeType> QWebPluginInfo::mimeTypes() const
+{
+    if (m_package && m_mimeTypes.isEmpty()) {
+        const MIMEToDescriptionsMap& mimeToDescriptions = m_package->mimeToDescriptions();
+        MIMEToDescriptionsMap::const_iterator end = mimeToDescriptions.end();
+
+        for (MIMEToDescriptionsMap::const_iterator it = mimeToDescriptions.begin(); it != end; ++it) {
+            MimeType mimeType;
+            mimeType.name = it->first;
+            mimeType.description = it->second;
+
+            QStringList fileExtensions;
+            Vector<String> extensions = m_package->mimeToExtensions().get(mimeType.name);
+
+            for (unsigned i = 0; i < extensions.size(); ++i)
+                fileExtensions.append(extensions[i]);
+
+            mimeType.fileExtensions = fileExtensions;
+            m_mimeTypes.append(mimeType);
+        }
+    }
+
+    return m_mimeTypes;
+}
+
+/*!
+    Returns true if the plugin supports a specific \a mimeType; otherwise
+    returns false.
+
+    \sa mimeTypes()
+*/
+bool QWebPluginInfo::supportsMimeType(const QString& mimeType) const
+{
+    if (!m_package)
+        return false;
+    return m_package->mimeToDescriptions().contains(mimeType);
+}
+
+/*!
+    Returns an absolute path to the plugin file.
+*/
+QString QWebPluginInfo::path() const
+{
+    if (!m_package)
+        return QString();
+    return m_package->path();
+}
+
+/*!
+    Returns true if the plugin is a null plugin; otherwise returns false.
+*/
+bool QWebPluginInfo::isNull() const
+{
+    return !m_package;
+}
+
+/*!
+    Enables or disables the plugin, depending on the \a enabled parameter.
+
+    Disabled plugins will not be picked up by WebKit when looking for a plugin
+    supporting a particular MIME type.
+
+    \sa isEnabled()
+*/
+void QWebPluginInfo::setEnabled(bool enabled)
+{
+    if (!m_package)
+        return;
+    m_package->setEnabled(enabled);
+}
+
+/*!
+    Returns true if the plugin is enabled; otherwise returns false.
+
+    \sa setEnabled()
+*/
+bool QWebPluginInfo::isEnabled() const
+{
+    if (!m_package)
+        return false;
+    return m_package->isEnabled();
+}
+
+/*!
+    Returns true if this plugin info is the same as the \a other plugin info.
+*/
+bool QWebPluginInfo::operator==(const QWebPluginInfo& other) const
+{
+    return m_package == other.m_package;
+}
+
+/*!
+    Returns true if this plugin info is different from the \a other plugin info.
+*/
+bool QWebPluginInfo::operator!=(const QWebPluginInfo& other) const
+{
+    return m_package != other.m_package;
+}
+
+/*!
+    Assigns the \a other plugin info to this plugin info, and returns a reference
+    to this plugin info.
+*/
+QWebPluginInfo &QWebPluginInfo::operator=(const QWebPluginInfo& other)
+{
+    if (this == &other)
+        return *this;
+
+    if (m_package)
+        m_package->deref();
+    m_package = other.m_package;
+    if (m_package)
+        m_package->ref();
+    m_mimeTypes = other.m_mimeTypes;
+
+    return *this;
+}
+
+/*!
+    \class QWebPluginDatabase
+    \internal
+    \since 4.6
+    \brief The QWebPluginDatabase class provides an interface for managing
+    Netscape plugins used by WebKit in QWebPages.
+
+    The QWebPluginDatabase class is a database of Netscape plugins that are used
+    by WebKit. The plugins are picked up by WebKit by looking up a set of search paths.
+    The default set can be accessed using defaultSearchPaths(). The search paths
+    can be changed, see searchPaths() and setSearchPaths(). Additional search paths
+    can also be added using addSearchPath().
+
+    The plugins that have been detected are exposed by the plugins() method.
+    The list contains QWebPlugin objects that hold both the metadata and the MIME
+    types that are supported by particular plugins.
+
+    WebKit specifies a plugin for a MIME type by looking for the first plugin that
+    supports the specific MIME type. To get a plugin, that is used by WebKit to
+    handle a specific MIME type, you can use the pluginForMimeType() function.
+
+    To change the way of resolving MIME types ambiguity, you can explicitly set
+    a preferred plugin for a specific MIME type, using setPreferredPluginForMimeType().
+
+    \sa QWebPluginInfo, QWebSettings::pluginDatabase()
+*/
+
+QWebPluginDatabase::QWebPluginDatabase(QObject* parent)
+    : QObject(parent)
+    , m_database(PluginDatabase::installedPlugins())
+{
+}
+
+QWebPluginDatabase::~QWebPluginDatabase()
+{
+}
+
+/*!
+    Returns a list of plugins installed in the search paths.
+
+    This list will contain disabled plugins, although they will not be used by
+    WebKit.
+
+    \sa pluginForMimeType()
+*/
+QList<QWebPluginInfo> QWebPluginDatabase::plugins() const
+{
+    QList<QWebPluginInfo> qwebplugins;
+    const Vector<PluginPackage*>& plugins = m_database->plugins();
+
+    for (unsigned int i = 0; i < plugins.size(); ++i) {
+        PluginPackage* plugin = plugins[i];
+        qwebplugins.append(QWebPluginInfo(plugin));
+    }
+
+    return qwebplugins;
+}
+
+/*!
+    Returns a default set of search paths.
+
+    \sa searchPaths(), setSearchPaths()
+*/
+QStringList QWebPluginDatabase::defaultSearchPaths()
+{
+    QStringList paths;
+
+    const Vector<String>& directories = PluginDatabase::defaultPluginDirectories();
+    for (unsigned int i = 0; i < directories.size(); ++i)
+        paths.append(directories[i]);
+
+    return paths;
+}
+
+/*!
+    Returns a list of search paths that are used by WebKit to look for plugins.
+
+    \sa defaultSearchPaths(), setSearchPaths()
+*/
+QStringList QWebPluginDatabase::searchPaths() const
+{
+    QStringList paths;
+
+    const Vector<String>& directories = m_database->pluginDirectories();
+    for (unsigned int i = 0; i < directories.size(); ++i)
+        paths.append(directories[i]);
+
+    return paths;
+}
+
+/*!
+    Changes the search paths to \a paths.
+    The database is automatically refreshed.
+
+    \sa searchPaths(), defaultSearchPaths()
+*/
+void QWebPluginDatabase::setSearchPaths(const QStringList& paths)
+{
+    Vector<String> directories;
+
+    for (int i = 0; i < paths.count(); ++i)
+        directories.append(paths.at(i));
+
+    m_database->setPluginDirectories(directories);
+    // PluginDatabase::setPluginDirectories() does not refresh the database.
+    m_database->refresh();
+}
+
+/*!
+    Adds an additional \a path to the current set.
+    The database is automatically refreshed.
+
+    \sa searchPaths(), setSearchPaths()
+*/
+void QWebPluginDatabase::addSearchPath(const QString& path)
+{
+    m_database->addExtraPluginDirectory(path);
+    // PluginDatabase::addExtraPluginDirectory() does refresh the database.
+}
+
+/*!
+    Refreshes the plugin database, adds new plugins that have been found and removes
+    the ones that are no longer available in the search paths.
+
+    You can call this function when the set of plugins installed in the search paths
+    changes. You do not need to call this function when changing search paths,
+    in that case WebKit automatically refreshes the database.
+*/
+void QWebPluginDatabase::refresh()
+{
+    m_database->refresh();
+}
+
+/*!
+    Returns the plugin that is currently used by WebKit for a given \a mimeType.
+
+    \sa setPreferredPluginForMimeType()
+*/
+QWebPluginInfo QWebPluginDatabase::pluginForMimeType(const QString& mimeType)
+{
+    return QWebPluginInfo(m_database->pluginForMIMEType(mimeType));
+}
+
+/*!
+    Changes the preferred plugin for a given \a mimeType to \a plugin. The \a plugin
+    has to support the given \a mimeType, otherwise the setting will have no effect.
+
+    Calling the function with a null \a plugin resets the setting.
+
+    \sa pluginForMimeType()
+*/
+void QWebPluginDatabase::setPreferredPluginForMimeType(const QString& mimeType, const QWebPluginInfo& plugin)
+{
+    m_database->setPreferredPluginForMIMEType(mimeType, plugin.m_package);
+}