2 * Copyright (C) 2007 Staikos Computing Services Inc. <info@staikos.net>
3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
4 * Copyright (C) 2008 Collabora Ltd. All rights reserved.
5 * Copyright (C) 2010 Apple Inc. All rights reserved.
6 * Copyright (C) 2010 INdT - Instituto Nokia de Tecnologia
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
19 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27 * THE POSSIBILITY OF SUCH DAMAGE.
31 #include "PlatformStrategiesQt.h"
34 #include "ChromeClientQt.h"
36 #include "NotImplemented.h"
38 #include <PageGroup.h>
39 #include <PluginDatabase.h>
40 #include <QCoreApplication>
42 #include <qwebhistoryinterface.h>
44 #include <qwebpluginfactory.h>
45 #include <wtf/MathExtras.h>
47 using namespace WebCore;
49 void PlatformStrategiesQt::initialize()
51 DEFINE_STATIC_LOCAL(PlatformStrategiesQt, platformStrategies, ());
52 Q_UNUSED(platformStrategies);
55 PlatformStrategiesQt::PlatformStrategiesQt()
57 setPlatformStrategies(this);
61 CookiesStrategy* PlatformStrategiesQt::createCookiesStrategy()
66 PluginStrategy* PlatformStrategiesQt::createPluginStrategy()
71 VisitedLinkStrategy* PlatformStrategiesQt::createVisitedLinkStrategy()
76 PasteboardStrategy* PlatformStrategiesQt::createPasteboardStrategy()
81 void PlatformStrategiesQt::notifyCookiesChanged()
85 void PlatformStrategiesQt::refreshPlugins()
87 PluginDatabase::installedPlugins()->refresh();
90 void PlatformStrategiesQt::getPluginInfo(const WebCore::Page* page, Vector<WebCore::PluginInfo>& outPlugins)
92 QWebPage* qPage = static_cast<ChromeClientQt*>(page->chrome()->client())->m_webPage;
93 QWebPluginFactory* factory;
94 if (qPage && (factory = qPage->pluginFactory())) {
96 QList<QWebPluginFactory::Plugin> qplugins = factory->plugins();
97 for (int i = 0; i < qplugins.count(); ++i) {
98 const QWebPluginFactory::Plugin& qplugin = qplugins.at(i);
100 info.name = qplugin.name;
101 info.desc = qplugin.description;
103 for (int j = 0; j < qplugin.mimeTypes.count(); ++j) {
104 const QWebPluginFactory::MimeType& mimeType = qplugin.mimeTypes.at(j);
106 MimeClassInfo mimeInfo;
107 mimeInfo.type = mimeType.name;
108 mimeInfo.desc = mimeType.description;
109 for (int k = 0; k < mimeType.fileExtensions.count(); ++k)
110 mimeInfo.extensions.append(mimeType.fileExtensions.at(k));
112 info.mimes.append(mimeInfo);
114 outPlugins.append(info);
118 PluginDatabase* db = PluginDatabase::installedPlugins();
119 const Vector<PluginPackage*> &plugins = db->plugins();
121 outPlugins.resize(plugins.size());
123 for (unsigned int i = 0; i < plugins.size(); ++i) {
125 PluginPackage* package = plugins[i];
127 info.name = package->name();
128 info.file = package->fileName();
129 info.desc = package->description();
131 const MIMEToDescriptionsMap& mimeToDescriptions = package->mimeToDescriptions();
132 MIMEToDescriptionsMap::const_iterator end = mimeToDescriptions.end();
133 for (MIMEToDescriptionsMap::const_iterator it = mimeToDescriptions.begin(); it != end; ++it) {
136 mime.type = it->first;
137 mime.desc = it->second;
138 mime.extensions = package->mimeToExtensions().get(mime.type);
140 info.mimes.append(mime);
143 outPlugins.append(info);
148 // VisitedLinkStrategy
150 bool PlatformStrategiesQt::isLinkVisited(Page* page, LinkHash hash, const KURL& baseURL, const AtomicString& attributeURL)
154 Vector<UChar, 512> url;
155 visitedURL(baseURL, attributeURL, url);
157 // If the Qt4.4 interface for the history is used, we will have to fallback
158 // to the old global history.
159 QWebHistoryInterface* iface = QWebHistoryInterface::defaultInterface();
161 return iface->historyContains(QString(reinterpret_cast<QChar*>(url.data()), url.size()));
163 return page->group().isLinkVisited(hash);
166 void PlatformStrategiesQt::addVisitedLink(Page* page, LinkHash hash)
168 page->group().addVisitedLinkHash(hash);