1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_PLUGINS_PLUGIN_FINDER_H_
6 #define CHROME_BROWSER_PLUGINS_PLUGIN_FINDER_H_
11 #include "base/callback.h"
12 #include "base/gtest_prod_util.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/singleton.h"
15 #include "base/strings/string16.h"
16 #include "base/synchronization/lock.h"
17 #include "content/public/common/webplugininfo.h"
20 class DictionaryValue
;
25 class PrefRegistrySimple
;
27 #if defined(ENABLE_PLUGIN_INSTALLATION)
28 class PluginInstaller
;
31 // This class should be created and initialized by calling
32 // |GetInstance()| and |Init()| on the UI thread.
33 // After that it can be safely used on any other thread.
36 static void RegisterPrefs(PrefRegistrySimple
* registry
);
38 static PluginFinder
* GetInstance();
40 // It should be called on the UI thread.
43 void ReinitializePlugins(const base::DictionaryValue
* json_metadata
);
45 #if defined(ENABLE_PLUGIN_INSTALLATION)
46 // Finds a plug-in for the given MIME type and language (specified as an IETF
47 // language tag, i.e. en-US). If found, sets |installer| to the
48 // corresponding PluginInstaller and |plugin_metadata| to a copy of the
49 // corresponding PluginMetadata.
50 bool FindPlugin(const std::string
& mime_type
,
51 const std::string
& language
,
52 PluginInstaller
** installer
,
53 scoped_ptr
<PluginMetadata
>* plugin_metadata
);
55 // Finds the plug-in with the given identifier. If found, sets |installer|
56 // to the corresponding PluginInstaller and |plugin_metadata| to a copy
57 // of the corresponding PluginMetadata. |installer| may be NULL.
58 bool FindPluginWithIdentifier(const std::string
& identifier
,
59 PluginInstaller
** installer
,
60 scoped_ptr
<PluginMetadata
>* plugin_metadata
);
63 // Returns the plug-in name with the given identifier.
64 base::string16
FindPluginNameWithIdentifier(const std::string
& identifier
);
66 // Gets plug-in metadata using |plugin|.
67 scoped_ptr
<PluginMetadata
> GetPluginMetadata(
68 const content::WebPluginInfo
& plugin
);
71 friend struct DefaultSingletonTraits
<PluginFinder
>;
72 friend class Singleton
<PluginFinder
>;
73 FRIEND_TEST_ALL_PREFIXES(PluginFinderTest
, JsonSyntax
);
74 FRIEND_TEST_ALL_PREFIXES(PluginFinderTest
, PluginGroups
);
79 // Loads the plug-in information from the browser resources and parses it.
80 // Returns NULL if the plug-in list couldn't be parsed.
81 static base::DictionaryValue
* LoadBuiltInPluginList();
83 #if defined(ENABLE_PLUGIN_INSTALLATION)
84 std::map
<std::string
, PluginInstaller
*> installers_
;
87 std::map
<std::string
, PluginMetadata
*> identifier_plugin_
;
89 // Version of the metadata information. We use this to consolidate multiple
90 // sources (baked into resource and fetched from a URL), making sure that we
91 // don't overwrite newer versions with older ones.
94 // Synchronization for the above member variables is
95 // required since multiple threads can be accessing them concurrently.
98 DISALLOW_COPY_AND_ASSIGN(PluginFinder
);
101 #endif // CHROME_BROWSER_PLUGINS_PLUGIN_FINDER_H_