- add sources.
[platform/framework/web/crosswalk.git] / src / content / child / npapi / plugin_host.h
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
17 namespace 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.
26 class 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_