Move URL from WebCore to WTF
[WebKit-https.git] / Source / WebKitLegacy / win / Plugins / PluginDatabase.h
1 /*
2  * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
3  * Copyright (C) 2008 Collabora, Ltd.  All rights reserved.
4  * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27
28 #ifndef PluginDatabase_h
29 #define PluginDatabase_h
30
31 #include "PluginPackage.h"
32 #include <wtf/HashSet.h>
33 #include <wtf/Vector.h>
34 #include <wtf/text/StringHash.h>
35 #include <wtf/text/WTFString.h>
36
37 namespace WebCore {
38     class Element;
39     class Frame;
40     class IntSize;
41     class PluginDatabaseClient;
42     class PluginPackage;
43
44     typedef HashSet<RefPtr<PluginPackage>, PluginPackageHash, PluginPackageHashTraits> PluginSet;
45
46     class PluginDatabase {
47         WTF_MAKE_NONCOPYABLE(PluginDatabase); WTF_MAKE_FAST_ALLOCATED;
48     public:
49         PluginDatabase();
50
51         // The first call to installedPlugins creates the plugin database
52         // and by default populates it with the plugins installed on the system.
53         // For testing purposes, it is possible to not populate the database
54         // automatically, as the plugins might affect the DRT results by
55         // writing to a.o. stderr.
56         static PluginDatabase* installedPlugins(bool populate = true);
57
58         bool refresh();
59         void clear();
60         Vector<PluginPackage*> plugins() const;
61         bool isMIMETypeRegistered(const String& mimeType);
62         void addExtraPluginDirectory(const String&);
63
64         static bool isPreferredPluginDirectory(const String& directory);
65         static int preferredPluginCompare(const void*, const void*);
66
67         PluginPackage* findPlugin(const URL&, String& mimeType);
68         PluginPackage* pluginForMIMEType(const String& mimeType);
69         void setPreferredPluginForMIMEType(const String& mimeType, PluginPackage* plugin);
70
71         void setPluginDirectories(const Vector<String>& directories)
72         {
73             clear();
74             m_pluginDirectories = directories;
75         }
76
77         bool removeDisabledPluginFile(const String& fileName);
78         bool addDisabledPluginFile(const String& fileName);
79         static Vector<String> defaultPluginDirectories();
80         Vector<String> pluginDirectories() const { return m_pluginDirectories; }
81
82         String MIMETypeForExtension(const String& extension) const;
83 #if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE)
84         static bool isPersistentMetadataCacheEnabled();
85         static void setPersistentMetadataCacheEnabled(bool isEnabled);
86         static String persistentMetadataCachePath();
87         static void setPersistentMetadataCachePath(const String& persistentMetadataCachePath);
88 #endif
89
90     private:
91         void getPluginPathsInDirectories(HashSet<String>&) const;
92         void getDeletedPlugins(PluginSet&) const;
93         bool fileExistsAndIsNotDisabled(const String&) const;
94
95         // Returns whether the plugin was actually added or not (it won't be added if it's a duplicate of an existing plugin).
96         bool add(Ref<PluginPackage>&&);
97         void remove(PluginPackage*);
98 #if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE)
99         void loadPersistentMetadataCache();
100         void updatePersistentMetadataCache();
101 #endif
102
103         HashSet<String> m_disabledPluginFiles;
104         Vector<String> m_pluginDirectories;
105         HashSet<String> m_registeredMIMETypes;
106         PluginSet m_plugins;
107         HashMap<String, RefPtr<PluginPackage> > m_pluginsByPath;
108         HashMap<String, time_t> m_pluginPathsWithTimes;
109         HashMap<String, RefPtr<PluginPackage>, ASCIICaseInsensitiveHash> m_preferredPlugins;
110 #if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE)
111         bool m_persistentMetadataCacheIsLoaded;
112 #endif
113     };
114
115 } // namespace WebCore
116
117 #endif