Index: ppapi/cpp/var.cc |
diff --git a/ppapi/cpp/var.cc b/ppapi/cpp/var.cc |
index d8128ed2d5f4c0f46b335d582f003e7bfb0926b2..ab98e91899da081dcf37358450779cb52336eab2 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); |
} |