webplugininfo.h revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
1// Copyright (c) 2011 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.
4
5#ifndef CONTENT_PUBLIC_COMMON_WEBPLUGININFO_H_
6#define CONTENT_PUBLIC_COMMON_WEBPLUGININFO_H_
7
8#include <string>
9#include <vector>
10
11#include "base/basictypes.h"
12#include "base/files/file_path.h"
13#include "content/common/content_export.h"
14
15namespace base {
16class Version;
17}
18
19namespace content {
20
21struct CONTENT_EXPORT WebPluginMimeType {
22  WebPluginMimeType();
23  // A constructor for the common case of a single file extension and an ASCII
24  // description.
25  WebPluginMimeType(const std::string& m,
26                    const std::string& f,
27                    const std::string& d);
28  ~WebPluginMimeType();
29
30  // The name of the mime type (e.g., "application/x-shockwave-flash").
31  std::string mime_type;
32
33  // A list of all the file extensions for this mime type.
34  std::vector<std::string> file_extensions;
35
36  // Description of the mime type.
37  base::string16 description;
38
39  // Extra parameters to include when instantiating the plugin.
40  std::vector<base::string16> additional_param_names;
41  std::vector<base::string16> additional_param_values;
42};
43
44// Describes an available NPAPI or Pepper plugin.
45struct CONTENT_EXPORT WebPluginInfo {
46  enum PluginType {
47    PLUGIN_TYPE_NPAPI,
48    PLUGIN_TYPE_PEPPER_IN_PROCESS,
49    PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS,
50    PLUGIN_TYPE_PEPPER_UNSANDBOXED
51  };
52
53  WebPluginInfo();
54  WebPluginInfo(const WebPluginInfo& rhs);
55  ~WebPluginInfo();
56  WebPluginInfo& operator=(const WebPluginInfo& rhs);
57
58  // Special constructor only used during unit testing:
59  WebPluginInfo(const base::string16& fake_name,
60                const base::FilePath& fake_path,
61                const base::string16& fake_version,
62                const base::string16& fake_desc);
63
64  bool is_pepper_plugin() const {
65    return ((type == PLUGIN_TYPE_PEPPER_IN_PROCESS ) ||
66          (type == PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS) ||
67          (type == PLUGIN_TYPE_PEPPER_UNSANDBOXED));
68  }
69
70  // Parse a version string as used by a plug-in. This method is more lenient
71  // in accepting weird version strings than base::Version::GetFromString()
72  static void CreateVersionFromString(const base::string16& version_string,
73                                      base::Version* parsed_version);
74
75  // The name of the plugin (i.e. Flash).
76  base::string16 name;
77
78  // The path to the plugin file (DLL/bundle/library).
79  base::FilePath path;
80
81  // The version number of the plugin file (may be OS-specific)
82  base::string16 version;
83
84  // A description of the plugin that we get from its version info.
85  base::string16 desc;
86
87  // A list of all the mime types that this plugin supports.
88  std::vector<WebPluginMimeType> mime_types;
89
90  // Plugin type. See the PluginType enum.
91  int type;
92
93  // When type is PLUGIN_TYPE_PEPPER_* this indicates the permission bits.
94  int32 pepper_permissions;
95};
96
97}  // namespace content
98
99#endif  // CONTENT_PUBLIC_COMMON_WEBPLUGININFO_H_
100