1// Copyright 2014 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 MOJO_EXAMPLES_PEPPER_CONTAINER_APP_PLUGIN_MODULE_H_
6#define MOJO_EXAMPLES_PEPPER_CONTAINER_APP_PLUGIN_MODULE_H_
7
8#include "base/macros.h"
9#include "base/memory/ref_counted.h"
10#include "base/memory/scoped_ptr.h"
11#include "base/native_library.h"
12#include "base/scoped_native_library.h"
13#include "ppapi/c/pp_module.h"
14#include "ppapi/c/ppp.h"
15
16namespace ppapi {
17class CallbackTracker;
18}
19
20namespace mojo {
21namespace examples {
22
23class PluginInstance;
24
25class PluginModule : public base::RefCounted<PluginModule> {
26 public:
27  PluginModule();
28
29  scoped_ptr<PluginInstance> CreateInstance();
30
31  const void* GetPluginInterface(const char* name) const;
32
33  PP_Module pp_module() const { return 1; }
34  ppapi::CallbackTracker* callback_tracker() { return callback_tracker_.get(); }
35
36 private:
37  friend class base::RefCounted<PluginModule>;
38
39  struct EntryPoints {
40    EntryPoints();
41
42    PP_GetInterface_Func get_interface;
43    PP_InitializeModule_Func initialize_module;
44    PP_ShutdownModule_Func shutdown_module;  // Optional, may be NULL.
45  };
46
47  ~PluginModule();
48
49  void Initialize();
50
51  base::ScopedNativeLibrary plugin_module_;
52  EntryPoints entry_points_;
53  scoped_refptr<ppapi::CallbackTracker> callback_tracker_;
54
55  DISALLOW_COPY_AND_ASSIGN(PluginModule);
56};
57
58}  // namespace examples
59}  // namespace mojo
60
61#endif  // MOJO_EXAMPLES_PEPPER_CONTAINER_APP_PLUGIN_MODULE_H_
62