| Index: tools/nixysa/nixysa/static_glue/npapi/common.h
|
| ===================================================================
|
| --- tools/nixysa/nixysa/static_glue/npapi/common.h (revision 0)
|
| +++ tools/nixysa/nixysa/static_glue/npapi/common.h (revision 0)
|
| @@ -0,0 +1,239 @@
|
| +// Copyright 2008 Google Inc.
|
| +//
|
| +// Licensed under the Apache License, Version 2.0 (the "License");
|
| +// you may not use this file except in compliance with the License.
|
| +// You may obtain a copy of the License at
|
| +//
|
| +// http://www.apache.org/licenses/LICENSE-2.0
|
| +//
|
| +// Unless required by applicable law or agreed to in writing, software
|
| +// distributed under the License is distributed on an "AS IS" BASIS,
|
| +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| +// See the License for the specific language governing permissions and
|
| +// limitations under the License.
|
| +
|
| +#ifndef TOOLS_IDLGLUE_NG_STATIC_GLUE_NPAPI_COMMON_H__
|
| +#define TOOLS_IDLGLUE_NG_STATIC_GLUE_NPAPI_COMMON_H__
|
| +
|
| +#include <npapi.h>
|
| +#include <npruntime.h>
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +
|
| +#define NPVARIANT_TO_NUMBER(_v) (NPVARIANT_IS_INT32(_v) ? \
|
| + NPVARIANT_TO_INT32(_v) : \
|
| + NPVARIANT_IS_DOUBLE(_v) ? NPVARIANT_TO_DOUBLE(_v) : 0)
|
| +
|
| +#define NPVARIANT_IS_NUMBER(_v) (NPVARIANT_IS_INT32(_v) || \
|
| + NPVARIANT_IS_DOUBLE(_v))
|
| +
|
| +// Converts a UTF16 wide string to a UTF8 string
|
| +bool String16ToUTF8(const wchar_t *in, int len, std::string *out8);
|
| +
|
| +// Converts a UTF8 string to a UTF16 wide string
|
| +bool UTF8ToString16(const char *in, int len, std::wstring *out16);
|
| +
|
| +// Converts a UTF16 string to a NPVariant
|
| +bool String16ToNPVariant(const std::wstring &in, NPVariant *variant);
|
| +
|
| +// Converts a UTF8 string to a NPVariant
|
| +bool StringToNPVariant(const std::string &in, NPVariant *variant);
|
| +
|
| +// Converts an unsigned int to a std::string representation
|
| +std::string UIntToString(unsigned int value);
|
| +
|
| +// Gets the i-th element of a JavaScript array.
|
| +bool GetNPArrayProperty(NPP npp, NPObject *object, int index,
|
| + NPVariant *output);
|
| +
|
| +// Gets a property from a JavaScript object.
|
| +bool GetNPObjectProperty(NPP npp, NPObject *object, const char *name,
|
| + NPVariant *output);
|
| +
|
| +// Creates an empty JavaScript array.
|
| +NPObject *CreateArray(NPP npp);
|
| +
|
| +// ScopeId used to retrieve the text representation of a NPIdentifier, with
|
| +// automatic memory management.
|
| +class ScopedId {
|
| + public:
|
| + explicit ScopedId(NPIdentifier name);
|
| + ~ScopedId();
|
| + NPUTF8 *text() const { return text_; }
|
| + private:
|
| + NPUTF8 *text_;
|
| +};
|
| +
|
| +// DebugScopedId works like ScopedId, but does nothing in release mode. It
|
| +// can be used to help debugging NPAPI dispatch functions, with no overhead in
|
| +// release.
|
| +#ifdef _DEBUG
|
| +class DebugScopedId : public ScopedId {
|
| + public:
|
| + explicit DebugScopedId(NPIdentifier name): ScopedId(name) {}
|
| +};
|
| +#else
|
| +class DebugScopedId {
|
| + public:
|
| + explicit DebugScopedId(NPIdentifier name) {}
|
| + NPUTF8 *text() const { return NULL; }
|
| +};
|
| +#endif
|
| +
|
| +// Variant is used to wrap a JavaScript variant, for use with user-glue
|
| +// functions with 'variant' parameter(s) in IDL.
|
| +class Variant {
|
| + NPP npp_;
|
| + NPVariant value_;
|
| + public:
|
| + Variant() : npp_(NULL), value_() {}
|
| + Variant(NPP npp, NPVariant value) : npp_(npp), value_(value) {}
|
| + Variant(const Variant &var) : npp_(var.npp_), value_(var.value_) {}
|
| + bool GetObjectProperty(const char *name, Variant *variant) const {
|
| + if (!NPVARIANT_IS_OBJECT(value_)) return false;
|
| + NPVariant output;
|
| + bool r = GetNPObjectProperty(npp_, NPVARIANT_TO_OBJECT(value_), name,
|
| + &output);
|
| + if (r) *variant = Variant(npp_, output);
|
| + return r;
|
| + }
|
| + bool GetArrayProperty(int index, Variant *variant) const {
|
| + if (!NPVARIANT_IS_OBJECT(value_)) return false;
|
| + NPVariant output;
|
| + bool r = GetNPArrayProperty(npp_, NPVARIANT_TO_OBJECT(value_), index,
|
| + &output);
|
| + if (r) *variant = Variant(npp_, output);
|
| + return r;
|
| + }
|
| + bool IsInt() const {
|
| + return NPVARIANT_IS_INT32(value_);
|
| + }
|
| + int AsInt() const {
|
| + return NPVARIANT_TO_INT32(value_);
|
| + }
|
| + void SetInt(int v) { INT32_TO_NPVARIANT(v, value_); }
|
| + bool IsFloat() const {
|
| + return NPVARIANT_IS_DOUBLE(value_);
|
| + }
|
| + float AsFloat() const {
|
| + return static_cast<float>(NPVARIANT_TO_DOUBLE(value_));
|
| + }
|
| + void SetFloat(float f) {
|
| + DOUBLE_TO_NPVARIANT(static_cast<double>(f), value_);
|
| + }
|
| + bool IsNumber() const {
|
| + return IsInt() || IsFloat();
|
| + }
|
| + float AsNumber() const {
|
| + if (IsInt())
|
| + return static_cast<float>(AsInt());
|
| + else
|
| + return AsFloat();
|
| + }
|
| +};
|
| +
|
| +// An object that holds a callable NPObject and some arguments and allows the
|
| +// callable object to be called with those arguments either synchronously or
|
| +// asynchronously.
|
| +class NPCallback : public NPObject {
|
| + public:
|
| + // Returns whether asynchronous calls are supported by the browser.
|
| + static bool SupportsAsync();
|
| +
|
| + // Create a new NPCallback.
|
| + static NPCallback* Create(NPP npp);
|
| +
|
| + // Set the function and arguments.
|
| + void Set(NPObject* function, const NPVariant* args, int num_args);
|
| +
|
| + // Call synchronously.
|
| + bool Call(NPVariant* result);
|
| +
|
| + // Call asynchronously.
|
| + bool CallAsync();
|
| +
|
| + private:
|
| + explicit NPCallback(NPP npp);
|
| + ~NPCallback();
|
| +
|
| + // Disallow copy constructor and assignment operator.
|
| + // These are deliberately unimplemented.
|
| + NPCallback(const NPCallback&);
|
| + void operator=(const NPCallback&);
|
| +
|
| + static NPObject* Allocate(NPP npp, NPClass* the_class);
|
| + static void Deallocate(NPObject* object);
|
| + static void Invalidate(NPObject* object);
|
| + const static NPClass np_class_;
|
| + NPP npp_;
|
| + NPObject* function_;
|
| + std::vector<NPVariant> args_;
|
| +};
|
| +
|
| +namespace glue {
|
| +namespace globals {
|
| +
|
| +// This function must be implemented by the user of the glue generator.
|
| +// It need not do anything, but it's where errors in the glue will be reported.
|
| +// Currently the glue code only reports user errors such as parameter type
|
| +// mismatches.
|
| +void SetLastError(NPP npp, const char *error);
|
| +
|
| +#ifdef PROFILE_GLUE
|
| +
|
| +#define GLUE_SCOPED_PROFILE(npp, key, name) \
|
| + glue::globals::ScopedProfile name((npp), (key))
|
| +#define GLUE_SCOPED_PROFILE_STOP(name) name.Stop()
|
| +#define GLUE_PROFILE_START(npp, key) glue::globals::ProfileStart((npp), (key))
|
| +#define GLUE_PROFILE_STOP(npp, key) glue::globals::ProfileStop((npp), (key))
|
| +#define GLUE_PROFILE_RESET(npp) glue::globals::ProfileReset(npp)
|
| +#define GLUE_PROFILE_TO_STRING(npp) glue::globals::ProfileToString(npp)
|
| +
|
| +// These functions must be implemented by the user of the glue generator if
|
| +// profiling is desired.
|
| +void ProfileStart(NPP npp, const std::string& key);
|
| +void ProfileStop(NPP npp, const std::string& key);
|
| +void ProfileReset(NPP npp);
|
| +std::string ProfileToString(NPP npp);
|
| +
|
| +class ScopedProfile {
|
| + public:
|
| + ScopedProfile(NPP npp, const std::string& key) : npp_(npp), key_(key),
|
| + stopped_(false) {
|
| + GLUE_PROFILE_START(npp_, key_);
|
| + }
|
| + ~ScopedProfile() {
|
| + if (!stopped_) {
|
| + GLUE_PROFILE_STOP(npp_, key_);
|
| + }
|
| + }
|
| + void Stop() {
|
| + GLUE_PROFILE_STOP(npp_, key_);
|
| + stopped_ = true;
|
| + }
|
| + private:
|
| + std::string key_;
|
| + NPP npp_;
|
| + bool stopped_;
|
| +
|
| + // Disallow implicit contructors.
|
| + ScopedProfile(const ScopedProfile&);
|
| + void operator=(const ScopedProfile&);
|
| +};
|
| +
|
| +#else // PROFILE_GLUE
|
| +
|
| +#define GLUE_SCOPED_PROFILE(npp, key, name)
|
| +#define GLUE_SCOPED_PROFILE_STOP(name)
|
| +#define GLUE_PROFILE_START(npp, key)
|
| +#define GLUE_PROFILE_STOP(npp, key)
|
| +#define GLUE_PROFILE_RESET(npp)
|
| +#define GLUE_PROFILE_TO_STRING(npp) ""
|
| +
|
| +#endif // PROFILE_GLUE
|
| +
|
| +} // namespace globals
|
| +} // namespace glue
|
| +
|
| +#endif // TOOLS_IDLGLUE_NG_STATIC_GLUE_NPAPI_COMMON_H__
|
|
|
| Property changes on: tools/nixysa/nixysa/static_glue/npapi/common.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|