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// TODO: Need mechanism to cleanup the static instance
6
7#ifndef CONTENT_CHILD_NPAPI_PLUGIN_HOST_H_
8#define CONTENT_CHILD_NPAPI_PLUGIN_HOST_H_
9
10#include <string>
11#include <vector>
12
13#include "base/memory/ref_counted.h"
14#include "third_party/npapi/bindings/npapi.h"
15#include "third_party/npapi/bindings/nphostapi.h"
16
17namespace content {
18
19// The Plugin Host implements the NPN_xxx functions for NPAPI plugins.
20// These are the functions exposed from the Plugin Host for use
21// by the Plugin.
22//
23// The PluginHost is managed as a singleton.  This isn't strictly
24// necessary, but since the callback functions are all global C
25// functions, there is really no point in having per-instance PluginHosts.
26class PluginHost : public base::RefCounted<PluginHost> {
27 public:
28  // Access the single PluginHost instance.  Callers
29  // must call deref() when finished with the object.
30  static PluginHost* Singleton();
31
32  // The table of functions provided to the plugin.
33  NPNetscapeFuncs* host_functions() { return &host_funcs_; }
34
35  // Helper function for parsing post headers, and applying attributes
36  // to the stream.  NPAPI post data include headers + data combined.
37  // This function parses it out and adds it to the stream in a WebKit
38  // style.
39  static bool SetPostData(const char *buf,
40                          uint32 length,
41                          std::vector<std::string>* names,
42                          std::vector<std::string>* values,
43                          std::vector<char>* body);
44
45  void PatchNPNetscapeFuncs(NPNetscapeFuncs* overrides);
46
47 private:
48  friend class base::RefCounted<PluginHost>;
49
50  virtual ~PluginHost();
51
52  PluginHost();
53  void InitializeHostFuncs();
54  NPNetscapeFuncs host_funcs_;
55  DISALLOW_COPY_AND_ASSIGN(PluginHost);
56};
57
58}  // namespace content
59
60#endif  // CONTENT_CHILD_NPAPI_PLUGIN_HOST_H_
61