15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef CONTENT_PUBLIC_COMMON_WEBPLUGININFO_H_
6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define CONTENT_PUBLIC_COMMON_WEBPLUGININFO_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/common/content_export.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace base {
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass Version;
17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace content {
20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochstruct CONTENT_EXPORT WebPluginMimeType {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebPluginMimeType();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A constructor for the common case of a single file extension and an ASCII
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // description.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebPluginMimeType(const std::string& m,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    const std::string& f,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    const std::string& d);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~WebPluginMimeType();
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The name of the mime type (e.g., "application/x-shockwave-flash").
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string mime_type;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A list of all the file extensions for this mime type.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<std::string> file_extensions;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Description of the mime type.
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 description;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Extra parameters to include when instantiating the plugin.
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<base::string16> additional_param_names;
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<base::string16> additional_param_values;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Describes an available NPAPI or Pepper plugin.
45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochstruct CONTENT_EXPORT WebPluginInfo {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum PluginType {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PLUGIN_TYPE_NPAPI,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PLUGIN_TYPE_PEPPER_IN_PROCESS,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PLUGIN_TYPE_PEPPER_UNSANDBOXED
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebPluginInfo();
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebPluginInfo(const WebPluginInfo& rhs);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~WebPluginInfo();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebPluginInfo& operator=(const WebPluginInfo& rhs);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Special constructor only used during unit testing:
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  WebPluginInfo(const base::string16& fake_name,
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                const base::FilePath& fake_path,
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                const base::string16& fake_version,
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                const base::string16& fake_desc);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
64ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  bool is_pepper_plugin() const {
65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    return ((type == PLUGIN_TYPE_PEPPER_IN_PROCESS ) ||
66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          (type == PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS) ||
67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          (type == PLUGIN_TYPE_PEPPER_UNSANDBOXED));
68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  }
69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
70ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Parse a version string as used by a plug-in. This method is more lenient
71ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // in accepting weird version strings than base::Version::GetFromString()
72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  static void CreateVersionFromString(const base::string16& version_string,
73ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                                      base::Version* parsed_version);
74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The name of the plugin (i.e. Flash).
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 name;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The path to the plugin file (DLL/bundle/library).
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The version number of the plugin file (may be OS-specific)
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 version;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A description of the plugin that we get from its version info.
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 desc;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A list of all the mime types that this plugin supports.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<WebPluginMimeType> mime_types;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Plugin type. See the PluginType enum.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int type;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When type is PLUGIN_TYPE_PEPPER_* this indicates the permission bits.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32 pepper_permissions;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
97ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}  // namespace content
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
99ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif  // CONTENT_PUBLIC_COMMON_WEBPLUGININFO_H_
100