Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Unified Diff: ppapi/cpp/private/var_private.h

Issue 6823016: Create a VarPrivate interface to contain the scripting helper functions of Var. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ppapi/cpp/private/var_private.h
===================================================================
--- ppapi/cpp/private/var_private.h (revision 80958)
+++ ppapi/cpp/private/var_private.h (working copy)
@@ -2,103 +2,33 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef PPAPI_CPP_VAR_H_
-#define PPAPI_CPP_VAR_H_
+#ifndef PPAPI_CPP_PRIVATE_VAR_PRIVATE_H_
+#define PPAPI_CPP_PRIVATE_VAR_PRIVATE_H_
-#include <string>
-#include <vector>
+#include "ppapi/cpp/var.h"
-#include "ppapi/c/pp_module.h"
-#include "ppapi/c/pp_var.h"
-
namespace pp {
-class Instance;
-
-namespace deprecated {
-class ScriptableObject;
-}
-
-class Var {
+// VarPrivate is a version of Var that exposes the private scripting API.
+// It's designed to be mostly interchangable with Var since most callers will
+// be dealing with Vars from various places.
+class VarPrivate : public Var {
public:
- struct Null {}; // Special value passed to constructor to make NULL.
+ VarPrivate() : Var() {}
+ VarPrivate(Null) : Var(Null()) {}
+ VarPrivate(bool b) : Var(b) {}
+ VarPrivate(int32_t i) : Var(i) {}
+ VarPrivate(double d) : Var(d) {}
+ VarPrivate(const char* utf8_str) : Var(utf8_str) {}
+ VarPrivate(const std::string& utf8_str) : Var(utf8_str) {}
+ VarPrivate(PassRef, PP_Var var) : Var(PassRef(), var) {}
+ VarPrivate(DontManage, PP_Var var) : Var(DontManage(), var) {}
+ VarPrivate(Instance* instance, deprecated::ScriptableObject* object);
+ VarPrivate(const Var& other) : Var(other) {}
+ VarPrivate(const VarPrivate& other) : Var((const Var&)other) {}
dmichael(do not use this one) 2011/04/08 22:16:28 Assuming we really do want conversion contructors,
brettw 2011/04/10 05:08:41 The conversion constructors are important for the
dmichael (off chromium) 2011/04/11 00:09:16 Makes sense.
- Var(); // PP_Var of type Undefined.
- Var(Null); // PP_Var of type Null.
- Var(bool b);
- Var(int32_t i);
- Var(double d);
- Var(const char* utf8_str); // Must be encoded in UTF-8.
- Var(const std::string& utf8_str); // Must be encoded in UTF-8.
+ virtual ~VarPrivate() {}
- // This magic constructor is used when we've gotten a PP_Var as a return
- // value that has already been addref'ed for us.
- struct PassRef {};
- Var(PassRef, PP_Var var) {
- var_ = var;
- needs_release_ = true;
- }
-
- // TODO(brettw): remove DontManage when this bug is fixed
- // http://code.google.com/p/chromium/issues/detail?id=52105
- // This magic constructor is used when we've given a PP_Var as an input
- // argument from somewhere and that reference is managing the reference
- // count for us. The object will not be AddRef'ed or Release'd by this
- // class instance..
- struct DontManage {};
- Var(DontManage, PP_Var var) {
- var_ = var;
- needs_release_ = false;
- }
-
- // Takes ownership of the given pointer.
- Var(Instance* instance, deprecated::ScriptableObject* object);
-
- Var(const Var& other);
-
- virtual ~Var();
-
- Var& operator=(const Var& other);
-
- bool operator==(const Var& other) const;
-
- bool is_undefined() const { return var_.type == PP_VARTYPE_UNDEFINED; }
- bool is_null() const { return var_.type == PP_VARTYPE_NULL; }
- bool is_bool() const { return var_.type == PP_VARTYPE_BOOL; }
- bool is_string() const { return var_.type == PP_VARTYPE_STRING; }
- bool is_object() const { return var_.type == PP_VARTYPE_OBJECT; }
-
- // IsInt and IsDouble return the internal representation. The JavaScript
- // runtime may convert between the two as needed, so the distinction may
- // not be relevant in all cases (int is really an optimization inside the
- // runtime). So most of the time, you will want to check IsNumber.
- bool is_int() const { return var_.type == PP_VARTYPE_INT32; }
- bool is_double() const { return var_.type == PP_VARTYPE_DOUBLE; }
- bool is_number() const {
- return var_.type == PP_VARTYPE_INT32 ||
- var_.type == PP_VARTYPE_DOUBLE;
- }
-
- // Assumes the internal representation IsBool. If it's not, it will assert
- // in debug mode, and return false.
- bool AsBool() const;
-
- // AsInt and AsDouble implicitly convert between ints and doubles. This is
- // because JavaScript doesn't have a concept of ints and doubles, only
- // numbers. The distinction between the two is an optimization inside the
- // compiler. Since converting from a double to an int may be lossy, if you
- // care about the distinction, either always work in doubles, or check
- // !IsDouble() before calling AsInt().
- //
- // These functions will assert in debug mode and return 0 if the internal
- // representation is not IsNumber().
- int32_t AsInt() const;
- double AsDouble() const;
-
- // This assumes the object is of type string. If it's not, it will assert
- // in debug mode, and return an empty string.
- std::string AsString() const;
-
// This assumes the object is of type object. If it's not, it will assert in
// debug mode. If it is not an object or not a ScriptableObject type, returns
// NULL.
@@ -106,45 +36,26 @@
bool HasProperty(const Var& name, Var* exception = NULL) const;
bool HasMethod(const Var& name, Var* exception = NULL) const;
- Var GetProperty(const Var& name, Var* exception = NULL) const;
+ VarPrivate GetProperty(const Var& name, Var* exception = NULL) const;
void GetAllPropertyNames(std::vector<Var>* properties,
Var* exception = NULL) const;
void SetProperty(const Var& name, const Var& value, Var* exception = NULL);
void RemoveProperty(const Var& name, Var* exception = NULL);
- Var Call(const Var& method_name, uint32_t argc, Var* argv,
+ VarPrivate Call(const Var& method_name, uint32_t argc, Var* argv,
Var* exception = NULL);
- Var Construct(uint32_t argc, Var* argv, Var* exception = NULL) const;
+ VarPrivate Construct(uint32_t argc, Var* argv, Var* exception = NULL) const;
// Convenience functions for calling functions with small # of args.
- Var Call(const Var& method_name, Var* exception = NULL);
- Var Call(const Var& method_name, const Var& arg1, Var* exception = NULL);
- Var Call(const Var& method_name, const Var& arg1, const Var& arg2,
- Var* exception = NULL);
- Var Call(const Var& method_name, const Var& arg1, const Var& arg2,
- const Var& arg3, Var* exception = NULL);
- Var Call(const Var& method_name, const Var& arg1, const Var& arg2,
- const Var& arg3, const Var& arg4, Var* exception = NULL);
+ VarPrivate Call(const Var& method_name, Var* exception = NULL);
+ VarPrivate Call(const Var& method_name, const Var& arg1,
+ Var* exception = NULL);
+ VarPrivate Call(const Var& method_name, const Var& arg1, const Var& arg2,
+ Var* exception = NULL);
+ VarPrivate Call(const Var& method_name, const Var& arg1, const Var& arg2,
+ const Var& arg3, Var* exception = NULL);
+ VarPrivate Call(const Var& method_name, const Var& arg1, const Var& arg2,
+ const Var& arg3, const Var& arg4, Var* exception = NULL);
- // Returns a const reference to the PP_Var managed by this Var object.
- const PP_Var& pp_var() const {
- return var_;
- }
-
- // Detaches from the internal PP_Var of this object, keeping the reference
- // count the same. This is used when returning a PP_Var from an API function
- // where the caller expects the return value to be AddRef'ed for it.
- PP_Var Detach() {
- PP_Var ret = var_;
- var_ = PP_MakeUndefined();
- needs_release_ = false;
- return ret;
- }
-
- // Prints a short description "Var<X>" that can be used for logging, where
- // "X" is the underlying scalar or "UNDEFINED" or "OBJ" as it does not call
- // into the browser to get the object description.
- std::string DebugString() const;
-
// For use when calling the raw C PPAPI when using the C++ Var as a possibly
// NULL exception. This will handle getting the address of the internal value
// out if it's non-NULL and fixing up the reference count.
@@ -164,7 +75,7 @@
//
// Example:
// void FooBar(a, b, Var* exception = NULL) {
- // foo_interface->Bar(a, b, Var::OutException(exception).get());
+ // foo_interface->Bar(a, b, VarPrivate::OutException(exception).get());
// }
class OutException {
public:
@@ -172,7 +83,7 @@
: output_(v),
originally_had_exception_(v && v->is_null()) {
if (output_) {
- temp_ = output_->var_;
+ temp_ = output_->pp_var();
} else {
temp_.padding = 0;
temp_.type = PP_VARTYPE_UNDEFINED;
@@ -199,12 +110,9 @@
// Prevent an arbitrary pointer argument from being implicitly converted to
// a bool at Var construction. If somebody makes such a mistake, (s)he will
// get a compilation error.
- Var(void* non_scriptable_object_pointer);
-
- PP_Var var_;
- bool needs_release_;
+ VarPrivate(void* non_scriptable_object_pointer);
};
} // namespace pp
-#endif // PPAPI_CPP_VAR_H_
+#endif // PPAPI_CPP_PRIVATE_VAR_PRIVATE_H_

Powered by Google App Engine
This is Rietveld 408576698