18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This library is free software; you can redistribute it and/or
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    modify it under the terms of the GNU Library General Public
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    License as published by the Free Software Foundation; either
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    version 2 of the License, or (at your option) any later version.
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This library is distributed in the hope that it will be useful,
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    but WITHOUT ANY WARRANTY; without even the implied warranty of
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Library General Public License for more details.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    You should have received a copy of the GNU Library General Public License
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    along with this library; see the file COPYING.LIB.  If not, write to
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Boston, MA 02110-1301, USA.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef PluginData_h
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PluginData_h
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RefCounted.h>
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Vector.h>
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformString.h"
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
295af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeclass Page;
305af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkestruct PluginInfo;
315af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
325af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkestruct MimeClassInfo {
335af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    String type;
345af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    String desc;
3506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    Vector<String> extensions;
365af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke};
375af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
385af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeinline bool operator==(const MimeClassInfo& a, const MimeClassInfo& b)
395af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke{
4006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    return a.type == b.type && a.desc == b.desc && a.extensions == b.extensions;
415af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke}
425af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
435af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkestruct PluginInfo {
445af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    String name;
455af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    String file;
465af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    String desc;
475af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    Vector<MimeClassInfo> mimes;
485af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke};
495af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
505af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke// FIXME: merge with PluginDatabase in the future
515af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeclass PluginData : public RefCounted<PluginData> {
525af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkepublic:
535af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    static PassRefPtr<PluginData> create(const Page* page) { return adoptRef(new PluginData(page)); }
545af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
555af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    const Vector<PluginInfo>& plugins() const { return m_plugins; }
565af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    const Vector<MimeClassInfo>& mimes() const { return m_mimes; }
5706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    const Vector<size_t>& mimePluginIndices() const { return m_mimePluginIndices; }
5806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
595af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    bool supportsMimeType(const String& mimeType) const;
605af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    String pluginNameForMimeType(const String& mimeType) const;
615af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
625af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    static void refresh();
635af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
645af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeprivate:
655af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    PluginData(const Page*);
66cad810f21b803229eb11403f9209855525a25d57Steve Block    void initPlugins(const Page*);
675af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
685af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    Vector<PluginInfo> m_plugins;
695af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    Vector<MimeClassInfo> m_mimes;
7006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    Vector<size_t> m_mimePluginIndices;
715af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke};
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
76