15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO: Need mechanism to cleanup the static instance 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef CONTENT_CHILD_NPAPI_PLUGIN_HOST_H_ 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define CONTENT_CHILD_NPAPI_PLUGIN_HOST_H_ 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/npapi/bindings/npapi.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/npapi/bindings/nphostapi.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace content { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The Plugin Host implements the NPN_xxx functions for NPAPI plugins. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These are the functions exposed from the Plugin Host for use 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// by the Plugin. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The PluginHost is managed as a singleton. This isn't strictly 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// necessary, but since the callback functions are all global C 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// functions, there is really no point in having per-instance PluginHosts. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginHost : public base::RefCounted<PluginHost> { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Access the single PluginHost instance. Callers 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // must call deref() when finished with the object. 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch static PluginHost* Singleton(); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The table of functions provided to the plugin. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NPNetscapeFuncs* host_functions() { return &host_funcs_; } 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper function for parsing post headers, and applying attributes 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to the stream. NPAPI post data include headers + data combined. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This function parses it out and adds it to the stream in a WebKit 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // style. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool SetPostData(const char *buf, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 length, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string>* names, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string>* values, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<char>* body); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void PatchNPNetscapeFuncs(NPNetscapeFuncs* overrides); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::RefCounted<PluginHost>; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PluginHost(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginHost(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitializeHostFuncs(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NPNetscapeFuncs host_funcs_; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PluginHost); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 58ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // namespace content 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif // CONTENT_CHILD_NPAPI_PLUGIN_HOST_H_ 61