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 15 template <> const char* interface_name<PPB_VarDictionary_1_0>() { 16 return PPB_VAR_DICTIONARY_INTERFACE_1_0; 17 } 18 19 } // namespace 20 21 VarDictionary::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 28 VarDictionary::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 37 VarDictionary::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 46 VarDictionary::VarDictionary(const VarDictionary& other) 47 : Var(other) { 48 } 49 50 VarDictionary::~VarDictionary() { 51 } 52 53 VarDictionary& VarDictionary::operator=( 54 const VarDictionary& other) { 55 Var::operator=(other); 56 return *this; 57 } 58 59 Var& 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 69 Var 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 78 bool 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 86 void 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 91 bool 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 99 VarArray 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