1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ppapi/cpp/var_dictionary.h" 6 7 #include "ppapi/c/ppb_var_dictionary.h" 8 #include "ppapi/cpp/logging.h" 9 #include "ppapi/cpp/module_impl.h" 10 11 namespace pp { 12 13 namespace { 14 interface_name()15template <> const char* interface_name<PPB_VarDictionary_1_0>() { 16 return PPB_VAR_DICTIONARY_INTERFACE_1_0; 17 } 18 19 } // namespace 20 VarDictionary()21VarDictionary::VarDictionary() : Var(Null()) { 22 if (has_interface<PPB_VarDictionary_1_0>()) 23 var_ = get_interface<PPB_VarDictionary_1_0>()->Create(); 24 else 25 PP_NOTREACHED(); 26 } 27 VarDictionary(const Var & var)28VarDictionary::VarDictionary(const Var& var) : Var(var) { 29 if (!var.is_dictionary()) { 30 PP_NOTREACHED(); 31 32 // This takes care of releasing the reference that this object holds. 33 Var::operator=(Var(Null())); 34 } 35 } 36 VarDictionary(const PP_Var & var)37VarDictionary::VarDictionary(const PP_Var& var) : Var(var) { 38 if (var.type != PP_VARTYPE_DICTIONARY) { 39 PP_NOTREACHED(); 40 41 // This takes care of releasing the reference that this object holds. 42 Var::operator=(Var(Null())); 43 } 44 } 45 VarDictionary(const VarDictionary & other)46VarDictionary::VarDictionary(const VarDictionary& other) 47 : Var(other) { 48 } 49 ~VarDictionary()50VarDictionary::~VarDictionary() { 51 } 52 operator =(const VarDictionary & other)53VarDictionary& VarDictionary::operator=( 54 const VarDictionary& other) { 55 Var::operator=(other); 56 return *this; 57 } 58 operator =(const Var & other)59Var& VarDictionary::operator=(const Var& other) { 60 if (other.is_dictionary()) { 61 Var::operator=(other); 62 } else { 63 PP_NOTREACHED(); 64 Var::operator=(Var(Null())); 65 } 66 return *this; 67 } 68 Get(const Var & key) const69Var VarDictionary::Get(const Var& key) const { 70 if (!has_interface<PPB_VarDictionary_1_0>()) 71 return Var(); 72 73 return Var( 74 PASS_REF, 75 get_interface<PPB_VarDictionary_1_0>()->Get(var_, key.pp_var())); 76 } 77 Set(const Var & key,const Var & value)78bool VarDictionary::Set(const Var& key, const Var& value) { 79 if (!has_interface<PPB_VarDictionary_1_0>()) 80 return false; 81 82 return PP_ToBool(get_interface<PPB_VarDictionary_1_0>()->Set( 83 var_, key.pp_var(), value.pp_var())); 84 } 85 Delete(const Var & key)86void VarDictionary::Delete(const Var& key) { 87 if (has_interface<PPB_VarDictionary_1_0>()) 88 get_interface<PPB_VarDictionary_1_0>()->Delete(var_, key.pp_var()); 89 } 90 HasKey(const Var & key) const91bool VarDictionary::HasKey(const Var& key) const { 92 if (!has_interface<PPB_VarDictionary_1_0>()) 93 return false; 94 95 return PP_ToBool(get_interface<PPB_VarDictionary_1_0>()->HasKey( 96 var_, key.pp_var())); 97 } 98 GetKeys() const99VarArray VarDictionary::GetKeys() const { 100 if (!has_interface<PPB_VarDictionary_1_0>()) 101 return VarArray(); 102 103 Var result(PASS_REF, 104 get_interface<PPB_VarDictionary_1_0>()->GetKeys(var_)); 105 if (result.is_array()) 106 return VarArray(result); 107 else 108 return VarArray(); 109 } 110 111 } // namespace pp 112