Re-subimission of https://codereview.chromium.org/1041213003/
[chromium-blink-merge.git] / content / child / npapi / plugin_host.h
blob90632fe294dcd85f1a05fc1a4c9b9bf53dac8283
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.
5 // TODO: Need mechanism to cleanup the static instance
7 #ifndef CONTENT_CHILD_NPAPI_PLUGIN_HOST_H_
8 #define CONTENT_CHILD_NPAPI_PLUGIN_HOST_H_
10 #include <string>
11 #include <vector>
13 #include "base/memory/ref_counted.h"
14 #include "third_party/npapi/bindings/npapi.h"
15 #include "third_party/npapi/bindings/nphostapi.h"
17 namespace content {
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.
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();
32 // The table of functions provided to the plugin.
33 NPNetscapeFuncs* host_functions() { return &host_funcs_; }
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);
45 void PatchNPNetscapeFuncs(NPNetscapeFuncs* overrides);
47 private:
48 friend class base::RefCounted<PluginHost>;
50 virtual ~PluginHost();
52 PluginHost();
53 void InitializeHostFuncs();
54 NPNetscapeFuncs host_funcs_;
55 DISALLOW_COPY_AND_ASSIGN(PluginHost);
58 } // namespace content
60 #endif // CONTENT_CHILD_NPAPI_PLUGIN_HOST_H_