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_
13 #include "base/memory/ref_counted.h"
14 #include "third_party/npapi/bindings/npapi.h"
15 #include "third_party/npapi/bindings/nphostapi.h"
19 // The Plugin Host implements the NPN_xxx functions for NPAPI plugins.
20 // These are the functions exposed from the Plugin Host for use
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
> {
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
39 static bool SetPostData(const char *buf
,
41 std::vector
<std::string
>* names
,
42 std::vector
<std::string
>* values
,
43 std::vector
<char>* body
);
45 void PatchNPNetscapeFuncs(NPNetscapeFuncs
* overrides
);
48 friend class base::RefCounted
<PluginHost
>;
50 virtual ~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_