| Index: ppapi/cpp/var.cc
|
| diff --git a/ppapi/cpp/var.cc b/ppapi/cpp/var.cc
|
| index cb8172ca3eeb33883fdb718dc9d570818488d5df..e16b0e406686823ca4f6525f3ac1ad0c921946f6 100644
|
| --- a/ppapi/cpp/var.cc
|
| +++ b/ppapi/cpp/var.cc
|
| @@ -25,6 +25,9 @@ namespace pp {
|
|
|
| namespace {
|
|
|
| +template <> const char* interface_name<PPB_Var_1_2>() {
|
| + return PPB_VAR_INTERFACE_1_2;
|
| +}
|
| template <> const char* interface_name<PPB_Var_1_1>() {
|
| return PPB_VAR_INTERFACE_1_1;
|
| }
|
| @@ -42,7 +45,9 @@ inline bool NeedsRefcounting(const PP_Var& var) {
|
| // This helper function uses the latest available version of VarFromUtf8. Note
|
| // that version 1.0 of this method has a different API to later versions.
|
| PP_Var VarFromUtf8Helper(const char* utf8_str, uint32_t len) {
|
| - if (has_interface<PPB_Var_1_1>()) {
|
| + if (has_interface<PPB_Var_1_2>()) {
|
| + return get_interface<PPB_Var_1_2>()->VarFromUtf8(utf8_str, len);
|
| + } else if (has_interface<PPB_Var_1_1>()) {
|
| return get_interface<PPB_Var_1_1>()->VarFromUtf8(utf8_str, len);
|
| } else if (has_interface<PPB_Var_1_0>()) {
|
| return get_interface<PPB_Var_1_0>()->VarFromUtf8(Module::Get()->pp_module(),
|
| @@ -55,7 +60,10 @@ PP_Var VarFromUtf8Helper(const char* utf8_str, uint32_t len) {
|
| // This helper function uses the latest available version of AddRef.
|
| // Returns true on success, false if no appropriate interface was available.
|
| bool AddRefHelper(const PP_Var& var) {
|
| - if (has_interface<PPB_Var_1_1>()) {
|
| + if (has_interface<PPB_Var_1_2>()) {
|
| + get_interface<PPB_Var_1_2>()->AddRef(var);
|
| + return true;
|
| + } else if (has_interface<PPB_Var_1_1>()) {
|
| get_interface<PPB_Var_1_1>()->AddRef(var);
|
| return true;
|
| } else if (has_interface<PPB_Var_1_0>()) {
|
| @@ -68,7 +76,10 @@ bool AddRefHelper(const PP_Var& var) {
|
| // This helper function uses the latest available version of Release.
|
| // Returns true on success, false if no appropriate interface was available.
|
| bool ReleaseHelper(const PP_Var& var) {
|
| - if (has_interface<PPB_Var_1_1>()) {
|
| + if (has_interface<PPB_Var_1_2>()) {
|
| + get_interface<PPB_Var_1_2>()->Release(var);
|
| + return true;
|
| + } else if (has_interface<PPB_Var_1_1>()) {
|
| get_interface<PPB_Var_1_1>()->Release(var);
|
| return true;
|
| } else if (has_interface<PPB_Var_1_0>()) {
|
| @@ -125,6 +136,19 @@ Var::Var(const std::string& utf8_str) {
|
| is_managed_ = true;
|
| }
|
|
|
| +Var::Var(const pp::Resource& resource) {
|
| + if (has_interface<PPB_Var_1_2>()) {
|
| + var_ = get_interface<PPB_Var_1_2>()->VarFromResource(
|
| + resource.pp_resource());
|
| + } else {
|
| + PP_NOTREACHED();
|
| + return;
|
| + }
|
| + // Set |is_managed_| to true, so |var_| will be properly released upon
|
| + // destruction.
|
| + is_managed_ = true;
|
| +}
|
| +
|
|
|
| Var::Var(const PP_Var& var) {
|
| var_ = var;
|
| @@ -191,7 +215,8 @@ bool Var::operator==(const Var& other) const {
|
| case PP_VARTYPE_ARRAY:
|
| case PP_VARTYPE_ARRAY_BUFFER:
|
| case PP_VARTYPE_DICTIONARY:
|
| - default: // Objects, arrays, dictionaries.
|
| + case PP_VARTYPE_RESOURCE:
|
| + default: // Objects, arrays, dictionaries, resources.
|
| return var_.value.as_id == other.var_.value.as_id;
|
| }
|
| }
|
| @@ -230,7 +255,9 @@ std::string Var::AsString() const {
|
|
|
| uint32_t len;
|
| const char* str;
|
| - if (has_interface<PPB_Var_1_1>())
|
| + if (has_interface<PPB_Var_1_2>())
|
| + str = get_interface<PPB_Var_1_2>()->VarToUtf8(var_, &len);
|
| + else if (has_interface<PPB_Var_1_1>())
|
| str = get_interface<PPB_Var_1_1>()->VarToUtf8(var_, &len);
|
| else if (has_interface<PPB_Var_1_0>())
|
| str = get_interface<PPB_Var_1_0>()->VarToUtf8(var_, &len);
|
| @@ -239,6 +266,20 @@ std::string Var::AsString() const {
|
| return std::string(str, len);
|
| }
|
|
|
| +pp::Resource Var::AsResource() const {
|
| + if (!is_resource()) {
|
| + PP_NOTREACHED();
|
| + return pp::Resource();
|
| + }
|
| +
|
| + if (has_interface<PPB_Var_1_2>()) {
|
| + return pp::Resource(pp::PASS_REF,
|
| + get_interface<PPB_Var_1_2>()->VarToResource(var_));
|
| + } else {
|
| + return pp::Resource();
|
| + }
|
| +}
|
| +
|
| std::string Var::DebugString() const {
|
| char buf[256];
|
| if (is_undefined()) {
|
| @@ -269,6 +310,8 @@ std::string Var::DebugString() const {
|
| snprintf(buf, sizeof(buf), "Var(DICTIONARY)");
|
| } else if (is_array_buffer()) {
|
| snprintf(buf, sizeof(buf), "Var(ARRAY_BUFFER)");
|
| + } else if (is_resource()) {
|
| + snprintf(buf, sizeof(buf), "Var(RESOURCE)");
|
| } else {
|
| buf[0] = '\0';
|
| }
|
|
|