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

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

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.cc
===================================================================
--- ppapi/cpp/private/var_private.cc (revision 80958)
+++ ppapi/cpp/private/var_private.cc (working copy)
@@ -2,27 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "ppapi/cpp/var.h"
+#include "ppapi/cpp/private/var_private.h"
-#include <stdio.h>
-#include <string.h>
-
-#include <algorithm>
-
-#include "ppapi/c/pp_var.h"
#include "ppapi/c/dev/ppb_var_deprecated.h"
-#include "ppapi/cpp/common.h"
#include "ppapi/cpp/instance.h"
#include "ppapi/cpp/logging.h"
-#include "ppapi/cpp/module.h"
#include "ppapi/cpp/module_impl.h"
#include "ppapi/cpp/dev/scriptable_object_deprecated.h"
-// Define equivalent to snprintf on Windows.
-#if defined(_MSC_VER)
-# define snprintf sprintf_s
-#endif
-
namespace pp {
namespace {
@@ -31,77 +18,12 @@
return PPB_VAR_DEPRECATED_INTERFACE;
}
-// Technically you can call AddRef and Release on any Var, but it may involve
-// cross-process calls depending on the plugin. This is an optimization so we
-// only do refcounting on the necessary objects.
-inline bool NeedsRefcounting(const PP_Var& var) {
- return var.type == PP_VARTYPE_STRING || var.type == PP_VARTYPE_OBJECT;
-}
-
} // namespace
using namespace deprecated;
-Var::Var() {
- var_.type = PP_VARTYPE_UNDEFINED;
- var_.padding = 0;
- needs_release_ = false;
-}
-
-Var::Var(Null) {
- var_.type = PP_VARTYPE_NULL;
- var_.padding = 0;
- needs_release_ = false;
-}
-
-Var::Var(bool b) {
- var_.type = PP_VARTYPE_BOOL;
- var_.padding = 0;
- var_.value.as_bool = BoolToPPBool(b);
- needs_release_ = false;
-}
-
-Var::Var(int32_t i) {
- var_.type = PP_VARTYPE_INT32;
- var_.padding = 0;
- var_.value.as_int = i;
- needs_release_ = false;
-}
-
-Var::Var(double d) {
- var_.type = PP_VARTYPE_DOUBLE;
- var_.padding = 0;
- var_.value.as_double = d;
- needs_release_ = false;
-}
-
-Var::Var(const char* utf8_str) {
+VarPrivate::VarPrivate(Instance* instance, ScriptableObject* object) {
if (has_interface<PPB_Var_Deprecated>()) {
- uint32_t len = utf8_str ? static_cast<uint32_t>(strlen(utf8_str)) : 0;
- var_ = get_interface<PPB_Var_Deprecated>()->VarFromUtf8(
- Module::Get()->pp_module(), utf8_str, len);
- } else {
- var_.type = PP_VARTYPE_NULL;
- var_.padding = 0;
- }
- needs_release_ = (var_.type == PP_VARTYPE_STRING);
-}
-
-Var::Var(const std::string& utf8_str) {
- if (has_interface<PPB_Var_Deprecated>()) {
- var_ = get_interface<PPB_Var_Deprecated>()->VarFromUtf8(
- Module::Get()->pp_module(),
- utf8_str.c_str(),
- static_cast<uint32_t>(utf8_str.size()));
- } else {
- var_.type = PP_VARTYPE_NULL;
- var_.padding = 0;
- }
- needs_release_ = (var_.type == PP_VARTYPE_STRING);
-}
-
-Var::Var(Instance* instance, ScriptableObject* object) {
- if (has_interface<PPB_Var_Deprecated>()) {
var_ = get_interface<PPB_Var_Deprecated>()->CreateObject(
instance->pp_instance(), object->GetClass(), object);
needs_release_ = true;
@@ -112,109 +34,7 @@
}
}
-Var::Var(const Var& other) {
- var_ = other.var_;
- if (NeedsRefcounting(var_)) {
- if (has_interface<PPB_Var_Deprecated>()) {
- needs_release_ = true;
- get_interface<PPB_Var_Deprecated>()->AddRef(var_);
- } else {
- var_.type = PP_VARTYPE_NULL;
- needs_release_ = false;
- }
- } else {
- needs_release_ = false;
- }
-}
-
-Var::~Var() {
- if (needs_release_ && has_interface<PPB_Var_Deprecated>())
- get_interface<PPB_Var_Deprecated>()->Release(var_);
-}
-
-Var& Var::operator=(const Var& other) {
- if (needs_release_ && has_interface<PPB_Var_Deprecated>())
- get_interface<PPB_Var_Deprecated>()->Release(var_);
- var_ = other.var_;
- if (NeedsRefcounting(var_)) {
- if (has_interface<PPB_Var_Deprecated>()) {
- needs_release_ = true;
- get_interface<PPB_Var_Deprecated>()->AddRef(var_);
- } else {
- var_.type = PP_VARTYPE_NULL;
- needs_release_ = false;
- }
- } else {
- needs_release_ = false;
- }
- return *this;
-}
-
-bool Var::operator==(const Var& other) const {
- if (var_.type != other.var_.type)
- return false;
- switch (var_.type) {
- case PP_VARTYPE_UNDEFINED:
- case PP_VARTYPE_NULL:
- return true;
- case PP_VARTYPE_BOOL:
- return AsBool() == other.AsBool();
- case PP_VARTYPE_INT32:
- return AsInt() == other.AsInt();
- case PP_VARTYPE_DOUBLE:
- return AsDouble() == other.AsDouble();
- case PP_VARTYPE_STRING:
- if (var_.value.as_id == other.var_.value.as_id)
- return true;
- return AsString() == other.AsString();
- // TODO(neb): Document that this is === and not ==, unlike strings.
- case PP_VARTYPE_OBJECT:
- return var_.value.as_id == other.var_.value.as_id;
- default:
- return false;
- }
-}
-
-bool Var::AsBool() const {
- if (!is_bool()) {
- PP_NOTREACHED();
- return false;
- }
- return PPBoolToBool(var_.value.as_bool);
-}
-
-int32_t Var::AsInt() const {
- if (is_int())
- return var_.value.as_int;
- if (is_double())
- return static_cast<int>(var_.value.as_double);
- PP_NOTREACHED();
- return 0;
-}
-
-double Var::AsDouble() const {
- if (is_double())
- return var_.value.as_double;
- if (is_int())
- return static_cast<double>(var_.value.as_int);
- PP_NOTREACHED();
- return 0.0;
-}
-
-std::string Var::AsString() const {
- if (!is_string()) {
- PP_NOTREACHED();
- return std::string();
- }
-
- if (!has_interface<PPB_Var_Deprecated>())
- return std::string();
- uint32_t len;
- const char* str = get_interface<PPB_Var_Deprecated>()->VarToUtf8(var_, &len);
- return std::string(str, len);
-}
-
-ScriptableObject* Var::AsScriptableObject() const {
+ScriptableObject* VarPrivate::AsScriptableObject() const {
if (!is_object()) {
PP_NOTREACHED();
} else if (has_interface<PPB_Var_Deprecated>()) {
@@ -227,29 +47,29 @@
return NULL;
}
-bool Var::HasProperty(const Var& name, Var* exception) const {
+bool VarPrivate::HasProperty(const Var& name, Var* exception) const {
if (!has_interface<PPB_Var_Deprecated>())
return false;
return get_interface<PPB_Var_Deprecated>()->HasProperty(
- var_, name.var_, OutException(exception).get());
+ var_, name.pp_var(), OutException(exception).get());
}
-bool Var::HasMethod(const Var& name, Var* exception) const {
+bool VarPrivate::HasMethod(const Var& name, Var* exception) const {
if (!has_interface<PPB_Var_Deprecated>())
return false;
return get_interface<PPB_Var_Deprecated>()->HasMethod(
- var_, name.var_, OutException(exception).get());
+ var_, name.pp_var(), OutException(exception).get());
}
-Var Var::GetProperty(const Var& name, Var* exception) const {
+VarPrivate VarPrivate::GetProperty(const Var& name, Var* exception) const {
if (!has_interface<PPB_Var_Deprecated>())
return Var();
return Var(PassRef(), get_interface<PPB_Var_Deprecated>()->GetProperty(
- var_, name.var_, OutException(exception).get()));
+ var_, name.pp_var(), OutException(exception).get()));
}
-void Var::GetAllPropertyNames(std::vector<Var>* properties,
- Var* exception) const {
+void VarPrivate::GetAllPropertyNames(std::vector<Var>* properties,
+ Var* exception) const {
if (!has_interface<PPB_Var_Deprecated>())
return;
PP_Var* props = NULL;
@@ -266,46 +86,50 @@
Module::Get()->core()->MemFree(props);
}
-void Var::SetProperty(const Var& name, const Var& value, Var* exception) {
+void VarPrivate::SetProperty(const Var& name, const Var& value,
+ Var* exception) {
if (!has_interface<PPB_Var_Deprecated>())
return;
get_interface<PPB_Var_Deprecated>()->SetProperty(
- var_, name.var_, value.var_, OutException(exception).get());
+ var_, name.pp_var(), value.pp_var(), OutException(exception).get());
}
-void Var::RemoveProperty(const Var& name, Var* exception) {
+void VarPrivate::RemoveProperty(const Var& name, Var* exception) {
if (!has_interface<PPB_Var_Deprecated>())
return;
get_interface<PPB_Var_Deprecated>()->RemoveProperty(
- var_, name.var_, OutException(exception).get());
+ var_, name.pp_var(), OutException(exception).get());
}
-Var Var::Call(const Var& method_name, uint32_t argc, Var* argv,
- Var* exception) {
+VarPrivate VarPrivate::Call(const Var& method_name, uint32_t argc, Var* argv,
+ Var* exception) {
if (!has_interface<PPB_Var_Deprecated>())
return Var();
if (argc > 0) {
std::vector<PP_Var> args;
args.reserve(argc);
for (size_t i = 0; i < argc; i++)
- args.push_back(argv[i].var_);
+ args.push_back(argv[i].pp_var());
return Var(PassRef(), get_interface<PPB_Var_Deprecated>()->Call(
- var_, method_name.var_, argc, &args[0], OutException(exception).get()));
+ var_, method_name.pp_var(), argc, &args[0],
+ OutException(exception).get()));
} else {
// Don't try to get the address of a vector if it's empty.
return Var(PassRef(), get_interface<PPB_Var_Deprecated>()->Call(
- var_, method_name.var_, 0, NULL, OutException(exception).get()));
+ var_, method_name.pp_var(), 0, NULL,
+ OutException(exception).get()));
}
}
-Var Var::Construct(uint32_t argc, Var* argv, Var* exception) const {
+VarPrivate VarPrivate::Construct(uint32_t argc, Var* argv,
+ Var* exception) const {
if (!has_interface<PPB_Var_Deprecated>())
return Var();
if (argc > 0) {
std::vector<PP_Var> args;
args.reserve(argc);
for (size_t i = 0; i < argc; i++)
- args.push_back(argv[i].var_);
+ args.push_back(argv[i].pp_var());
return Var(PassRef(), get_interface<PPB_Var_Deprecated>()->Construct(
var_, argc, &args[0], OutException(exception).get()));
} else {
@@ -315,77 +139,48 @@
}
}
-Var Var::Call(const Var& method_name, Var* exception) {
+VarPrivate VarPrivate::Call(const Var& method_name, Var* exception) {
if (!has_interface<PPB_Var_Deprecated>())
return Var();
return Var(PassRef(), get_interface<PPB_Var_Deprecated>()->Call(
- var_, method_name.var_, 0, NULL, OutException(exception).get()));
+ var_, method_name.pp_var(), 0, NULL, OutException(exception).get()));
}
-Var Var::Call(const Var& method_name, const Var& arg1, Var* exception) {
+VarPrivate VarPrivate::Call(const Var& method_name, const Var& arg1,
+ Var* exception) {
if (!has_interface<PPB_Var_Deprecated>())
return Var();
- PP_Var args[1] = {arg1.var_};
+ PP_Var args[1] = {arg1.pp_var()};
return Var(PassRef(), get_interface<PPB_Var_Deprecated>()->Call(
- var_, method_name.var_, 1, args, OutException(exception).get()));
+ var_, method_name.pp_var(), 1, args, OutException(exception).get()));
}
-Var Var::Call(const Var& method_name, const Var& arg1, const Var& arg2,
- Var* exception) {
+VarPrivate VarPrivate::Call(const Var& method_name, const Var& arg1,
+ const Var& arg2, Var* exception) {
if (!has_interface<PPB_Var_Deprecated>())
return Var();
- PP_Var args[2] = {arg1.var_, arg2.var_};
+ PP_Var args[2] = {arg1.pp_var(), arg2.pp_var()};
return Var(PassRef(), get_interface<PPB_Var_Deprecated>()->Call(
- var_, method_name.var_, 2, args, OutException(exception).get()));
+ var_, method_name.pp_var(), 2, args, OutException(exception).get()));
}
-Var Var::Call(const Var& method_name, const Var& arg1, const Var& arg2,
- const Var& arg3, Var* exception) {
+VarPrivate VarPrivate::Call(const Var& method_name, const Var& arg1,
+ const Var& arg2, const Var& arg3, Var* exception) {
if (!has_interface<PPB_Var_Deprecated>())
return Var();
- PP_Var args[3] = {arg1.var_, arg2.var_, arg3.var_};
+ PP_Var args[3] = {arg1.pp_var(), arg2.pp_var(), arg3.pp_var()};
return Var(PassRef(), get_interface<PPB_Var_Deprecated>()->Call(
- var_, method_name.var_, 3, args, OutException(exception).get()));
+ var_, method_name.pp_var(), 3, args, OutException(exception).get()));
}
-Var Var::Call(const Var& method_name, const Var& arg1, const Var& arg2,
- const Var& arg3, const Var& arg4, Var* exception) {
+VarPrivate VarPrivate::Call(const Var& method_name, const Var& arg1,
+ const Var& arg2, const Var& arg3, const Var& arg4,
+ Var* exception) {
if (!has_interface<PPB_Var_Deprecated>())
return Var();
- PP_Var args[4] = {arg1.var_, arg2.var_, arg3.var_, arg4.var_};
+ PP_Var args[4] = {arg1.pp_var(), arg2.pp_var(), arg3.pp_var(), arg4.pp_var()};
return Var(PassRef(), get_interface<PPB_Var_Deprecated>()->Call(
- var_, method_name.var_, 4, args, OutException(exception).get()));
+ var_, method_name.pp_var(), 4, args, OutException(exception).get()));
}
-std::string Var::DebugString() const {
- char buf[256];
- if (is_undefined()) {
- snprintf(buf, sizeof(buf), "Var<UNDEFINED>");
- } else if (is_null()) {
- snprintf(buf, sizeof(buf), "Var<NULL>");
- } else if (is_bool()) {
- snprintf(buf, sizeof(buf), AsBool() ? "Var<true>" : "Var<false>");
- } else if (is_int()) {
- // Note that the following static_cast is necessary because
- // NativeClient's int32_t is actually "long".
- // TODO(sehr,polina): remove this after newlib is changed.
- snprintf(buf, sizeof(buf), "Var<%d>", static_cast<int>(AsInt()));
- } else if (is_double()) {
- snprintf(buf, sizeof(buf), "Var<%f>", AsDouble());
- } else if (is_string()) {
- char format[] = "Var<'%s'>";
- size_t decoration = sizeof(format) - 2; // The %s is removed.
- size_t available = sizeof(buf) - decoration;
- std::string str = AsString();
- if (str.length() > available) {
- str.resize(available - 3); // Reserve space for ellipsis.
- str.append("...");
- }
- snprintf(buf, sizeof(buf), format, str.c_str());
- } else if (is_object()) {
- snprintf(buf, sizeof(buf), "Var<OBJECT>");
- }
- return buf;
-}
-
} // namespace pp

Powered by Google App Engine
This is Rietveld 408576698