1/*
2    Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
3
4    This library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Library General Public
6    License as published by the Free Software Foundation; either
7    version 2 of the License, or (at your option) any later version.
8
9    This library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Library General Public License for more details.
13
14    You should have received a copy of the GNU Library General Public License
15    along with this library; see the file COPYING.LIB.  If not, write to
16    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17    Boston, MA 02110-1301, USA.
18*/
19
20#ifndef PluginData_h
21#define PluginData_h
22
23#include <wtf/RefCounted.h>
24#include <wtf/Vector.h>
25#include "PlatformString.h"
26
27namespace WebCore {
28
29    class Page;
30    struct PluginInfo;
31
32    struct MimeClassInfo : Noncopyable {
33        String type;
34        String desc;
35        String suffixes;
36        PluginInfo* plugin;
37    };
38
39    struct PluginInfo : Noncopyable {
40        String name;
41        String file;
42        String desc;
43        Vector<MimeClassInfo*> mimes;
44    };
45
46    // FIXME: merge with PluginDatabase in the future
47    class PluginData : public RefCounted<PluginData> {
48    public:
49        static PassRefPtr<PluginData> create(const Page* page) { return adoptRef(new PluginData(page)); }
50        ~PluginData();
51
52        void disconnectPage() { m_page = 0; }
53        const Page* page() const { return m_page; }
54
55        const Vector<PluginInfo*>& plugins() const { return m_plugins; }
56        const Vector<MimeClassInfo*>& mimes() const { return m_mimes; }
57
58        bool supportsMimeType(const String& mimeType) const;
59        String pluginNameForMimeType(const String& mimeType) const;
60
61        static void refresh();
62
63    private:
64        PluginData(const Page*);
65        void initPlugins();
66
67        Vector<PluginInfo*> m_plugins;
68        Vector<MimeClassInfo*> m_mimes;
69        const Page* m_page;
70    };
71
72}
73
74#endif
75