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.
4
5#ifndef CONTENT_PUBLIC_COMMON_PEPPER_PLUGIN_INFO_H_
6#define CONTENT_PUBLIC_COMMON_PEPPER_PLUGIN_INFO_H_
7
8#include <string>
9#include <vector>
10
11#include "base/files/file_path.h"
12#include "content/common/content_export.h"
13#include "content/public/common/webplugininfo.h"
14#include "ppapi/c/pp_module.h"
15#include "ppapi/c/ppb.h"
16
17#if !defined(ENABLE_PLUGINS)
18#error "Plugins should be enabled"
19#endif
20
21namespace content {
22
23struct CONTENT_EXPORT PepperPluginInfo {
24  typedef const void* (*GetInterfaceFunc)(const char*);
25  typedef int (*PPP_InitializeModuleFunc)(PP_Module, PPB_GetInterface);
26  typedef void (*PPP_ShutdownModuleFunc)();
27
28  struct EntryPoints {
29    // This structure is POD, with the constructor initializing to NULL.
30    CONTENT_EXPORT EntryPoints();
31
32    GetInterfaceFunc get_interface;
33    PPP_InitializeModuleFunc initialize_module;
34    PPP_ShutdownModuleFunc shutdown_module;  // Optional, may be NULL.
35  };
36
37  PepperPluginInfo();
38  ~PepperPluginInfo();
39
40  WebPluginInfo ToWebPluginInfo() const;
41
42  // Indicates internal plugins for which there's not actually a library.
43  // These plugins are implemented in the Chrome binary using a separate set
44  // of entry points (see internal_entry_points below).
45  // Defaults to false.
46  bool is_internal;
47
48  // True when this plugin should be run out of process. Defaults to false.
49  bool is_out_of_process;
50
51  // True when an out-of-process plugin should also be run within sandbox.
52  // Defaults to true.
53  bool is_sandboxed;
54
55  base::FilePath path;  // Internal plugins have "internal-[name]" as path.
56  std::string name;
57  std::string description;
58  std::string version;
59  std::vector<WebPluginMimeType> mime_types;
60
61  // When is_internal is set, this contains the function pointers to the
62  // entry points for the internal plugins.
63  EntryPoints internal_entry_points;
64
65  // Permission bits from ppapi::Permission.
66  uint32 permissions;
67};
68
69}  // namespace content
70
71#endif  // CONTENT_PUBLIC_COMMON_PEPPER_PLUGIN_INFO_H_
72