| Index: webkit/plugins/ppapi/npapi_glue.h
|
| ===================================================================
|
| --- webkit/plugins/ppapi/npapi_glue.h (revision 0)
|
| +++ webkit/plugins/ppapi/npapi_glue.h (revision 0)
|
| @@ -0,0 +1,188 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef WEBKIT_PLUGINS_PPAPI_NPAPI_GLUE_H_
|
| +#define WEBKIT_PLUGINS_PPAPI_NPAPI_GLUE_H_
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/scoped_ptr.h"
|
| +#include "ppapi/c/pp_var.h"
|
| +
|
| +struct NPObject;
|
| +typedef struct _NPVariant NPVariant;
|
| +typedef void* NPIdentifier;
|
| +
|
| +namespace webkit {
|
| +namespace ppapi {
|
| +
|
| +class PluginModule;
|
| +class PluginObject;
|
| +
|
| +// Utilities -------------------------------------------------------------------
|
| +
|
| +// Converts the given PP_Var to an NPVariant, returning true on success.
|
| +// False means that the given variant is invalid. In this case, the result
|
| +// NPVariant will be set to a void one.
|
| +//
|
| +// The contents of the PP_Var will be copied unless the PP_Var corresponds to
|
| +// an object.
|
| +bool PPVarToNPVariant(PP_Var var, NPVariant* result);
|
| +
|
| +// PPResultAndExceptionToNPResult ----------------------------------------------
|
| +
|
| +// Convenience object for converting a PPAPI call that can throw an exception
|
| +// and optionally return a value, back to the NPAPI layer which expects a
|
| +// NPVariant as a result.
|
| +//
|
| +// Normal usage is that you will pass the result of exception() to the
|
| +// PPAPI function as the exception output parameter. Then you will either
|
| +// call SetResult with the result of the PPAPI call, or
|
| +// CheckExceptionForNoResult if the PPAPI call doesn't return a PP_Var.
|
| +//
|
| +// Both SetResult and CheckExceptionForNoResult will throw an exception to
|
| +// the JavaScript library if the plugin reported an exception. SetResult
|
| +// will additionally convert the result to an NPVariant and write it to the
|
| +// output parameter given in the constructor.
|
| +class PPResultAndExceptionToNPResult {
|
| + public:
|
| + // The object_var parameter is the object to associate any exception with.
|
| + // It may not be NULL.
|
| + //
|
| + // The np_result parameter is the NPAPI result output parameter. This may be
|
| + // NULL if there is no NPVariant result (like for HasProperty). If this is
|
| + // specified, you must call SetResult() to set it. If it is not, you must
|
| + // call CheckExceptionForNoResult to do the exception checking with no result
|
| + // conversion.
|
| + PPResultAndExceptionToNPResult(NPObject* object_var, NPVariant* np_result);
|
| +
|
| + ~PPResultAndExceptionToNPResult();
|
| +
|
| + // Returns true if an exception has been set.
|
| + bool has_exception() const { return exception_.type != PP_VARTYPE_UNDEFINED; }
|
| +
|
| + // Returns a pointer to the exception. You would pass this to the PPAPI
|
| + // function as the exception parameter. If it is set to non-void, this object
|
| + // will take ownership of destroying it.
|
| + PP_Var* exception() { return &exception_; }
|
| +
|
| + // Returns true if everything succeeded with no exception. This is valid only
|
| + // after calling SetResult/CheckExceptionForNoResult.
|
| + bool success() const {
|
| + return success_;
|
| + }
|
| +
|
| + // Call this with the return value of the PPAPI function. It will convert
|
| + // the result to the NPVariant output parameter and pass any exception on to
|
| + // the JS engine. It will update the success flag and return it.
|
| + bool SetResult(PP_Var result);
|
| +
|
| + // Call this after calling a PPAPI function that could have set the
|
| + // exception. It will pass the exception on to the JS engine and update
|
| + // the success flag.
|
| + //
|
| + // The success flag will be returned.
|
| + bool CheckExceptionForNoResult();
|
| +
|
| + // Call this to ignore any exception. This prevents the DCHECK from failing
|
| + // in the destructor.
|
| + void IgnoreException();
|
| +
|
| + private:
|
| + // Throws the current exception to JS. The exception must be set.
|
| + void ThrowException();
|
| +
|
| + NPObject* object_var_; // Non-owning ref (see constructor).
|
| + NPVariant* np_result_; // Output value, possibly NULL (see constructor).
|
| + PP_Var exception_; // Exception set by the PPAPI call. We own a ref to it.
|
| + bool success_; // See the success() function above.
|
| + bool checked_exception_; // SetResult/CheckExceptionForNoResult was called.
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(PPResultAndExceptionToNPResult);
|
| +};
|
| +
|
| +// PPVarArrayFromNPVariantArray ------------------------------------------------
|
| +
|
| +// Converts an array of NPVariants to an array of PP_Var, and scopes the
|
| +// ownership of the PP_Var. This is used when converting argument lists from
|
| +// WebKit to the plugin.
|
| +class PPVarArrayFromNPVariantArray {
|
| + public:
|
| + PPVarArrayFromNPVariantArray(PluginModule* module,
|
| + size_t size,
|
| + const NPVariant* variants);
|
| + ~PPVarArrayFromNPVariantArray();
|
| +
|
| + PP_Var* array() { return array_.get(); }
|
| +
|
| + private:
|
| + size_t size_;
|
| + scoped_array<PP_Var> array_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(PPVarArrayFromNPVariantArray);
|
| +};
|
| +
|
| +// PPVarFromNPObject -----------------------------------------------------------
|
| +
|
| +// Converts an NPObject tp PP_Var, and scopes the ownership of the PP_Var. This
|
| +// is used when converting 'this' pointer from WebKit to the plugin.
|
| +class PPVarFromNPObject {
|
| + public:
|
| + PPVarFromNPObject(PluginModule* module, NPObject* object);
|
| + ~PPVarFromNPObject();
|
| +
|
| + PP_Var var() const { return var_; }
|
| +
|
| + private:
|
| + const PP_Var var_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(PPVarFromNPObject);
|
| +};
|
| +
|
| +// NPObjectAccessorWithIdentifier ----------------------------------------------
|
| +
|
| +// Helper class for our NPObject wrapper. This converts a call from WebKit
|
| +// where it gives us an NPObject and an NPIdentifier to an easily-accessible
|
| +// ObjectVar (corresponding to the NPObject) and PP_Var (corresponding to the
|
| +// NPIdentifier).
|
| +//
|
| +// If the NPObject or identifier is invalid, we'll set is_valid() to false.
|
| +// The caller should check is_valid() before doing anything with the class.
|
| +//
|
| +// JS can't have integer functions, so when dealing with these, we don't want
|
| +// to allow integer identifiers. The calling code can decode if it wants to
|
| +// allow integer identifiers (like for property access) or prohibit them
|
| +// (like for method calling) by setting |allow_integer_identifier|. If this
|
| +// is false and the identifier is an integer, we'll set is_valid() to false.
|
| +//
|
| +// Getting an integer identifier in this case should be impossible. V8
|
| +// shouldn't be allowing this, and the Pepper Var calls from the plugin are
|
| +// supposed to error out before calling into V8 (which will then call us back).
|
| +// Aside from an egregious error, the only time this could happen is an NPAPI
|
| +// plugin calling us.
|
| +class NPObjectAccessorWithIdentifier {
|
| + public:
|
| + NPObjectAccessorWithIdentifier(NPObject* object,
|
| + NPIdentifier identifier,
|
| + bool allow_integer_identifier);
|
| + ~NPObjectAccessorWithIdentifier();
|
| +
|
| + // Returns true if both the object and identifier are valid.
|
| + bool is_valid() const {
|
| + return object_ && identifier_.type != PP_VARTYPE_UNDEFINED;
|
| + }
|
| +
|
| + PluginObject* object() { return object_; }
|
| + PP_Var identifier() const { return identifier_; }
|
| +
|
| + private:
|
| + PluginObject* object_;
|
| + PP_Var identifier_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(NPObjectAccessorWithIdentifier);
|
| +};
|
| +
|
| +} // namespace ppapi
|
| +} // namespace webkit
|
| +
|
| +#endif // WEBKIT_PLUGINS_PPAPI_NPAPI_GLUE_H_
|
|
|
| Property changes on: webkit/plugins/ppapi/npapi_glue.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|