| Index: webkit/glue/plugins/pepper_var.h
|
| ===================================================================
|
| --- webkit/glue/plugins/pepper_var.h (revision 69381)
|
| +++ webkit/glue/plugins/pepper_var.h (working copy)
|
| @@ -1,251 +0,0 @@
|
| -// 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_GLUE_PLUGINS_PEPPER_VAR_H_
|
| -#define WEBKIT_GLUE_PLUGINS_PEPPER_VAR_H_
|
| -
|
| -#include <string>
|
| -
|
| -#include "webkit/glue/plugins/pepper_resource.h"
|
| -
|
| -struct PP_Var;
|
| -struct PPB_Var;
|
| -struct PPB_Var_Deprecated;
|
| -typedef struct NPObject NPObject;
|
| -typedef struct _NPVariant NPVariant;
|
| -typedef void* NPIdentifier;
|
| -
|
| -namespace pepper {
|
| -
|
| -// Var -------------------------------------------------------------------------
|
| -
|
| -// Represents a non-POD var. This is derived from a resource even though it
|
| -// isn't a resource from the plugin's perspective. This allows us to re-use
|
| -// the refcounting and the association with the module from the resource code.
|
| -class Var : public Resource {
|
| - public:
|
| - virtual ~Var();
|
| -
|
| - // Resource overrides.
|
| - virtual Var* AsVar();
|
| -
|
| - // Returns a PP_Var that corresponds to the given NPVariant. The contents of
|
| - // the NPVariant will be copied unless the NPVariant corresponds to an
|
| - // object. This will handle all Variant types including POD, strings, and
|
| - // objects.
|
| - //
|
| - // The returned PP_Var will have a refcount of 1, this passing ownership of
|
| - // the reference to the caller. This is suitable for returning to a plugin.
|
| - static PP_Var NPVariantToPPVar(PluginModule* module,
|
| - const NPVariant* variant);
|
| -
|
| - // Returns a NPIdentifier that corresponds to the given PP_Var. The contents
|
| - // of the PP_Var will be copied. Returns 0 if the given PP_Var is not a a
|
| - // string or integer type.
|
| - static NPIdentifier PPVarToNPIdentifier(PP_Var var);
|
| -
|
| - // Returns a PP_Var corresponding to the given identifier. In the case of
|
| - // a string identifier, the string will be allocated associated with the
|
| - // given module. A returned string will have a reference count of 1.
|
| - static PP_Var NPIdentifierToPPVar(PluginModule* module, NPIdentifier id);
|
| -
|
| - // Provides access to the manual refcounting of a PP_Var from the plugin's
|
| - // perspective. This is different than the AddRef/Release on this scoped
|
| - // object. This uses the ResourceTracker, which keeps a separate "plugin
|
| - // refcount" that prevents the plugin from messing up our refcounting or
|
| - // freeing something out from under us.
|
| - //
|
| - // You should not generally need to use these functions. However, if you
|
| - // call a plugin function that returns a var, it will transfer a ref to us
|
| - // (the caller) which in the case of a string or object var will need to
|
| - // be released.
|
| - //
|
| - // Example, assuming we're expecting the plugin to return a string:
|
| - // PP_Var rv = some_ppp_interface->DoSomething(a, b, c);
|
| - //
|
| - // // Get the string value. This will take a reference to the object which
|
| - // // will prevent it from being deleted out from under us when we call
|
| - // // PluginReleasePPVar().
|
| - // scoped_refptr<StringVar> string(StringVar::FromPPVar(rv));
|
| - //
|
| - // // Release the reference the plugin gave us when returning the value.
|
| - // // This is legal to do for all types of vars.
|
| - // Var::PluginReleasePPVar(rv);
|
| - //
|
| - // // Use the string.
|
| - // if (!string)
|
| - // return false; // It didn't return a proper string.
|
| - // UseTheString(string->value());
|
| - static void PluginAddRefPPVar(PP_Var var);
|
| - static void PluginReleasePPVar(PP_Var var);
|
| -
|
| - // Returns the PPB_Var_Deprecated interface for the plugin to use.
|
| - static const PPB_Var_Deprecated* GetDeprecatedInterface();
|
| -
|
| - // Returns the PPB_Var interface for the plugin to use.
|
| - static const PPB_Var* GetInterface();
|
| -
|
| - protected:
|
| - // This can only be constructed as a StringVar or an ObjectVar.
|
| - explicit Var(PluginModule* module);
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(Var);
|
| -};
|
| -
|
| -// StringVar -------------------------------------------------------------------
|
| -
|
| -// Represents a string-based Var.
|
| -//
|
| -// Returning a given string as a PP_Var:
|
| -// return StringVar::StringToPPVar(module, my_string);
|
| -//
|
| -// Converting a PP_Var to a string:
|
| -// scoped_refptr<StringVar> string(StringVar::FromPPVar(var));
|
| -// if (!string)
|
| -// return false; // Not a string or an invalid var.
|
| -// DoSomethingWithTheString(string->value());
|
| -class StringVar : public Var {
|
| - public:
|
| - StringVar(PluginModule* module, const char* str, uint32 len);
|
| - virtual ~StringVar();
|
| -
|
| - const std::string& value() const { return value_; }
|
| -
|
| - // Resource overrides.
|
| - virtual StringVar* AsStringVar();
|
| -
|
| - // Helper function to create a PP_Var of type string that contains a copy of
|
| - // the given string. The input data must be valid UTF-8 encoded text, if it
|
| - // is not valid UTF-8, a NULL var will be returned.
|
| - //
|
| - // The return value will have a reference count of 1. Internally, this will
|
| - // create a StringVar, associate it with a module, and return the reference
|
| - // to it in the var.
|
| - static PP_Var StringToPPVar(PluginModule* module, const std::string& str);
|
| - static PP_Var StringToPPVar(PluginModule* module,
|
| - const char* str, uint32 len);
|
| -
|
| - // Helper function that converts a PP_Var to a string. This will return NULL
|
| - // if the PP_Var is not of string type or the string is invalid.
|
| - static scoped_refptr<StringVar> FromPPVar(PP_Var var);
|
| -
|
| - private:
|
| - std::string value_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(StringVar);
|
| -};
|
| -
|
| -// ObjectVar -------------------------------------------------------------------
|
| -
|
| -// Represents a JavaScript object Var. By itself, this represents random
|
| -// NPObjects that a given plugin (identified by the resource's module) wants to
|
| -// reference. If two different modules reference the same NPObject (like the
|
| -// "window" object), then there will be different ObjectVar's (and hence PP_Var
|
| -// IDs) for each module. This allows us to track all references owned by a
|
| -// given module and free them when the plugin exits independently of other
|
| -// plugins that may be running at the same time.
|
| -//
|
| -// See StringVar for examples, except obviously using NPObjects instead of
|
| -// strings.
|
| -class ObjectVar : public Var {
|
| - public:
|
| - virtual ~ObjectVar();
|
| -
|
| - // Resource overrides.
|
| - virtual ObjectVar* AsObjectVar();
|
| -
|
| - // Returns the underlying NPObject corresponding to this ObjectVar.
|
| - // Guaranteed non-NULL.
|
| - NPObject* np_object() const { return np_object_; }
|
| -
|
| - // Helper function to create a PP_Var of type object that contains the given
|
| - // NPObject for use byt he given module. Calling this function multiple times
|
| - // given the same module + NPObject results in the same PP_Var, assuming that
|
| - // there is still a PP_Var with a reference open to it from the previous
|
| - // call.
|
| - //
|
| - // The module is necessary because we can have different modules pointing to
|
| - // the same NPObject, and we want to keep their refs separate.
|
| - //
|
| - // If no ObjectVar currently exists corresponding to the NPObject, one is
|
| - // created associated with the given module.
|
| - static PP_Var NPObjectToPPVar(PluginModule* module, NPObject* object);
|
| -
|
| - // Helper function that converts a PP_Var to an object. This will return NULL
|
| - // if the PP_Var is not of object type or the object is invalid.
|
| - static scoped_refptr<ObjectVar> FromPPVar(PP_Var var);
|
| -
|
| - protected:
|
| - // You should always use FromNPObject to create an ObjectVar. This function
|
| - // guarantees that we maintain the 1:1 mapping between NPObject and
|
| - // ObjectVar.
|
| - ObjectVar(PluginModule* module, NPObject* np_object);
|
| -
|
| - private:
|
| - // Guaranteed non-NULL, this is the underlying object used by WebKit. We
|
| - // hold a reference to this object.
|
| - NPObject* np_object_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ObjectVar);
|
| -};
|
| -
|
| -// TryCatch --------------------------------------------------------------------
|
| -
|
| -// Instantiate this object on the stack to catch V8 exceptions and pass them
|
| -// to an optional out parameter supplied by the plugin.
|
| -class TryCatch {
|
| - public:
|
| - // The given exception may be NULL if the consumer isn't interested in
|
| - // catching exceptions. If non-NULL, the given var will be updated if any
|
| - // exception is thrown (so it must outlive the TryCatch object).
|
| - //
|
| - // The module associated with the exception is passed so we know which module
|
| - // to associate any exception string with. It may be NULL if you don't know
|
| - // the module at construction time, in which case you should set it later
|
| - // by calling set_module().
|
| - //
|
| - // If an exception is thrown when the module is NULL, setting *any* exception
|
| - // will result in using the InvalidObjectException.
|
| - TryCatch(PluginModule* module, PP_Var* exception);
|
| - ~TryCatch();
|
| -
|
| - // Get and set the module. This may be NULL (see the constructor).
|
| - PluginModule* module() { return module_; }
|
| - void set_module(PluginModule* module) { module_ = module; }
|
| -
|
| - // Returns true is an exception has been thrown. This can be true immediately
|
| - // after construction if the var passed to the constructor is non-void.
|
| - bool has_exception() const { return has_exception_; }
|
| -
|
| - // Sets the given exception. If no module has been set yet, the message will
|
| - // be ignored (since we have no module to associate the string with) and the
|
| - // SetInvalidObjectException() will be used instead.
|
| - //
|
| - // If an exception has been previously set, this function will do nothing
|
| - // (normally you want only the first exception).
|
| - void SetException(const char* message);
|
| -
|
| - // Sets the exception to be a generic message contained in a magic string
|
| - // not associated with any module.
|
| - void SetInvalidObjectException();
|
| -
|
| - private:
|
| - static void Catch(void* self, const char* message);
|
| -
|
| - PluginModule* module_;
|
| -
|
| - // True if an exception has been thrown. Since the exception itself may be
|
| - // NULL if the plugin isn't interested in getting the exception, this will
|
| - // always indicate if SetException has been called, regardless of whether
|
| - // the exception itself has been stored.
|
| - bool has_exception_;
|
| -
|
| - // May be null if the consumer isn't interesting in catching exceptions.
|
| - PP_Var* exception_;
|
| -};
|
| -
|
| -} // namespace pepper
|
| -
|
| -#endif // WEBKIT_GLUE_PLUGINS_PEPPER_VAR_H_
|
|
|