15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)#ifndef REMOTING_HOST_PLUGIN_HOST_PLUGIN_UTILS_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define REMOTING_HOST_PLUGIN_HOST_PLUGIN_UTILS_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/npapi/bindings/npapi.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/npapi/bindings/npfunctions.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/npapi/bindings/npruntime.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace remoting {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Global netscape functions initialized in NP_Initialize.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern NPNetscapeFuncs* g_npnetscape_funcs;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert an NPIdentifier into a std::string.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string StringFromNPIdentifier(NPIdentifier identifier);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert an NPVariant into a std::string.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string StringFromNPVariant(const NPVariant& variant);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert a std::string into an NPVariant.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Caller is responsible for making sure that NPN_ReleaseVariantValue is
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// called on returned value.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPVariant NPVariantFromString(const std::string& val);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert an NPVariant into an NSPObject.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPObject* ObjectFromNPVariant(const NPVariant& variant);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Scoped reference pointer for NPObjects. All objects using this class
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// must be owned by g_npnetscape_funcs.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScopedRefNPObject {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedRefNPObject();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ScopedRefNPObject(NPObject* object);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ScopedRefNPObject(const ScopedRefNPObject& object);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~ScopedRefNPObject();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Release the held reference and replace it with |object|, incrementing
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // its reference count.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedRefNPObject& operator=(NPObject* object);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedRefNPObject& operator=(const ScopedRefNPObject& object);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NPObject* get() const { return object_; }
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NPObject* object_;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace remoting
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // REMOTING_HOST_PLUGIN_HOST_PLUGIN_UTILS_H_
56