Home | History | Annotate | Download | only in plugins
      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 "platform/PlatformExport.h"
     24 #include "wtf/RefCounted.h"
     25 #include "wtf/Vector.h"
     26 #include "wtf/text/WTFString.h"
     27 
     28 namespace WebCore {
     29 
     30 class Page;
     31 struct PluginInfo;
     32 
     33 struct MimeClassInfo {
     34     String type;
     35     String desc;
     36     Vector<String> extensions;
     37 };
     38 
     39 inline bool operator==(const MimeClassInfo& a, const MimeClassInfo& b)
     40 {
     41     return a.type == b.type && a.desc == b.desc && a.extensions == b.extensions;
     42 }
     43 
     44 struct PluginInfo {
     45     String name;
     46     String file;
     47     String desc;
     48     Vector<MimeClassInfo> mimes;
     49 };
     50 
     51 class PLATFORM_EXPORT PluginData : public RefCounted<PluginData> {
     52 public:
     53     static PassRefPtr<PluginData> create(const Page* page) { return adoptRef(new PluginData(page)); }
     54 
     55     const Vector<PluginInfo>& plugins() const { return m_plugins; }
     56     const Vector<MimeClassInfo>& mimes() const { return m_mimes; }
     57     const Vector<size_t>& mimePluginIndices() const { return m_mimePluginIndices; }
     58 
     59     bool supportsMimeType(const String& mimeType) const;
     60     String pluginNameForMimeType(const String& mimeType) const;
     61     String pluginFileForMimeType(const String& mimeType) const;
     62 
     63     static void refresh();
     64 
     65 private:
     66     explicit PluginData(const Page*);
     67     void initPlugins(const Page*);
     68     const PluginInfo* pluginInfoForMimeType(const String& mimeType) const;
     69 
     70     Vector<PluginInfo> m_plugins;
     71     Vector<MimeClassInfo> m_mimes;
     72     Vector<size_t> m_mimePluginIndices;
     73 };
     74 
     75 // Checks if any of the plugins handle this extension, and if so returns the
     76 // plugin's mime type for this extension. Otherwise returns an empty string.
     77 PLATFORM_EXPORT String getPluginMimeTypeFromExtension(const String& extension);
     78 
     79 }
     80 
     81 #endif
     82