diff options
author | dmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-07 22:50:43 +0000 |
---|---|---|
committer | dmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-07 22:50:43 +0000 |
commit | 872caf56ebb67c01a01d0c8c612e171fd4332624 (patch) | |
tree | b574e7c9f2ac638f3dcd047bf58acc5365752df9 /ppapi/cpp/var.cc | |
parent | f498828c37cca39771d2a578c609020b5293197c (diff) | |
download | chromium_src-872caf56ebb67c01a01d0c8c612e171fd4332624.zip chromium_src-872caf56ebb67c01a01d0c8c612e171fd4332624.tar.gz chromium_src-872caf56ebb67c01a01d0c8c612e171fd4332624.tar.bz2 |
Remove PP_Module from parameters for PPB_Var.VarFromUtf8.
This change has tendrils stretching throughout the code, but mostly this lets us delete a bunch of stuff.
This also does a slight refactor to put the PPB_Var implementations in 1 place, since they were already practically identical, and I didn't want to do the backwards-compat code in 2 places.
BUG=106596
TEST=N/A
TBR=darin,tony
darin,tony TBR for rubber-stamp of webkit/glue/webkit_glue.gypi
Review URL: http://codereview.chromium.org/8826011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113491 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/cpp/var.cc')
-rw-r--r-- | ppapi/cpp/var.cc | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/ppapi/cpp/var.cc b/ppapi/cpp/var.cc index d8128ed..2b52f04 100644 --- a/ppapi/cpp/var.cc +++ b/ppapi/cpp/var.cc @@ -28,6 +28,9 @@ namespace { template <> const char* interface_name<PPB_Var>() { return PPB_VAR_INTERFACE; } +template <> const char* interface_name<PPB_Var_1_0>() { + return PPB_VAR_INTERFACE_1_0; +} // 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 @@ -36,6 +39,21 @@ inline bool NeedsRefcounting(const PP_Var& var) { return var.type > PP_VARTYPE_DOUBLE; } +// This helper function detects whether PPB_Var version 1.1 is available. If so, +// it uses it to create a PP_Var for the given string. Otherwise it falls back +// to PPB_Var version 1.0. +PP_Var VarFromUtf8Helper(const char* utf8_str, uint32_t len) { + if (has_interface<PPB_Var>()) { + return get_interface<PPB_Var>()->VarFromUtf8(utf8_str, len); + } else if (has_interface<PPB_Var_1_0>()) { + return get_interface<PPB_Var_1_0>()->VarFromUtf8(Module::Get()->pp_module(), + utf8_str, + len); + } else { + return PP_MakeNull(); + } +} + } // namespace Var::Var() { @@ -72,27 +90,14 @@ Var::Var(double d) { } Var::Var(const char* utf8_str) { - if (has_interface<PPB_Var>()) { - uint32_t len = utf8_str ? static_cast<uint32_t>(strlen(utf8_str)) : 0; - var_ = get_interface<PPB_Var>()->VarFromUtf8(Module::Get()->pp_module(), - utf8_str, len); - } else { - var_.type = PP_VARTYPE_NULL; - var_.padding = 0; - } + uint32_t len = utf8_str ? static_cast<uint32_t>(strlen(utf8_str)) : 0; + var_ = VarFromUtf8Helper(utf8_str, len); needs_release_ = (var_.type == PP_VARTYPE_STRING); } Var::Var(const std::string& utf8_str) { - if (has_interface<PPB_Var>()) { - var_ = get_interface<PPB_Var>()->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; - } + var_ = VarFromUtf8Helper(utf8_str.c_str(), + static_cast<uint32_t>(utf8_str.size())); needs_release_ = (var_.type == PP_VARTYPE_STRING); } @@ -101,7 +106,7 @@ Var::Var(const Var& other) { if (NeedsRefcounting(var_)) { if (has_interface<PPB_Var>()) { needs_release_ = true; - get_interface<PPB_Var>()->AddRef(var_); + get_interface<PPB_Var_1_0>()->AddRef(var_); } else { var_.type = PP_VARTYPE_NULL; needs_release_ = false; @@ -113,7 +118,7 @@ Var::Var(const Var& other) { Var::~Var() { if (needs_release_ && has_interface<PPB_Var>()) - get_interface<PPB_Var>()->Release(var_); + get_interface<PPB_Var_1_0>()->Release(var_); } Var& Var::operator=(const Var& other) { @@ -130,12 +135,12 @@ Var& Var::operator=(const Var& other) { // Assume we already has_interface<PPB_Var> for refcounted vars or else we // couldn't have created them in the first place. needs_release_ = true; - get_interface<PPB_Var>()->AddRef(other.var_); + get_interface<PPB_Var_1_0>()->AddRef(other.var_); } else { needs_release_ = false; } if (old_needs_release) - get_interface<PPB_Var>()->Release(var_); + get_interface<PPB_Var_1_0>()->Release(var_); var_ = other.var_; return *this; @@ -201,7 +206,7 @@ std::string Var::AsString() const { if (!has_interface<PPB_Var>()) return std::string(); uint32_t len; - const char* str = get_interface<PPB_Var>()->VarToUtf8(var_, &len); + const char* str = get_interface<PPB_Var_1_0>()->VarToUtf8(var_, &len); return std::string(str, len); } |